示例#1
0
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);
}
示例#2
0
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
}
示例#3
0
文件: irmode.c 项目: qznc/libfirm
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;
}
示例#4
0
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;
}