3 * File name: ir/arch/archop.h
4 * Purpose: Architecture dependand IR operations
8 * Copyright: (c) 1998-2005 Universität Karlsruhe
9 * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
11 #ifndef _FIRM_ARCH_ARCHOP_H_
12 #define _FIRM_ARCH_ARCHOP_H_
14 #include "firm_types.h"
18 * Mask defining which architecture depend
19 * operations are supported.
21 typedef enum _arch_ops_mask {
22 ARCH_OPS_NONE = 0, /**< no additional Operations */
23 ARCH_OPS_MINMAX = 1 /**< use the Min/Max Operation */
26 typedef struct _arch_ops_info {
27 arch_ops_mask enabled_ops; /**< a mask of enabled IR-opcodes */
28 unsigned minmax_handle_NaN:1; /**< if set, Min(a,a) == a, else unknown */
31 extern ir_op *op_Min, *op_Max;
33 ir_op *get_op_Min(void);
34 ir_op *get_op_Max(void);
36 /** construct a Min: Min(a,b) = a < b ? a : b */
38 new_rd_Min(dbg_info *db, ir_graph *irg, ir_node *block,
39 ir_node *op1, ir_node *op2, ir_mode *mode);
41 /** construct a Max: Max(a,b) = a > b ? a : b */
43 new_rd_Max(dbg_info *db, ir_graph *irg, ir_node *block,
44 ir_node *op1, ir_node *op2, ir_mode *mode);
47 new_r_Min(ir_graph *irg, ir_node *block,
48 ir_node *op1, ir_node *op2, ir_mode *mode);
51 new_r_Max(ir_graph *irg, ir_node *block,
52 ir_node *op1, ir_node *op2, ir_mode *mode);
55 new_Min(ir_node *op1, ir_node *op2, ir_mode *mode);
58 new_Max(ir_node *op1, ir_node *op2, ir_mode *mode);
61 * Create Min and Mux from Mux nodes
63 ir_node *arch_transform_node_Mux(ir_node *mux);
68 void firm_archops_init(const arch_ops_info *info);
70 #endif /* _FIRM_ARCH_ARCHOP_H_ */