X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firreflect.c;h=94ee9ffdce850ed1aa34aa3618f5ae3f2acb5f3b;hb=54473f46aefff029b5dc2908ec4d9ec0765221a5;hp=a52f295dd67c84cb85350c31b6b17b347218fa11;hpb=7ae3235768b2f8c9c232edbb6f45060fca301d74;p=libfirm diff --git a/ir/ir/irreflect.c b/ir/ir/irreflect.c index a52f295dd..94ee9ffdc 100644 --- a/ir/ir/irreflect.c +++ b/ir/ir/irreflect.c @@ -10,6 +10,8 @@ # include "config.h" #endif +#include + #ifdef HAVE_STDLIB_H # include #endif @@ -22,16 +24,13 @@ #include "obst.h" +#include "irnode_t.h" #include "irmode.h" #include "irreflect.h" #define obstack_grow_str(obst,s) obstack_grow((obst), (s), strlen((s))) #define obstack_grow_str_const(obst,s) obstack_grow((obst), (s), sizeof((s))) -extern int obstack_printf(struct obstack *obst, const char *fmt, ...); - -#define INLINE inline - /** * Get the number of bits set in a word. */ @@ -64,9 +63,9 @@ typedef struct { typedef struct { opcode opc; const char *name; - bool commutative; + int commutative; int sig_count; - const rflct_arg_t *sigs[MAX_SIG_COUNT]; + rflct_arg_t *sigs[MAX_SIG_COUNT]; } rflct_opcode_t; static struct obstack obst; @@ -92,7 +91,10 @@ static INLINE void assure_opcode_capacity(int opcode) } +#if 0 #define OPCODES_COUNT (sizeof(opcodes) / sizeof(opcodes[0])) +#endif +#define OPCODES_COUNT opcodes_size rflct_mode_class_t rflct_get_mode_class(const ir_mode *mode) { @@ -171,7 +173,7 @@ const rflct_arg_t *rflct_get_out_args(opcode opc, int sig) { return GET_ARGS(opc, sig); } -int rflct_signature_match(ir_node *irn, int sig) { +int rflct_signature_match(const ir_node *irn, int sig) { opcode op = get_irn_opcode(irn); const rflct_arg_t *args = rflct_get_in_args(op, sig); int dst = 0; @@ -196,7 +198,7 @@ int rflct_signature_match(ir_node *irn, int sig) { return dst; } -int rflct_get_signature(ir_node *irn) { +int rflct_get_signature(const ir_node *irn) { const rflct_opcode_t *opc = GET_OPCODE(get_irn_opcode(irn)); int min_dist = INT_MAX; int min_sig = INT_MAX; @@ -323,23 +325,26 @@ char *rflct_to_string(char *buf, int n, opcode opc, int sig) { return buf; } +#define NON_VARIADIC 0 +#define VARIADIC 1 + #define ARG(name,modes) \ -_ARG(name, modes, false, -1) +_ARG(name, modes, NON_VARIADIC, -1) #define ARG_SAME(name,modes,mode_same) \ -_ARG(name, modes, false, mode_same) +_ARG(name, modes, NON_VARIADIC, mode_same) #define VARG(name,modes) \ -_ARG(name, modes, true, 0) +_ARG(name, modes, VARIADIC, 0) #define VARG_SAME(name,modes) \ -_ARG(name, modes, true, 1) +_ARG(name, modes, VARIADIC, 1) #define MARK \ -_ARG(NULL, None, false, -1) +_ARG(NULL, None, NON_VARIADIC, -1) #define FINISH \ -_ARG(NULL, None, false, 0) +_ARG(NULL, None, NON_VARIADIC, 0) #define BLOCK ARG("Block", BB) @@ -398,7 +403,7 @@ arg->name = _name; \ arg->is_variadic = _var; \ arg->mode_equals = _me; -void rflct_new_opcode(opcode opc, const char *name, bool commutative) +void rflct_new_opcode(opcode opc, const char *name, int commutative) { rflct_opcode_t *ropc = obstack_alloc(&obst, sizeof(*ropc)); @@ -411,9 +416,9 @@ void rflct_new_opcode(opcode opc, const char *name, bool commutative) opcodes[opc] = ropc; } -bool rflct_opcode_add_signature(opcode opc, rflct_sig_t *sig) +int rflct_opcode_add_signature(opcode opc, rflct_sig_t *sig) { - const rflct_arg_t *args = sig->args; + rflct_arg_t *args = sig->args; rflct_opcode_t *op = opcodes[opc]; int i; @@ -422,12 +427,12 @@ bool rflct_opcode_add_signature(opcode opc, rflct_sig_t *sig) for(i = 0; i < MAX_SIG_COUNT && op->sigs[i] != NULL; i++); if(i >= MAX_SIG_COUNT) - return false; + return 0; op->sigs[op->sig_count++] = args; free(sig); - return true; + return 1; } @@ -451,7 +456,7 @@ rflct_sig_t *rflct_signature_allocate(int defs, int uses) return sig; } -int rflct_signature_get_index(const rflct_sig_t *sig, bool is_use, int num) +int rflct_signature_get_index(const rflct_sig_t *sig, int is_use, int num) { return is_use ? num + sig->defs + 1 : num; } @@ -463,8 +468,8 @@ arg->name = _name; \ arg->is_variadic = _var; \ arg->mode_equals = _me; -int rflct_signature_set_arg(rflct_sig_t *sig, bool is_use, int num, - const char *name, rflct_mode_class_t mc, bool is_variadic, int mode_equals) +int rflct_signature_set_arg(rflct_sig_t *sig, int is_use, int num, + const char *name, rflct_mode_class_t mc, int is_variadic, int mode_equals) { int index = rflct_signature_get_index(sig, is_use, num); rflct_arg_t *arg = sig->args + index; @@ -476,3 +481,6 @@ int rflct_signature_set_arg(rflct_sig_t *sig, bool is_use, int num, void firm_init_rflct(void) { init_ops(); } + +#undef VARIADIC +#undef NON_VARIADIC