Dump calling conventions for entities
[libfirm] / ir / ir / irop.c
index 67bdb35..73ebbe4 100644 (file)
@@ -35,6 +35,7 @@ ir_op *op_Block;       ir_op *get_op_Block     (void) { return op_Block;     }
 ir_op *op_Start;       ir_op *get_op_Start     (void) { return op_Start;     }
 ir_op *op_End;         ir_op *get_op_End       (void) { return op_End;       }
 ir_op *op_Jmp;         ir_op *get_op_Jmp       (void) { return op_Jmp;       }
+ir_op *op_IJmp;        ir_op *get_op_IJmp      (void) { return op_IJmp;      }
 ir_op *op_Cond;        ir_op *get_op_Cond      (void) { return op_Cond;      }
 ir_op *op_Return;      ir_op *get_op_Return    (void) { return op_Return;    }
 ir_op *op_Raise;       ir_op *get_op_Raise     (void) { return op_Raise;     }
@@ -88,8 +89,9 @@ ir_op *op_CallBegin;   ir_op *get_op_CallBegin (void) { return op_CallBegin; }
 ir_op *op_EndReg;      ir_op *get_op_EndReg    (void) { return op_EndReg;    }
 ir_op *op_EndExcept;   ir_op *get_op_EndExcept (void) { return op_EndExcept; }
 
-ir_op *op_NoMem;       ir_op *get_op_NoMem     (void) { return op_NoMem; }
-ir_op *op_Mux;         ir_op *get_op_Mux       (void) { return op_Mux; }
+ir_op *op_NoMem;       ir_op *get_op_NoMem     (void) { return op_NoMem;     }
+ir_op *op_Mux;         ir_op *get_op_Mux       (void) { return op_Mux;       }
+ir_op *op_CopyB;       ir_op *get_op_CopyB     (void) { return op_CopyB;     }
 
 
 /*
@@ -180,18 +182,20 @@ init_op(void)
 #define F   irop_flag_fragile
 #define Y   irop_flag_forking
 #define H   irop_flag_highlevel
+#define c   irop_flag_constlike
 
   op_Block     = new_ir_op(iro_Block,     "Block",     op_pin_state_pinned, L,       oparity_variable, -1, sizeof(block_attr));
 
   op_Start     = new_ir_op(iro_Start,     "Start",     op_pin_state_pinned, X,       oparity_zero,     -1, sizeof(start_attr));
   op_End       = new_ir_op(iro_End,       "End",       op_pin_state_pinned, X,       oparity_dynamic,  -1, 0);
   op_Jmp       = new_ir_op(iro_Jmp,       "Jmp",       op_pin_state_pinned, X,       oparity_zero,     -1, 0);
+  op_IJmp      = new_ir_op(iro_IJmp,      "IJmp",      op_pin_state_pinned, X,       oparity_unary,    -1, 0);
   op_Cond      = new_ir_op(iro_Cond,      "Cond",      op_pin_state_pinned, L|X|Y,   oparity_any,      -1, sizeof(cond_attr));
   op_Return    = new_ir_op(iro_Return,    "Return",    op_pin_state_pinned, L|X,     oparity_zero,     -1, 0);
   op_Raise     = new_ir_op(iro_Raise,     "Raise",     op_pin_state_pinned, L|X,     oparity_any,      -1, 0);
 
-  op_Const     = new_ir_op(iro_Const,     "Const",     op_pin_state_floats, N,       oparity_zero,     -1, sizeof(const_attr));
-  op_SymConst  = new_ir_op(iro_SymConst,  "SymConst",  op_pin_state_floats, N,       oparity_zero,     -1, sizeof(symconst_attr));
+  op_Const     = new_ir_op(iro_Const,     "Const",     op_pin_state_floats, c,       oparity_zero,     -1, sizeof(const_attr));
+  op_SymConst  = new_ir_op(iro_SymConst,  "SymConst",  op_pin_state_floats, c,       oparity_zero,     -1, sizeof(symconst_attr));
 
   op_Sel       = new_ir_op(iro_Sel,       "Sel",       op_pin_state_floats, L,       oparity_any,      -1, sizeof(sel_attr));
   op_InstOf    = new_ir_op(iro_InstOf,    "InstOf",    op_pin_state_floats, L,       oparity_any,      -1, sizeof(sel_attr));
@@ -199,7 +203,7 @@ init_op(void)
   op_Call      = new_ir_op(iro_Call,      "Call",      op_pin_state_mem_pinned, L|F, oparity_variable, -1, sizeof(call_attr));
   op_Add       = new_ir_op(iro_Add,       "Add",       op_pin_state_floats, C,       oparity_binary,    0, 0);
   op_Minus     = new_ir_op(iro_Minus,     "Minus",     op_pin_state_floats, N,       oparity_unary,     0, 0);
-  op_Sub       = new_ir_op(iro_Sub,       "Sub",       op_pin_state_floats, L,       oparity_binary,    0, 0);
+  op_Sub       = new_ir_op(iro_Sub,       "Sub",       op_pin_state_floats, N,       oparity_binary,    0, 0);
   op_Mul       = new_ir_op(iro_Mul,       "Mul",       op_pin_state_floats, C,       oparity_binary,    0, 0);
   op_Quot      = new_ir_op(iro_Quot,      "Quot",      op_pin_state_exc_pinned, L|F, oparity_binary,    1, sizeof(except_attr));
   op_DivMod    = new_ir_op(iro_DivMod,    "DivMod",    op_pin_state_exc_pinned, L|F, oparity_binary,    1, sizeof(except_attr));
@@ -241,6 +245,7 @@ init_op(void)
 
   op_NoMem     = new_ir_op(iro_NoMem,     "NoMem",     op_pin_state_pinned, N,       oparity_zero,     -1, 0);
   op_Mux       = new_ir_op(iro_Mux,       "Mux",       op_pin_state_floats, N,       oparity_trinary,  -1, 0);
+  op_CopyB     = new_ir_op(iro_CopyB,     "CopyB",   op_pin_state_mem_pinned, L|F|H, oparity_trinary,  -1, sizeof(copyb_attr));
 
 #undef H
 #undef Y
@@ -314,6 +319,7 @@ void finish_op(void) {
 
   free_ir_op (op_NoMem    ); op_NoMem     = NULL;
   free_ir_op (op_Mux      ); op_Mux       = NULL;
+  free_ir_op (op_CopyB    ); op_CopyB     = NULL;
 }
 
 /* Returns the string for the opcode. */
@@ -356,3 +362,13 @@ void      set_op_pinned(ir_op *op, op_pin_state op_pin_state_pinned) {
 unsigned get_next_ir_opcode(void) {
   return next_iro++;
 }
+
+/* Returns the generic function pointer from an ir operation. */
+op_func (get_generic_function_ptr)(const ir_op *op) {
+  return _get_generic_function_ptr(op);
+}
+
+/* Store a generic function pointer into an ir operation. */
+void (set_generic_function_ptr)(ir_op *op, op_func func) {
+  _set_generic_function_ptr(op, func);
+}