-typedef enum cpu_support {
- arch_i386, /**< i386 */
- arch_i486, /**< i486 */
- arch_pentium, /**< Pentium */
- arch_pentium_pro, /**< Pentium Pro */
- arch_pentium_mmx, /**< Pentium MMX */
- arch_pentium_2, /**< Pentium II */
- arch_pentium_3, /**< Pentium III */
- arch_pentium_4, /**< Pentium IV */
- arch_pentium_m, /**< Pentium M */
- arch_core, /**< Core */
- arch_k6, /**< K6 */
- arch_athlon, /**< Athlon */
- arch_athlon_64, /**< Athlon64 */
- arch_opteron, /**< Opteron */
-} cpu_support;
-
-/** checks for l <= x <= h */
-#define _IN_RANGE(x, l, h) ((unsigned)((x) - (l)) <= (unsigned)((h) - (l)))
-
-/** returns true if it's Intel architecture */
-#define ARCH_INTEL(x) _IN_RANGE((x), arch_i386, arch_core)
-
-/** returns true if it's AMD architecture */
-#define ARCH_AMD(x) _IN_RANGE((x), arch_k6, arch_opteron)
-
-#define IS_P6_ARCH(x) (_IN_RANGE((x), arch_pentium_pro, arch_core) || \
- _IN_RANGE((x), arch_athlon, arch_opteron))
-
-/** floating point support */
-typedef enum fp_support {
- fp_none, /**< no floating point instructions are used */
- fp_x87, /**< use x87 instructions */
- fp_sse2 /**< use SSE2 instructions */
-} fp_support;
-
-/** Sets the used flag to the current floating point architecture. */
-#define FP_USED(cg) ((cg)->used_fp = (cg)->fp_kind)
-
-/** Returns non-zero if the current floating point architecture is SSE2. */
-#define USE_SSE2(cg) ((cg)->fp_kind == fp_sse2)
-
-/** Returns non-zero if the current floating point architecture is x87. */
-#define USE_x87(cg) ((cg)->fp_kind == fp_x87)
-
-typedef struct _ia32_isa_t ia32_isa_t;
+struct ia32_intrinsic_env_t {
+ ia32_isa_t *isa; /**< the isa object */
+ ir_graph *irg; /**< the irg, these entities belong to */
+ ir_entity *divdi3; /**< entity for __divdi3 library call */
+ ir_entity *moddi3; /**< entity for __moddi3 library call */
+ ir_entity *udivdi3; /**< entity for __udivdi3 library call */
+ ir_entity *umoddi3; /**< entity for __umoddi3 library call */
+};
+
+typedef enum transformer_t {
+ TRANSFORMER_DEFAULT,
+#ifdef FIRM_GRGEN_BE
+ TRANSFORMER_PBQP,
+ TRANSFORMER_RAND
+#endif
+} transformer_t;
+
+#ifdef FIRM_GRGEN_BE
+/** The selected transformer. */
+extern transformer_t be_transformer;
+
+#else
+#define be_transformer TRANSFORMER_DEFAULT
+#endif
+
+/** The mode for the floating point control word. */
+extern ir_mode *ia32_mode_fpcw;
+/** extended floatingpoint mode */
+extern ir_mode *ia32_mode_E;
+extern ir_type *ia32_type_E;
+
+static inline ia32_irg_data_t *ia32_get_irg_data(const ir_graph *irg)
+{
+ return (ia32_irg_data_t*) be_birg_from_irg(irg)->isa_link;
+}