X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firmode.c;h=88f6c6efac3835497bc5ea47e51ef085134278a4;hb=2de19654e65c59e0d0b8fa1de27c548a2e71ff74;hp=08bca22eb7121fc23a2e212a0b2909446f85f547;hpb=25d8d92be55cf80b6282347048063dfe5434980c;p=libfirm diff --git a/ir/ir/irmode.c b/ir/ir/irmode.c index 08bca22eb..88f6c6efa 100644 --- a/ir/ir/irmode.c +++ b/ir/ir/irmode.c @@ -43,9 +43,6 @@ /** Obstack to hold all modes. */ static struct obstack modes; -/** Number of defined modes. */ -static int num_modes = 0; - /** The list of all currently existing modes. */ static ir_mode **mode_list; @@ -258,10 +255,7 @@ static ir_mode *register_mode(const ir_mode *new_mode) { ARR_APP1(ir_mode*, mode_list, mode); mode->kind = k_ir_mode; - if (num_modes >= irm_max) { - mode->code = num_modes; - } - num_modes++; + mode->type = new_type_primitive(mode); /* add the new mode to the irp list of modes */ add_irp_mode(mode); @@ -285,7 +279,8 @@ ir_mode *new_ir_mode(const char *name, ir_mode_sort sort, int bit_size, int sign mode_tmpl.sort = sort; mode_tmpl.size = bit_size; mode_tmpl.sign = sign ? 1 : 0; - mode_tmpl.modulo_shift = (mode_tmpl.sort == irms_int_number) ? modulo_shift : 0; + mode_tmpl.modulo_shift = (mode_tmpl.sort == irms_int_number || + mode_tmpl.sort == irms_reference) ? modulo_shift : 0; mode_tmpl.vector_elem = 1; mode_tmpl.arithmetic = arithmetic; mode_tmpl.link = NULL; @@ -367,10 +362,6 @@ ir_mode *new_ir_vector_mode(const char *name, ir_mode_sort sort, int bit_size, u } /* Functions for the direct access to all attributes of an ir_mode */ -ir_modecode (get_mode_modecode)(const ir_mode *mode) { - return _get_mode_modecode(mode); -} - ident *(get_mode_ident)(const ir_mode *mode) { return _get_mode_ident(mode); } @@ -422,7 +413,6 @@ void (set_mode_link)(ir_mode *mode, void *l) { tarval *get_mode_min(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_data(mode)); return mode->min; @@ -430,7 +420,6 @@ tarval *get_mode_min(ir_mode *mode) { tarval *get_mode_max(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_data(mode)); return mode->max; @@ -438,7 +427,6 @@ tarval *get_mode_max(ir_mode *mode) { tarval *get_mode_null(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_datab(mode)); return mode->null; @@ -446,7 +434,6 @@ tarval *get_mode_null(ir_mode *mode) { tarval *get_mode_one(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_datab(mode)); return mode->one; @@ -454,7 +441,6 @@ tarval *get_mode_one(ir_mode *mode) { tarval *get_mode_minus_one(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_data(mode)); return mode->minus_one; @@ -462,14 +448,12 @@ tarval *get_mode_minus_one(ir_mode *mode) { tarval *get_mode_all_one(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_datab(mode)); return mode->all_one; } tarval *get_mode_infinite(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_float(mode)); return get_tarval_plus_inf(mode); @@ -477,17 +461,13 @@ tarval *get_mode_infinite(ir_mode *mode) { tarval *get_mode_NAN(ir_mode *mode) { assert(mode); - assert(get_mode_modecode(mode) < (ir_modecode) num_modes); assert(mode_is_float(mode)); return get_tarval_nan(mode); } -int is_mode(void *thing) { - if (get_kind(thing) == k_ir_mode) - return 1; - else - return 0; +int is_mode(const void *thing) { + return get_kind(thing) == k_ir_mode; } int (mode_is_signed)(const ir_mode *mode) { @@ -588,7 +568,7 @@ int smaller_mode(const ir_mode *sm, const ir_mode *lm) { break; case irms_reference: - /* do exist machines out there with different pointer lenghts ?*/ + /* do exist machines out there with different pointer lengths ?*/ return 0; case irms_internal_boolean: @@ -666,7 +646,6 @@ void init_mode(void) { obstack_init(&modes); mode_list = NEW_ARR_F(ir_mode*, 0); - num_modes = 0; /* initialize predefined modes */ /* Internal Modes */ @@ -685,54 +664,40 @@ void init_mode(void) { /* Basic Block */ newmode.name = new_id_from_chars("BB", 2); - newmode.code = irm_BB; - - mode_BB = register_mode(&newmode); + mode_BB = register_mode(&newmode); /* eXecution */ newmode.name = new_id_from_chars("X", 1); - newmode.code = irm_X; - - mode_X = register_mode(&newmode); + mode_X = register_mode(&newmode); /* Memory Modes */ newmode.sort = irms_memory; /* Memory */ newmode.name = new_id_from_chars("M", 1); - newmode.code = irm_M; - - mode_M = register_mode(&newmode); + mode_M = register_mode(&newmode); /* Auxiliary Modes */ newmode.sort = irms_auxiliary, /* Tuple */ newmode.name = new_id_from_chars("T", 1); - newmode.code = irm_T; - - mode_T = register_mode(&newmode); + mode_T = register_mode(&newmode); /* ANY */ newmode.name = new_id_from_chars("ANY", 3); - newmode.code = irm_ANY; - - mode_ANY = register_mode(&newmode); + mode_ANY = register_mode(&newmode); /* BAD */ newmode.name = new_id_from_chars("BAD", 3); - newmode.code = irm_BAD; - - mode_BAD = register_mode(&newmode); + mode_BAD = register_mode(&newmode); /* Internal Boolean Modes */ newmode.sort = irms_internal_boolean; /* boolean */ newmode.name = new_id_from_chars("b", 1); - newmode.code = irm_b; - - mode_b = register_mode(&newmode); + mode_b = register_mode(&newmode); /* Data Modes */ newmode.vector_elem = 1; @@ -743,29 +708,23 @@ void init_mode(void) { /* float */ newmode.name = new_id_from_chars("F", 1); - newmode.code = irm_F; newmode.sign = 1; newmode.size = 32; - - mode_F = register_mode(&newmode); + mode_F = register_mode(&newmode); /* double */ newmode.name = new_id_from_chars("D", 1); - newmode.code = irm_D; newmode.sign = 1; newmode.size = 64; - - mode_D = register_mode(&newmode); + mode_D = register_mode(&newmode); /* extended */ newmode.name = new_id_from_chars("E", 1); - newmode.code = irm_E; newmode.sign = 1; /* note that the tarval module is calculating with 80 bits, but we use * 96 bits, as that is what will be stored to memory by most hardware */ newmode.size = 96; - - mode_E = register_mode(&newmode); + mode_E = register_mode(&newmode); /* Integer Number Modes */ newmode.sort = irms_int_number; @@ -773,94 +732,74 @@ void init_mode(void) { /* signed byte */ newmode.name = new_id_from_chars("Bs", 2); - newmode.code = irm_Bs; newmode.sign = 1; newmode.size = 8; newmode.modulo_shift = 32; - - mode_Bs = register_mode(&newmode); + mode_Bs = register_mode(&newmode); /* unsigned byte */ newmode.name = new_id_from_chars("Bu", 2); - newmode.code = irm_Bu; newmode.arithmetic = irma_twos_complement; newmode.sign = 0; newmode.size = 8; newmode.modulo_shift = 32; - - mode_Bu = register_mode(&newmode); + mode_Bu = register_mode(&newmode); /* signed short integer */ newmode.name = new_id_from_chars("Hs", 2); - newmode.code = irm_Hs; newmode.sign = 1; newmode.size = 16; newmode.modulo_shift = 32; - - mode_Hs = register_mode(&newmode); + mode_Hs = register_mode(&newmode); /* unsigned short integer */ newmode.name = new_id_from_chars("Hu", 2); - newmode.code = irm_Hu; newmode.sign = 0; newmode.size = 16; newmode.modulo_shift = 32; - - mode_Hu = register_mode(&newmode); + mode_Hu = register_mode(&newmode); /* signed integer */ newmode.name = new_id_from_chars("Is", 2); - newmode.code = irm_Is; newmode.sign = 1; newmode.size = 32; newmode.modulo_shift = 32; - - mode_Is = register_mode(&newmode); + mode_Is = register_mode(&newmode); /* unsigned integer */ newmode.name = new_id_from_chars("Iu", 2); - newmode.code = irm_Iu; newmode.sign = 0; newmode.size = 32; newmode.modulo_shift = 32; - - mode_Iu = register_mode(&newmode); + mode_Iu = register_mode(&newmode); /* signed long integer */ newmode.name = new_id_from_chars("Ls", 2); - newmode.code = irm_Ls; newmode.sign = 1; newmode.size = 64; newmode.modulo_shift = 64; - - mode_Ls = register_mode(&newmode); + mode_Ls = register_mode(&newmode); /* unsigned long integer */ newmode.name = new_id_from_chars("Lu", 2); - newmode.code = irm_Lu; newmode.sign = 0; newmode.size = 64; newmode.modulo_shift = 64; - - mode_Lu = register_mode(&newmode); + mode_Lu = register_mode(&newmode); /* signed long long integer */ newmode.name = new_id_from_chars("LLs", 3); - newmode.code = irm_LLs; newmode.sign = 1; newmode.size = 128; newmode.modulo_shift = 128; - - mode_LLs = register_mode(&newmode); + mode_LLs = register_mode(&newmode); /* unsigned long long integer */ newmode.name = new_id_from_chars("LLu", 3); - newmode.code = irm_LLu; newmode.sign = 0; newmode.size = 128; newmode.modulo_shift = 128; - - mode_LLu = register_mode(&newmode); + mode_LLu = register_mode(&newmode); /* Reference Mode */ newmode.sort = irms_reference; @@ -868,14 +807,12 @@ void init_mode(void) { /* pointer */ newmode.name = new_id_from_chars("P", 1); - newmode.code = irm_P; newmode.sign = 0; newmode.size = 32; - newmode.modulo_shift = 0; + newmode.modulo_shift = 32; newmode.eq_signed = mode_Is; newmode.eq_unsigned = mode_Iu; - - mode_P = register_mode(&newmode); + mode_P = register_mode(&newmode); /* set the machine specific modes to the predefined ones */ mode_P_code = mode_P;