X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_architecture.h;h=c96eaac9920ae7bc23332a6a3b624037909d9c87;hb=b35afc79238e7731b8b3beecc69468cb719735f5;hp=fc3959d2b9c730ddceaa331d6f3a2ca8330de5b5;hpb=c11262873a64779c78b8eee6118a1b0659d0f043;p=libfirm diff --git a/ir/be/ia32/ia32_architecture.h b/ir/be/ia32/ia32_architecture.h index fc3959d2b..c96eaac99 100644 --- a/ir/be/ia32/ia32_architecture.h +++ b/ir/be/ia32/ia32_architecture.h @@ -21,7 +21,6 @@ * @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 @@ -33,12 +32,12 @@ typedef struct { 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 */ @@ -76,6 +75,10 @@ typedef struct { unsigned use_sse_prefetch:1; /** use 3DNow! prefetch instructions */ unsigned use_3dnow_prefetch:1; + /** use SSE4.2 or SSE4a popcnt instruction */ + unsigned use_popcnt:1; + /** use i486 instructions */ + unsigned use_bswap:1; /** optimize calling convention where possible */ unsigned optimize_cc:1; /** @@ -84,6 +87,9 @@ typedef struct { * 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) */ @@ -97,6 +103,14 @@ typedef struct { 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); @@ -108,10 +122,11 @@ void ia32_setup_cg_config(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