X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fconfig%2Fi386%2Fi386.h;h=241650f99f61c8c70f859c5f9b36fe7df4715db1;hb=f1db295a3e6678625ef309c4c45b403d5d1f5cf7;hp=9ce6f26e91dfdc0eba74dc709c0db21060690b03;hpb=e0bfa90a4563ce78722e68fb77644694105ff787;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 9ce6f26e91d..241650f99f6 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -95,6 +95,7 @@ extern int target_flags; #define MASK_NO_PSEUDO 000010000000 /* Move op's args -> pseudos */ #define MASK_DEBUG_ARG 000020000000 /* Debug function_arg */ #define MASK_SCHEDULE_PROLOGUE 000040000000 /* Emit prologue as rtl */ +#define MASK_STACK_PROBE 000100000000 /* Enable stack probing */ /* Use the floating point instructions */ #define TARGET_80387 (target_flags & MASK_80387) @@ -163,8 +164,9 @@ extern int target_flags; #define TARGET_USE_Q_REG (ix86_cpu == PROCESSOR_PENTIUM \ || ix86_cpu == PROCESSOR_PENTIUMPRO) #define TARGET_USE_ANY_REG (ix86_cpu == PROCESSOR_I486) -#define TARGET_CMOVE (ix86_isa == PROCESSOR_PENTIUMPRO) +#define TARGET_CMOVE (ix86_arch == PROCESSOR_PENTIUMPRO) #define TARGET_DEEP_BRANCH_PREDICTION (ix86_cpu == PROCESSOR_PENTIUMPRO) +#define TARGET_STACK_PROBE (target_flags & MASK_STACK_PROBE) #define TARGET_SWITCHES \ { { "80387", MASK_80387 }, \ @@ -202,6 +204,8 @@ extern int target_flags; { "no-move", MASK_NO_MOVE }, \ { "debug-arg", MASK_DEBUG_ARG }, \ { "no-debug-arg", -MASK_DEBUG_ARG }, \ + { "stack-arg-probe", MASK_STACK_PROBE }, \ + { "no-stack-arg-probe", -MASK_STACK_PROBE }, \ SUBTARGET_SWITCHES \ { "", MASK_SCHEDULE_PROLOGUE | TARGET_DEFAULT}} @@ -223,11 +227,7 @@ enum processor_type extern enum processor_type ix86_cpu; -extern int ix86_isa; - -/* Define generic processor types based upon current deployment. */ -#define PROCESSOR_COMMON PROCESSOR_I386 -#define PROCESSOR_COMMON_STRING PROCESSOR_I386_STRING +extern int ix86_arch; /* Define the default processor. This is overridden by other tm.h files. */ #define PROCESSOR_DEFAULT \ @@ -258,7 +258,7 @@ extern int ix86_isa; by appending `-m' to the specified name. */ #define TARGET_OPTIONS \ { { "cpu=", &ix86_cpu_string}, \ - { "arch=", &ix86_isa_string}, \ + { "arch=", &ix86_arch_string}, \ { "reg-alloc=", &i386_reg_alloc_order }, \ { "regparm=", &i386_regparm_string }, \ { "align-loops=", &i386_align_loops_string }, \ @@ -301,6 +301,32 @@ extern int ix86_isa; %{mpentiumpro:-mcpu=pentiumpro}}" #endif +#ifndef CPP_CPU_SPEC +#define CPP_CPU_SPEC "\ +-Di386 -Asystem(unix) -Acpu(i386) -Amachine(i386) \ +%{mcpu=i486:-Di486} %{m486:-Di486} \ +%{mpentium:-Dpentium -Di586} %{mcpu=pentium:-Dpentium -Di586} \ +%{mpentiumpro:-Dpentiumpro -Di686} %{mcpu=pentiumpro:-Dpentiumpro -Di686}" +#endif + +/* This macro defines names of additional specifications to put in the specs + that can be used in various specifications like CC1_SPEC. Its definition + is an initializer with a subgrouping for each command option. + + Each subgrouping contains a string constant, that defines the + specification name, and a string constant that used by the GNU CC driver + program. + + Do not define this macro if it does not need to do anything. */ + +#ifndef SUBTARGET_EXTRA_SPECS +#define SUBTARGET_EXTRA_SPECS +#endif + +#define EXTRA_SPECS \ + { "cpp_cpu", CPP_CPU_SPEC }, \ + SUBTARGET_EXTRA_SPECS + /* target machine storage layout */ /* Define for XFmode extended real floating point support. @@ -520,7 +546,7 @@ extern int ix86_isa; : FP_REGNO_P (REGNO) \ ? (((int) GET_MODE_CLASS (MODE) == (int) MODE_FLOAT \ || (int) GET_MODE_CLASS (MODE) == (int) MODE_COMPLEX_FLOAT) \ - && GET_MODE_UNIT_SIZE (MODE) <= 12) \ + && GET_MODE_UNIT_SIZE (MODE) <= (LONG_DOUBLE_TYPE_SIZE == 96 ? 12 : 8))\ : (int) (MODE) != (int) QImode ? 1 \ : (reload_in_progress | reload_completed) == 1) @@ -680,7 +706,7 @@ enum reg_class rtl to be used as spill registers but prevents the compiler from extending the lifetime of these registers. */ -#define SMALL_REGISTER_CLASSES +#define SMALL_REGISTER_CLASSES 1 #define QI_REG_P(X) \ (REG_P (X) && REGNO (X) < 4) @@ -1844,10 +1870,12 @@ while (0) HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); \ \ if (value == 1) \ - return COSTS_N_INSNS (ix86_cost->add) + rtx_cost(XEXP (X, 0));\ + return COSTS_N_INSNS (ix86_cost->add) \ + + rtx_cost(XEXP (X, 0), OUTER_CODE); \ \ if (value == 2 || value == 3) \ - return COSTS_N_INSNS (ix86_cost->lea) + rtx_cost(XEXP (X, 0));\ + return COSTS_N_INSNS (ix86_cost->lea) \ + + rtx_cost(XEXP (X, 0), OUTER_CODE); \ } \ /* fall through */ \ \ @@ -1865,12 +1893,12 @@ while (0) return ((GET_CODE (XEXP (X, 1)) == AND \ ? COSTS_N_INSNS(ix86_cost->shift_var * 2) \ : COSTS_N_INSNS(ix86_cost->shift_var * 6 + 2)) \ - + rtx_cost(XEXP (X, 0))); \ + + rtx_cost(XEXP (X, 0), OUTER_CODE)); \ } \ return COSTS_N_INSNS (GET_CODE (XEXP (X, 1)) == CONST_INT \ ? ix86_cost->shift_const \ : ix86_cost->shift_var) \ - + rtx_cost(XEXP (X, 0)); \ + + rtx_cost(XEXP (X, 0), OUTER_CODE); \ \ case MULT: \ if (GET_CODE (XEXP (X, 1)) == CONST_INT) \ @@ -1879,10 +1907,11 @@ while (0) int nbits = 0; \ \ if (value == 2) \ - return COSTS_N_INSNS (ix86_cost->add) + rtx_cost(XEXP (X, 0));\ - \ + return COSTS_N_INSNS (ix86_cost->add) \ + + rtx_cost(XEXP (X, 0), OUTER_CODE); \ if (value == 4 || value == 8) \ - return COSTS_N_INSNS (ix86_cost->lea) + rtx_cost(XEXP (X, 0));\ + return COSTS_N_INSNS (ix86_cost->lea) \ + + rtx_cost(XEXP (X, 0), OUTER_CODE); \ \ while (value != 0) \ { \ @@ -1892,11 +1921,11 @@ while (0) \ if (nbits == 1) \ return COSTS_N_INSNS (ix86_cost->shift_const) \ - + rtx_cost(XEXP (X, 0)); \ + + rtx_cost(XEXP (X, 0), OUTER_CODE); \ \ return COSTS_N_INSNS (ix86_cost->mult_init \ + nbits * ix86_cost->mult_bit) \ - + rtx_cost(XEXP (X, 0)); \ + + rtx_cost(XEXP (X, 0), OUTER_CODE); \ } \ \ else /* This is arbitrary */ \ @@ -1922,8 +1951,10 @@ while (0) case MINUS: \ if (GET_MODE (X) == DImode) \ return COSTS_N_INSNS (ix86_cost->add) * 2 \ - + (rtx_cost (XEXP (X, 0)) << (GET_MODE (XEXP (X, 0)) != DImode))\ - + (rtx_cost (XEXP (X, 1)) << (GET_MODE (XEXP (X, 1)) != DImode));\ + + (rtx_cost (XEXP (X, 0), OUTER_CODE) \ + << (GET_MODE (XEXP (X, 0)) != DImode)) \ + + (rtx_cost (XEXP (X, 1), OUTER_CODE) \ + << (GET_MODE (XEXP (X, 1)) != DImode)); \ case NEG: \ case NOT: \ if (GET_MODE (X) == DImode) \ @@ -2202,7 +2233,7 @@ extern struct rtx_def *(*i386_compare_gen)(), *(*i386_compare_gen_eq)(); /* Here we define machine-dependent flags and fields in cc_status (see `conditions.h'). */ -/* Set if the cc value is was actually from the 80387 and +/* Set if the cc value was actually from the 80387 and we are testing eax directly (i.e. no sahf) */ #define CC_TEST_AX 020000 @@ -2214,6 +2245,10 @@ extern struct rtx_def *(*i386_compare_gen)(), *(*i386_compare_gen_eq)(); the state of equality is indicated by zero in the carry bit. */ #define CC_Z_IN_NOT_C 010000 +/* Set if the CC value was actually from the 80387 and loaded directly + into the eflags instead of via eax/sahf. */ +#define CC_FCOMI 040000 + /* Store in cc_status the expressions that the condition codes will describe after execution of an instruction whose pattern is EXP. @@ -2628,7 +2663,7 @@ extern void rewrite_address (); /* Variables in i386.c */ extern char *ix86_cpu_string; /* for -mcpu= */ -extern char *ix86_isa_string; /* for -mcpu= */ +extern char *ix86_arch_string; /* for -march= */ extern char *i386_reg_alloc_order; /* register allocation order */ extern char *i386_regparm_string; /* # registers to use to pass args */ extern char *i386_align_loops_string; /* power of two alignment for loops */