- Remove a pointless check for unique control dependencies and fix an incorrect assertion
[libfirm] / ir / lower / lower_dw.h
1 /**
2  * @file irlwrdw.h
3  * @date 8.10.2004
4  * @author Michael Beck
5  * @brief Lower Double word operations, ie Mode L -> I
6  *
7  * $Id$
8  */
9
10 #ifndef _FIRM_LOWER_DW_H
11 #define _FIRM_LOWER_DW_H
12
13 #include "firm_types.h"
14
15 /**
16  * A callback type for creating an intrinsic entity for a given opcode. */
17 typedef entity *(create_intrinsic_fkt)(ir_type *method, const ir_op *op, const ir_mode *mode, void *context);
18
19 typedef struct _lwrdw_param_t {
20         int enable;                   /**< if true lowering is enabled */
21         int little_endian;            /**< if true should be lowered for little endian, else big endian */
22         ir_mode *high_signed;         /**< the double word signed mode to be lowered, typically Ls */
23         ir_mode *high_unsigned;       /**< the double word unsigned mode to be lowered, typically Lu */
24         ir_mode *low_signed;          /**< the word signed mode to be used, typically Is */
25         ir_mode *low_unsigned;        /**< the word unsigned mode to be used, typically Iu */
26
27         /** callback that creates the intrinsic entity */
28         create_intrinsic_fkt *create_intrinsic;
29         void *ctx;                    /**< context parameter for the creator function */
30 } lwrdw_param_t;
31
32 /**
33  * Lower all double word operations.
34  */
35 void lower_dw_ops(const lwrdw_param_t *param);
36
37 /**
38  * Default implementation.
39  */
40 entity *def_create_intrinsic_fkt(ir_type *method, const ir_op *op, const ir_mode *mode, void *context);
41
42 #endif /* _FIRM_LOWER_DW_H */