make #ifndef at header start cannonical
[libfirm] / ir / arch / archop.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/arch/archop.h
4  * Purpose:     Architecture dependand IR operations
5  * Author:
6  * Created:
7  * CVS-ID:      $Id$
8  * Copyright:   (c) 1998-2005 Universität Karlsruhe
9  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
10  */
11 #ifndef _FIRM_ARCH_ARCHOP_H_
12 #define _FIRM_ARCH_ARCHOP_H_
13
14 #include "firm_types.h"
15 #include "dbginfo.h"
16
17 /**
18  * Mask defining which architecture depend
19  * operations are supported.
20  */
21 typedef enum _arch_ops_mask {
22   ARCH_OPS_NONE   = 0,              /**< no additional Operations */
23   ARCH_OPS_MINMAX = 1               /**< use the Min/Max Operation */
24 } arch_ops_mask;
25
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 */
29 } arch_ops_info;
30
31 extern ir_op *op_Min, *op_Max;
32
33 ir_op *get_op_Min(void);
34 ir_op *get_op_Max(void);
35
36 /** construct a Min: Min(a,b) = a < b ? a : b */
37 ir_node *
38 new_rd_Min(dbg_info *db, ir_graph *irg, ir_node *block,
39        ir_node *op1, ir_node *op2, ir_mode *mode);
40
41 /** construct a Max: Max(a,b) = a > b ? a : b */
42 ir_node *
43 new_rd_Max(dbg_info *db, ir_graph *irg, ir_node *block,
44        ir_node *op1, ir_node *op2, ir_mode *mode);
45
46 ir_node *
47 new_r_Min(ir_graph *irg, ir_node *block,
48        ir_node *op1, ir_node *op2, ir_mode *mode);
49
50 ir_node *
51 new_r_Max(ir_graph *irg, ir_node *block,
52        ir_node *op1, ir_node *op2, ir_mode *mode);
53
54 ir_node *
55 new_Min(ir_node *op1, ir_node *op2, ir_mode *mode);
56
57 ir_node *
58 new_Max(ir_node *op1, ir_node *op2, ir_mode *mode);
59
60 /**
61  * Create Min and Mux from Mux nodes
62  */
63 ir_node *arch_transform_node_Mux(ir_node *mux);
64
65 /**
66  * initialize the ops.
67  */
68 void firm_archops_init(const arch_ops_info *info);
69
70 #endif /* _FIRM_ARCH_ARCHOP_H_ */