-
- /* Internal Modes */
- newmode.arithmetic = irma_none;
- newmode.size = 0;
- newmode.sign = 0;
- newmode.modulo_shift = 0;
- newmode.vector_elem = 0;
- newmode.eq_signed = NULL;
- newmode.eq_unsigned = NULL;
- newmode.link = NULL;
- newmode.tv_priv = NULL;
-
- /* Control Flow Modes*/
- newmode.sort = irms_control_flow;
-
- /* Basic Block */
- newmode.name = new_id_from_chars("BB", 2);
- mode_BB = register_mode(&newmode);
-
- /* eXecution */
- newmode.name = new_id_from_chars("X", 1);
- mode_X = register_mode(&newmode);
-
- /* Memory Modes */
- newmode.sort = irms_memory;
-
- /* Memory */
- newmode.name = new_id_from_chars("M", 1);
- mode_M = register_mode(&newmode);
-
- /* Auxiliary Modes */
- newmode.sort = irms_auxiliary,
-
- /* Tuple */
- newmode.name = new_id_from_chars("T", 1);
- mode_T = register_mode(&newmode);
-
- /* ANY */
- newmode.name = new_id_from_chars("ANY", 3);
- mode_ANY = register_mode(&newmode);
-
- /* BAD */
- newmode.name = new_id_from_chars("BAD", 3);
- mode_BAD = register_mode(&newmode);
-
- /* Internal Boolean Modes */
- newmode.sort = irms_internal_boolean;
-
- /* boolean */
- newmode.name = new_id_from_chars("b", 1);
- mode_b = register_mode(&newmode);
-
- /* Data Modes */
- newmode.vector_elem = 1;
-
- /* Float Number Modes */
- newmode.sort = irms_float_number;
- newmode.arithmetic = irma_ieee754;
-
- /* float */
- newmode.name = new_id_from_chars("F", 1);
- newmode.sign = 1;
- newmode.size = 32;
- mode_F = register_mode(&newmode);
-
- /* double */
- newmode.name = new_id_from_chars("D", 1);
- newmode.sign = 1;
- newmode.size = 64;
- mode_D = register_mode(&newmode);
-
- /* extended */
- newmode.name = new_id_from_chars("E", 1);
- 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);
-
- /* Integer Number Modes */
- newmode.sort = irms_int_number;
- newmode.arithmetic = irma_twos_complement;
-
- /* signed byte */
- newmode.name = new_id_from_chars("Bs", 2);
- newmode.sign = 1;
- newmode.size = 8;
- newmode.modulo_shift = 32;
- mode_Bs = register_mode(&newmode);
-
- /* unsigned byte */
- newmode.name = new_id_from_chars("Bu", 2);
- newmode.arithmetic = irma_twos_complement;
- newmode.sign = 0;
- newmode.size = 8;
- newmode.modulo_shift = 32;
- mode_Bu = register_mode(&newmode);
-
- /* signed short integer */
- newmode.name = new_id_from_chars("Hs", 2);
- newmode.sign = 1;
- newmode.size = 16;
- newmode.modulo_shift = 32;
- mode_Hs = register_mode(&newmode);
-
- /* unsigned short integer */
- newmode.name = new_id_from_chars("Hu", 2);
- newmode.sign = 0;
- newmode.size = 16;
- newmode.modulo_shift = 32;
- mode_Hu = register_mode(&newmode);
-
- /* signed integer */
- newmode.name = new_id_from_chars("Is", 2);
- newmode.sign = 1;
- newmode.size = 32;
- newmode.modulo_shift = 32;
- mode_Is = register_mode(&newmode);
-
- /* unsigned integer */
- newmode.name = new_id_from_chars("Iu", 2);
- newmode.sign = 0;
- newmode.size = 32;
- newmode.modulo_shift = 32;
- mode_Iu = register_mode(&newmode);
-
- /* signed long integer */
- newmode.name = new_id_from_chars("Ls", 2);
- newmode.sign = 1;
- newmode.size = 64;
- newmode.modulo_shift = 64;
- mode_Ls = register_mode(&newmode);
-
- /* unsigned long integer */
- newmode.name = new_id_from_chars("Lu", 2);
- newmode.sign = 0;
- newmode.size = 64;
- newmode.modulo_shift = 64;
- mode_Lu = register_mode(&newmode);
-
- /* signed long long integer */
- newmode.name = new_id_from_chars("LLs", 3);
- newmode.sign = 1;
- newmode.size = 128;
- newmode.modulo_shift = 128;
- mode_LLs = register_mode(&newmode);
-
- /* unsigned long long integer */
- newmode.name = new_id_from_chars("LLu", 3);
- newmode.sign = 0;
- newmode.size = 128;
- newmode.modulo_shift = 128;
- mode_LLu = register_mode(&newmode);
-
- /* Reference Mode */
- newmode.sort = irms_reference;
- newmode.arithmetic = irma_twos_complement;
-
- /* pointer */
- newmode.name = new_id_from_chars("P", 1);
- newmode.sign = 0;
- newmode.size = 32;
- newmode.modulo_shift = 32;
- newmode.eq_signed = mode_Is;
- newmode.eq_unsigned = mode_Iu;
- mode_P = register_mode(&newmode);
+ 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);