OSDN Git Service

Add -mlzcnt.
[pf3gnuchains/gcc-fork.git] / gcc / config / i386 / i386.h
1 /* Definitions of target machine for GCC for IA-32.
2    Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 Under Section 7 of GPL version 3, you are granted additional
19 permissions described in the GCC Runtime Library Exception, version
20 3.1, as published by the Free Software Foundation.
21
22 You should have received a copy of the GNU General Public License and
23 a copy of the GCC Runtime Library Exception along with this program;
24 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
25 <http://www.gnu.org/licenses/>.  */
26
27 /* The purpose of this file is to define the characteristics of the i386,
28    independent of assembler syntax or operating system.
29
30    Three other files build on this one to describe a specific assembler syntax:
31    bsd386.h, att386.h, and sun386.h.
32
33    The actual tm.h file for a particular system should include
34    this file, and then the file for the appropriate assembler syntax.
35
36    Many macros that specify assembler syntax are omitted entirely from
37    this file because they really belong in the files for particular
38    assemblers.  These include RP, IP, LPREFIX, PUT_OP_SIZE, USE_STAR,
39    ADDR_BEG, ADDR_END, PRINT_IREG, PRINT_SCALE, PRINT_B_I_S, and many
40    that start with ASM_ or end in ASM_OP.  */
41
42 /* Redefines for option macros.  */
43
44 #define TARGET_64BIT    OPTION_ISA_64BIT
45 #define TARGET_X32      OPTION_ISA_X32
46 #define TARGET_MMX      OPTION_ISA_MMX
47 #define TARGET_3DNOW    OPTION_ISA_3DNOW
48 #define TARGET_3DNOW_A  OPTION_ISA_3DNOW_A
49 #define TARGET_SSE      OPTION_ISA_SSE
50 #define TARGET_SSE2     OPTION_ISA_SSE2
51 #define TARGET_SSE3     OPTION_ISA_SSE3
52 #define TARGET_SSSE3    OPTION_ISA_SSSE3
53 #define TARGET_SSE4_1   OPTION_ISA_SSE4_1
54 #define TARGET_SSE4_2   OPTION_ISA_SSE4_2
55 #define TARGET_AVX      OPTION_ISA_AVX
56 #define TARGET_FMA      OPTION_ISA_FMA
57 #define TARGET_SSE4A    OPTION_ISA_SSE4A
58 #define TARGET_FMA4     OPTION_ISA_FMA4
59 #define TARGET_XOP      OPTION_ISA_XOP
60 #define TARGET_LWP      OPTION_ISA_LWP
61 #define TARGET_ROUND    OPTION_ISA_ROUND
62 #define TARGET_ABM      OPTION_ISA_ABM
63 #define TARGET_BMI      OPTION_ISA_BMI
64 #define TARGET_LZCNT    OPTION_ISA_LZCNT
65 #define TARGET_TBM      OPTION_ISA_TBM
66 #define TARGET_POPCNT   OPTION_ISA_POPCNT
67 #define TARGET_SAHF     OPTION_ISA_SAHF
68 #define TARGET_MOVBE    OPTION_ISA_MOVBE
69 #define TARGET_CRC32    OPTION_ISA_CRC32
70 #define TARGET_AES      OPTION_ISA_AES
71 #define TARGET_PCLMUL   OPTION_ISA_PCLMUL
72 #define TARGET_CMPXCHG16B OPTION_ISA_CX16
73 #define TARGET_FSGSBASE OPTION_ISA_FSGSBASE
74 #define TARGET_RDRND    OPTION_ISA_RDRND
75 #define TARGET_F16C     OPTION_ISA_F16C
76
77 #define TARGET_LP64     (TARGET_64BIT && !TARGET_X32)
78
79 /* SSE4.1 defines round instructions */
80 #define OPTION_MASK_ISA_ROUND   OPTION_MASK_ISA_SSE4_1
81 #define OPTION_ISA_ROUND        ((ix86_isa_flags & OPTION_MASK_ISA_ROUND) != 0)
82
83 #include "config/vxworks-dummy.h"
84
85 #include "config/i386/i386-opts.h"
86
87 #define MAX_STRINGOP_ALGS 4
88
89 /* Specify what algorithm to use for stringops on known size.
90    When size is unknown, the UNKNOWN_SIZE alg is used.  When size is
91    known at compile time or estimated via feedback, the SIZE array
92    is walked in order until MAX is greater then the estimate (or -1
93    means infinity).  Corresponding ALG is used then.
94    For example initializer:
95     {{256, loop}, {-1, rep_prefix_4_byte}}
96    will use loop for blocks smaller or equal to 256 bytes, rep prefix will
97    be used otherwise.  */
98 struct stringop_algs
99 {
100   const enum stringop_alg unknown_size;
101   const struct stringop_strategy {
102     const int max;
103     const enum stringop_alg alg;
104   } size [MAX_STRINGOP_ALGS];
105 };
106
107 /* Define the specific costs for a given cpu */
108
109 struct processor_costs {
110   const int add;                /* cost of an add instruction */
111   const int lea;                /* cost of a lea instruction */
112   const int shift_var;          /* variable shift costs */
113   const int shift_const;        /* constant shift costs */
114   const int mult_init[5];       /* cost of starting a multiply
115                                    in QImode, HImode, SImode, DImode, TImode*/
116   const int mult_bit;           /* cost of multiply per each bit set */
117   const int divide[5];          /* cost of a divide/mod
118                                    in QImode, HImode, SImode, DImode, TImode*/
119   int movsx;                    /* The cost of movsx operation.  */
120   int movzx;                    /* The cost of movzx operation.  */
121   const int large_insn;         /* insns larger than this cost more */
122   const int move_ratio;         /* The threshold of number of scalar
123                                    memory-to-memory move insns.  */
124   const int movzbl_load;        /* cost of loading using movzbl */
125   const int int_load[3];        /* cost of loading integer registers
126                                    in QImode, HImode and SImode relative
127                                    to reg-reg move (2).  */
128   const int int_store[3];       /* cost of storing integer register
129                                    in QImode, HImode and SImode */
130   const int fp_move;            /* cost of reg,reg fld/fst */
131   const int fp_load[3];         /* cost of loading FP register
132                                    in SFmode, DFmode and XFmode */
133   const int fp_store[3];        /* cost of storing FP register
134                                    in SFmode, DFmode and XFmode */
135   const int mmx_move;           /* cost of moving MMX register.  */
136   const int mmx_load[2];        /* cost of loading MMX register
137                                    in SImode and DImode */
138   const int mmx_store[2];       /* cost of storing MMX register
139                                    in SImode and DImode */
140   const int sse_move;           /* cost of moving SSE register.  */
141   const int sse_load[3];        /* cost of loading SSE register
142                                    in SImode, DImode and TImode*/
143   const int sse_store[3];       /* cost of storing SSE register
144                                    in SImode, DImode and TImode*/
145   const int mmxsse_to_integer;  /* cost of moving mmxsse register to
146                                    integer and vice versa.  */
147   const int l1_cache_size;      /* size of l1 cache, in kilobytes.  */
148   const int l2_cache_size;      /* size of l2 cache, in kilobytes.  */
149   const int prefetch_block;     /* bytes moved to cache for prefetch.  */
150   const int simultaneous_prefetches; /* number of parallel prefetch
151                                    operations.  */
152   const int branch_cost;        /* Default value for BRANCH_COST.  */
153   const int fadd;               /* cost of FADD and FSUB instructions.  */
154   const int fmul;               /* cost of FMUL instruction.  */
155   const int fdiv;               /* cost of FDIV instruction.  */
156   const int fabs;               /* cost of FABS instruction.  */
157   const int fchs;               /* cost of FCHS instruction.  */
158   const int fsqrt;              /* cost of FSQRT instruction.  */
159                                 /* Specify what algorithm
160                                    to use for stringops on unknown size.  */
161   struct stringop_algs memcpy[2], memset[2];
162   const int scalar_stmt_cost;   /* Cost of any scalar operation, excluding
163                                    load and store.  */
164   const int scalar_load_cost;   /* Cost of scalar load.  */
165   const int scalar_store_cost;  /* Cost of scalar store.  */
166   const int vec_stmt_cost;      /* Cost of any vector operation, excluding
167                                    load, store, vector-to-scalar and
168                                    scalar-to-vector operation.  */
169   const int vec_to_scalar_cost;    /* Cost of vect-to-scalar operation.  */
170   const int scalar_to_vec_cost;    /* Cost of scalar-to-vector operation.  */
171   const int vec_align_load_cost;   /* Cost of aligned vector load.  */
172   const int vec_unalign_load_cost; /* Cost of unaligned vector load.  */
173   const int vec_store_cost;        /* Cost of vector store.  */
174   const int cond_taken_branch_cost;    /* Cost of taken branch for vectorizer
175                                           cost model.  */
176   const int cond_not_taken_branch_cost;/* Cost of not taken branch for
177                                           vectorizer cost model.  */
178 };
179
180 extern const struct processor_costs *ix86_cost;
181 extern const struct processor_costs ix86_size_cost;
182
183 #define ix86_cur_cost() \
184   (optimize_insn_for_size_p () ? &ix86_size_cost: ix86_cost)
185
186 /* Macros used in the machine description to test the flags.  */
187
188 /* configure can arrange to make this 2, to force a 486.  */
189
190 #ifndef TARGET_CPU_DEFAULT
191 #define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
192 #endif
193
194 #ifndef TARGET_FPMATH_DEFAULT
195 #define TARGET_FPMATH_DEFAULT \
196   (TARGET_64BIT && TARGET_SSE ? FPMATH_SSE : FPMATH_387)
197 #endif
198
199 #define TARGET_FLOAT_RETURNS_IN_80387 TARGET_FLOAT_RETURNS
200
201 /* 64bit Sledgehammer mode.  For libgcc2 we make sure this is a
202    compile-time constant.  */
203 #ifdef IN_LIBGCC2
204 #undef TARGET_64BIT
205 #ifdef __x86_64__
206 #define TARGET_64BIT 1
207 #else
208 #define TARGET_64BIT 0
209 #endif
210 #else
211 #ifndef TARGET_BI_ARCH
212 #undef TARGET_64BIT
213 #if TARGET_64BIT_DEFAULT
214 #define TARGET_64BIT 1
215 #else
216 #define TARGET_64BIT 0
217 #endif
218 #endif
219 #endif
220
221 #define HAS_LONG_COND_BRANCH 1
222 #define HAS_LONG_UNCOND_BRANCH 1
223
224 #define TARGET_386 (ix86_tune == PROCESSOR_I386)
225 #define TARGET_486 (ix86_tune == PROCESSOR_I486)
226 #define TARGET_PENTIUM (ix86_tune == PROCESSOR_PENTIUM)
227 #define TARGET_PENTIUMPRO (ix86_tune == PROCESSOR_PENTIUMPRO)
228 #define TARGET_GEODE (ix86_tune == PROCESSOR_GEODE)
229 #define TARGET_K6 (ix86_tune == PROCESSOR_K6)
230 #define TARGET_ATHLON (ix86_tune == PROCESSOR_ATHLON)
231 #define TARGET_PENTIUM4 (ix86_tune == PROCESSOR_PENTIUM4)
232 #define TARGET_K8 (ix86_tune == PROCESSOR_K8)
233 #define TARGET_ATHLON_K8 (TARGET_K8 || TARGET_ATHLON)
234 #define TARGET_NOCONA (ix86_tune == PROCESSOR_NOCONA)
235 #define TARGET_CORE2_32 (ix86_tune == PROCESSOR_CORE2_32)
236 #define TARGET_CORE2_64 (ix86_tune == PROCESSOR_CORE2_64)
237 #define TARGET_CORE2 (TARGET_CORE2_32 || TARGET_CORE2_64)
238 #define TARGET_COREI7_32 (ix86_tune == PROCESSOR_COREI7_32)
239 #define TARGET_COREI7_64 (ix86_tune == PROCESSOR_COREI7_64)
240 #define TARGET_COREI7 (TARGET_COREI7_32 || TARGET_COREI7_64)
241 #define TARGET_GENERIC32 (ix86_tune == PROCESSOR_GENERIC32)
242 #define TARGET_GENERIC64 (ix86_tune == PROCESSOR_GENERIC64)
243 #define TARGET_GENERIC (TARGET_GENERIC32 || TARGET_GENERIC64)
244 #define TARGET_AMDFAM10 (ix86_tune == PROCESSOR_AMDFAM10)
245 #define TARGET_BDVER1 (ix86_tune == PROCESSOR_BDVER1)
246 #define TARGET_BDVER2 (ix86_tune == PROCESSOR_BDVER2)
247 #define TARGET_BTVER1 (ix86_tune == PROCESSOR_BTVER1)
248 #define TARGET_ATOM (ix86_tune == PROCESSOR_ATOM)
249
250 /* Feature tests against the various tunings.  */
251 enum ix86_tune_indices {
252   X86_TUNE_USE_LEAVE,
253   X86_TUNE_PUSH_MEMORY,
254   X86_TUNE_ZERO_EXTEND_WITH_AND,
255   X86_TUNE_UNROLL_STRLEN,
256   X86_TUNE_BRANCH_PREDICTION_HINTS,
257   X86_TUNE_DOUBLE_WITH_ADD,
258   X86_TUNE_USE_SAHF,
259   X86_TUNE_MOVX,
260   X86_TUNE_PARTIAL_REG_STALL,
261   X86_TUNE_PARTIAL_FLAG_REG_STALL,
262   X86_TUNE_USE_HIMODE_FIOP,
263   X86_TUNE_USE_SIMODE_FIOP,
264   X86_TUNE_USE_MOV0,
265   X86_TUNE_USE_CLTD,
266   X86_TUNE_USE_XCHGB,
267   X86_TUNE_SPLIT_LONG_MOVES,
268   X86_TUNE_READ_MODIFY_WRITE,
269   X86_TUNE_READ_MODIFY,
270   X86_TUNE_PROMOTE_QIMODE,
271   X86_TUNE_FAST_PREFIX,
272   X86_TUNE_SINGLE_STRINGOP,
273   X86_TUNE_QIMODE_MATH,
274   X86_TUNE_HIMODE_MATH,
275   X86_TUNE_PROMOTE_QI_REGS,
276   X86_TUNE_PROMOTE_HI_REGS,
277   X86_TUNE_SINGLE_POP,
278   X86_TUNE_DOUBLE_POP,
279   X86_TUNE_SINGLE_PUSH,
280   X86_TUNE_DOUBLE_PUSH,
281   X86_TUNE_INTEGER_DFMODE_MOVES,
282   X86_TUNE_PARTIAL_REG_DEPENDENCY,
283   X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY,
284   X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL,
285   X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL,
286   X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL,
287   X86_TUNE_SSE_SPLIT_REGS,
288   X86_TUNE_SSE_TYPELESS_STORES,
289   X86_TUNE_SSE_LOAD0_BY_PXOR,
290   X86_TUNE_MEMORY_MISMATCH_STALL,
291   X86_TUNE_PROLOGUE_USING_MOVE,
292   X86_TUNE_EPILOGUE_USING_MOVE,
293   X86_TUNE_SHIFT1,
294   X86_TUNE_USE_FFREEP,
295   X86_TUNE_INTER_UNIT_MOVES,
296   X86_TUNE_INTER_UNIT_CONVERSIONS,
297   X86_TUNE_FOUR_JUMP_LIMIT,
298   X86_TUNE_SCHEDULE,
299   X86_TUNE_USE_BT,
300   X86_TUNE_USE_INCDEC,
301   X86_TUNE_PAD_RETURNS,
302   X86_TUNE_PAD_SHORT_FUNCTION,
303   X86_TUNE_EXT_80387_CONSTANTS,
304   X86_TUNE_SHORTEN_X87_SSE,
305   X86_TUNE_AVOID_VECTOR_DECODE,
306   X86_TUNE_PROMOTE_HIMODE_IMUL,
307   X86_TUNE_SLOW_IMUL_IMM32_MEM,
308   X86_TUNE_SLOW_IMUL_IMM8,
309   X86_TUNE_MOVE_M1_VIA_OR,
310   X86_TUNE_NOT_UNPAIRABLE,
311   X86_TUNE_NOT_VECTORMODE,
312   X86_TUNE_USE_VECTOR_FP_CONVERTS,
313   X86_TUNE_USE_VECTOR_CONVERTS,
314   X86_TUNE_FUSE_CMP_AND_BRANCH,
315   X86_TUNE_OPT_AGU,
316   X86_TUNE_VECTORIZE_DOUBLE,
317   X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL,
318   X86_TUNE_AVX128_OPTIMAL,
319
320   X86_TUNE_LAST
321 };
322
323 extern unsigned char ix86_tune_features[X86_TUNE_LAST];
324
325 #define TARGET_USE_LEAVE        ix86_tune_features[X86_TUNE_USE_LEAVE]
326 #define TARGET_PUSH_MEMORY      ix86_tune_features[X86_TUNE_PUSH_MEMORY]
327 #define TARGET_ZERO_EXTEND_WITH_AND \
328         ix86_tune_features[X86_TUNE_ZERO_EXTEND_WITH_AND]
329 #define TARGET_UNROLL_STRLEN    ix86_tune_features[X86_TUNE_UNROLL_STRLEN]
330 #define TARGET_BRANCH_PREDICTION_HINTS \
331         ix86_tune_features[X86_TUNE_BRANCH_PREDICTION_HINTS]
332 #define TARGET_DOUBLE_WITH_ADD  ix86_tune_features[X86_TUNE_DOUBLE_WITH_ADD]
333 #define TARGET_USE_SAHF         ix86_tune_features[X86_TUNE_USE_SAHF]
334 #define TARGET_MOVX             ix86_tune_features[X86_TUNE_MOVX]
335 #define TARGET_PARTIAL_REG_STALL ix86_tune_features[X86_TUNE_PARTIAL_REG_STALL]
336 #define TARGET_PARTIAL_FLAG_REG_STALL \
337         ix86_tune_features[X86_TUNE_PARTIAL_FLAG_REG_STALL]
338 #define TARGET_USE_HIMODE_FIOP  ix86_tune_features[X86_TUNE_USE_HIMODE_FIOP]
339 #define TARGET_USE_SIMODE_FIOP  ix86_tune_features[X86_TUNE_USE_SIMODE_FIOP]
340 #define TARGET_USE_MOV0         ix86_tune_features[X86_TUNE_USE_MOV0]
341 #define TARGET_USE_CLTD         ix86_tune_features[X86_TUNE_USE_CLTD]
342 #define TARGET_USE_XCHGB        ix86_tune_features[X86_TUNE_USE_XCHGB]
343 #define TARGET_SPLIT_LONG_MOVES ix86_tune_features[X86_TUNE_SPLIT_LONG_MOVES]
344 #define TARGET_READ_MODIFY_WRITE ix86_tune_features[X86_TUNE_READ_MODIFY_WRITE]
345 #define TARGET_READ_MODIFY      ix86_tune_features[X86_TUNE_READ_MODIFY]
346 #define TARGET_PROMOTE_QImode   ix86_tune_features[X86_TUNE_PROMOTE_QIMODE]
347 #define TARGET_FAST_PREFIX      ix86_tune_features[X86_TUNE_FAST_PREFIX]
348 #define TARGET_SINGLE_STRINGOP  ix86_tune_features[X86_TUNE_SINGLE_STRINGOP]
349 #define TARGET_QIMODE_MATH      ix86_tune_features[X86_TUNE_QIMODE_MATH]
350 #define TARGET_HIMODE_MATH      ix86_tune_features[X86_TUNE_HIMODE_MATH]
351 #define TARGET_PROMOTE_QI_REGS  ix86_tune_features[X86_TUNE_PROMOTE_QI_REGS]
352 #define TARGET_PROMOTE_HI_REGS  ix86_tune_features[X86_TUNE_PROMOTE_HI_REGS]
353 #define TARGET_SINGLE_POP       ix86_tune_features[X86_TUNE_SINGLE_POP]
354 #define TARGET_DOUBLE_POP       ix86_tune_features[X86_TUNE_DOUBLE_POP]
355 #define TARGET_SINGLE_PUSH      ix86_tune_features[X86_TUNE_SINGLE_PUSH]
356 #define TARGET_DOUBLE_PUSH      ix86_tune_features[X86_TUNE_DOUBLE_PUSH]
357 #define TARGET_INTEGER_DFMODE_MOVES \
358         ix86_tune_features[X86_TUNE_INTEGER_DFMODE_MOVES]
359 #define TARGET_PARTIAL_REG_DEPENDENCY \
360         ix86_tune_features[X86_TUNE_PARTIAL_REG_DEPENDENCY]
361 #define TARGET_SSE_PARTIAL_REG_DEPENDENCY \
362         ix86_tune_features[X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY]
363 #define TARGET_SSE_UNALIGNED_LOAD_OPTIMAL \
364         ix86_tune_features[X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL]
365 #define TARGET_SSE_UNALIGNED_STORE_OPTIMAL \
366         ix86_tune_features[X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL]
367 #define TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL \
368         ix86_tune_features[X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL]
369 #define TARGET_SSE_SPLIT_REGS   ix86_tune_features[X86_TUNE_SSE_SPLIT_REGS]
370 #define TARGET_SSE_TYPELESS_STORES \
371         ix86_tune_features[X86_TUNE_SSE_TYPELESS_STORES]
372 #define TARGET_SSE_LOAD0_BY_PXOR ix86_tune_features[X86_TUNE_SSE_LOAD0_BY_PXOR]
373 #define TARGET_MEMORY_MISMATCH_STALL \
374         ix86_tune_features[X86_TUNE_MEMORY_MISMATCH_STALL]
375 #define TARGET_PROLOGUE_USING_MOVE \
376         ix86_tune_features[X86_TUNE_PROLOGUE_USING_MOVE]
377 #define TARGET_EPILOGUE_USING_MOVE \
378         ix86_tune_features[X86_TUNE_EPILOGUE_USING_MOVE]
379 #define TARGET_SHIFT1           ix86_tune_features[X86_TUNE_SHIFT1]
380 #define TARGET_USE_FFREEP       ix86_tune_features[X86_TUNE_USE_FFREEP]
381 #define TARGET_INTER_UNIT_MOVES ix86_tune_features[X86_TUNE_INTER_UNIT_MOVES]
382 #define TARGET_INTER_UNIT_CONVERSIONS\
383         ix86_tune_features[X86_TUNE_INTER_UNIT_CONVERSIONS]
384 #define TARGET_FOUR_JUMP_LIMIT  ix86_tune_features[X86_TUNE_FOUR_JUMP_LIMIT]
385 #define TARGET_SCHEDULE         ix86_tune_features[X86_TUNE_SCHEDULE]
386 #define TARGET_USE_BT           ix86_tune_features[X86_TUNE_USE_BT]
387 #define TARGET_USE_INCDEC       ix86_tune_features[X86_TUNE_USE_INCDEC]
388 #define TARGET_PAD_RETURNS      ix86_tune_features[X86_TUNE_PAD_RETURNS]
389 #define TARGET_PAD_SHORT_FUNCTION \
390         ix86_tune_features[X86_TUNE_PAD_SHORT_FUNCTION]
391 #define TARGET_EXT_80387_CONSTANTS \
392         ix86_tune_features[X86_TUNE_EXT_80387_CONSTANTS]
393 #define TARGET_SHORTEN_X87_SSE  ix86_tune_features[X86_TUNE_SHORTEN_X87_SSE]
394 #define TARGET_AVOID_VECTOR_DECODE \
395         ix86_tune_features[X86_TUNE_AVOID_VECTOR_DECODE]
396 #define TARGET_TUNE_PROMOTE_HIMODE_IMUL \
397         ix86_tune_features[X86_TUNE_PROMOTE_HIMODE_IMUL]
398 #define TARGET_SLOW_IMUL_IMM32_MEM \
399         ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM32_MEM]
400 #define TARGET_SLOW_IMUL_IMM8   ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM8]
401 #define TARGET_MOVE_M1_VIA_OR   ix86_tune_features[X86_TUNE_MOVE_M1_VIA_OR]
402 #define TARGET_NOT_UNPAIRABLE   ix86_tune_features[X86_TUNE_NOT_UNPAIRABLE]
403 #define TARGET_NOT_VECTORMODE   ix86_tune_features[X86_TUNE_NOT_VECTORMODE]
404 #define TARGET_USE_VECTOR_FP_CONVERTS \
405         ix86_tune_features[X86_TUNE_USE_VECTOR_FP_CONVERTS]
406 #define TARGET_USE_VECTOR_CONVERTS \
407         ix86_tune_features[X86_TUNE_USE_VECTOR_CONVERTS]
408 #define TARGET_FUSE_CMP_AND_BRANCH \
409         ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH]
410 #define TARGET_OPT_AGU ix86_tune_features[X86_TUNE_OPT_AGU]
411 #define TARGET_VECTORIZE_DOUBLE \
412         ix86_tune_features[X86_TUNE_VECTORIZE_DOUBLE]
413 #define TARGET_SOFTWARE_PREFETCHING_BENEFICIAL \
414         ix86_tune_features[X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL]
415 #define TARGET_AVX128_OPTIMAL \
416         ix86_tune_features[X86_TUNE_AVX128_OPTIMAL]
417 /* Feature tests against the various architecture variations.  */
418 enum ix86_arch_indices {
419   X86_ARCH_CMOVE,               /* || TARGET_SSE */
420   X86_ARCH_CMPXCHG,
421   X86_ARCH_CMPXCHG8B,
422   X86_ARCH_XADD,
423   X86_ARCH_BSWAP,
424
425   X86_ARCH_LAST
426 };
427
428 extern unsigned char ix86_arch_features[X86_ARCH_LAST];
429
430 #define TARGET_CMOVE            ix86_arch_features[X86_ARCH_CMOVE]
431 #define TARGET_CMPXCHG          ix86_arch_features[X86_ARCH_CMPXCHG]
432 #define TARGET_CMPXCHG8B        ix86_arch_features[X86_ARCH_CMPXCHG8B]
433 #define TARGET_XADD             ix86_arch_features[X86_ARCH_XADD]
434 #define TARGET_BSWAP            ix86_arch_features[X86_ARCH_BSWAP]
435
436 #define TARGET_FISTTP           (TARGET_SSE3 && TARGET_80387)
437
438 extern int x86_prefetch_sse;
439
440 #define TARGET_PREFETCH_SSE     x86_prefetch_sse
441
442 #define ASSEMBLER_DIALECT       (ix86_asm_dialect)
443
444 #define TARGET_SSE_MATH         ((ix86_fpmath & FPMATH_SSE) != 0)
445 #define TARGET_MIX_SSE_I387 \
446  ((ix86_fpmath & (FPMATH_SSE | FPMATH_387)) == (FPMATH_SSE | FPMATH_387))
447
448 #define TARGET_GNU_TLS          (ix86_tls_dialect == TLS_DIALECT_GNU)
449 #define TARGET_GNU2_TLS         (ix86_tls_dialect == TLS_DIALECT_GNU2)
450 #define TARGET_ANY_GNU_TLS      (TARGET_GNU_TLS || TARGET_GNU2_TLS)
451 #define TARGET_SUN_TLS          0
452
453 #ifndef TARGET_64BIT_DEFAULT
454 #define TARGET_64BIT_DEFAULT 0
455 #endif
456 #ifndef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT
457 #define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT 0
458 #endif
459
460 /* Fence to use after loop using storent.  */
461
462 extern tree x86_mfence;
463 #define FENCE_FOLLOWING_MOVNT x86_mfence
464
465 /* Once GDB has been enhanced to deal with functions without frame
466    pointers, we can change this to allow for elimination of
467    the frame pointer in leaf functions.  */
468 #define TARGET_DEFAULT 0
469
470 /* Extra bits to force.  */
471 #define TARGET_SUBTARGET_DEFAULT 0
472 #define TARGET_SUBTARGET_ISA_DEFAULT 0
473
474 /* Extra bits to force on w/ 32-bit mode.  */
475 #define TARGET_SUBTARGET32_DEFAULT 0
476 #define TARGET_SUBTARGET32_ISA_DEFAULT 0
477
478 /* Extra bits to force on w/ 64-bit mode.  */
479 #define TARGET_SUBTARGET64_DEFAULT 0
480 #define TARGET_SUBTARGET64_ISA_DEFAULT 0
481
482 /* Replace MACH-O, ifdefs by in-line tests, where possible. 
483    (a) Macros defined in config/i386/darwin.h  */
484 #define TARGET_MACHO 0
485 #define TARGET_MACHO_BRANCH_ISLANDS 0
486 #define MACHOPIC_ATT_STUB 0
487 /* (b) Macros defined in config/darwin.h  */
488 #define MACHO_DYNAMIC_NO_PIC_P 0
489 #define MACHOPIC_INDIRECT 0
490 #define MACHOPIC_PURE 0
491
492 /* For the Windows 64-bit ABI.  */
493 #define TARGET_64BIT_MS_ABI (TARGET_64BIT && ix86_cfun_abi () == MS_ABI)
494
495 /* For the Windows 32-bit ABI.  */
496 #define TARGET_32BIT_MS_ABI (!TARGET_64BIT && ix86_cfun_abi () == MS_ABI)
497
498 /* This is re-defined by cygming.h.  */
499 #define TARGET_SEH 0
500
501 /* The default abi used by target.  */
502 #define DEFAULT_ABI SYSV_ABI
503
504 /* Subtargets may reset this to 1 in order to enable 96-bit long double
505    with the rounding mode forced to 53 bits.  */
506 #define TARGET_96_ROUND_53_LONG_DOUBLE 0
507
508 /* -march=native handling only makes sense with compiler running on
509    an x86 or x86_64 chip.  If changing this condition, also change
510    the condition in driver-i386.c.  */
511 #if defined(__i386__) || defined(__x86_64__)
512 /* In driver-i386.c.  */
513 extern const char *host_detect_local_cpu (int argc, const char **argv);
514 #define EXTRA_SPEC_FUNCTIONS \
515   { "local_cpu_detect", host_detect_local_cpu },
516 #define HAVE_LOCAL_CPU_DETECT
517 #endif
518
519 #if TARGET_64BIT_DEFAULT
520 #define OPT_ARCH64 "!m32"
521 #define OPT_ARCH32 "m32"
522 #else
523 #define OPT_ARCH64 "m64|mx32"
524 #define OPT_ARCH32 "m64|mx32:;"
525 #endif
526
527 /* Support for configure-time defaults of some command line options.
528    The order here is important so that -march doesn't squash the
529    tune or cpu values.  */
530 #define OPTION_DEFAULT_SPECS                                       \
531   {"tune", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" }, \
532   {"tune_32", "%{" OPT_ARCH32 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \
533   {"tune_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \
534   {"cpu", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" },  \
535   {"cpu_32", "%{" OPT_ARCH32 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \
536   {"cpu_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \
537   {"arch", "%{!march=*:-march=%(VALUE)}"},                         \
538   {"arch_32", "%{" OPT_ARCH32 ":%{!march=*:-march=%(VALUE)}}"},    \
539   {"arch_64", "%{" OPT_ARCH64 ":%{!march=*:-march=%(VALUE)}}"},
540
541 /* Specs for the compiler proper */
542
543 #ifndef CC1_CPU_SPEC
544 #define CC1_CPU_SPEC_1 ""
545
546 #ifndef HAVE_LOCAL_CPU_DETECT
547 #define CC1_CPU_SPEC CC1_CPU_SPEC_1
548 #else
549 #define CC1_CPU_SPEC CC1_CPU_SPEC_1 \
550 "%{march=native:%>march=native %:local_cpu_detect(arch) \
551   %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} \
552 %{mtune=native:%>mtune=native %:local_cpu_detect(tune)}"
553 #endif
554 #endif
555 \f
556 /* Target CPU builtins.  */
557 #define TARGET_CPU_CPP_BUILTINS() ix86_target_macros ()
558
559 /* Target Pragmas.  */
560 #define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
561
562 enum target_cpu_default
563 {
564   TARGET_CPU_DEFAULT_generic = 0,
565
566   TARGET_CPU_DEFAULT_i386,
567   TARGET_CPU_DEFAULT_i486,
568   TARGET_CPU_DEFAULT_pentium,
569   TARGET_CPU_DEFAULT_pentium_mmx,
570   TARGET_CPU_DEFAULT_pentiumpro,
571   TARGET_CPU_DEFAULT_pentium2,
572   TARGET_CPU_DEFAULT_pentium3,
573   TARGET_CPU_DEFAULT_pentium4,
574   TARGET_CPU_DEFAULT_pentium_m,
575   TARGET_CPU_DEFAULT_prescott,
576   TARGET_CPU_DEFAULT_nocona,
577   TARGET_CPU_DEFAULT_core2,
578   TARGET_CPU_DEFAULT_corei7,
579   TARGET_CPU_DEFAULT_atom,
580
581   TARGET_CPU_DEFAULT_geode,
582   TARGET_CPU_DEFAULT_k6,
583   TARGET_CPU_DEFAULT_k6_2,
584   TARGET_CPU_DEFAULT_k6_3,
585   TARGET_CPU_DEFAULT_athlon,
586   TARGET_CPU_DEFAULT_athlon_sse,
587   TARGET_CPU_DEFAULT_k8,
588   TARGET_CPU_DEFAULT_amdfam10,
589   TARGET_CPU_DEFAULT_bdver1,
590   TARGET_CPU_DEFAULT_bdver2,
591   TARGET_CPU_DEFAULT_btver1,
592
593   TARGET_CPU_DEFAULT_max
594 };
595
596 #ifndef CC1_SPEC
597 #define CC1_SPEC "%(cc1_cpu) "
598 #endif
599
600 /* This macro defines names of additional specifications to put in the
601    specs that can be used in various specifications like CC1_SPEC.  Its
602    definition is an initializer with a subgrouping for each command option.
603
604    Each subgrouping contains a string constant, that defines the
605    specification name, and a string constant that used by the GCC driver
606    program.
607
608    Do not define this macro if it does not need to do anything.  */
609
610 #ifndef SUBTARGET_EXTRA_SPECS
611 #define SUBTARGET_EXTRA_SPECS
612 #endif
613
614 #define EXTRA_SPECS                                                     \
615   { "cc1_cpu",  CC1_CPU_SPEC },                                         \
616   SUBTARGET_EXTRA_SPECS
617 \f
618
619 /* Set the value of FLT_EVAL_METHOD in float.h.  When using only the
620    FPU, assume that the fpcw is set to extended precision; when using
621    only SSE, rounding is correct; when using both SSE and the FPU,
622    the rounding precision is indeterminate, since either may be chosen
623    apparently at random.  */
624 #define TARGET_FLT_EVAL_METHOD \
625   (TARGET_MIX_SSE_I387 ? -1 : TARGET_SSE_MATH ? 0 : 2)
626
627 /* Whether to allow x87 floating-point arithmetic on MODE (one of
628    SFmode, DFmode and XFmode) in the current excess precision
629    configuration.  */
630 #define X87_ENABLE_ARITH(MODE) \
631   (flag_excess_precision == EXCESS_PRECISION_FAST || (MODE) == XFmode)
632
633 /* Likewise, whether to allow direct conversions from integer mode
634    IMODE (HImode, SImode or DImode) to MODE.  */
635 #define X87_ENABLE_FLOAT(MODE, IMODE)                   \
636   (flag_excess_precision == EXCESS_PRECISION_FAST       \
637    || (MODE) == XFmode                                  \
638    || ((MODE) == DFmode && (IMODE) == SImode)           \
639    || (IMODE) == HImode)
640
641 /* target machine storage layout */
642
643 #define SHORT_TYPE_SIZE 16
644 #define INT_TYPE_SIZE 32
645 #define LONG_TYPE_SIZE (TARGET_X32 ? 32 : BITS_PER_WORD)
646 #define POINTER_SIZE (TARGET_X32 ? 32 : BITS_PER_WORD)
647 #define LONG_LONG_TYPE_SIZE 64
648 #define FLOAT_TYPE_SIZE 32
649 #define DOUBLE_TYPE_SIZE 64
650 #define LONG_DOUBLE_TYPE_SIZE 80
651
652 #define WIDEST_HARDWARE_FP_SIZE LONG_DOUBLE_TYPE_SIZE
653
654 #if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT
655 #define MAX_BITS_PER_WORD 64
656 #else
657 #define MAX_BITS_PER_WORD 32
658 #endif
659
660 /* Define this if most significant byte of a word is the lowest numbered.  */
661 /* That is true on the 80386.  */
662
663 #define BITS_BIG_ENDIAN 0
664
665 /* Define this if most significant byte of a word is the lowest numbered.  */
666 /* That is not true on the 80386.  */
667 #define BYTES_BIG_ENDIAN 0
668
669 /* Define this if most significant word of a multiword number is the lowest
670    numbered.  */
671 /* Not true for 80386 */
672 #define WORDS_BIG_ENDIAN 0
673
674 /* Width of a word, in units (bytes).  */
675 #define UNITS_PER_WORD          (TARGET_64BIT ? 8 : 4)
676
677 #ifndef IN_LIBGCC2
678 #define MIN_UNITS_PER_WORD      4
679 #endif
680
681 /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
682 #define PARM_BOUNDARY BITS_PER_WORD
683
684 /* Boundary (in *bits*) on which stack pointer should be aligned.  */
685 #define STACK_BOUNDARY \
686  (TARGET_64BIT && ix86_abi == MS_ABI ? 128 : BITS_PER_WORD)
687
688 /* Stack boundary of the main function guaranteed by OS.  */
689 #define MAIN_STACK_BOUNDARY (TARGET_64BIT ? 128 : 32)
690
691 /* Minimum stack boundary.  */
692 #define MIN_STACK_BOUNDARY (TARGET_64BIT ? 128 : 32)
693
694 /* Boundary (in *bits*) on which the stack pointer prefers to be
695    aligned; the compiler cannot rely on having this alignment.  */
696 #define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary
697
698 /* It should be MIN_STACK_BOUNDARY.  But we set it to 128 bits for
699    both 32bit and 64bit, to support codes that need 128 bit stack
700    alignment for SSE instructions, but can't realign the stack.  */
701 #define PREFERRED_STACK_BOUNDARY_DEFAULT 128
702
703 /* 1 if -mstackrealign should be turned on by default.  It will
704    generate an alternate prologue and epilogue that realigns the
705    runtime stack if nessary.  This supports mixing codes that keep a
706    4-byte aligned stack, as specified by i386 psABI, with codes that
707    need a 16-byte aligned stack, as required by SSE instructions.  */
708 #define STACK_REALIGN_DEFAULT 0
709
710 /* Boundary (in *bits*) on which the incoming stack is aligned.  */
711 #define INCOMING_STACK_BOUNDARY ix86_incoming_stack_boundary
712
713 /* Target OS keeps a vector-aligned (128-bit, 16-byte) stack.  This is
714    mandatory for the 64-bit ABI, and may or may not be true for other
715    operating systems.  */
716 #define TARGET_KEEPS_VECTOR_ALIGNED_STACK TARGET_64BIT
717
718 /* Minimum allocation boundary for the code of a function.  */
719 #define FUNCTION_BOUNDARY 8
720
721 /* C++ stores the virtual bit in the lowest bit of function pointers.  */
722 #define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn
723
724 /* Minimum size in bits of the largest boundary to which any
725    and all fundamental data types supported by the hardware
726    might need to be aligned. No data type wants to be aligned
727    rounder than this.
728
729    Pentium+ prefers DFmode values to be aligned to 64 bit boundary
730    and Pentium Pro XFmode values at 128 bit boundaries.  */
731
732 #define BIGGEST_ALIGNMENT (TARGET_AVX ? 256 : 128)
733
734 /* Maximum stack alignment.  */
735 #define MAX_STACK_ALIGNMENT MAX_OFILE_ALIGNMENT
736
737 /* Alignment value for attribute ((aligned)).  It is a constant since
738    it is the part of the ABI.  We shouldn't change it with -mavx.  */
739 #define ATTRIBUTE_ALIGNED_VALUE 128
740
741 /* Decide whether a variable of mode MODE should be 128 bit aligned.  */
742 #define ALIGN_MODE_128(MODE) \
743  ((MODE) == XFmode || SSE_REG_MODE_P (MODE))
744
745 /* The published ABIs say that doubles should be aligned on word
746    boundaries, so lower the alignment for structure fields unless
747    -malign-double is set.  */
748
749 /* ??? Blah -- this macro is used directly by libobjc.  Since it
750    supports no vector modes, cut out the complexity and fall back
751    on BIGGEST_FIELD_ALIGNMENT.  */
752 #ifdef IN_TARGET_LIBS
753 #ifdef __x86_64__
754 #define BIGGEST_FIELD_ALIGNMENT 128
755 #else
756 #define BIGGEST_FIELD_ALIGNMENT 32
757 #endif
758 #else
759 #define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
760    x86_field_alignment (FIELD, COMPUTED)
761 #endif
762
763 /* If defined, a C expression to compute the alignment given to a
764    constant that is being placed in memory.  EXP is the constant
765    and ALIGN is the alignment that the object would ordinarily have.
766    The value of this macro is used instead of that alignment to align
767    the object.
768
769    If this macro is not defined, then ALIGN is used.
770
771    The typical use of this macro is to increase alignment for string
772    constants to be word aligned so that `strcpy' calls that copy
773    constants can be done inline.  */
774
775 #define CONSTANT_ALIGNMENT(EXP, ALIGN) ix86_constant_alignment ((EXP), (ALIGN))
776
777 /* If defined, a C expression to compute the alignment for a static
778    variable.  TYPE is the data type, and ALIGN is the alignment that
779    the object would ordinarily have.  The value of this macro is used
780    instead of that alignment to align the object.
781
782    If this macro is not defined, then ALIGN is used.
783
784    One use of this macro is to increase alignment of medium-size
785    data to make it all fit in fewer cache lines.  Another is to
786    cause character arrays to be word-aligned so that `strcpy' calls
787    that copy constants to character arrays can be done inline.  */
788
789 #define DATA_ALIGNMENT(TYPE, ALIGN) ix86_data_alignment ((TYPE), (ALIGN))
790
791 /* If defined, a C expression to compute the alignment for a local
792    variable.  TYPE is the data type, and ALIGN is the alignment that
793    the object would ordinarily have.  The value of this macro is used
794    instead of that alignment to align the object.
795
796    If this macro is not defined, then ALIGN is used.
797
798    One use of this macro is to increase alignment of medium-size
799    data to make it all fit in fewer cache lines.  */
800
801 #define LOCAL_ALIGNMENT(TYPE, ALIGN) \
802   ix86_local_alignment ((TYPE), VOIDmode, (ALIGN))
803
804 /* If defined, a C expression to compute the alignment for stack slot.
805    TYPE is the data type, MODE is the widest mode available, and ALIGN
806    is the alignment that the slot would ordinarily have.  The value of
807    this macro is used instead of that alignment to align the slot.
808
809    If this macro is not defined, then ALIGN is used when TYPE is NULL,
810    Otherwise, LOCAL_ALIGNMENT will be used.
811
812    One use of this macro is to set alignment of stack slot to the
813    maximum alignment of all possible modes which the slot may have.  */
814
815 #define STACK_SLOT_ALIGNMENT(TYPE, MODE, ALIGN) \
816   ix86_local_alignment ((TYPE), (MODE), (ALIGN))
817
818 /* If defined, a C expression to compute the alignment for a local
819    variable DECL.
820
821    If this macro is not defined, then
822    LOCAL_ALIGNMENT (TREE_TYPE (DECL), DECL_ALIGN (DECL)) will be used.
823
824    One use of this macro is to increase alignment of medium-size
825    data to make it all fit in fewer cache lines.  */
826
827 #define LOCAL_DECL_ALIGNMENT(DECL) \
828   ix86_local_alignment ((DECL), VOIDmode, DECL_ALIGN (DECL))
829
830 /* If defined, a C expression to compute the minimum required alignment
831    for dynamic stack realignment purposes for EXP (a TYPE or DECL),
832    MODE, assuming normal alignment ALIGN.
833
834    If this macro is not defined, then (ALIGN) will be used.  */
835
836 #define MINIMUM_ALIGNMENT(EXP, MODE, ALIGN) \
837   ix86_minimum_alignment (EXP, MODE, ALIGN)
838
839
840 /* Set this nonzero if move instructions will actually fail to work
841    when given unaligned data.  */
842 #define STRICT_ALIGNMENT 0
843
844 /* If bit field type is int, don't let it cross an int,
845    and give entire struct the alignment of an int.  */
846 /* Required on the 386 since it doesn't have bit-field insns.  */
847 #define PCC_BITFIELD_TYPE_MATTERS 1
848 \f
849 /* Standard register usage.  */
850
851 /* This processor has special stack-like registers.  See reg-stack.c
852    for details.  */
853
854 #define STACK_REGS
855
856 #define IS_STACK_MODE(MODE)                                     \
857   (((MODE) == SFmode && !(TARGET_SSE && TARGET_SSE_MATH))       \
858    || ((MODE) == DFmode && !(TARGET_SSE2 && TARGET_SSE_MATH))   \
859    || (MODE) == XFmode)
860
861 /* Number of actual hardware registers.
862    The hardware registers are assigned numbers for the compiler
863    from 0 to just below FIRST_PSEUDO_REGISTER.
864    All registers that the compiler knows about must be given numbers,
865    even those that are not normally considered general registers.
866
867    In the 80386 we give the 8 general purpose registers the numbers 0-7.
868    We number the floating point registers 8-15.
869    Note that registers 0-7 can be accessed as a  short or int,
870    while only 0-3 may be used with byte `mov' instructions.
871
872    Reg 16 does not correspond to any hardware register, but instead
873    appears in the RTL as an argument pointer prior to reload, and is
874    eliminated during reloading in favor of either the stack or frame
875    pointer.  */
876
877 #define FIRST_PSEUDO_REGISTER 53
878
879 /* Number of hardware registers that go into the DWARF-2 unwind info.
880    If not defined, equals FIRST_PSEUDO_REGISTER.  */
881
882 #define DWARF_FRAME_REGISTERS 17
883
884 /* 1 for registers that have pervasive standard uses
885    and are not available for the register allocator.
886    On the 80386, the stack pointer is such, as is the arg pointer.
887
888    The value is zero if the register is not fixed on either 32 or
889    64 bit targets, one if the register if fixed on both 32 and 64
890    bit targets, two if it is only fixed on 32bit targets and three
891    if its only fixed on 64bit targets.
892    Proper values are computed in TARGET_CONDITIONAL_REGISTER_USAGE.
893  */
894 #define FIXED_REGISTERS                                         \
895 /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/      \
896 {  0, 0, 0, 0, 0, 0, 0, 1, 0,  0,  0,  0,  0,  0,  0,  0,       \
897 /*arg,flags,fpsr,fpcr,frame*/                                   \
898     1,    1,   1,   1,    1,                                    \
899 /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/                     \
900      0,   0,   0,   0,   0,   0,   0,   0,                      \
901 /* mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7*/                     \
902      0,   0,   0,   0,   0,   0,   0,   0,                      \
903 /*  r8,  r9, r10, r11, r12, r13, r14, r15*/                     \
904      2,   2,   2,   2,   2,   2,   2,   2,                      \
905 /*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/               \
906      2,   2,    2,    2,    2,    2,    2,    2 }
907
908
909 /* 1 for registers not available across function calls.
910    These must include the FIXED_REGISTERS and also any
911    registers that can be used without being saved.
912    The latter must include the registers where values are returned
913    and the register where structure-value addresses are passed.
914    Aside from that, you can include as many other registers as you like.
915
916    The value is zero if the register is not call used on either 32 or
917    64 bit targets, one if the register if call used on both 32 and 64
918    bit targets, two if it is only call used on 32bit targets and three
919    if its only call used on 64bit targets.
920    Proper values are computed in TARGET_CONDITIONAL_REGISTER_USAGE.
921 */
922 #define CALL_USED_REGISTERS                                     \
923 /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/      \
924 {  1, 1, 1, 0, 3, 3, 0, 1, 1,  1,  1,  1,  1,  1,  1,  1,       \
925 /*arg,flags,fpsr,fpcr,frame*/                                   \
926     1,   1,    1,   1,    1,                                    \
927 /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/                     \
928      1,   1,   1,   1,   1,   1,   1,   1,                      \
929 /* mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7*/                     \
930      1,   1,   1,   1,   1,   1,   1,   1,                      \
931 /*  r8,  r9, r10, r11, r12, r13, r14, r15*/                     \
932      1,   1,   1,   1,   2,   2,   2,   2,                      \
933 /*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/               \
934      1,   1,    1,    1,    1,    1,    1,    1 }
935
936 /* Order in which to allocate registers.  Each register must be
937    listed once, even those in FIXED_REGISTERS.  List frame pointer
938    late and fixed registers last.  Note that, in general, we prefer
939    registers listed in CALL_USED_REGISTERS, keeping the others
940    available for storage of persistent values.
941
942    The ADJUST_REG_ALLOC_ORDER actually overwrite the order,
943    so this is just empty initializer for array.  */
944
945 #define REG_ALLOC_ORDER                                         \
946 {  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\
947    18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,  \
948    33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,  \
949    48, 49, 50, 51, 52 }
950
951 /* ADJUST_REG_ALLOC_ORDER is a macro which permits reg_alloc_order
952    to be rearranged based on a particular function.  When using sse math,
953    we want to allocate SSE before x87 registers and vice versa.  */
954
955 #define ADJUST_REG_ALLOC_ORDER x86_order_regs_for_local_alloc ()
956
957
958 #define OVERRIDE_ABI_FORMAT(FNDECL) ix86_call_abi_override (FNDECL)
959
960 /* Return number of consecutive hard regs needed starting at reg REGNO
961    to hold something of mode MODE.
962    This is ordinarily the length in words of a value of mode MODE
963    but can be less for certain modes in special long registers.
964
965    Actually there are no two word move instructions for consecutive
966    registers.  And only registers 0-3 may have mov byte instructions
967    applied to them.  */
968
969 #define HARD_REGNO_NREGS(REGNO, MODE)                                   \
970   (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO)     \
971    ? (COMPLEX_MODE_P (MODE) ? 2 : 1)                                    \
972    : ((MODE) == XFmode                                                  \
973       ? (TARGET_64BIT ? 2 : 3)                                          \
974       : (MODE) == XCmode                                                \
975       ? (TARGET_64BIT ? 4 : 6)                                          \
976       : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)))
977
978 #define HARD_REGNO_NREGS_HAS_PADDING(REGNO, MODE)                       \
979   ((TARGET_128BIT_LONG_DOUBLE && !TARGET_64BIT)                         \
980    ? (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO)  \
981       ? 0                                                               \
982       : ((MODE) == XFmode || (MODE) == XCmode))                         \
983    : 0)
984
985 #define HARD_REGNO_NREGS_WITH_PADDING(REGNO, MODE) ((MODE) == XFmode ? 4 : 8)
986
987 #define VALID_AVX256_REG_MODE(MODE)                                     \
988   ((MODE) == V32QImode || (MODE) == V16HImode || (MODE) == V8SImode     \
989    || (MODE) == V4DImode || (MODE) == V8SFmode || (MODE) == V4DFmode)
990
991 #define VALID_SSE2_REG_MODE(MODE)                                       \
992   ((MODE) == V16QImode || (MODE) == V8HImode || (MODE) == V2DFmode      \
993    || (MODE) == V2DImode || (MODE) == DFmode)
994
995 #define VALID_SSE_REG_MODE(MODE)                                        \
996   ((MODE) == V1TImode || (MODE) == TImode                               \
997    || (MODE) == V4SFmode || (MODE) == V4SImode                          \
998    || (MODE) == SFmode || (MODE) == TFmode)
999
1000 #define VALID_MMX_REG_MODE_3DNOW(MODE) \
1001   ((MODE) == V2SFmode || (MODE) == SFmode)
1002
1003 #define VALID_MMX_REG_MODE(MODE)                                        \
1004   ((MODE == V1DImode) || (MODE) == DImode                               \
1005    || (MODE) == V2SImode || (MODE) == SImode                            \
1006    || (MODE) == V4HImode || (MODE) == V8QImode)
1007
1008 #define VALID_DFP_MODE_P(MODE) \
1009   ((MODE) == SDmode || (MODE) == DDmode || (MODE) == TDmode)
1010
1011 #define VALID_FP_MODE_P(MODE)                                           \
1012   ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode             \
1013    || (MODE) == SCmode || (MODE) == DCmode || (MODE) == XCmode)         \
1014
1015 #define VALID_INT_MODE_P(MODE)                                          \
1016   ((MODE) == QImode || (MODE) == HImode || (MODE) == SImode             \
1017    || (MODE) == DImode                                                  \
1018    || (MODE) == CQImode || (MODE) == CHImode || (MODE) == CSImode       \
1019    || (MODE) == CDImode                                                 \
1020    || (TARGET_64BIT && ((MODE) == TImode || (MODE) == CTImode           \
1021                         || (MODE) == TFmode || (MODE) == TCmode)))
1022
1023 /* Return true for modes passed in SSE registers.  */
1024 #define SSE_REG_MODE_P(MODE)                                            \
1025   ((MODE) == V1TImode || (MODE) == TImode || (MODE) == V16QImode        \
1026    || (MODE) == TFmode || (MODE) == V8HImode || (MODE) == V2DFmode      \
1027    || (MODE) == V2DImode || (MODE) == V4SFmode || (MODE) == V4SImode    \
1028    || (MODE) == V32QImode || (MODE) == V16HImode || (MODE) == V8SImode  \
1029    || (MODE) == V4DImode || (MODE) == V8SFmode || (MODE) == V4DFmode)
1030
1031 /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.  */
1032
1033 #define HARD_REGNO_MODE_OK(REGNO, MODE) \
1034    ix86_hard_regno_mode_ok ((REGNO), (MODE))
1035
1036 /* Value is 1 if it is a good idea to tie two pseudo registers
1037    when one has mode MODE1 and one has mode MODE2.
1038    If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
1039    for any hard reg, then this must be 0 for correct output.  */
1040
1041 #define MODES_TIEABLE_P(MODE1, MODE2)  ix86_modes_tieable_p (MODE1, MODE2)
1042
1043 /* It is possible to write patterns to move flags; but until someone
1044    does it,  */
1045 #define AVOID_CCMODE_COPIES
1046
1047 /* Specify the modes required to caller save a given hard regno.
1048    We do this on i386 to prevent flags from being saved at all.
1049
1050    Kill any attempts to combine saving of modes.  */
1051
1052 #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE)                 \
1053   (CC_REGNO_P (REGNO) ? VOIDmode                                        \
1054    : (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode                      \
1055    : (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS), false) \
1056    : (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode             \
1057    : (MODE) == QImode && (REGNO) > BX_REG && !TARGET_64BIT ? SImode     \
1058    : (MODE))
1059
1060 /* The only ABI that saves SSE registers across calls is Win64 (thus no
1061    need to check the current ABI here), and with AVX enabled Win64 only
1062    guarantees that the low 16 bytes are saved.  */
1063 #define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE)             \
1064   (SSE_REGNO_P (REGNO) && GET_MODE_SIZE (MODE) > 16)
1065
1066 /* Specify the registers used for certain standard purposes.
1067    The values of these macros are register numbers.  */
1068
1069 /* on the 386 the pc register is %eip, and is not usable as a general
1070    register.  The ordinary mov instructions won't work */
1071 /* #define PC_REGNUM  */
1072
1073 /* Register to use for pushing function arguments.  */
1074 #define STACK_POINTER_REGNUM 7
1075
1076 /* Base register for access to local variables of the function.  */
1077 #define HARD_FRAME_POINTER_REGNUM 6
1078
1079 /* Base register for access to local variables of the function.  */
1080 #define FRAME_POINTER_REGNUM 20
1081
1082 /* First floating point reg */
1083 #define FIRST_FLOAT_REG 8
1084
1085 /* First & last stack-like regs */
1086 #define FIRST_STACK_REG FIRST_FLOAT_REG
1087 #define LAST_STACK_REG (FIRST_FLOAT_REG + 7)
1088
1089 #define FIRST_SSE_REG (FRAME_POINTER_REGNUM + 1)
1090 #define LAST_SSE_REG  (FIRST_SSE_REG + 7)
1091
1092 #define FIRST_MMX_REG  (LAST_SSE_REG + 1)
1093 #define LAST_MMX_REG   (FIRST_MMX_REG + 7)
1094
1095 #define FIRST_REX_INT_REG  (LAST_MMX_REG + 1)
1096 #define LAST_REX_INT_REG   (FIRST_REX_INT_REG + 7)
1097
1098 #define FIRST_REX_SSE_REG  (LAST_REX_INT_REG + 1)
1099 #define LAST_REX_SSE_REG   (FIRST_REX_SSE_REG + 7)
1100
1101 /* Override this in other tm.h files to cope with various OS lossage
1102    requiring a frame pointer.  */
1103 #ifndef SUBTARGET_FRAME_POINTER_REQUIRED
1104 #define SUBTARGET_FRAME_POINTER_REQUIRED 0
1105 #endif
1106
1107 /* Make sure we can access arbitrary call frames.  */
1108 #define SETUP_FRAME_ADDRESSES()  ix86_setup_frame_addresses ()
1109
1110 /* Base register for access to arguments of the function.  */
1111 #define ARG_POINTER_REGNUM 16
1112
1113 /* Register to hold the addressing base for position independent
1114    code access to data items.  We don't use PIC pointer for 64bit
1115    mode.  Define the regnum to dummy value to prevent gcc from
1116    pessimizing code dealing with EBX.
1117
1118    To avoid clobbering a call-saved register unnecessarily, we renumber
1119    the pic register when possible.  The change is visible after the
1120    prologue has been emitted.  */
1121
1122 #define REAL_PIC_OFFSET_TABLE_REGNUM  BX_REG
1123
1124 #define PIC_OFFSET_TABLE_REGNUM                         \
1125   ((TARGET_64BIT && ix86_cmodel == CM_SMALL_PIC)        \
1126    || !flag_pic ? INVALID_REGNUM                        \
1127    : reload_completed ? REGNO (pic_offset_table_rtx)    \
1128    : REAL_PIC_OFFSET_TABLE_REGNUM)
1129
1130 #define GOT_SYMBOL_NAME "_GLOBAL_OFFSET_TABLE_"
1131
1132 /* This is overridden by <cygwin.h>.  */
1133 #define MS_AGGREGATE_RETURN 0
1134
1135 #define KEEP_AGGREGATE_RETURN_POINTER 0
1136 \f
1137 /* Define the classes of registers for register constraints in the
1138    machine description.  Also define ranges of constants.
1139
1140    One of the classes must always be named ALL_REGS and include all hard regs.
1141    If there is more than one class, another class must be named NO_REGS
1142    and contain no registers.
1143
1144    The name GENERAL_REGS must be the name of a class (or an alias for
1145    another name such as ALL_REGS).  This is the class of registers
1146    that is allowed by "g" or "r" in a register constraint.
1147    Also, registers outside this class are allocated only when
1148    instructions express preferences for them.
1149
1150    The classes must be numbered in nondecreasing order; that is,
1151    a larger-numbered class must never be contained completely
1152    in a smaller-numbered class.
1153
1154    For any two classes, it is very desirable that there be another
1155    class that represents their union.
1156
1157    It might seem that class BREG is unnecessary, since no useful 386
1158    opcode needs reg %ebx.  But some systems pass args to the OS in ebx,
1159    and the "b" register constraint is useful in asms for syscalls.
1160
1161    The flags, fpsr and fpcr registers are in no class.  */
1162
1163 enum reg_class
1164 {
1165   NO_REGS,
1166   AREG, DREG, CREG, BREG, SIREG, DIREG,
1167   AD_REGS,                      /* %eax/%edx for DImode */
1168   CLOBBERED_REGS,               /* call-clobbered integers */
1169   Q_REGS,                       /* %eax %ebx %ecx %edx */
1170   NON_Q_REGS,                   /* %esi %edi %ebp %esp */
1171   INDEX_REGS,                   /* %eax %ebx %ecx %edx %esi %edi %ebp */
1172   LEGACY_REGS,                  /* %eax %ebx %ecx %edx %esi %edi %ebp %esp */
1173   GENERAL_REGS,                 /* %eax %ebx %ecx %edx %esi %edi %ebp %esp
1174                                    %r8 %r9 %r10 %r11 %r12 %r13 %r14 %r15 */
1175   FP_TOP_REG, FP_SECOND_REG,    /* %st(0) %st(1) */
1176   FLOAT_REGS,
1177   SSE_FIRST_REG,
1178   SSE_REGS,
1179   MMX_REGS,
1180   FP_TOP_SSE_REGS,
1181   FP_SECOND_SSE_REGS,
1182   FLOAT_SSE_REGS,
1183   FLOAT_INT_REGS,
1184   INT_SSE_REGS,
1185   FLOAT_INT_SSE_REGS,
1186   ALL_REGS, LIM_REG_CLASSES
1187 };
1188
1189 #define N_REG_CLASSES ((int) LIM_REG_CLASSES)
1190
1191 #define INTEGER_CLASS_P(CLASS) \
1192   reg_class_subset_p ((CLASS), GENERAL_REGS)
1193 #define FLOAT_CLASS_P(CLASS) \
1194   reg_class_subset_p ((CLASS), FLOAT_REGS)
1195 #define SSE_CLASS_P(CLASS) \
1196   reg_class_subset_p ((CLASS), SSE_REGS)
1197 #define MMX_CLASS_P(CLASS) \
1198   ((CLASS) == MMX_REGS)
1199 #define MAYBE_INTEGER_CLASS_P(CLASS) \
1200   reg_classes_intersect_p ((CLASS), GENERAL_REGS)
1201 #define MAYBE_FLOAT_CLASS_P(CLASS) \
1202   reg_classes_intersect_p ((CLASS), FLOAT_REGS)
1203 #define MAYBE_SSE_CLASS_P(CLASS) \
1204   reg_classes_intersect_p (SSE_REGS, (CLASS))
1205 #define MAYBE_MMX_CLASS_P(CLASS) \
1206   reg_classes_intersect_p (MMX_REGS, (CLASS))
1207
1208 #define Q_CLASS_P(CLASS) \
1209   reg_class_subset_p ((CLASS), Q_REGS)
1210
1211 /* Give names of register classes as strings for dump file.  */
1212
1213 #define REG_CLASS_NAMES \
1214 {  "NO_REGS",                           \
1215    "AREG", "DREG", "CREG", "BREG",      \
1216    "SIREG", "DIREG",                    \
1217    "AD_REGS",                           \
1218    "CLOBBERED_REGS",                    \
1219    "Q_REGS", "NON_Q_REGS",              \
1220    "INDEX_REGS",                        \
1221    "LEGACY_REGS",                       \
1222    "GENERAL_REGS",                      \
1223    "FP_TOP_REG", "FP_SECOND_REG",       \
1224    "FLOAT_REGS",                        \
1225    "SSE_FIRST_REG",                     \
1226    "SSE_REGS",                          \
1227    "MMX_REGS",                          \
1228    "FP_TOP_SSE_REGS",                   \
1229    "FP_SECOND_SSE_REGS",                \
1230    "FLOAT_SSE_REGS",                    \
1231    "FLOAT_INT_REGS",                    \
1232    "INT_SSE_REGS",                      \
1233    "FLOAT_INT_SSE_REGS",                \
1234    "ALL_REGS" }
1235
1236 /* Define which registers fit in which classes.  This is an initializer
1237    for a vector of HARD_REG_SET of length N_REG_CLASSES.
1238
1239    Note that the default setting of CLOBBERED_REGS is for 32-bit; this
1240    is adjusted by TARGET_CONDITIONAL_REGISTER_USAGE for the 64-bit ABI
1241    in effect.  */
1242
1243 #define REG_CLASS_CONTENTS                                              \
1244 {     { 0x00,     0x0 },                                                \
1245       { 0x01,     0x0 }, { 0x02, 0x0 }, /* AREG, DREG */                \
1246       { 0x04,     0x0 }, { 0x08, 0x0 }, /* CREG, BREG */                \
1247       { 0x10,     0x0 }, { 0x20, 0x0 }, /* SIREG, DIREG */              \
1248       { 0x03,     0x0 },                /* AD_REGS */                   \
1249       { 0x07,     0x0 },                /* CLOBBERED_REGS */            \
1250       { 0x0f,     0x0 },                /* Q_REGS */                    \
1251   { 0x1100f0,  0x1fe0 },                /* NON_Q_REGS */                \
1252       { 0x7f,  0x1fe0 },                /* INDEX_REGS */                \
1253   { 0x1100ff,     0x0 },                /* LEGACY_REGS */               \
1254   { 0x1100ff,  0x1fe0 },                /* GENERAL_REGS */              \
1255      { 0x100,     0x0 }, { 0x0200, 0x0 },/* FP_TOP_REG, FP_SECOND_REG */\
1256     { 0xff00,     0x0 },                /* FLOAT_REGS */                \
1257   { 0x200000,     0x0 },                /* SSE_FIRST_REG */             \
1258 { 0x1fe00000,0x1fe000 },                /* SSE_REGS */                  \
1259 { 0xe0000000,    0x1f },                /* MMX_REGS */                  \
1260 { 0x1fe00100,0x1fe000 },                /* FP_TOP_SSE_REG */            \
1261 { 0x1fe00200,0x1fe000 },                /* FP_SECOND_SSE_REG */         \
1262 { 0x1fe0ff00,0x1fe000 },                /* FLOAT_SSE_REGS */            \
1263    { 0x1ffff,  0x1fe0 },                /* FLOAT_INT_REGS */            \
1264 { 0x1fe100ff,0x1fffe0 },                /* INT_SSE_REGS */              \
1265 { 0x1fe1ffff,0x1fffe0 },                /* FLOAT_INT_SSE_REGS */        \
1266 { 0xffffffff,0x1fffff }                                                 \
1267 }
1268
1269 /* The same information, inverted:
1270    Return the class number of the smallest class containing
1271    reg number REGNO.  This could be a conditional expression
1272    or could index an array.  */
1273
1274 #define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO])
1275
1276 /* When this hook returns true for MODE, the compiler allows
1277    registers explicitly used in the rtl to be used as spill registers
1278    but prevents the compiler from extending the lifetime of these
1279    registers.  */
1280 #define TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P hook_bool_mode_true
1281
1282 #define QI_REG_P(X) (REG_P (X) && REGNO (X) <= BX_REG)
1283
1284 #define GENERAL_REGNO_P(N) \
1285   ((N) <= STACK_POINTER_REGNUM || REX_INT_REGNO_P (N))
1286
1287 #define GENERAL_REG_P(X) \
1288   (REG_P (X) && GENERAL_REGNO_P (REGNO (X)))
1289
1290 #define ANY_QI_REG_P(X) (TARGET_64BIT ? GENERAL_REG_P(X) : QI_REG_P (X))
1291
1292 #define REX_INT_REGNO_P(N) \
1293   IN_RANGE ((N), FIRST_REX_INT_REG, LAST_REX_INT_REG)
1294 #define REX_INT_REG_P(X) (REG_P (X) && REX_INT_REGNO_P (REGNO (X)))
1295
1296 #define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X)))
1297 #define FP_REGNO_P(N) IN_RANGE ((N), FIRST_STACK_REG, LAST_STACK_REG)
1298 #define ANY_FP_REG_P(X) (REG_P (X) && ANY_FP_REGNO_P (REGNO (X)))
1299 #define ANY_FP_REGNO_P(N) (FP_REGNO_P (N) || SSE_REGNO_P (N))
1300
1301 #define X87_FLOAT_MODE_P(MODE)  \
1302   (TARGET_80387 && ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode))
1303
1304 #define SSE_REG_P(N) (REG_P (N) && SSE_REGNO_P (REGNO (N)))
1305 #define SSE_REGNO_P(N)                                          \
1306   (IN_RANGE ((N), FIRST_SSE_REG, LAST_SSE_REG)                  \
1307    || REX_SSE_REGNO_P (N))
1308
1309 #define REX_SSE_REGNO_P(N) \
1310   IN_RANGE ((N), FIRST_REX_SSE_REG, LAST_REX_SSE_REG)
1311
1312 #define SSE_REGNO(N) \
1313   ((N) < 8 ? FIRST_SSE_REG + (N) : FIRST_REX_SSE_REG + (N) - 8)
1314
1315 #define SSE_FLOAT_MODE_P(MODE) \
1316   ((TARGET_SSE && (MODE) == SFmode) || (TARGET_SSE2 && (MODE) == DFmode))
1317
1318 #define FMA4_VEC_FLOAT_MODE_P(MODE) \
1319   (TARGET_FMA4 && ((MODE) == V4SFmode || (MODE) == V2DFmode \
1320                   || (MODE) == V8SFmode || (MODE) == V4DFmode))
1321
1322 #define MMX_REG_P(XOP) (REG_P (XOP) && MMX_REGNO_P (REGNO (XOP)))
1323 #define MMX_REGNO_P(N) IN_RANGE ((N), FIRST_MMX_REG, LAST_MMX_REG)
1324
1325 #define STACK_REG_P(XOP) (REG_P (XOP) && STACK_REGNO_P (REGNO (XOP)))
1326 #define STACK_REGNO_P(N) IN_RANGE ((N), FIRST_STACK_REG, LAST_STACK_REG)
1327
1328 #define STACK_TOP_P(XOP) (REG_P (XOP) && REGNO (XOP) == FIRST_STACK_REG)
1329
1330 #define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X)))
1331 #define CC_REGNO_P(X) ((X) == FLAGS_REG || (X) == FPSR_REG)
1332
1333 /* The class value for index registers, and the one for base regs.  */
1334
1335 #define INDEX_REG_CLASS INDEX_REGS
1336 #define BASE_REG_CLASS GENERAL_REGS
1337
1338 /* Place additional restrictions on the register class to use when it
1339    is necessary to be able to hold a value of mode MODE in a reload
1340    register for which class CLASS would ordinarily be used.  */
1341
1342 #define LIMIT_RELOAD_CLASS(MODE, CLASS)                         \
1343   ((MODE) == QImode && !TARGET_64BIT                            \
1344    && ((CLASS) == ALL_REGS || (CLASS) == GENERAL_REGS           \
1345        || (CLASS) == LEGACY_REGS || (CLASS) == INDEX_REGS)      \
1346    ? Q_REGS : (CLASS))
1347
1348 /* If we are copying between general and FP registers, we need a memory
1349    location. The same is true for SSE and MMX registers.  */
1350 #define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
1351   ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1)
1352
1353 /* Get_secondary_mem widens integral modes to BITS_PER_WORD.
1354    There is no need to emit full 64 bit move on 64 bit targets
1355    for integral modes that can be moved using 32 bit move.  */
1356 #define SECONDARY_MEMORY_NEEDED_MODE(MODE)                      \
1357   (GET_MODE_BITSIZE (MODE) < 32 && INTEGRAL_MODE_P (MODE)       \
1358    ? mode_for_size (32, GET_MODE_CLASS (MODE), 0)               \
1359    : MODE)
1360
1361 /* Return a class of registers that cannot change FROM mode to TO mode.  */
1362
1363 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
1364   ix86_cannot_change_mode_class (FROM, TO, CLASS)
1365 \f
1366 /* Stack layout; function entry, exit and calling.  */
1367
1368 /* Define this if pushing a word on the stack
1369    makes the stack pointer a smaller address.  */
1370 #define STACK_GROWS_DOWNWARD
1371
1372 /* Define this to nonzero if the nominal address of the stack frame
1373    is at the high-address end of the local variables;
1374    that is, each additional local variable allocated
1375    goes at a more negative offset in the frame.  */
1376 #define FRAME_GROWS_DOWNWARD 1
1377
1378 /* Offset within stack frame to start allocating local variables at.
1379    If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
1380    first local allocated.  Otherwise, it is the offset to the BEGINNING
1381    of the first local allocated.  */
1382 #define STARTING_FRAME_OFFSET 0
1383
1384 /* If we generate an insn to push BYTES bytes, this says how many the stack
1385    pointer really advances by.  On 386, we have pushw instruction that
1386    decrements by exactly 2 no matter what the position was, there is no pushb.
1387
1388    But as CIE data alignment factor on this arch is -4 for 32bit targets
1389    and -8 for 64bit targets, we need to make sure all stack pointer adjustments
1390    are in multiple of 4 for 32bit targets and 8 for 64bit targets.  */
1391
1392 #define PUSH_ROUNDING(BYTES) \
1393   (((BYTES) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD)
1394
1395 /* If defined, the maximum amount of space required for outgoing arguments
1396    will be computed and placed into the variable `crtl->outgoing_args_size'.
1397    No space will be pushed onto the stack for each call; instead, the
1398    function prologue should increase the stack frame size by this amount.  
1399    
1400    64-bit MS ABI seem to require 16 byte alignment everywhere except for
1401    function prologue and apilogue.  This is not possible without
1402    ACCUMULATE_OUTGOING_ARGS.  */
1403
1404 #define ACCUMULATE_OUTGOING_ARGS \
1405   (TARGET_ACCUMULATE_OUTGOING_ARGS || TARGET_64BIT_MS_ABI)
1406
1407 /* If defined, a C expression whose value is nonzero when we want to use PUSH
1408    instructions to pass outgoing arguments.  */
1409
1410 #define PUSH_ARGS (TARGET_PUSH_ARGS && !ACCUMULATE_OUTGOING_ARGS)
1411
1412 /* We want the stack and args grow in opposite directions, even if
1413    PUSH_ARGS is 0.  */
1414 #define PUSH_ARGS_REVERSED 1
1415
1416 /* Offset of first parameter from the argument pointer register value.  */
1417 #define FIRST_PARM_OFFSET(FNDECL) 0
1418
1419 /* Define this macro if functions should assume that stack space has been
1420    allocated for arguments even when their values are passed in registers.
1421
1422    The value of this macro is the size, in bytes, of the area reserved for
1423    arguments passed in registers for the function represented by FNDECL.
1424
1425    This space can be allocated by the caller, or be a part of the
1426    machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
1427    which.  */
1428 #define REG_PARM_STACK_SPACE(FNDECL) ix86_reg_parm_stack_space (FNDECL)
1429
1430 #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) \
1431   (TARGET_64BIT && ix86_function_type_abi (FNTYPE) == MS_ABI)
1432
1433 /* Define how to find the value returned by a library function
1434    assuming the value has mode MODE.  */
1435
1436 #define LIBCALL_VALUE(MODE) ix86_libcall_value (MODE)
1437
1438 /* Define the size of the result block used for communication between
1439    untyped_call and untyped_return.  The block contains a DImode value
1440    followed by the block used by fnsave and frstor.  */
1441
1442 #define APPLY_RESULT_SIZE (8+108)
1443
1444 /* 1 if N is a possible register number for function argument passing.  */
1445 #define FUNCTION_ARG_REGNO_P(N) ix86_function_arg_regno_p (N)
1446
1447 /* Define a data type for recording info about an argument list
1448    during the scan of that argument list.  This data type should
1449    hold all necessary information about the function itself
1450    and about the args processed so far, enough to enable macros
1451    such as FUNCTION_ARG to determine where the next arg should go.  */
1452
1453 typedef struct ix86_args {
1454   int words;                    /* # words passed so far */
1455   int nregs;                    /* # registers available for passing */
1456   int regno;                    /* next available register number */
1457   int fastcall;                 /* fastcall or thiscall calling convention
1458                                    is used */
1459   int sse_words;                /* # sse words passed so far */
1460   int sse_nregs;                /* # sse registers available for passing */
1461   int warn_avx;                 /* True when we want to warn about AVX ABI.  */
1462   int warn_sse;                 /* True when we want to warn about SSE ABI.  */
1463   int warn_mmx;                 /* True when we want to warn about MMX ABI.  */
1464   int sse_regno;                /* next available sse register number */
1465   int mmx_words;                /* # mmx words passed so far */
1466   int mmx_nregs;                /* # mmx registers available for passing */
1467   int mmx_regno;                /* next available mmx register number */
1468   int maybe_vaarg;              /* true for calls to possibly vardic fncts.  */
1469   int caller;                   /* true if it is caller.  */
1470   int float_in_sse;             /* Set to 1 or 2 for 32bit targets if
1471                                    SFmode/DFmode arguments should be passed
1472                                    in SSE registers.  Otherwise 0.  */
1473   enum calling_abi call_abi;    /* Set to SYSV_ABI for sysv abi. Otherwise
1474                                    MS_ABI for ms abi.  */
1475 } CUMULATIVE_ARGS;
1476
1477 /* Initialize a variable CUM of type CUMULATIVE_ARGS
1478    for a call to a function whose data type is FNTYPE.
1479    For a library call, FNTYPE is 0.  */
1480
1481 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
1482   init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL), \
1483                         (N_NAMED_ARGS) != -1)
1484
1485 /* Output assembler code to FILE to increment profiler label # LABELNO
1486    for profiling a function entry.  */
1487
1488 #define FUNCTION_PROFILER(FILE, LABELNO) x86_function_profiler (FILE, LABELNO)
1489
1490 #define MCOUNT_NAME "_mcount"
1491
1492 #define MCOUNT_NAME_BEFORE_PROLOGUE "__fentry__"
1493
1494 #define PROFILE_COUNT_REGISTER "edx"
1495
1496 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
1497    the stack pointer does not matter.  The value is tested only in
1498    functions that have frame pointers.
1499    No definition is equivalent to always zero.  */
1500 /* Note on the 386 it might be more efficient not to define this since
1501    we have to restore it ourselves from the frame pointer, in order to
1502    use pop */
1503
1504 #define EXIT_IGNORE_STACK 1
1505
1506 /* Output assembler code for a block containing the constant parts
1507    of a trampoline, leaving space for the variable parts.  */
1508
1509 /* On the 386, the trampoline contains two instructions:
1510      mov #STATIC,ecx
1511      jmp FUNCTION
1512    The trampoline is generated entirely at runtime.  The operand of JMP
1513    is the address of FUNCTION relative to the instruction following the
1514    JMP (which is 5 bytes long).  */
1515
1516 /* Length in units of the trampoline for entering a nested function.  */
1517
1518 #define TRAMPOLINE_SIZE (TARGET_64BIT ? 24 : 10)
1519 \f
1520 /* Definitions for register eliminations.
1521
1522    This is an array of structures.  Each structure initializes one pair
1523    of eliminable registers.  The "from" register number is given first,
1524    followed by "to".  Eliminations of the same "from" register are listed
1525    in order of preference.
1526
1527    There are two registers that can always be eliminated on the i386.
1528    The frame pointer and the arg pointer can be replaced by either the
1529    hard frame pointer or to the stack pointer, depending upon the
1530    circumstances.  The hard frame pointer is not used before reload and
1531    so it is not eligible for elimination.  */
1532
1533 #define ELIMINABLE_REGS                                 \
1534 {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM},           \
1535  { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM},      \
1536  { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},         \
1537  { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}    \
1538
1539 /* Define the offset between two registers, one to be eliminated, and the other
1540    its replacement, at the start of a routine.  */
1541
1542 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
1543   ((OFFSET) = ix86_initial_elimination_offset ((FROM), (TO)))
1544 \f
1545 /* Addressing modes, and classification of registers for them.  */
1546
1547 /* Macros to check register numbers against specific register classes.  */
1548
1549 /* These assume that REGNO is a hard or pseudo reg number.
1550    They give nonzero only if REGNO is a hard reg of the suitable class
1551    or a pseudo reg currently allocated to a suitable hard reg.
1552    Since they use reg_renumber, they are safe only once reg_renumber
1553    has been allocated, which happens in local-alloc.c.  */
1554
1555 #define REGNO_OK_FOR_INDEX_P(REGNO)                                     \
1556   ((REGNO) < STACK_POINTER_REGNUM                                       \
1557    || REX_INT_REGNO_P (REGNO)                                           \
1558    || (unsigned) reg_renumber[(REGNO)] < STACK_POINTER_REGNUM           \
1559    || REX_INT_REGNO_P ((unsigned) reg_renumber[(REGNO)]))
1560
1561 #define REGNO_OK_FOR_BASE_P(REGNO)                                      \
1562   (GENERAL_REGNO_P (REGNO)                                              \
1563    || (REGNO) == ARG_POINTER_REGNUM                                     \
1564    || (REGNO) == FRAME_POINTER_REGNUM                                   \
1565    || GENERAL_REGNO_P ((unsigned) reg_renumber[(REGNO)]))
1566
1567 /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1568    and check its validity for a certain class.
1569    We have two alternate definitions for each of them.
1570    The usual definition accepts all pseudo regs; the other rejects
1571    them unless they have been allocated suitable hard regs.
1572    The symbol REG_OK_STRICT causes the latter definition to be used.
1573
1574    Most source files want to accept pseudo regs in the hope that
1575    they will get allocated to the class that the insn wants them to be in.
1576    Source files for reload pass need to be strict.
1577    After reload, it makes no difference, since pseudo regs have
1578    been eliminated by then.  */
1579
1580
1581 /* Non strict versions, pseudos are ok.  */
1582 #define REG_OK_FOR_INDEX_NONSTRICT_P(X)                                 \
1583   (REGNO (X) < STACK_POINTER_REGNUM                                     \
1584    || REX_INT_REGNO_P (REGNO (X))                                       \
1585    || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1586
1587 #define REG_OK_FOR_BASE_NONSTRICT_P(X)                                  \
1588   (GENERAL_REGNO_P (REGNO (X))                                          \
1589    || REGNO (X) == ARG_POINTER_REGNUM                                   \
1590    || REGNO (X) == FRAME_POINTER_REGNUM                                 \
1591    || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1592
1593 /* Strict versions, hard registers only */
1594 #define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1595 #define REG_OK_FOR_BASE_STRICT_P(X)  REGNO_OK_FOR_BASE_P (REGNO (X))
1596
1597 #ifndef REG_OK_STRICT
1598 #define REG_OK_FOR_INDEX_P(X)  REG_OK_FOR_INDEX_NONSTRICT_P (X)
1599 #define REG_OK_FOR_BASE_P(X)   REG_OK_FOR_BASE_NONSTRICT_P (X)
1600
1601 #else
1602 #define REG_OK_FOR_INDEX_P(X)  REG_OK_FOR_INDEX_STRICT_P (X)
1603 #define REG_OK_FOR_BASE_P(X)   REG_OK_FOR_BASE_STRICT_P (X)
1604 #endif
1605
1606 /* TARGET_LEGITIMATE_ADDRESS_P recognizes an RTL expression
1607    that is a valid memory address for an instruction.
1608    The MODE argument is the machine mode for the MEM expression
1609    that wants to use this address.
1610
1611    The other macros defined here are used only in TARGET_LEGITIMATE_ADDRESS_P,
1612    except for CONSTANT_ADDRESS_P which is usually machine-independent.
1613
1614    See legitimize_pic_address in i386.c for details as to what
1615    constitutes a legitimate address when -fpic is used.  */
1616
1617 #define MAX_REGS_PER_ADDRESS 2
1618
1619 #define CONSTANT_ADDRESS_P(X)  constant_address_p (X)
1620
1621 /* If defined, a C expression to determine the base term of address X.
1622    This macro is used in only one place: `find_base_term' in alias.c.
1623
1624    It is always safe for this macro to not be defined.  It exists so
1625    that alias analysis can understand machine-dependent addresses.
1626
1627    The typical use of this macro is to handle addresses containing
1628    a label_ref or symbol_ref within an UNSPEC.  */
1629
1630 #define FIND_BASE_TERM(X) ix86_find_base_term (X)
1631
1632 /* Nonzero if the constant value X is a legitimate general operand
1633    when generating PIC code.  It is given that flag_pic is on and
1634    that X satisfies CONSTANT_P or is a CONST_DOUBLE.  */
1635
1636 #define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
1637
1638 #define SYMBOLIC_CONST(X)       \
1639   (GET_CODE (X) == SYMBOL_REF                                           \
1640    || GET_CODE (X) == LABEL_REF                                         \
1641    || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
1642 \f
1643 /* Max number of args passed in registers.  If this is more than 3, we will
1644    have problems with ebx (register #4), since it is a caller save register and
1645    is also used as the pic register in ELF.  So for now, don't allow more than
1646    3 registers to be passed in registers.  */
1647
1648 /* Abi specific values for REGPARM_MAX and SSE_REGPARM_MAX */
1649 #define X86_64_REGPARM_MAX 6
1650 #define X86_64_MS_REGPARM_MAX 4
1651
1652 #define X86_32_REGPARM_MAX 3
1653
1654 #define REGPARM_MAX                                                     \
1655   (TARGET_64BIT                                                         \
1656    ? (TARGET_64BIT_MS_ABI                                               \
1657       ? X86_64_MS_REGPARM_MAX                                           \
1658       : X86_64_REGPARM_MAX)                                             \
1659    : X86_32_REGPARM_MAX)
1660
1661 #define X86_64_SSE_REGPARM_MAX 8
1662 #define X86_64_MS_SSE_REGPARM_MAX 4
1663
1664 #define X86_32_SSE_REGPARM_MAX (TARGET_SSE ? (TARGET_MACHO ? 4 : 3) : 0)
1665
1666 #define SSE_REGPARM_MAX                                                 \
1667   (TARGET_64BIT                                                         \
1668    ? (TARGET_64BIT_MS_ABI                                               \
1669       ? X86_64_MS_SSE_REGPARM_MAX                                       \
1670       : X86_64_SSE_REGPARM_MAX)                                         \
1671    : X86_32_SSE_REGPARM_MAX)
1672
1673 #define MMX_REGPARM_MAX (TARGET_64BIT ? 0 : (TARGET_MMX ? 3 : 0))
1674 \f
1675 /* Specify the machine mode that this machine uses
1676    for the index in the tablejump instruction.  */
1677 #define CASE_VECTOR_MODE \
1678  (!TARGET_LP64 || (flag_pic && ix86_cmodel != CM_LARGE_PIC) ? SImode : DImode)
1679
1680 /* Define this as 1 if `char' should by default be signed; else as 0.  */
1681 #define DEFAULT_SIGNED_CHAR 1
1682
1683 /* Max number of bytes we can move from memory to memory
1684    in one reasonably fast instruction.  */
1685 #define MOVE_MAX 16
1686
1687 /* MOVE_MAX_PIECES is the number of bytes at a time which we can
1688    move efficiently, as opposed to  MOVE_MAX which is the maximum
1689    number of bytes we can move with a single instruction.  */
1690 #define MOVE_MAX_PIECES UNITS_PER_WORD
1691
1692 /* If a memory-to-memory move would take MOVE_RATIO or more simple
1693    move-instruction pairs, we will do a movmem or libcall instead.
1694    Increasing the value will always make code faster, but eventually
1695    incurs high cost in increased code size.
1696
1697    If you don't define this, a reasonable default is used.  */
1698
1699 #define MOVE_RATIO(speed) ((speed) ? ix86_cost->move_ratio : 3)
1700
1701 /* If a clear memory operation would take CLEAR_RATIO or more simple
1702    move-instruction sequences, we will do a clrmem or libcall instead.  */
1703
1704 #define CLEAR_RATIO(speed) ((speed) ? MIN (6, ix86_cost->move_ratio) : 2)
1705
1706 /* Define if shifts truncate the shift count which implies one can
1707    omit a sign-extension or zero-extension of a shift count.
1708
1709    On i386, shifts do truncate the count.  But bit test instructions
1710    take the modulo of the bit offset operand.  */
1711
1712 /* #define SHIFT_COUNT_TRUNCATED */
1713
1714 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1715    is done just by pretending it is already truncated.  */
1716 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1717
1718 /* A macro to update M and UNSIGNEDP when an object whose type is
1719    TYPE and which has the specified mode and signedness is to be
1720    stored in a register.  This macro is only called when TYPE is a
1721    scalar type.
1722
1723    On i386 it is sometimes useful to promote HImode and QImode
1724    quantities to SImode.  The choice depends on target type.  */
1725
1726 #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE)             \
1727 do {                                                    \
1728   if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS)      \
1729       || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS))  \
1730     (MODE) = SImode;                                    \
1731 } while (0)
1732
1733 /* Specify the machine mode that pointers have.
1734    After generation of rtl, the compiler makes no further distinction
1735    between pointers and any other objects of this machine mode.  */
1736 #define Pmode (TARGET_64BIT ? DImode : SImode)
1737
1738 /* A C expression whose value is zero if pointers that need to be extended
1739    from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and
1740    greater then zero if they are zero-extended and less then zero if the
1741    ptr_extend instruction should be used.  */
1742
1743 #define POINTERS_EXTEND_UNSIGNED 1
1744
1745 /* A function address in a call instruction
1746    is a byte address (for indexing purposes)
1747    so give the MEM rtx a byte's mode.  */
1748 #define FUNCTION_MODE QImode
1749 \f
1750
1751 /* A C expression for the cost of a branch instruction.  A value of 1
1752    is the default; other values are interpreted relative to that.  */
1753
1754 #define BRANCH_COST(speed_p, predictable_p) \
1755   (!(speed_p) ? 2 : (predictable_p) ? 0 : ix86_branch_cost)
1756
1757 /* Define this macro as a C expression which is nonzero if accessing
1758    less than a word of memory (i.e. a `char' or a `short') is no
1759    faster than accessing a word of memory, i.e., if such access
1760    require more than one instruction or if there is no difference in
1761    cost between byte and (aligned) word loads.
1762
1763    When this macro is not defined, the compiler will access a field by
1764    finding the smallest containing object; when it is defined, a
1765    fullword load will be used if alignment permits.  Unless bytes
1766    accesses are faster than word accesses, using word accesses is
1767    preferable since it may eliminate subsequent memory access if
1768    subsequent accesses occur to other fields in the same word of the
1769    structure, but to different bytes.  */
1770
1771 #define SLOW_BYTE_ACCESS 0
1772
1773 /* Nonzero if access to memory by shorts is slow and undesirable.  */
1774 #define SLOW_SHORT_ACCESS 0
1775
1776 /* Define this macro to be the value 1 if unaligned accesses have a
1777    cost many times greater than aligned accesses, for example if they
1778    are emulated in a trap handler.
1779
1780    When this macro is nonzero, the compiler will act as if
1781    `STRICT_ALIGNMENT' were nonzero when generating code for block
1782    moves.  This can cause significantly more instructions to be
1783    produced.  Therefore, do not set this macro nonzero if unaligned
1784    accesses only add a cycle or two to the time for a memory access.
1785
1786    If the value of this macro is always zero, it need not be defined.  */
1787
1788 /* #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 0 */
1789
1790 /* Define this macro if it is as good or better to call a constant
1791    function address than to call an address kept in a register.
1792
1793    Desirable on the 386 because a CALL with a constant address is
1794    faster than one with a register address.  */
1795
1796 #define NO_FUNCTION_CSE
1797 \f
1798 /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
1799    return the mode to be used for the comparison.
1800
1801    For floating-point equality comparisons, CCFPEQmode should be used.
1802    VOIDmode should be used in all other cases.
1803
1804    For integer comparisons against zero, reduce to CCNOmode or CCZmode if
1805    possible, to allow for more combinations.  */
1806
1807 #define SELECT_CC_MODE(OP, X, Y) ix86_cc_mode ((OP), (X), (Y))
1808
1809 /* Return nonzero if MODE implies a floating point inequality can be
1810    reversed.  */
1811
1812 #define REVERSIBLE_CC_MODE(MODE) 1
1813
1814 /* A C expression whose value is reversed condition code of the CODE for
1815    comparison done in CC_MODE mode.  */
1816 #define REVERSE_CONDITION(CODE, MODE) ix86_reverse_condition ((CODE), (MODE))
1817
1818 \f
1819 /* Control the assembler format that we output, to the extent
1820    this does not vary between assemblers.  */
1821
1822 /* How to refer to registers in assembler output.
1823    This sequence is indexed by compiler's hard-register-number (see above).  */
1824
1825 /* In order to refer to the first 8 regs as 32-bit regs, prefix an "e".
1826    For non floating point regs, the following are the HImode names.
1827
1828    For float regs, the stack top is sometimes referred to as "%st(0)"
1829    instead of just "%st".  TARGET_PRINT_OPERAND handles this with the
1830    "y" code.  */
1831
1832 #define HI_REGISTER_NAMES                                               \
1833 {"ax","dx","cx","bx","si","di","bp","sp",                               \
1834  "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)",          \
1835  "argp", "flags", "fpsr", "fpcr", "frame",                              \
1836  "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7",               \
1837  "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7",                \
1838  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",                  \
1839  "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"}
1840
1841 #define REGISTER_NAMES HI_REGISTER_NAMES
1842
1843 /* Table of additional register names to use in user input.  */
1844
1845 #define ADDITIONAL_REGISTER_NAMES \
1846 { { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 },       \
1847   { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 },       \
1848   { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 },       \
1849   { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 },       \
1850   { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 },           \
1851   { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 } }
1852
1853 /* Note we are omitting these since currently I don't know how
1854 to get gcc to use these, since they want the same but different
1855 number as al, and ax.
1856 */
1857
1858 #define QI_REGISTER_NAMES \
1859 {"al", "dl", "cl", "bl", "sil", "dil", "bpl", "spl",}
1860
1861 /* These parallel the array above, and can be used to access bits 8:15
1862    of regs 0 through 3.  */
1863
1864 #define QI_HIGH_REGISTER_NAMES \
1865 {"ah", "dh", "ch", "bh", }
1866
1867 /* How to renumber registers for dbx and gdb.  */
1868
1869 #define DBX_REGISTER_NUMBER(N) \
1870   (TARGET_64BIT ? dbx64_register_map[(N)] : dbx_register_map[(N)])
1871
1872 extern int const dbx_register_map[FIRST_PSEUDO_REGISTER];
1873 extern int const dbx64_register_map[FIRST_PSEUDO_REGISTER];
1874 extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
1875
1876 /* Before the prologue, RA is at 0(%esp).  */
1877 #define INCOMING_RETURN_ADDR_RTX \
1878   gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM))
1879
1880 /* After the prologue, RA is at -4(AP) in the current frame.  */
1881 #define RETURN_ADDR_RTX(COUNT, FRAME)                                      \
1882   ((COUNT) == 0                                                            \
1883    ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -UNITS_PER_WORD)) \
1884    : gen_rtx_MEM (Pmode, plus_constant (FRAME, UNITS_PER_WORD)))
1885
1886 /* PC is dbx register 8; let's use that column for RA.  */
1887 #define DWARF_FRAME_RETURN_COLUMN       (TARGET_64BIT ? 16 : 8)
1888
1889 /* Before the prologue, the top of the frame is at 4(%esp).  */
1890 #define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD
1891
1892 /* Describe how we implement __builtin_eh_return.  */
1893 #define EH_RETURN_DATA_REGNO(N) ((N) <= DX_REG ? (N) : INVALID_REGNUM)
1894 #define EH_RETURN_STACKADJ_RTX  gen_rtx_REG (Pmode, CX_REG)
1895
1896
1897 /* Select a format to encode pointers in exception handling data.  CODE
1898    is 0 for data, 1 for code labels, 2 for function pointers.  GLOBAL is
1899    true if the symbol may be affected by dynamic relocations.
1900
1901    ??? All x86 object file formats are capable of representing this.
1902    After all, the relocation needed is the same as for the call insn.
1903    Whether or not a particular assembler allows us to enter such, I
1904    guess we'll have to see.  */
1905 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)                      \
1906   asm_preferred_eh_data_format ((CODE), (GLOBAL))
1907
1908 /* This is how to output an insn to push a register on the stack.
1909    It need not be very fast code.  */
1910
1911 #define ASM_OUTPUT_REG_PUSH(FILE, REGNO)  \
1912 do {                                                                    \
1913   if (TARGET_64BIT)                                                     \
1914     asm_fprintf ((FILE), "\tpush{q}\t%%r%s\n",                          \
1915                  reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0));  \
1916   else                                                                  \
1917     asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)]);     \
1918 } while (0)
1919
1920 /* This is how to output an insn to pop a register from the stack.
1921    It need not be very fast code.  */
1922
1923 #define ASM_OUTPUT_REG_POP(FILE, REGNO)  \
1924 do {                                                                    \
1925   if (TARGET_64BIT)                                                     \
1926     asm_fprintf ((FILE), "\tpop{q}\t%%r%s\n",                           \
1927                  reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0));  \
1928   else                                                                  \
1929     asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)]);      \
1930 } while (0)
1931
1932 /* This is how to output an element of a case-vector that is absolute.  */
1933
1934 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
1935   ix86_output_addr_vec_elt ((FILE), (VALUE))
1936
1937 /* This is how to output an element of a case-vector that is relative.  */
1938
1939 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
1940   ix86_output_addr_diff_elt ((FILE), (VALUE), (REL))
1941
1942 /* When we see %v, we will print the 'v' prefix if TARGET_AVX is true.  */
1943
1944 #define ASM_OUTPUT_AVX_PREFIX(STREAM, PTR)      \
1945 {                                               \
1946   if ((PTR)[0] == '%' && (PTR)[1] == 'v')       \
1947     (PTR) += TARGET_AVX ? 1 : 2;                \
1948 }
1949
1950 /* A C statement or statements which output an assembler instruction
1951    opcode to the stdio stream STREAM.  The macro-operand PTR is a
1952    variable of type `char *' which points to the opcode name in
1953    its "internal" form--the form that is written in the machine
1954    description.  */
1955
1956 #define ASM_OUTPUT_OPCODE(STREAM, PTR) \
1957   ASM_OUTPUT_AVX_PREFIX ((STREAM), (PTR))
1958
1959 /* A C statement to output to the stdio stream FILE an assembler
1960    command to pad the location counter to a multiple of 1<<LOG
1961    bytes if it is within MAX_SKIP bytes.  */
1962
1963 #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
1964 #undef  ASM_OUTPUT_MAX_SKIP_PAD
1965 #define ASM_OUTPUT_MAX_SKIP_PAD(FILE, LOG, MAX_SKIP)                    \
1966   if ((LOG) != 0)                                                       \
1967     {                                                                   \
1968       if ((MAX_SKIP) == 0)                                              \
1969         fprintf ((FILE), "\t.p2align %d\n", (LOG));                     \
1970       else                                                              \
1971         fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP));     \
1972     }
1973 #endif
1974
1975 /* Write the extra assembler code needed to declare a function
1976    properly.  */
1977
1978 #undef ASM_OUTPUT_FUNCTION_LABEL
1979 #define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
1980   ix86_asm_output_function_label (FILE, NAME, DECL)
1981
1982 /* Under some conditions we need jump tables in the text section,
1983    because the assembler cannot handle label differences between
1984    sections.  This is the case for x86_64 on Mach-O for example.  */
1985
1986 #define JUMP_TABLES_IN_TEXT_SECTION \
1987   (flag_pic && ((TARGET_MACHO && TARGET_64BIT) \
1988    || (!TARGET_64BIT && !HAVE_AS_GOTOFF_IN_DATA)))
1989
1990 /* Switch to init or fini section via SECTION_OP, emit a call to FUNC,
1991    and switch back.  For x86 we do this only to save a few bytes that
1992    would otherwise be unused in the text section.  */
1993 #define CRT_MKSTR2(VAL) #VAL
1994 #define CRT_MKSTR(x) CRT_MKSTR2(x)
1995
1996 #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)              \
1997    asm (SECTION_OP "\n\t"                                       \
1998         "call " CRT_MKSTR(__USER_LABEL_PREFIX__) #FUNC "\n"     \
1999         TEXT_SECTION_ASM_OP);
2000 \f
2001 /* Which processor to tune code generation for.  */
2002
2003 enum processor_type
2004 {
2005   PROCESSOR_I386 = 0,                   /* 80386 */
2006   PROCESSOR_I486,                       /* 80486DX, 80486SX, 80486DX[24] */
2007   PROCESSOR_PENTIUM,
2008   PROCESSOR_PENTIUMPRO,
2009   PROCESSOR_GEODE,
2010   PROCESSOR_K6,
2011   PROCESSOR_ATHLON,
2012   PROCESSOR_PENTIUM4,
2013   PROCESSOR_K8,
2014   PROCESSOR_NOCONA,
2015   PROCESSOR_CORE2_32,
2016   PROCESSOR_CORE2_64,
2017   PROCESSOR_COREI7_32,
2018   PROCESSOR_COREI7_64,
2019   PROCESSOR_GENERIC32,
2020   PROCESSOR_GENERIC64,
2021   PROCESSOR_AMDFAM10,
2022   PROCESSOR_BDVER1,
2023   PROCESSOR_BDVER2,
2024   PROCESSOR_BTVER1,
2025   PROCESSOR_ATOM,
2026   PROCESSOR_max
2027 };
2028
2029 extern enum processor_type ix86_tune;
2030 extern enum processor_type ix86_arch;
2031
2032 /* Size of the RED_ZONE area.  */
2033 #define RED_ZONE_SIZE 128
2034 /* Reserved area of the red zone for temporaries.  */
2035 #define RED_ZONE_RESERVE 8
2036
2037 extern unsigned int ix86_preferred_stack_boundary;
2038 extern unsigned int ix86_incoming_stack_boundary;
2039
2040 /* Smallest class containing REGNO.  */
2041 extern enum reg_class const regclass_map[FIRST_PSEUDO_REGISTER];
2042
2043 enum ix86_fpcmp_strategy {
2044   IX86_FPCMP_SAHF,
2045   IX86_FPCMP_COMI,
2046   IX86_FPCMP_ARITH
2047 };
2048 \f
2049 /* To properly truncate FP values into integers, we need to set i387 control
2050    word.  We can't emit proper mode switching code before reload, as spills
2051    generated by reload may truncate values incorrectly, but we still can avoid
2052    redundant computation of new control word by the mode switching pass.
2053    The fldcw instructions are still emitted redundantly, but this is probably
2054    not going to be noticeable problem, as most CPUs do have fast path for
2055    the sequence.
2056
2057    The machinery is to emit simple truncation instructions and split them
2058    before reload to instructions having USEs of two memory locations that
2059    are filled by this code to old and new control word.
2060
2061    Post-reload pass may be later used to eliminate the redundant fildcw if
2062    needed.  */
2063
2064 enum ix86_entity
2065 {
2066   I387_TRUNC = 0,
2067   I387_FLOOR,
2068   I387_CEIL,
2069   I387_MASK_PM,
2070   MAX_386_ENTITIES
2071 };
2072
2073 enum ix86_stack_slot
2074 {
2075   SLOT_VIRTUAL = 0,
2076   SLOT_TEMP,
2077   SLOT_CW_STORED,
2078   SLOT_CW_TRUNC,
2079   SLOT_CW_FLOOR,
2080   SLOT_CW_CEIL,
2081   SLOT_CW_MASK_PM,
2082   MAX_386_STACK_LOCALS
2083 };
2084
2085 /* Define this macro if the port needs extra instructions inserted
2086    for mode switching in an optimizing compilation.  */
2087
2088 #define OPTIMIZE_MODE_SWITCHING(ENTITY) \
2089    ix86_optimize_mode_switching[(ENTITY)]
2090
2091 /* If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
2092    initializer for an array of integers.  Each initializer element N
2093    refers to an entity that needs mode switching, and specifies the
2094    number of different modes that might need to be set for this
2095    entity.  The position of the initializer in the initializer -
2096    starting counting at zero - determines the integer that is used to
2097    refer to the mode-switched entity in question.  */
2098
2099 #define NUM_MODES_FOR_MODE_SWITCHING \
2100    { I387_CW_ANY, I387_CW_ANY, I387_CW_ANY, I387_CW_ANY }
2101
2102 /* ENTITY is an integer specifying a mode-switched entity.  If
2103    `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
2104    return an integer value not larger than the corresponding element
2105    in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
2106    must be switched into prior to the execution of INSN. */
2107
2108 #define MODE_NEEDED(ENTITY, I) ix86_mode_needed ((ENTITY), (I))
2109
2110 /* This macro specifies the order in which modes for ENTITY are
2111    processed.  0 is the highest priority.  */
2112
2113 #define MODE_PRIORITY_TO_MODE(ENTITY, N) (N)
2114
2115 /* Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE
2116    is the set of hard registers live at the point where the insn(s)
2117    are to be inserted.  */
2118
2119 #define EMIT_MODE_SET(ENTITY, MODE, HARD_REGS_LIVE)                     \
2120   ((MODE) != I387_CW_ANY && (MODE) != I387_CW_UNINITIALIZED             \
2121    ? emit_i387_cw_initialization (MODE), 0                              \
2122    : 0)
2123
2124 \f
2125 /* Avoid renaming of stack registers, as doing so in combination with
2126    scheduling just increases amount of live registers at time and in
2127    the turn amount of fxch instructions needed.
2128
2129    ??? Maybe Pentium chips benefits from renaming, someone can try....  */
2130
2131 #define HARD_REGNO_RENAME_OK(SRC, TARGET)  \
2132   (! IN_RANGE ((SRC), FIRST_STACK_REG, LAST_STACK_REG))
2133
2134 \f
2135 #define FASTCALL_PREFIX '@'
2136 \f
2137 /* Machine specific frame tracking during prologue/epilogue generation.  */
2138
2139 #ifndef USED_FOR_TARGET
2140 struct GTY(()) machine_frame_state
2141 {
2142   /* This pair tracks the currently active CFA as reg+offset.  When reg
2143      is drap_reg, we don't bother trying to record here the real CFA when
2144      it might really be a DW_CFA_def_cfa_expression.  */
2145   rtx cfa_reg;
2146   HOST_WIDE_INT cfa_offset;
2147
2148   /* The current offset (canonically from the CFA) of ESP and EBP.
2149      When stack frame re-alignment is active, these may not be relative
2150      to the CFA.  However, in all cases they are relative to the offsets
2151      of the saved registers stored in ix86_frame.  */
2152   HOST_WIDE_INT sp_offset;
2153   HOST_WIDE_INT fp_offset;
2154
2155   /* The size of the red-zone that may be assumed for the purposes of
2156      eliding register restore notes in the epilogue.  This may be zero
2157      if no red-zone is in effect, or may be reduced from the real
2158      red-zone value by a maximum runtime stack re-alignment value.  */
2159   int red_zone_offset;
2160
2161   /* Indicate whether each of ESP, EBP or DRAP currently holds a valid
2162      value within the frame.  If false then the offset above should be
2163      ignored.  Note that DRAP, if valid, *always* points to the CFA and
2164      thus has an offset of zero.  */
2165   BOOL_BITFIELD sp_valid : 1;
2166   BOOL_BITFIELD fp_valid : 1;
2167   BOOL_BITFIELD drap_valid : 1;
2168
2169   /* Indicate whether the local stack frame has been re-aligned.  When
2170      set, the SP/FP offsets above are relative to the aligned frame
2171      and not the CFA.  */
2172   BOOL_BITFIELD realigned : 1;
2173 };
2174
2175 /* Private to winnt.c.  */
2176 struct seh_frame_state;
2177
2178 struct GTY(()) machine_function {
2179   struct stack_local_entry *stack_locals;
2180   const char *some_ld_name;
2181   int varargs_gpr_size;
2182   int varargs_fpr_size;
2183   int optimize_mode_switching[MAX_386_ENTITIES];
2184
2185   /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE
2186      has been computed for.  */
2187   int use_fast_prologue_epilogue_nregs;
2188
2189   /* For -fsplit-stack support: A stack local which holds a pointer to
2190      the stack arguments for a function with a variable number of
2191      arguments.  This is set at the start of the function and is used
2192      to initialize the overflow_arg_area field of the va_list
2193      structure.  */
2194   rtx split_stack_varargs_pointer;
2195
2196   /* This value is used for amd64 targets and specifies the current abi
2197      to be used. MS_ABI means ms abi. Otherwise SYSV_ABI means sysv abi.  */
2198   ENUM_BITFIELD(calling_abi) call_abi : 8;
2199
2200   /* Nonzero if the function accesses a previous frame.  */
2201   BOOL_BITFIELD accesses_prev_frame : 1;
2202
2203   /* Nonzero if the function requires a CLD in the prologue.  */
2204   BOOL_BITFIELD needs_cld : 1;
2205
2206   /* Set by ix86_compute_frame_layout and used by prologue/epilogue
2207      expander to determine the style used.  */
2208   BOOL_BITFIELD use_fast_prologue_epilogue : 1;
2209
2210   /* If true, the current function needs the default PIC register, not
2211      an alternate register (on x86) and must not use the red zone (on
2212      x86_64), even if it's a leaf function.  We don't want the
2213      function to be regarded as non-leaf because TLS calls need not
2214      affect register allocation.  This flag is set when a TLS call
2215      instruction is expanded within a function, and never reset, even
2216      if all such instructions are optimized away.  Use the
2217      ix86_current_function_calls_tls_descriptor macro for a better
2218      approximation.  */
2219   BOOL_BITFIELD tls_descriptor_call_expanded_p : 1;
2220
2221   /* If true, the current function has a STATIC_CHAIN is placed on the
2222      stack below the return address.  */
2223   BOOL_BITFIELD static_chain_on_stack : 1;
2224
2225   /* Nonzero if caller passes 256bit AVX modes.  */
2226   BOOL_BITFIELD caller_pass_avx256_p : 1;
2227
2228   /* Nonzero if caller returns 256bit AVX modes.  */
2229   BOOL_BITFIELD caller_return_avx256_p : 1;
2230
2231   /* Nonzero if the current callee passes 256bit AVX modes.  */
2232   BOOL_BITFIELD callee_pass_avx256_p : 1;
2233
2234   /* Nonzero if the current callee returns 256bit AVX modes.  */
2235   BOOL_BITFIELD callee_return_avx256_p : 1;
2236
2237   /* Nonzero if rescan vzerouppers in the current function is needed.  */
2238   BOOL_BITFIELD rescan_vzeroupper_p : 1;
2239
2240   /* During prologue/epilogue generation, the current frame state.
2241      Otherwise, the frame state at the end of the prologue.  */
2242   struct machine_frame_state fs;
2243
2244   /* During SEH output, this is non-null.  */
2245   struct seh_frame_state * GTY((skip(""))) seh;
2246 };
2247 #endif
2248
2249 #define ix86_stack_locals (cfun->machine->stack_locals)
2250 #define ix86_varargs_gpr_size (cfun->machine->varargs_gpr_size)
2251 #define ix86_varargs_fpr_size (cfun->machine->varargs_fpr_size)
2252 #define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching)
2253 #define ix86_current_function_needs_cld (cfun->machine->needs_cld)
2254 #define ix86_tls_descriptor_calls_expanded_in_cfun \
2255   (cfun->machine->tls_descriptor_call_expanded_p)
2256 /* Since tls_descriptor_call_expanded is not cleared, even if all TLS
2257    calls are optimized away, we try to detect cases in which it was
2258    optimized away.  Since such instructions (use (reg REG_SP)), we can
2259    verify whether there's any such instruction live by testing that
2260    REG_SP is live.  */
2261 #define ix86_current_function_calls_tls_descriptor \
2262   (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG))
2263 #define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack)
2264
2265 /* Control behavior of x86_file_start.  */
2266 #define X86_FILE_START_VERSION_DIRECTIVE false
2267 #define X86_FILE_START_FLTUSED false
2268
2269 /* Flag to mark data that is in the large address area.  */
2270 #define SYMBOL_FLAG_FAR_ADDR            (SYMBOL_FLAG_MACH_DEP << 0)
2271 #define SYMBOL_REF_FAR_ADDR_P(X)        \
2272         ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_FAR_ADDR) != 0)
2273
2274 /* Flags to mark dllimport/dllexport.  Used by PE ports, but handy to
2275    have defined always, to avoid ifdefing.  */
2276 #define SYMBOL_FLAG_DLLIMPORT           (SYMBOL_FLAG_MACH_DEP << 1)
2277 #define SYMBOL_REF_DLLIMPORT_P(X) \
2278         ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_DLLIMPORT) != 0)
2279
2280 #define SYMBOL_FLAG_DLLEXPORT           (SYMBOL_FLAG_MACH_DEP << 2)
2281 #define SYMBOL_REF_DLLEXPORT_P(X) \
2282         ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_DLLEXPORT) != 0)
2283
2284 extern void debug_ready_dispatch (void);
2285 extern void debug_dispatch_window (int);
2286
2287 /* The value at zero is only defined for the BMI instructions
2288    LZCNT and TZCNT, not the BSR/BSF insns in the original isa.  */
2289 #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
2290         ((VALUE) = GET_MODE_BITSIZE (MODE), TARGET_BMI)
2291 #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
2292         ((VALUE) = GET_MODE_BITSIZE (MODE), TARGET_LZCNT)
2293
2294
2295 /* Flags returned by ix86_get_callcvt ().  */
2296 #define IX86_CALLCVT_CDECL      0x1
2297 #define IX86_CALLCVT_STDCALL    0x2
2298 #define IX86_CALLCVT_FASTCALL   0x4
2299 #define IX86_CALLCVT_THISCALL   0x8
2300 #define IX86_CALLCVT_REGPARM    0x10
2301 #define IX86_CALLCVT_SSEREGPARM 0x20
2302
2303 #define IX86_BASE_CALLCVT(FLAGS) \
2304         ((FLAGS) & (IX86_CALLCVT_CDECL | IX86_CALLCVT_STDCALL \
2305                     | IX86_CALLCVT_FASTCALL | IX86_CALLCVT_THISCALL))
2306
2307 /*
2308 Local variables:
2309 version-control: t
2310 End:
2311 */