*/
void lower_highlevel(void);
+typedef struct lower_mode_b_config_t {
+ /* mode that is used to transport 0/1 values */
+ ir_mode *lowered_mode;
+ /* preferred mode for the "set" operations (a psi that produces a 0 or 1) */
+ ir_mode *lowered_set_mode;
+ /* wether direct Cond -> Cmps should also be lowered */
+ int lower_direct_cmp;
+} lower_mode_b_config_t;
+
/**
* Lowers mode_b operations to integer arithmetic. After the lowering the only
* operations with mode_b are the Projs of Cmps; the only nodes with mode_b
*
* Example: Psi(a < 0, 1, 0) => a >> 31
*
- * @param irg the firm graph to lower
- * @param mode the mode of the lowered operations
- * @param lower_direct_cmp if set to 1, psi nodes with only have cmp/=0 as input
+ * @param irg the firm graph to lower
+ * @param config configuration for mode_b lowerer
*/
-void ir_lower_mode_b(ir_graph *irg, ir_mode *mode, int lower_direct_cmp);
+void ir_lower_mode_b(ir_graph *irg, const lower_mode_b_config_t *config);
/**
* An intrinsic mapper function.
unsigned lower_intrinsics(i_record *list, int length, int part_block_used);
/**
- * A mapper for the integer absolute value: inttype abs(inttype v).
+ * A mapper for the integer/float absolute value: type abs(type v).
* Replaces the call by a Abs node.
*
* @return always 1
*/
-int i_mapper_Abs(ir_node *call, void *ctx);
+int i_mapper_abs(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point sqrt(v): floattype sqrt(floattype v);
+ *
+ * @return 0 if the sqrt call was removed, 0 else.
+ */
+int i_mapper_sqrt(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point pow(a, b): floattype pow(floattype a, floattype b);
+ *
+ * @return 0 if the pow call was removed, 0 else.
+ */
+int i_mapper_pow(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point exp(a): floattype exp(floattype a);
+ *
+ * @return 0 if the exp call was removed, 0 else.
+ */
+int i_mapper_exp(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point sin(a): floattype sin(floattype a);
+ *
+ * @return 0 if the sin call was removed, 0 else.
+ */
+int i_mapper_sin(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point sin(a): floattype cos(floattype a);
+ *
+ * @return 0 if the cos call was removed, 0 else.
+ */
+int i_mapper_cos(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point tan(a): floattype tan(floattype a);
+ *
+ * @return 0 if the tan call was removed, 0 else.
+ */
+int i_mapper_tan(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point asin(a): floattype asin(floattype a);
+ *
+ * @return 0 if the asin call was removed, 0 else.
+ */
+int i_mapper_asin(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point acos(a): floattype acos(floattype a);
+ *
+ * @return 0 if the tan call was removed, 0 else.
+ */
+int i_mapper_acos(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the floating point atan(a): floattype atan(floattype a);
+ *
+ * @return 0 if the atan call was removed, 0 else.
+ */
+int i_mapper_atan(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the strcmp-Function: inttype strcmp(char pointer a, char pointer b);
+ *
+ * @return 0 if the strcmp call was removed, 0 else.
+ */
+int i_mapper_strcmp(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the strcmp-Function: inttype strncmp(char pointer a, char pointer b, inttype len);
+ *
+ * @return 0 if the strncmp call was removed, 0 else.
+ */
+int i_mapper_strncmp(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the memcpy-Function: void pointer memcpy(void pointer d, void pointer s, inttype c);
+ *
+ * @return 0 if the memcpy call was removed, 0 else.
+ */
+int i_mapper_memcpy(ir_node *call, void *ctx);
+
+/**
+ * A mapper for the memset-Function: void pointer memset(void pointer d, inttype C, inttype len);
+ *
+ * @return 0 if the memset call was removed, 0 else.
+ */
+int i_mapper_memset(ir_node *call, void *ctx);
/**
* A mapper for the alloca() function: pointer alloca(inttype size)
*
* @return always 1
*/
-int i_mapper_Alloca(ir_node *call, void *ctx);
+int i_mapper_alloca(ir_node *call, void *ctx);
/**
* A runtime routine description.