* @file
* @brief ia32 architecture variants
* @author Michael Beck, Matthias Braun
- * @version $Id: bearch_ia32_t.h 16363 2007-10-25 23:27:07Z beck $
*/
#ifndef FIRM_BE_IA32_ARCHITECTURE_H
#define FIRM_BE_IA32_ARCHITECTURE_H
unsigned use_leave:1;
/** use inc, dec instead of add $1, reg and add $-1, reg */
unsigned use_incdec:1;
+ /** use soft float library */
+ unsigned use_softfloat:1;
/** use sse2 instructions (instead of x87) */
unsigned use_sse2:1;
/** use ffreep instead of fpop */
unsigned use_ffreep:1;
- /** use ftst where possible */
- unsigned use_ftst:1;
/** use femms to pop all float registers */
unsigned use_femms:1;
/** use emms to pop all float registers */
/** use SSE4.2 or SSE4a popcnt instruction */
unsigned use_popcnt:1;
/** use i486 instructions */
- unsigned use_i486:1;
+ unsigned use_bswap:1;
/** optimize calling convention where possible */
unsigned optimize_cc:1;
/**
* rounding mode
*/
unsigned use_unsafe_floatconv:1;
+ /** emit machine code instead of assembler */
+ unsigned emit_machcode:1;
+
/** function alignment (a power of two in bytes) */
unsigned function_alignment;
/** alignment for labels (which are expected to be frequent jump targets) */
extern ia32_code_gen_config_t ia32_cg_config;
+typedef enum ia32_fp_architectures {
+ IA32_FPU_ARCH_NONE = 0,
+ IA32_FPU_ARCH_X87 = 0x00000001,
+ IA32_FPU_ARCH_SSE2 = 0x00000002,
+ IA32_FPU_ARCH_SOFTFLOAT = 0x00000004,
+}
+ia32_fp_architectures;
+
/** Initialize the ia32 architecture module. */
void ia32_init_architecture(void);
* lowerer.
*
* @param kind the instruction
+ * @param mode the mode of the instruction
* @param tv for MUL instruction, the multiplication constant
*
* @return the cost
*/
-int ia32_evaluate_insn(insn_kind kind, tarval *tv);
+int ia32_evaluate_insn(insn_kind kind, const ir_mode *mode, ir_tarval *tv);
#endif