-
- /** Additional opcodes settings. */
- const arch_ops_info *arch_op_settings;
-
- /** Settings for architecture dependent optimizations */
- const arch_dep_params_t *dep_param;
-
- /** the architecture specific intrinsic function creator */
- create_intrinsic_fkt *arch_create_intrinsic_fkt;
-
- /** the context parameter for the create intrinsic function */
- void *create_intrinsic_ctx;
-
- /** backend settings for if-conversion */
- const opt_if_conv_info_t *if_conv_info;
-
- /** get the backend specific register encoding for a register name */
- get_register_fkt *get_register_from_name;
+ /** If set, the backend supports Rotl nodes */
+ unsigned support_rotl:1;
+ /** the backend uses big-endian byte ordering if set, else little endian */
+ unsigned byte_order_big_endian:1;
+ /** whether the architecure can natively handle modulo shift modes.
+ * If this is true, then you can assume that shifting in modes with
+ * module_shift==machine_size (if mode size is <= machine_size) is efficient
+ */
+ unsigned modulo_shift_efficient:1;
+ /** whether the architecure can natively handle modulo shift modes.
+ * If this is true, then you can assume that shifting without modulo shift
+ * is efficient
+ */
+ unsigned non_modulo_shift_efficient:1;
+
+ /** Settings for architecture dependent optimizations. */
+ const ir_settings_arch_dep_t *dep_param;
+
+ /** 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 (load/store are still done in the "normal" float/double modes).
+ */
+ ir_mode *mode_float_arithmetic;
+
+ /**
+ * type used for long long or NULL if none available.
+ */
+ ir_type *type_long_long;
+
+ /**
+ * type used for unsigned long long or NULL if none available
+ */
+ ir_type *type_unsigned_long_long;
+
+ /**
+ * type used for long double or NULL if none available.
+ */
+ ir_type *type_long_double;
+
+ /** Size of the trampoline code. */
+ unsigned trampoline_size;
+
+ /** Alignment of the trampoline code. */
+ unsigned trampoline_align;
+
+ /** If non-zero, build the trampoline. */
+ create_trampoline_fkt *build_trampoline;
+
+ /** Alignment of stack parameters */
+ unsigned stack_param_align;