/** Backend settings for if-conversion. */
arch_allow_ifconv_func allow_ifconv;
+ /** size of machine words. This is usually the size of the general purpose
+ * integer registers. */
+ unsigned machine_size;
+
/**
* some backends like x87 can only do arithmetic in a specific float
- * mode (but convert to/from other float modes).
+ * mode (load/store are still done in the "normal" float/double modes).
*/
ir_mode *mode_float_arithmetic;
+ /** size of a long double floating mode in bits (or 0 if not supported) */
+ unsigned long_double_size;
+
/** Size of the trampoline code. */
unsigned trampoline_size;
0, /* 0: little-endian, 1: big-endian */
NULL, /* architecture dependent settings, will be set later */
TEMPLATE_is_mux_allowed, /* parameter for if conversion */
+ 32, /* machine size - a 32bit CPU */
NULL, /* float arithmetic mode */
+ 0, /* size of long double */
0, /* no trampoline support: size 0 */
0, /* no trampoline support: align 0 */
NULL, /* no trampoline support: no trampoline builder */
0, /* little endian */
NULL, /* will be set later */
amd64_is_mux_allowed, /* parameter for if conversion */
+ 64, /* machine size */
NULL, /* float arithmetic mode */
+ 0, /* size of long double */
0, /* no trampoline support: size 0 */
0, /* no trampoline support: align 0 */
NULL, /* no trampoline support: no trampoline builder */
1, /* big endian */
&ad, /* will be set later */
arm_is_mux_allowed, /* allow_ifconv function */
+ 32, /* machine size */
NULL, /* float arithmetic mode (TODO) */
+ 0, /* size of long double */
0, /* no trampoline support: size 0 */
0, /* no trampoline support: align 0 */
NULL, /* no trampoline support: no trampoline builder */
0, /* little endian */
NULL, /* will be set later */
ia32_is_mux_allowed,
+ 32, /* machine_size */
NULL, /* float arithmetic mode, will be set below */
+ 0, /* size of long double */
12, /* size of trampoline code */
4, /* alignment of trampoline code */
ia32_create_trampoline_fkt,
init_asm_constraints();
p.dep_param = &ad;
- if (! ia32_cg_config.use_sse2)
+ if (! ia32_cg_config.use_sse2) {
p.mode_float_arithmetic = mode_E;
+ p.long_double_size = 96;
+ } else {
+ p.mode_float_arithmetic = NULL;
+ p.long_double_size = 64;
+ }
return &p;
}
1, /* big endian */
&arch_dep, /* will be set later */
sparc_is_mux_allowed, /* parameter for if conversion */
+ 32, /* machine size */
NULL, /* float arithmetic mode */
+ 128, /* size of long double */
0, /* no trampoline support: size 0 */
0, /* no trampoline support: align 0 */
NULL, /* no trampoline support: no trampoline builder */