void init_mode(void) { obstack_init(&modes); mode_list = NEW_ARR_F(ir_mode*, 0); /* initialize predefined modes */ mode_BB = new_non_data_mode("BB"); mode_X = new_non_data_mode("X"); mode_M = new_non_data_mode("M"); mode_T = new_non_data_mode("T"); mode_ANY = new_non_data_mode("ANY"); mode_BAD = new_non_data_mode("BAD"); mode_b = alloc_mode("b", irms_internal_boolean, irma_none, 1, 0, 0); mode_b = register_mode(mode_b); mode_F = new_float_mode("F", irma_ieee754, 8, 23, ir_overflow_min_max); mode_D = new_float_mode("D", irma_ieee754, 11, 52, ir_overflow_min_max); mode_Bs = new_int_mode("Bs", irma_twos_complement, 8, 1, 32); mode_Bu = new_int_mode("Bu", irma_twos_complement, 8, 0, 32); mode_Hs = new_int_mode("Hs", irma_twos_complement, 16, 1, 32); mode_Hu = new_int_mode("Hu", irma_twos_complement, 16, 0, 32); mode_Is = new_int_mode("Is", irma_twos_complement, 32, 1, 32); mode_Iu = new_int_mode("Iu", irma_twos_complement, 32, 0, 32); mode_Ls = new_int_mode("Ls", irma_twos_complement, 64, 1, 64); mode_Lu = new_int_mode("Lu", irma_twos_complement, 64, 0, 64); mode_P = new_reference_mode("P", irma_twos_complement, 32, 32); }
int main(void) { ir_init(); check_mode(mode_F); check_mode(mode_D); #if LDBL_MANT_DIG == 64 ir_mode *mode_E = new_float_mode("E", irma_x86_extended_float, 15, 64, ir_overflow_min_max); check_mode(mode_E); #endif }
void init_mode(void) { obstack_init(&modes); mode_list = NEW_ARR_F(ir_mode*, 0); /* initialize predefined modes */ mode_BB = new_internal_mode("BB", irms_block); mode_X = new_internal_mode("X", irms_control_flow); mode_M = new_internal_mode("M", irms_memory); mode_T = new_internal_mode("T", irms_tuple); mode_ANY = new_internal_mode("ANY", irms_any); mode_BAD = new_internal_mode("BAD", irms_bad); mode_b = new_internal_mode("b", irms_internal_boolean); mode_F = new_float_mode("F", irma_ieee754, 8, 23); mode_D = new_float_mode("D", irma_ieee754, 11, 52); mode_Q = new_float_mode("Q", irma_ieee754, 15, 112); mode_Bs = new_int_mode("Bs", irma_twos_complement, 8, 1, 32); mode_Bu = new_int_mode("Bu", irma_twos_complement, 8, 0, 32); mode_Hs = new_int_mode("Hs", irma_twos_complement, 16, 1, 32); mode_Hu = new_int_mode("Hu", irma_twos_complement, 16, 0, 32); mode_Is = new_int_mode("Is", irma_twos_complement, 32, 1, 32); mode_Iu = new_int_mode("Iu", irma_twos_complement, 32, 0, 32); mode_Ls = new_int_mode("Ls", irma_twos_complement, 64, 1, 64); mode_Lu = new_int_mode("Lu", irma_twos_complement, 64, 0, 64); mode_LLs = new_int_mode("LLs", irma_twos_complement, 128, 1, 128); mode_LLu = new_int_mode("LLu", irma_twos_complement, 128, 0, 128); mode_P = new_reference_mode("P", irma_twos_complement, 32, 32); set_reference_mode_signed_eq(mode_P, mode_Is); set_reference_mode_unsigned_eq(mode_P, mode_Iu); /* set the machine specific modes to the predefined ones */ mode_P_code = mode_P; mode_P_data = mode_P; }
static ir_mode *init_atomic_ir_mode(atomic_type_kind_t kind) { unsigned flags = get_atomic_type_flags(kind); unsigned size = get_atomic_type_size(kind); if (flags & ATOMIC_TYPE_FLAG_FLOAT) { if (kind == ATOMIC_TYPE_LONG_DOUBLE && dialect.long_double_x87_80bit_float) { assert(size == 12 || size == 16); return new_float_mode("F80", irma_x86_extended_float, 15, 64, target.float_int_overflow); } switch (size) { case 4: return new_float_mode("F32", irma_ieee754, 8, 23, target.float_int_overflow); case 8: return new_float_mode("F64", irma_ieee754, 11, 52, target.float_int_overflow); case 16: return new_float_mode("F128", irma_ieee754, 15, 112, target.float_int_overflow); default: panic("unexpected kind"); } } else if (flags & ATOMIC_TYPE_FLAG_INTEGER) { char name[64]; unsigned bit_size = size * 8; bool is_signed = (flags & ATOMIC_TYPE_FLAG_SIGNED) != 0; unsigned modulo_shift = decide_modulo_shift(bit_size); snprintf(name, sizeof(name), "%s%u", is_signed ? "I" : "U", bit_size); return new_int_mode(name, irma_twos_complement, bit_size, is_signed, modulo_shift); } return NULL; }