]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/i386/i386.h
* config/ia64/ia64.c (gen_thread_pointer): Fix variable name.
[thirdparty/gcc.git] / gcc / config / i386 / i386.h
CommitLineData
e075ae69 1/* Definitions of target machine for GNU compiler for IA-32.
cf011243 2 Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
d9a5f180 3 2001, 2002 Free Software Foundation, Inc.
c98f8742
JVA
4
5This file is part of GNU CC.
6
7GNU CC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU CC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU CC; see the file COPYING. If not, write to
97aadbb9 19the Free Software Foundation, 59 Temple Place - Suite 330,
892a2d68 20Boston, MA 02111-1307, USA. */
c98f8742
JVA
21
22/* The purpose of this file is to define the characteristics of the i386,
b4ac57ab 23 independent of assembler syntax or operating system.
c98f8742
JVA
24
25 Three other files build on this one to describe a specific assembler syntax:
26 bsd386.h, att386.h, and sun386.h.
27
28 The actual tm.h file for a particular system should include
29 this file, and then the file for the appropriate assembler syntax.
30
31 Many macros that specify assembler syntax are omitted entirely from
32 this file because they really belong in the files for particular
e075ae69
RH
33 assemblers. These include RP, IP, LPREFIX, PUT_OP_SIZE, USE_STAR,
34 ADDR_BEG, ADDR_END, PRINT_IREG, PRINT_SCALE, PRINT_B_I_S, and many
35 that start with ASM_ or end in ASM_OP. */
c98f8742 36
95393dfd
CH
37/* Stubs for half-pic support if not OSF/1 reference platform. */
38
39#ifndef HALF_PIC_P
40#define HALF_PIC_P() 0
41#define HALF_PIC_NUMBER_PTRS 0
42#define HALF_PIC_NUMBER_REFS 0
43#define HALF_PIC_ENCODE(DECL)
44#define HALF_PIC_DECLARE(NAME)
c725bd79 45#define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it")
95393dfd 46#define HALF_PIC_ADDRESS_P(X) 0
d9a5f180 47#define HALF_PIC_PTR(X) (X)
95393dfd
CH
48#define HALF_PIC_FINISH(STREAM)
49#endif
50
d4ba09c0
SC
51/* Define the specific costs for a given cpu */
52
53struct processor_costs {
8b60264b
KG
54 const int add; /* cost of an add instruction */
55 const int lea; /* cost of a lea instruction */
56 const int shift_var; /* variable shift costs */
57 const int shift_const; /* constant shift costs */
58 const int mult_init; /* cost of starting a multiply */
59 const int mult_bit; /* cost of multiply per each bit set */
60 const int divide; /* cost of a divide/mod */
44cf5b6a
JH
61 int movsx; /* The cost of movsx operation. */
62 int movzx; /* The cost of movzx operation. */
8b60264b
KG
63 const int large_insn; /* insns larger than this cost more */
64 const int move_ratio; /* The threshold of number of scalar
ac775968 65 memory-to-memory move insns. */
8b60264b
KG
66 const int movzbl_load; /* cost of loading using movzbl */
67 const int int_load[3]; /* cost of loading integer registers
96e7ae40
JH
68 in QImode, HImode and SImode relative
69 to reg-reg move (2). */
8b60264b 70 const int int_store[3]; /* cost of storing integer register
96e7ae40 71 in QImode, HImode and SImode */
8b60264b
KG
72 const int fp_move; /* cost of reg,reg fld/fst */
73 const int fp_load[3]; /* cost of loading FP register
96e7ae40 74 in SFmode, DFmode and XFmode */
8b60264b 75 const int fp_store[3]; /* cost of storing FP register
96e7ae40 76 in SFmode, DFmode and XFmode */
8b60264b
KG
77 const int mmx_move; /* cost of moving MMX register. */
78 const int mmx_load[2]; /* cost of loading MMX register
fa79946e 79 in SImode and DImode */
8b60264b 80 const int mmx_store[2]; /* cost of storing MMX register
fa79946e 81 in SImode and DImode */
8b60264b
KG
82 const int sse_move; /* cost of moving SSE register. */
83 const int sse_load[3]; /* cost of loading SSE register
fa79946e 84 in SImode, DImode and TImode*/
8b60264b 85 const int sse_store[3]; /* cost of storing SSE register
fa79946e 86 in SImode, DImode and TImode*/
8b60264b 87 const int mmxsse_to_integer; /* cost of moving mmxsse register to
fa79946e 88 integer and vice versa. */
f4365627
JH
89 const int prefetch_block; /* bytes moved to cache for prefetch. */
90 const int simultaneous_prefetches; /* number of parallel prefetch
91 operations. */
d4ba09c0
SC
92};
93
8b60264b 94extern const struct processor_costs *ix86_cost;
d4ba09c0 95
c98f8742
JVA
96/* Run-time compilation parameters selecting different hardware subsets. */
97
98extern int target_flags;
99
100/* Macros used in the machine description to test the flags. */
101
ddd5a7c1 102/* configure can arrange to make this 2, to force a 486. */
e075ae69 103
35b528be
RS
104#ifndef TARGET_CPU_DEFAULT
105#define TARGET_CPU_DEFAULT 0
106#endif
107
3b3c6a3f 108/* Masks for the -m switches */
e075ae69
RH
109#define MASK_80387 0x00000001 /* Hardware floating point */
110#define MASK_RTD 0x00000002 /* Use ret that pops args */
111#define MASK_ALIGN_DOUBLE 0x00000004 /* align doubles to 2 word boundary */
112#define MASK_SVR3_SHLIB 0x00000008 /* Uninit locals into bss */
113#define MASK_IEEE_FP 0x00000010 /* IEEE fp comparisons */
114#define MASK_FLOAT_RETURNS 0x00000020 /* Return float in st(0) */
115#define MASK_NO_FANCY_MATH_387 0x00000040 /* Disable sin, cos, sqrt */
116#define MASK_OMIT_LEAF_FRAME_POINTER 0x080 /* omit leaf frame pointers */
117#define MASK_STACK_PROBE 0x00000100 /* Enable stack probing */
0dd0e980
JH
118#define MASK_NO_ALIGN_STROPS 0x00000200 /* Enable aligning of string ops. */
119#define MASK_INLINE_ALL_STROPS 0x00000400 /* Inline stringops in all cases */
120#define MASK_NO_PUSH_ARGS 0x00000800 /* Use push instructions */
121#define MASK_ACCUMULATE_OUTGOING_ARGS 0x00001000/* Accumulate outgoing args */
122#define MASK_ACCUMULATE_OUTGOING_ARGS_SET 0x00002000
123#define MASK_MMX 0x00004000 /* Support MMX regs/builtins */
124#define MASK_MMX_SET 0x00008000
125#define MASK_SSE 0x00010000 /* Support SSE regs/builtins */
126#define MASK_SSE_SET 0x00020000
127#define MASK_SSE2 0x00040000 /* Support SSE2 regs/builtins */
128#define MASK_SSE2_SET 0x00080000
47f339cf 129#define MASK_3DNOW 0x00100000 /* Support 3Dnow builtins */
0dd0e980
JH
130#define MASK_3DNOW_SET 0x00200000
131#define MASK_3DNOW_A 0x00400000 /* Support Athlon 3Dnow builtins */
132#define MASK_3DNOW_A_SET 0x00800000
133#define MASK_128BIT_LONG_DOUBLE 0x01000000 /* long double size is 128bit */
c93e80a5
JH
134#define MASK_64BIT 0x02000000 /* Produce 64bit code */
135/* ... overlap with subtarget options starts by 0x04000000. */
136#define MASK_NO_RED_ZONE 0x04000000 /* Do not use red zone */
3b3c6a3f
MM
137
138/* Use the floating point instructions */
139#define TARGET_80387 (target_flags & MASK_80387)
140
c98f8742
JVA
141/* Compile using ret insn that pops args.
142 This will not work unless you use prototypes at least
143 for all functions that can take varying numbers of args. */
3b3c6a3f
MM
144#define TARGET_RTD (target_flags & MASK_RTD)
145
b08de47e
MM
146/* Align doubles to a two word boundary. This breaks compatibility with
147 the published ABI's for structures containing doubles, but produces
148 faster code on the pentium. */
149#define TARGET_ALIGN_DOUBLE (target_flags & MASK_ALIGN_DOUBLE)
c98f8742 150
f73ad30e
JH
151/* Use push instructions to save outgoing args. */
152#define TARGET_PUSH_ARGS (!(target_flags & MASK_NO_PUSH_ARGS))
153
154/* Accumulate stack adjustments to prologue/epilogue. */
155#define TARGET_ACCUMULATE_OUTGOING_ARGS \
156 (target_flags & MASK_ACCUMULATE_OUTGOING_ARGS)
157
d7cd15e9
RS
158/* Put uninitialized locals into bss, not data.
159 Meaningful only on svr3. */
3b3c6a3f 160#define TARGET_SVR3_SHLIB (target_flags & MASK_SVR3_SHLIB)
d7cd15e9 161
c572e5ba
JVA
162/* Use IEEE floating point comparisons. These handle correctly the cases
163 where the result of a comparison is unordered. Normally SIGFPE is
164 generated in such cases, in which case this isn't needed. */
3b3c6a3f 165#define TARGET_IEEE_FP (target_flags & MASK_IEEE_FP)
c572e5ba 166
8c2bf92a
JVA
167/* Functions that return a floating point value may return that value
168 in the 387 FPU or in 386 integer registers. If set, this flag causes
892a2d68 169 the 387 to be used, which is compatible with most calling conventions. */
3b3c6a3f 170#define TARGET_FLOAT_RETURNS_IN_80387 (target_flags & MASK_FLOAT_RETURNS)
8c2bf92a 171
2b589241 172/* Long double is 128bit instead of 96bit, even when only 80bits are used.
f5143c46 173 This mode wastes cache, but avoid misaligned data accesses and simplifies
2b589241
JH
174 address calculations. */
175#define TARGET_128BIT_LONG_DOUBLE (target_flags & MASK_128BIT_LONG_DOUBLE)
176
099800e3
RK
177/* Disable generation of FP sin, cos and sqrt operations for 387.
178 This is because FreeBSD lacks these in the math-emulator-code */
3b3c6a3f
MM
179#define TARGET_NO_FANCY_MATH_387 (target_flags & MASK_NO_FANCY_MATH_387)
180
2f2fa5b1 181/* Don't create frame pointers for leaf functions */
e075ae69
RH
182#define TARGET_OMIT_LEAF_FRAME_POINTER \
183 (target_flags & MASK_OMIT_LEAF_FRAME_POINTER)
f6f58ba3 184
3b3c6a3f 185/* Debug GO_IF_LEGITIMATE_ADDRESS */
c93e80a5 186#define TARGET_DEBUG_ADDR (ix86_debug_addr_string != 0)
3b3c6a3f 187
b08de47e 188/* Debug FUNCTION_ARG macros */
c93e80a5 189#define TARGET_DEBUG_ARG (ix86_debug_arg_string != 0)
b08de47e 190
25f94bb5 191/* 64bit Sledgehammer mode */
0c2dc519 192#ifdef TARGET_BI_ARCH
25f94bb5 193#define TARGET_64BIT (target_flags & MASK_64BIT)
0c2dc519 194#else
67adf6a9 195#if TARGET_64BIT_DEFAULT
0c2dc519
JH
196#define TARGET_64BIT 1
197#else
198#define TARGET_64BIT 0
199#endif
200#endif
25f94bb5 201
f7746310
SC
202#define TARGET_386 (ix86_cpu == PROCESSOR_I386)
203#define TARGET_486 (ix86_cpu == PROCESSOR_I486)
204#define TARGET_PENTIUM (ix86_cpu == PROCESSOR_PENTIUM)
3a0433fd 205#define TARGET_PENTIUMPRO (ix86_cpu == PROCESSOR_PENTIUMPRO)
a269a03c 206#define TARGET_K6 (ix86_cpu == PROCESSOR_K6)
309ada50 207#define TARGET_ATHLON (ix86_cpu == PROCESSOR_ATHLON)
b4e89e2d 208#define TARGET_PENTIUM4 (ix86_cpu == PROCESSOR_PENTIUM4)
a269a03c
JC
209
210#define CPUMASK (1 << ix86_cpu)
211extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
212extern const int x86_use_bit_test, x86_cmove, x86_deep_branch;
ef6257cd 213extern const int x86_branch_hints, x86_unroll_strlen;
e075ae69
RH
214extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx;
215extern const int x86_use_loop, x86_use_fiop, x86_use_mov0;
216extern const int x86_use_cltd, x86_read_modify_write;
217extern const int x86_read_modify, x86_split_long_moves;
f90800f8 218extern const int x86_promote_QImode, x86_single_stringop;
d9f32422 219extern const int x86_himode_math, x86_qimode_math, x86_promote_qi_regs;
0b5107cf 220extern const int x86_promote_hi_regs, x86_integer_DFmode_moves;
bdeb029c 221extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8;
0b5107cf 222extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
c6036a37 223extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
b972dd02 224extern const int x86_epilogue_using_move, x86_decompose_lea;
30c99a84 225extern const int x86_arch_always_fancy_math_387;
f4365627 226extern int x86_prefetch_sse;
a269a03c
JC
227
228#define TARGET_USE_LEAVE (x86_use_leave & CPUMASK)
229#define TARGET_PUSH_MEMORY (x86_push_memory & CPUMASK)
230#define TARGET_ZERO_EXTEND_WITH_AND (x86_zero_extend_with_and & CPUMASK)
231#define TARGET_USE_BIT_TEST (x86_use_bit_test & CPUMASK)
232#define TARGET_UNROLL_STRLEN (x86_unroll_strlen & CPUMASK)
0644b628
JH
233/* For sane SSE instruction set generation we need fcomi instruction. It is
234 safe to enable all CMOVE instructions. */
235#define TARGET_CMOVE ((x86_cmove & (1 << ix86_arch)) || TARGET_SSE)
a269a03c 236#define TARGET_DEEP_BRANCH_PREDICTION (x86_deep_branch & CPUMASK)
ef6257cd 237#define TARGET_BRANCH_PREDICTION_HINTS (x86_branch_hints & CPUMASK)
a269a03c 238#define TARGET_DOUBLE_WITH_ADD (x86_double_with_add & CPUMASK)
0d7d98ee 239#define TARGET_USE_SAHF ((x86_use_sahf & CPUMASK) && !TARGET_64BIT)
e075ae69
RH
240#define TARGET_MOVX (x86_movx & CPUMASK)
241#define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & CPUMASK)
242#define TARGET_USE_LOOP (x86_use_loop & CPUMASK)
243#define TARGET_USE_FIOP (x86_use_fiop & CPUMASK)
244#define TARGET_USE_MOV0 (x86_use_mov0 & CPUMASK)
245#define TARGET_USE_CLTD (x86_use_cltd & CPUMASK)
246#define TARGET_SPLIT_LONG_MOVES (x86_split_long_moves & CPUMASK)
247#define TARGET_READ_MODIFY_WRITE (x86_read_modify_write & CPUMASK)
248#define TARGET_READ_MODIFY (x86_read_modify & CPUMASK)
e9e80858 249#define TARGET_PROMOTE_QImode (x86_promote_QImode & CPUMASK)
f90800f8 250#define TARGET_SINGLE_STRINGOP (x86_single_stringop & CPUMASK)
d9f32422
JH
251#define TARGET_QIMODE_MATH (x86_qimode_math & CPUMASK)
252#define TARGET_HIMODE_MATH (x86_himode_math & CPUMASK)
253#define TARGET_PROMOTE_QI_REGS (x86_promote_qi_regs & CPUMASK)
254#define TARGET_PROMOTE_HI_REGS (x86_promote_hi_regs & CPUMASK)
bdeb029c
JH
255#define TARGET_ADD_ESP_4 (x86_add_esp_4 & CPUMASK)
256#define TARGET_ADD_ESP_8 (x86_add_esp_8 & CPUMASK)
257#define TARGET_SUB_ESP_4 (x86_sub_esp_4 & CPUMASK)
258#define TARGET_SUB_ESP_8 (x86_sub_esp_8 & CPUMASK)
0b5107cf
JH
259#define TARGET_INTEGER_DFMODE_MOVES (x86_integer_DFmode_moves & CPUMASK)
260#define TARGET_PARTIAL_REG_DEPENDENCY (x86_partial_reg_dependency & CPUMASK)
261#define TARGET_MEMORY_MISMATCH_STALL (x86_memory_mismatch_stall & CPUMASK)
c6036a37
JH
262#define TARGET_PROLOGUE_USING_MOVE (x86_prologue_using_move & CPUMASK)
263#define TARGET_EPILOGUE_USING_MOVE (x86_epilogue_using_move & CPUMASK)
b972dd02 264#define TARGET_DECOMPOSE_LEA (x86_decompose_lea & CPUMASK)
f4365627 265#define TARGET_PREFETCH_SSE (x86_prefetch_sse)
a269a03c 266
8c9be447 267#define TARGET_STACK_PROBE (target_flags & MASK_STACK_PROBE)
3b3c6a3f 268
79f05c19
JH
269#define TARGET_ALIGN_STRINGOPS (!(target_flags & MASK_NO_ALIGN_STROPS))
270#define TARGET_INLINE_ALL_STRINGOPS (target_flags & MASK_INLINE_ALL_STROPS)
271
c93e80a5 272#define ASSEMBLER_DIALECT (ix86_asm_dialect)
e075ae69 273
446988df
JH
274#define TARGET_SSE ((target_flags & (MASK_SSE | MASK_SSE2)) != 0)
275#define TARGET_SSE2 ((target_flags & MASK_SSE2) != 0)
965f5423
JH
276#define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0)
277#define TARGET_MIX_SSE_I387 ((ix86_fpmath & FPMATH_SSE) \
278 && (ix86_fpmath & FPMATH_387))
a7180f70 279#define TARGET_MMX ((target_flags & MASK_MMX) != 0)
47f339cf
BS
280#define TARGET_3DNOW ((target_flags & MASK_3DNOW) != 0)
281#define TARGET_3DNOW_A ((target_flags & MASK_3DNOW_A) != 0)
a7180f70 282
8362f420
JH
283#define TARGET_RED_ZONE (!(target_flags & MASK_NO_RED_ZONE))
284
f996902d
RH
285#define TARGET_GNU_TLS (ix86_tls_dialect == TLS_DIALECT_GNU)
286#define TARGET_SUN_TLS (ix86_tls_dialect == TLS_DIALECT_SUN)
287
a5d17ff3
PT
288/* WARNING: Do not mark empty strings for translation, as calling
289 gettext on an empty string does NOT return an empty
290 string. */
291
292
e075ae69 293#define TARGET_SWITCHES \
047142d3
PT
294{ { "80387", MASK_80387, N_("Use hardware fp") }, \
295 { "no-80387", -MASK_80387, N_("Do not use hardware fp") }, \
296 { "hard-float", MASK_80387, N_("Use hardware fp") }, \
297 { "soft-float", -MASK_80387, N_("Do not use hardware fp") }, \
298 { "no-soft-float", MASK_80387, N_("Use hardware fp") }, \
a5d17ff3
PT
299 { "386", 0, "" /*Deprecated.*/}, \
300 { "486", 0, "" /*Deprecated.*/}, \
301 { "pentium", 0, "" /*Deprecated.*/}, \
302 { "pentiumpro", 0, "" /*Deprecated.*/}, \
303 { "intel-syntax", 0, "" /*Deprecated.*/}, \
304 { "no-intel-syntax", 0, "" /*Deprecated.*/}, \
047142d3
PT
305 { "rtd", MASK_RTD, \
306 N_("Alternate calling convention") }, \
307 { "no-rtd", -MASK_RTD, \
308 N_("Use normal calling convention") }, \
e075ae69 309 { "align-double", MASK_ALIGN_DOUBLE, \
047142d3 310 N_("Align some doubles on dword boundary") }, \
e075ae69 311 { "no-align-double", -MASK_ALIGN_DOUBLE, \
047142d3 312 N_("Align doubles on word boundary") }, \
e075ae69 313 { "svr3-shlib", MASK_SVR3_SHLIB, \
047142d3 314 N_("Uninitialized locals in .bss") }, \
e075ae69 315 { "no-svr3-shlib", -MASK_SVR3_SHLIB, \
047142d3 316 N_("Uninitialized locals in .data") }, \
e075ae69 317 { "ieee-fp", MASK_IEEE_FP, \
047142d3 318 N_("Use IEEE math for fp comparisons") }, \
e075ae69 319 { "no-ieee-fp", -MASK_IEEE_FP, \
047142d3 320 N_("Do not use IEEE math for fp comparisons") }, \
e075ae69 321 { "fp-ret-in-387", MASK_FLOAT_RETURNS, \
047142d3 322 N_("Return values of functions in FPU registers") }, \
e075ae69 323 { "no-fp-ret-in-387", -MASK_FLOAT_RETURNS , \
047142d3 324 N_("Do not return values of functions in FPU registers")}, \
e075ae69 325 { "no-fancy-math-387", MASK_NO_FANCY_MATH_387, \
047142d3 326 N_("Do not generate sin, cos, sqrt for FPU") }, \
e075ae69 327 { "fancy-math-387", -MASK_NO_FANCY_MATH_387, \
047142d3 328 N_("Generate sin, cos, sqrt for FPU")}, \
e075ae69 329 { "omit-leaf-frame-pointer", MASK_OMIT_LEAF_FRAME_POINTER, \
047142d3 330 N_("Omit the frame pointer in leaf functions") }, \
e075ae69 331 { "no-omit-leaf-frame-pointer",-MASK_OMIT_LEAF_FRAME_POINTER, "" }, \
047142d3
PT
332 { "stack-arg-probe", MASK_STACK_PROBE, \
333 N_("Enable stack probing") }, \
e075ae69
RH
334 { "no-stack-arg-probe", -MASK_STACK_PROBE, "" }, \
335 { "windows", 0, 0 /* undocumented */ }, \
336 { "dll", 0, 0 /* undocumented */ }, \
79f05c19 337 { "align-stringops", -MASK_NO_ALIGN_STROPS, \
047142d3 338 N_("Align destination of the string operations") }, \
79f05c19 339 { "no-align-stringops", MASK_NO_ALIGN_STROPS, \
047142d3 340 N_("Do not align destination of the string operations") }, \
4be2e5d9 341 { "inline-all-stringops", MASK_INLINE_ALL_STROPS, \
047142d3 342 N_("Inline all known string operations") }, \
79f05c19 343 { "no-inline-all-stringops", -MASK_INLINE_ALL_STROPS, \
047142d3 344 N_("Do not inline all known string operations") }, \
f73ad30e 345 { "push-args", -MASK_NO_PUSH_ARGS, \
047142d3 346 N_("Use push instructions to save outgoing arguments") }, \
053f1126 347 { "no-push-args", MASK_NO_PUSH_ARGS, \
047142d3 348 N_("Do not use push instructions to save outgoing arguments") }, \
0dd0e980
JH
349 { "accumulate-outgoing-args", (MASK_ACCUMULATE_OUTGOING_ARGS \
350 | MASK_ACCUMULATE_OUTGOING_ARGS_SET), \
047142d3 351 N_("Use push instructions to save outgoing arguments") }, \
0dd0e980 352 { "no-accumulate-outgoing-args",MASK_ACCUMULATE_OUTGOING_ARGS_SET, \
047142d3 353 N_("Do not use push instructions to save outgoing arguments") }, \
0dd0e980 354 { "mmx", MASK_MMX | MASK_MMX_SET, \
b0287a90 355 N_("Support MMX built-in functions") }, \
0dd0e980 356 { "no-mmx", -MASK_MMX, \
b0287a90 357 N_("Do not support MMX built-in functions") }, \
a5d17ff3 358 { "no-mmx", MASK_MMX_SET, "" }, \
0dd0e980 359 { "3dnow", MASK_3DNOW | MASK_3DNOW_SET, \
b0287a90 360 N_("Support 3DNow! built-in functions") }, \
a5d17ff3 361 { "no-3dnow", -MASK_3DNOW, "" }, \
0dd0e980 362 { "no-3dnow", MASK_3DNOW_SET, \
b0287a90 363 N_("Do not support 3DNow! built-in functions") }, \
0dd0e980 364 { "sse", MASK_SSE | MASK_SSE_SET, \
b0287a90 365 N_("Support MMX and SSE built-in functions and code generation") }, \
a5d17ff3 366 { "no-sse", -MASK_SSE, "" }, \
0dd0e980 367 { "no-sse", MASK_SSE_SET, \
b0287a90 368 N_("Do not support MMX and SSE built-in functions and code generation") },\
0dd0e980 369 { "sse2", MASK_SSE2 | MASK_SSE2_SET, \
b0287a90 370 N_("Support MMX, SSE and SSE2 built-in functions and code generation") }, \
a5d17ff3 371 { "no-sse2", -MASK_SSE2, "" }, \
0dd0e980 372 { "no-sse2", MASK_SSE2_SET, \
b0287a90 373 N_("Do not support MMX, SSE and SSE2 built-in functions and code generation") }, \
2b589241 374 { "128bit-long-double", MASK_128BIT_LONG_DOUBLE, \
c725bd79 375 N_("sizeof(long double) is 16") }, \
2b589241 376 { "96bit-long-double", -MASK_128BIT_LONG_DOUBLE, \
c725bd79 377 N_("sizeof(long double) is 12") }, \
25f94bb5
JH
378 { "64", MASK_64BIT, \
379 N_("Generate 64bit x86-64 code") }, \
380 { "32", -MASK_64BIT, \
381 N_("Generate 32bit i386 code") }, \
8362f420
JH
382 { "red-zone", -MASK_NO_RED_ZONE, \
383 N_("Use red-zone in the x86-64 code") }, \
384 { "no-red-zone", MASK_NO_RED_ZONE, \
4cba3b67 385 N_("Do not use red-zone in the x86-64 code") }, \
e075ae69 386 SUBTARGET_SWITCHES \
67adf6a9 387 { "", TARGET_DEFAULT | TARGET_64BIT_DEFAULT | TARGET_SUBTARGET_DEFAULT, 0 }}
241e1a89 388
67adf6a9
RH
389#ifndef TARGET_64BIT_DEFAULT
390#define TARGET_64BIT_DEFAULT 0
25f94bb5
JH
391#endif
392
67adf6a9
RH
393#define TARGET_DEFAULT MASK_OMIT_LEAF_FRAME_POINTER
394
395
f5316dfe
MM
396/* This macro is similar to `TARGET_SWITCHES' but defines names of
397 command options that have values. Its definition is an
398 initializer with a subgrouping for each command option.
399
400 Each subgrouping contains a string constant, that defines the
401 fixed part of the option name, and the address of a variable. The
402 variable, type `char *', is set to the variable part of the given
403 option if the fixed part matches. The actual option name is made
404 by appending `-m' to the specified name. */
e075ae69
RH
405#define TARGET_OPTIONS \
406{ { "cpu=", &ix86_cpu_string, \
047142d3 407 N_("Schedule code for given CPU")}, \
965f5423
JH
408 { "fpmath=", &ix86_fpmath_string, \
409 N_("Generate floating point mathematics using given instruction set")},\
e075ae69 410 { "arch=", &ix86_arch_string, \
047142d3 411 N_("Generate code for given CPU")}, \
e075ae69 412 { "regparm=", &ix86_regparm_string, \
047142d3 413 N_("Number of registers used to pass integer arguments") }, \
e075ae69 414 { "align-loops=", &ix86_align_loops_string, \
047142d3 415 N_("Loop code aligned to this power of 2") }, \
e075ae69 416 { "align-jumps=", &ix86_align_jumps_string, \
047142d3 417 N_("Jump targets are aligned to this power of 2") }, \
e075ae69 418 { "align-functions=", &ix86_align_funcs_string, \
047142d3 419 N_("Function starts are aligned to this power of 2") }, \
e075ae69
RH
420 { "preferred-stack-boundary=", \
421 &ix86_preferred_stack_boundary_string, \
047142d3 422 N_("Attempt to keep stack aligned to this power of 2") }, \
e075ae69 423 { "branch-cost=", &ix86_branch_cost_string, \
047142d3 424 N_("Branches are this expensive (1-5, arbitrary units)") }, \
6189a572
JH
425 { "cmodel=", &ix86_cmodel_string, \
426 N_("Use given x86-64 code model") }, \
c93e80a5 427 { "debug-arg", &ix86_debug_arg_string, \
a5d17ff3 428 "" /* Undocumented. */ }, \
c93e80a5 429 { "debug-addr", &ix86_debug_addr_string, \
a5d17ff3 430 "" /* Undocumented. */ }, \
c93e80a5
JH
431 { "asm=", &ix86_asm_string, \
432 N_("Use given assembler dialect") }, \
f996902d
RH
433 { "tls-dialect=", &ix86_tls_dialect_string, \
434 N_("Use given thread-local storage dialect") }, \
e075ae69 435 SUBTARGET_OPTIONS \
b08de47e 436}
f5316dfe
MM
437
438/* Sometimes certain combinations of command options do not make
439 sense on a particular target machine. You can define a macro
440 `OVERRIDE_OPTIONS' to take account of this. This macro, if
441 defined, is executed once just after all the command options have
442 been parsed.
443
444 Don't use this macro to turn on various extra optimizations for
445 `-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
446
447#define OVERRIDE_OPTIONS override_options ()
448
449/* These are meant to be redefined in the host dependent files */
95393dfd 450#define SUBTARGET_SWITCHES
f5316dfe 451#define SUBTARGET_OPTIONS
95393dfd 452
d4ba09c0 453/* Define this to change the optimizations performed by default. */
d9a5f180
GS
454#define OPTIMIZATION_OPTIONS(LEVEL, SIZE) \
455 optimization_options ((LEVEL), (SIZE))
d4ba09c0 456
241e1a89
SC
457/* Specs for the compiler proper */
458
628714d8
RK
459#ifndef CC1_CPU_SPEC
460#define CC1_CPU_SPEC "\
241e1a89 461%{!mcpu*: \
4a88a060 462%{m386:-mcpu=i386 \
3f0e0fa2 463%n`-m386' is deprecated. Use `-march=i386' or `-mcpu=i386' instead.\n} \
4a88a060 464%{m486:-mcpu=i486 \
3f0e0fa2 465%n`-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead.\n} \
4a88a060 466%{mpentium:-mcpu=pentium \
3f0e0fa2 467%n`-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead.\n} \
4a88a060 468%{mpentiumpro:-mcpu=pentiumpro \
c93e80a5
JH
469%n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.\n}} \
470%{mintel-syntax:-masm=intel \
471%n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \
472%{mno-intel-syntax:-masm=att \
473%n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.\n}"
241e1a89 474#endif
c98f8742 475\f
30efe578
NB
476/* Target CPU builtins. */
477#define TARGET_CPU_CPP_BUILTINS() \
478 do \
479 { \
480 if (TARGET_64BIT) \
481 { \
482 builtin_assert ("cpu=x86_64"); \
483 builtin_assert ("machine=x86_64"); \
484 builtin_define ("__x86_64"); \
485 builtin_define ("__x86_64__"); \
486 } \
487 else \
488 { \
489 builtin_assert ("cpu=i386"); \
490 builtin_assert ("machine=i386"); \
491 builtin_define_std ("i386"); \
492 } \
493 } \
494 while (0)
495
f4365627
JH
496#define TARGET_CPU_DEFAULT_i386 0
497#define TARGET_CPU_DEFAULT_i486 1
498#define TARGET_CPU_DEFAULT_pentium 2
91d2f4ba
JH
499#define TARGET_CPU_DEFAULT_pentium_mmx 3
500#define TARGET_CPU_DEFAULT_pentiumpro 4
501#define TARGET_CPU_DEFAULT_pentium2 5
502#define TARGET_CPU_DEFAULT_pentium3 6
503#define TARGET_CPU_DEFAULT_pentium4 7
504#define TARGET_CPU_DEFAULT_k6 8
505#define TARGET_CPU_DEFAULT_k6_2 9
506#define TARGET_CPU_DEFAULT_k6_3 10
507#define TARGET_CPU_DEFAULT_athlon 11
508#define TARGET_CPU_DEFAULT_athlon_sse 12
f4365627
JH
509
510#define TARGET_CPU_DEFAULT_NAMES {"i386", "i486", "pentium", "pentium-mmx",\
511 "pentiumpro", "pentium2", "pentium3", \
512 "pentium4", "k6", "k6-2", "k6-3",\
513 "athlon", "athlon-4"}
84b77fba 514#ifndef CPP_CPU_DEFAULT_SPEC
f4365627 515#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_i486
5a6ee819
RH
516#define CPP_CPU_DEFAULT_SPEC "-D__tune_i486__"
517#endif
f4365627 518#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium
0d97fd9e 519#define CPP_CPU_DEFAULT_SPEC "-D__tune_i586__ -D__tune_pentium__"
5a6ee819 520#endif
f4365627
JH
521#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium_mmx
522#define CPP_CPU_DEFAULT_SPEC "-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__"
523#endif
524#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentiumpro
0d97fd9e 525#define CPP_CPU_DEFAULT_SPEC "-D__tune_i686__ -D__tune_pentiumpro__"
da594c94 526#endif
f4365627
JH
527#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium2
528#define CPP_CPU_DEFAULT_SPEC "-D__tune_i686__ -D__tune_pentiumpro__\
529-D__tune_pentium2__"
530#endif
531#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium3
532#define CPP_CPU_DEFAULT_SPEC "-D__tune_i686__ -D__tune_pentiumpro__\
533-D__tune_pentium2__ -D__tune_pentium3__"
534#endif
535#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium4
536#define CPP_CPU_DEFAULT_SPEC "-D__tune_pentium4__"
537#endif
538#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_k6
5a6ee819 539#define CPP_CPU_DEFAULT_SPEC "-D__tune_k6__"
da594c94 540#endif
f4365627
JH
541#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_k6_2
542#define CPP_CPU_DEFAULT_SPEC "-D__tune_k6__ -D__tune_k6_2__"
543#endif
544#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_k6_3
545#define CPP_CPU_DEFAULT_SPEC "-D__tune_k6__ -D__tune_k6_3__"
546#endif
547#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_athlon
309ada50
JH
548#define CPP_CPU_DEFAULT_SPEC "-D__tune_athlon__"
549#endif
f4365627
JH
550#if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_athlon_sse
551#define CPP_CPU_DEFAULT_SPEC "-D__tune_athlon__ -D__tune_athlon_sse__"
b4e89e2d 552#endif
5a6ee819
RH
553#ifndef CPP_CPU_DEFAULT_SPEC
554#define CPP_CPU_DEFAULT_SPEC "-D__tune_i386__"
84b77fba
JW
555#endif
556#endif /* CPP_CPU_DEFAULT_SPEC */
33c1d53a 557
30efe578 558#define CPP_CPU_SPEC "\
5a6ee819
RH
559%{march=i386:%{!mcpu*:-D__tune_i386__ }}\
560%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}\
0d97fd9e
RH
561%{march=pentium|march=i586:-D__i586 -D__i586__ -D__pentium -D__pentium__ \
562 %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ }}\
f4365627
JH
563%{march=pentium-mmx:-D__i586 -D__i586__ -D__pentium -D__pentium__ \
564 -D__pentium__mmx__ \
565 %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__}}\
0d97fd9e
RH
566%{march=pentiumpro|march=i686:-D__i686 -D__i686__ \
567 -D__pentiumpro -D__pentiumpro__ \
568 %{!mcpu*:-D__tune_i686__ -D__tune_pentiumpro__ }}\
5a6ee819 569%{march=k6:-D__k6 -D__k6__ %{!mcpu*:-D__tune_k6__ }}\
f4365627
JH
570%{march=k6-2:-D__k6 -D__k6__ -D__k6_2__ \
571 %{!mcpu*:-D__tune_k6__ -D__tune_k6_2__ }}\
572%{march=k6-3:-D__k6 -D__k6__ -D__k6_3__ \
573 %{!mcpu*:-D__tune_k6__ -D__tune_k6_3__ }}\
574%{march=athlon|march=athlon-tbird:-D__athlon -D__athlon__ \
575 %{!mcpu*:-D__tune_athlon__ }}\
576%{march=athlon-4|march=athlon-xp|march=athlon-mp:-D__athlon -D__athlon__ \
577 -D__athlon_sse__ \
578 %{!mcpu*:-D__tune_athlon__ -D__tune_athlon_sse__ }}\
0c2dc519 579%{march=pentium4:-D__pentium4 -D__pentium4__ %{!mcpu*:-D__tune_pentium4__ }}\
5a6ee819
RH
580%{m386|mcpu=i386:-D__tune_i386__ }\
581%{m486|mcpu=i486:-D__tune_i486__ }\
0dd0e980 582%{mpentium|mcpu=pentium|mcpu=i586|mcpu=pentium-mmx:-D__tune_i586__ -D__tune_pentium__ }\
f4365627 583%{mpentiumpro|mcpu=pentiumpro|mcpu=i686|cpu=pentium2|cpu=pentium3:-D__tune_i686__ \
0dd0e980
JH
584-D__tune_pentiumpro__ }\
585%{mcpu=k6|mcpu=k6-2|mcpu=k6-3:-D__tune_k6__ }\
586%{mcpu=athlon|mcpu=athlon-tbird|mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\
587-D__tune_athlon__ }\
f4365627
JH
588%{mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\
589-D__tune_athlon_sse__ }\
b4e89e2d 590%{mcpu=pentium4:-D__tune_pentium4__ }\
4daeab16 591%{march=athlon-tbird|march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4:\
0dd0e980
JH
592-D__SSE__ }\
593%{march=pentium-mmx|march=k6|march=k6-2|march=k6-3\
4a23409e 594|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
0dd0e980 595|march=athlon-mp|march=pentium2|march=pentium3|march=pentium4: -D__MMX__ }\
f4365627 596%{march=k6-2|march=k6-3\
4a23409e 597|march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
0dd0e980 598|march=athlon-mp: -D__3dNOW__ }\
f4365627
JH
599%{march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\
600|march=athlon-mp: -D__3dNOW_A__ }\
95d075ff 601%{msse2: -D__SSE2__ }\
9b780582 602%{march=pentium4: -D__SSE2__ }\
5a6ee819 603%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}"
0c2dc519 604
628714d8 605#ifndef CC1_SPEC
8015b78d 606#define CC1_SPEC "%(cc1_cpu) "
628714d8
RK
607#endif
608
609/* This macro defines names of additional specifications to put in the
610 specs that can be used in various specifications like CC1_SPEC. Its
611 definition is an initializer with a subgrouping for each command option.
bcd86433
SC
612
613 Each subgrouping contains a string constant, that defines the
614 specification name, and a string constant that used by the GNU CC driver
615 program.
616
617 Do not define this macro if it does not need to do anything. */
618
619#ifndef SUBTARGET_EXTRA_SPECS
620#define SUBTARGET_EXTRA_SPECS
621#endif
622
623#define EXTRA_SPECS \
84b77fba 624 { "cpp_cpu_default", CPP_CPU_DEFAULT_SPEC }, \
bcd86433 625 { "cpp_cpu", CPP_CPU_SPEC }, \
628714d8 626 { "cc1_cpu", CC1_CPU_SPEC }, \
bcd86433
SC
627 SUBTARGET_EXTRA_SPECS
628\f
c98f8742
JVA
629/* target machine storage layout */
630
2b589241 631/* Define for XFmode or TFmode extended real floating point support.
2b589241
JH
632 The XFmode is specified by i386 ABI, while TFmode may be faster
633 due to alignment and simplifications in the address calculations.
634 */
635#define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96)
636#define MAX_LONG_DOUBLE_TYPE_SIZE 128
65d9c0ab
JH
637#ifdef __x86_64__
638#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
639#else
640#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 96
641#endif
2b589241
JH
642/* Tell real.c that this is the 80-bit Intel extended float format
643 packaged in a 128-bit or 96bit entity. */
23c108af 644#define INTEL_EXTENDED_IEEE_FORMAT 1
2b589241 645
0038aea6 646
65d9c0ab
JH
647#define SHORT_TYPE_SIZE 16
648#define INT_TYPE_SIZE 32
649#define FLOAT_TYPE_SIZE 32
650#define LONG_TYPE_SIZE BITS_PER_WORD
2faf6b96 651#define MAX_WCHAR_TYPE_SIZE 32
65d9c0ab
JH
652#define DOUBLE_TYPE_SIZE 64
653#define LONG_LONG_TYPE_SIZE 64
654
67adf6a9 655#if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT
0c2dc519
JH
656#define MAX_BITS_PER_WORD 64
657#define MAX_LONG_TYPE_SIZE 64
658#else
659#define MAX_BITS_PER_WORD 32
660#define MAX_LONG_TYPE_SIZE 32
661#endif
662
c98f8742
JVA
663/* Define this if most significant byte of a word is the lowest numbered. */
664/* That is true on the 80386. */
665
666#define BITS_BIG_ENDIAN 0
667
668/* Define this if most significant byte of a word is the lowest numbered. */
669/* That is not true on the 80386. */
670#define BYTES_BIG_ENDIAN 0
671
672/* Define this if most significant word of a multiword number is the lowest
673 numbered. */
674/* Not true for 80386 */
675#define WORDS_BIG_ENDIAN 0
676
c98f8742 677/* Width of a word, in units (bytes). */
65d9c0ab
JH
678#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
679#define MIN_UNITS_PER_WORD 4
c98f8742 680
c98f8742 681/* Allocation boundary (in *bits*) for storing arguments in argument list. */
65d9c0ab 682#define PARM_BOUNDARY BITS_PER_WORD
c98f8742 683
e075ae69 684/* Boundary (in *bits*) on which stack pointer should be aligned. */
65d9c0ab 685#define STACK_BOUNDARY BITS_PER_WORD
c98f8742 686
3af4bd89
JH
687/* Boundary (in *bits*) on which the stack pointer preferrs to be
688 aligned; the compiler cannot rely on having this alignment. */
e075ae69 689#define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary
65954bd8 690
1d482056
RH
691/* As of July 2001, many runtimes to not align the stack properly when
692 entering main. This causes expand_main_function to forcably align
693 the stack, which results in aligned frames for functions called from
694 main, though it does nothing for the alignment of main itself. */
695#define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \
14f73b5a 696 (ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT)
1d482056 697
892a2d68 698/* Allocation boundary for the code of a function. */
3e18fdf6 699#define FUNCTION_BOUNDARY 16
c98f8742 700
892a2d68 701/* Alignment of field after `int : 0' in a structure. */
c98f8742 702
65d9c0ab 703#define EMPTY_FIELD_BOUNDARY BITS_PER_WORD
c98f8742
JVA
704
705/* Minimum size in bits of the largest boundary to which any
706 and all fundamental data types supported by the hardware
707 might need to be aligned. No data type wants to be aligned
17f24ff0
JH
708 rounder than this.
709
3e18fdf6 710 Pentium+ preferrs DFmode values to be aligned to 64 bit boundary
17f24ff0
JH
711 and Pentium Pro XFmode values at 128 bit boundaries. */
712
713#define BIGGEST_ALIGNMENT 128
714
a7180f70
BS
715/* Decide whether a variable of mode MODE must be 128 bit aligned. */
716#define ALIGN_MODE_128(MODE) \
2b589241
JH
717 ((MODE) == XFmode || (MODE) == TFmode || ((MODE) == TImode) \
718 || (MODE) == V4SFmode || (MODE) == V4SImode)
a7180f70 719
17f24ff0 720/* The published ABIs say that doubles should be aligned on word
6fc605d8
ZW
721 boundaries, so lower the aligment for structure fields unless
722 -malign-double is set. */
723/* BIGGEST_FIELD_ALIGNMENT is also used in libobjc, where it must be
724 constant. Use the smaller value in that context. */
725#ifndef IN_TARGET_LIBS
65d9c0ab 726#define BIGGEST_FIELD_ALIGNMENT (TARGET_64BIT ? 128 : (TARGET_ALIGN_DOUBLE ? 64 : 32))
6fc605d8
ZW
727#else
728#define BIGGEST_FIELD_ALIGNMENT 32
729#endif
c98f8742 730
e5e8a8bf 731/* If defined, a C expression to compute the alignment given to a
a7180f70 732 constant that is being placed in memory. EXP is the constant
e5e8a8bf
JW
733 and ALIGN is the alignment that the object would ordinarily have.
734 The value of this macro is used instead of that alignment to align
735 the object.
736
737 If this macro is not defined, then ALIGN is used.
738
739 The typical use of this macro is to increase alignment for string
740 constants to be word aligned so that `strcpy' calls that copy
741 constants can be done inline. */
742
d9a5f180 743#define CONSTANT_ALIGNMENT(EXP, ALIGN) ix86_constant_alignment ((EXP), (ALIGN))
d4ba09c0 744
8a022443
JW
745/* If defined, a C expression to compute the alignment for a static
746 variable. TYPE is the data type, and ALIGN is the alignment that
747 the object would ordinarily have. The value of this macro is used
748 instead of that alignment to align the object.
749
750 If this macro is not defined, then ALIGN is used.
751
752 One use of this macro is to increase alignment of medium-size
753 data to make it all fit in fewer cache lines. Another is to
754 cause character arrays to be word-aligned so that `strcpy' calls
755 that copy constants to character arrays can be done inline. */
756
d9a5f180 757#define DATA_ALIGNMENT(TYPE, ALIGN) ix86_data_alignment ((TYPE), (ALIGN))
d16790f2
JW
758
759/* If defined, a C expression to compute the alignment for a local
760 variable. TYPE is the data type, and ALIGN is the alignment that
761 the object would ordinarily have. The value of this macro is used
762 instead of that alignment to align the object.
763
764 If this macro is not defined, then ALIGN is used.
765
766 One use of this macro is to increase alignment of medium-size
767 data to make it all fit in fewer cache lines. */
768
d9a5f180 769#define LOCAL_ALIGNMENT(TYPE, ALIGN) ix86_local_alignment ((TYPE), (ALIGN))
8a022443 770
53c17031
JH
771/* If defined, a C expression that gives the alignment boundary, in
772 bits, of an argument with the specified mode and type. If it is
773 not defined, `PARM_BOUNDARY' is used for all arguments. */
774
d9a5f180
GS
775#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
776 ix86_function_arg_boundary ((MODE), (TYPE))
53c17031 777
b4ac57ab 778/* Set this non-zero if move instructions will actually fail to work
c98f8742 779 when given unaligned data. */
b4ac57ab 780#define STRICT_ALIGNMENT 0
c98f8742
JVA
781
782/* If bit field type is int, don't let it cross an int,
783 and give entire struct the alignment of an int. */
784/* Required on the 386 since it doesn't have bitfield insns. */
785#define PCC_BITFIELD_TYPE_MATTERS 1
c98f8742
JVA
786\f
787/* Standard register usage. */
788
789/* This processor has special stack-like registers. See reg-stack.c
892a2d68 790 for details. */
c98f8742
JVA
791
792#define STACK_REGS
d9a5f180
GS
793#define IS_STACK_MODE(MODE) \
794 ((MODE) == DFmode || (MODE) == SFmode || (MODE) == XFmode \
795 || (MODE) == TFmode)
c98f8742
JVA
796
797/* Number of actual hardware registers.
798 The hardware registers are assigned numbers for the compiler
799 from 0 to just below FIRST_PSEUDO_REGISTER.
800 All registers that the compiler knows about must be given numbers,
801 even those that are not normally considered general registers.
802
803 In the 80386 we give the 8 general purpose registers the numbers 0-7.
804 We number the floating point registers 8-15.
805 Note that registers 0-7 can be accessed as a short or int,
806 while only 0-3 may be used with byte `mov' instructions.
807
808 Reg 16 does not correspond to any hardware register, but instead
809 appears in the RTL as an argument pointer prior to reload, and is
810 eliminated during reloading in favor of either the stack or frame
892a2d68 811 pointer. */
c98f8742 812
3f3f2124 813#define FIRST_PSEUDO_REGISTER 53
c98f8742 814
3073d01c
ML
815/* Number of hardware registers that go into the DWARF-2 unwind info.
816 If not defined, equals FIRST_PSEUDO_REGISTER. */
817
818#define DWARF_FRAME_REGISTERS 17
819
c98f8742
JVA
820/* 1 for registers that have pervasive standard uses
821 and are not available for the register allocator.
3f3f2124
JH
822 On the 80386, the stack pointer is such, as is the arg pointer.
823
824 The value is an mask - bit 1 is set for fixed registers
825 for 32bit target, while 2 is set for fixed registers for 64bit.
826 Proper value is computed in the CONDITIONAL_REGISTER_USAGE.
827 */
a7180f70
BS
828#define FIXED_REGISTERS \
829/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \
3f3f2124 830{ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, \
a7180f70 831/*arg,flags,fpsr,dir,frame*/ \
3f3f2124 832 3, 3, 3, 3, 3, \
a7180f70
BS
833/*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \
834 0, 0, 0, 0, 0, 0, 0, 0, \
835/*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/ \
3f3f2124
JH
836 0, 0, 0, 0, 0, 0, 0, 0, \
837/* r8, r9, r10, r11, r12, r13, r14, r15*/ \
838 1, 1, 1, 1, 1, 1, 1, 1, \
839/*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/ \
840 1, 1, 1, 1, 1, 1, 1, 1}
841
c98f8742
JVA
842
843/* 1 for registers not available across function calls.
844 These must include the FIXED_REGISTERS and also any
845 registers that can be used without being saved.
846 The latter must include the registers where values are returned
847 and the register where structure-value addresses are passed.
3f3f2124
JH
848 Aside from that, you can include as many other registers as you like.
849
850 The value is an mask - bit 1 is set for call used
851 for 32bit target, while 2 is set for call used for 64bit.
852 Proper value is computed in the CONDITIONAL_REGISTER_USAGE.
853*/
a7180f70
BS
854#define CALL_USED_REGISTERS \
855/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \
3f3f2124 856{ 3, 3, 3, 0, 2, 2, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, \
a7180f70 857/*arg,flags,fpsr,dir,frame*/ \
3f3f2124 858 3, 3, 3, 3, 3, \
a7180f70 859/*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \
3f3f2124 860 3, 3, 3, 3, 3, 3, 3, 3, \
a7180f70 861/*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/ \
3f3f2124
JH
862 3, 3, 3, 3, 3, 3, 3, 3, \
863/* r8, r9, r10, r11, r12, r13, r14, r15*/ \
864 3, 3, 3, 3, 1, 1, 1, 1, \
865/*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/ \
866 3, 3, 3, 3, 3, 3, 3, 3} \
c98f8742 867
3b3c6a3f
MM
868/* Order in which to allocate registers. Each register must be
869 listed once, even those in FIXED_REGISTERS. List frame pointer
870 late and fixed registers last. Note that, in general, we prefer
871 registers listed in CALL_USED_REGISTERS, keeping the others
872 available for storage of persistent values.
873
162f023b
JH
874 The ORDER_REGS_FOR_LOCAL_ALLOC actually overwrite the order,
875 so this is just empty initializer for array. */
3b3c6a3f 876
162f023b
JH
877#define REG_ALLOC_ORDER \
878{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\
879 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, \
880 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \
881 48, 49, 50, 51, 52 }
3b3c6a3f 882
162f023b
JH
883/* ORDER_REGS_FOR_LOCAL_ALLOC is a macro which permits reg_alloc_order
884 to be rearranged based on a particular function. When using sse math,
885 we want to allocase SSE before x87 registers and vice vera. */
3b3c6a3f 886
162f023b 887#define ORDER_REGS_FOR_LOCAL_ALLOC x86_order_regs_for_local_alloc ()
3b3c6a3f 888
f5316dfe 889
c98f8742 890/* Macro to conditionally modify fixed_regs/call_used_regs. */
a7180f70 891#define CONDITIONAL_REGISTER_USAGE \
d9a5f180 892do { \
3f3f2124
JH
893 int i; \
894 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \
895 { \
896 fixed_regs[i] = (fixed_regs[i] & (TARGET_64BIT ? 2 : 1)) != 0; \
897 call_used_regs[i] = (call_used_regs[i] \
898 & (TARGET_64BIT ? 2 : 1)) != 0; \
899 } \
5b43fed1 900 if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \
a7180f70
BS
901 { \
902 fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
903 call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
904 } \
905 if (! TARGET_MMX) \
906 { \
907 int i; \
908 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \
909 if (TEST_HARD_REG_BIT (reg_class_contents[(int)MMX_REGS], i)) \
910 fixed_regs[i] = call_used_regs[i] = 1; \
911 } \
912 if (! TARGET_SSE) \
913 { \
914 int i; \
915 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \
916 if (TEST_HARD_REG_BIT (reg_class_contents[(int)SSE_REGS], i)) \
917 fixed_regs[i] = call_used_regs[i] = 1; \
918 } \
919 if (! TARGET_80387 && ! TARGET_FLOAT_RETURNS_IN_80387) \
920 { \
921 int i; \
922 HARD_REG_SET x; \
923 COPY_HARD_REG_SET (x, reg_class_contents[(int)FLOAT_REGS]); \
924 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \
925 if (TEST_HARD_REG_BIT (x, i)) \
926 fixed_regs[i] = call_used_regs[i] = 1; \
927 } \
d9a5f180 928 } while (0)
c98f8742
JVA
929
930/* Return number of consecutive hard regs needed starting at reg REGNO
931 to hold something of mode MODE.
932 This is ordinarily the length in words of a value of mode MODE
933 but can be less for certain modes in special long registers.
934
935 Actually there are no two word move instructions for consecutive
936 registers. And only registers 0-3 may have mov byte instructions
937 applied to them.
938 */
939
940#define HARD_REGNO_NREGS(REGNO, MODE) \
92d0fb09
JH
941 (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO) \
942 ? (COMPLEX_MODE_P (MODE) ? 2 : 1) \
d9a5f180 943 : ((MODE) == TFmode \
92d0fb09 944 ? (TARGET_64BIT ? 2 : 3) \
d9a5f180 945 : (MODE) == TCmode \
92d0fb09 946 ? (TARGET_64BIT ? 4 : 6) \
2b589241 947 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)))
c98f8742 948
fbe5eb6d
BS
949#define VALID_SSE2_REG_MODE(MODE) \
950 ((MODE) == V16QImode || (MODE) == V8HImode || (MODE) == V2DFmode \
951 || (MODE) == V2DImode)
952
d9a5f180
GS
953#define VALID_SSE_REG_MODE(MODE) \
954 ((MODE) == TImode || (MODE) == V4SFmode || (MODE) == V4SImode \
955 || (MODE) == SFmode \
fbe5eb6d
BS
956 /* Always accept SSE2 modes so that xmmintrin.h compiles. */ \
957 || VALID_SSE2_REG_MODE (MODE) \
141e454b 958 || (TARGET_SSE2 && ((MODE) == DFmode || VALID_MMX_REG_MODE (MODE))))
a7180f70 959
47f339cf
BS
960#define VALID_MMX_REG_MODE_3DNOW(MODE) \
961 ((MODE) == V2SFmode || (MODE) == SFmode)
962
d9a5f180
GS
963#define VALID_MMX_REG_MODE(MODE) \
964 ((MODE) == DImode || (MODE) == V8QImode || (MODE) == V4HImode \
a7180f70
BS
965 || (MODE) == V2SImode || (MODE) == SImode)
966
967#define VECTOR_MODE_SUPPORTED_P(MODE) \
968 (VALID_SSE_REG_MODE (MODE) && TARGET_SSE ? 1 \
47f339cf
BS
969 : VALID_MMX_REG_MODE (MODE) && TARGET_MMX ? 1 \
970 : VALID_MMX_REG_MODE_3DNOW (MODE) && TARGET_3DNOW ? 1 : 0)
a7180f70 971
d9a5f180
GS
972#define VALID_FP_MODE_P(MODE) \
973 ((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode \
974 || (!TARGET_64BIT && (MODE) == XFmode) \
975 || (MODE) == SCmode || (MODE) == DCmode || (MODE) == TCmode \
976 || (!TARGET_64BIT && (MODE) == XCmode))
a946dd00 977
d9a5f180
GS
978#define VALID_INT_MODE_P(MODE) \
979 ((MODE) == QImode || (MODE) == HImode || (MODE) == SImode \
980 || (MODE) == DImode \
981 || (MODE) == CQImode || (MODE) == CHImode || (MODE) == CSImode \
982 || (MODE) == CDImode \
983 || (TARGET_64BIT && ((MODE) == TImode || (MODE) == CTImode)))
a946dd00 984
e075ae69 985/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */
48227a2c 986
a946dd00 987#define HARD_REGNO_MODE_OK(REGNO, MODE) \
d9a5f180 988 ix86_hard_regno_mode_ok ((REGNO), (MODE))
c98f8742
JVA
989
990/* Value is 1 if it is a good idea to tie two pseudo registers
991 when one has mode MODE1 and one has mode MODE2.
992 If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
993 for any hard reg, then this must be 0 for correct output. */
994
95912252
RH
995#define MODES_TIEABLE_P(MODE1, MODE2) \
996 ((MODE1) == (MODE2) \
d2836273
JH
997 || (((MODE1) == HImode || (MODE1) == SImode \
998 || ((MODE1) == QImode \
999 && (TARGET_64BIT || !TARGET_PARTIAL_REG_STALL)) \
1000 || ((MODE1) == DImode && TARGET_64BIT)) \
1001 && ((MODE2) == HImode || (MODE2) == SImode \
1002 || ((MODE1) == QImode \
1003 && (TARGET_64BIT || !TARGET_PARTIAL_REG_STALL)) \
1004 || ((MODE2) == DImode && TARGET_64BIT))))
1005
c98f8742 1006
e075ae69 1007/* Specify the modes required to caller save a given hard regno.
787dc842 1008 We do this on i386 to prevent flags from being saved at all.
e075ae69 1009
787dc842
JH
1010 Kill any attempts to combine saving of modes. */
1011
d9a5f180
GS
1012#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
1013 (CC_REGNO_P (REGNO) ? VOIDmode \
1014 : (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode \
1015 : (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS)) \
1016 : (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode \
1017 : (MODE) == QImode && (REGNO) >= 4 && !TARGET_64BIT ? SImode \
d2836273 1018 : (MODE))
c98f8742
JVA
1019/* Specify the registers used for certain standard purposes.
1020 The values of these macros are register numbers. */
1021
1022/* on the 386 the pc register is %eip, and is not usable as a general
1023 register. The ordinary mov instructions won't work */
1024/* #define PC_REGNUM */
1025
1026/* Register to use for pushing function arguments. */
1027#define STACK_POINTER_REGNUM 7
1028
1029/* Base register for access to local variables of the function. */
564d80f4
JH
1030#define HARD_FRAME_POINTER_REGNUM 6
1031
1032/* Base register for access to local variables of the function. */
1033#define FRAME_POINTER_REGNUM 20
c98f8742
JVA
1034
1035/* First floating point reg */
1036#define FIRST_FLOAT_REG 8
1037
1038/* First & last stack-like regs */
1039#define FIRST_STACK_REG FIRST_FLOAT_REG
1040#define LAST_STACK_REG (FIRST_FLOAT_REG + 7)
1041
e075ae69
RH
1042#define FLAGS_REG 17
1043#define FPSR_REG 18
7c7ef435 1044#define DIRFLAG_REG 19
e075ae69 1045
a7180f70
BS
1046#define FIRST_SSE_REG (FRAME_POINTER_REGNUM + 1)
1047#define LAST_SSE_REG (FIRST_SSE_REG + 7)
1048
1049#define FIRST_MMX_REG (LAST_SSE_REG + 1)
1050#define LAST_MMX_REG (FIRST_MMX_REG + 7)
1051
3f3f2124
JH
1052#define FIRST_REX_INT_REG (LAST_MMX_REG + 1)
1053#define LAST_REX_INT_REG (FIRST_REX_INT_REG + 7)
1054
1055#define FIRST_REX_SSE_REG (LAST_REX_INT_REG + 1)
1056#define LAST_REX_SSE_REG (FIRST_REX_SSE_REG + 7)
1057
c98f8742
JVA
1058/* Value should be nonzero if functions must have frame pointers.
1059 Zero means the frame pointer need not be set up (and parms
1060 may be accessed via the stack pointer) in functions that seem suitable.
1061 This is computed in `reload', in reload1.c. */
6fca22eb
RH
1062#define FRAME_POINTER_REQUIRED ix86_frame_pointer_required ()
1063
1064/* Override this in other tm.h files to cope with various OS losage
1065 requiring a frame pointer. */
1066#ifndef SUBTARGET_FRAME_POINTER_REQUIRED
1067#define SUBTARGET_FRAME_POINTER_REQUIRED 0
1068#endif
1069
1070/* Make sure we can access arbitrary call frames. */
1071#define SETUP_FRAME_ADDRESSES() ix86_setup_frame_addresses ()
c98f8742
JVA
1072
1073/* Base register for access to arguments of the function. */
1074#define ARG_POINTER_REGNUM 16
1075
d2836273
JH
1076/* Register in which static-chain is passed to a function.
1077 We do use ECX as static chain register for 32 bit ABI. On the
1078 64bit ABI, ECX is an argument register, so we use R10 instead. */
1079#define STATIC_CHAIN_REGNUM (TARGET_64BIT ? FIRST_REX_INT_REG + 10 - 8 : 2)
c98f8742
JVA
1080
1081/* Register to hold the addressing base for position independent
5b43fed1
RH
1082 code access to data items. We don't use PIC pointer for 64bit
1083 mode. Define the regnum to dummy value to prevent gcc from
bd09bdeb
RH
1084 pessimizing code dealing with EBX.
1085
1086 To avoid clobbering a call-saved register unnecessarily, we renumber
1087 the pic register when possible. The change is visible after the
1088 prologue has been emitted. */
1089
1090#define REAL_PIC_OFFSET_TABLE_REGNUM 3
1091
1092#define PIC_OFFSET_TABLE_REGNUM \
1093 (TARGET_64BIT || !flag_pic ? INVALID_REGNUM \
1094 : reload_completed ? REGNO (pic_offset_table_rtx) \
1095 : REAL_PIC_OFFSET_TABLE_REGNUM)
c98f8742
JVA
1096
1097/* Register in which address to store a structure value
1098 arrives in the function. On the 386, the prologue
1099 copies this from the stack to register %eax. */
1100#define STRUCT_VALUE_INCOMING 0
1101
1102/* Place in which caller passes the structure value address.
1103 0 means push the value on the stack like an argument. */
1104#define STRUCT_VALUE 0
713225d4
MM
1105
1106/* A C expression which can inhibit the returning of certain function
1107 values in registers, based on the type of value. A nonzero value
1108 says to return the function value in memory, just as large
1109 structures are always returned. Here TYPE will be a C expression
1110 of type `tree', representing the data type of the value.
1111
1112 Note that values of mode `BLKmode' must be explicitly handled by
1113 this macro. Also, the option `-fpcc-struct-return' takes effect
1114 regardless of this macro. On most systems, it is possible to
1115 leave the macro undefined; this causes a default definition to be
1116 used, whose value is the constant 1 for `BLKmode' values, and 0
1117 otherwise.
1118
1119 Do not use this macro to indicate that structures and unions
1120 should always be returned in memory. You should instead use
1121 `DEFAULT_PCC_STRUCT_RETURN' to indicate this. */
1122
d9a5f180 1123#define RETURN_IN_MEMORY(TYPE) \
53c17031 1124 ix86_return_in_memory (TYPE)
713225d4 1125
c98f8742
JVA
1126\f
1127/* Define the classes of registers for register constraints in the
1128 machine description. Also define ranges of constants.
1129
1130 One of the classes must always be named ALL_REGS and include all hard regs.
1131 If there is more than one class, another class must be named NO_REGS
1132 and contain no registers.
1133
1134 The name GENERAL_REGS must be the name of a class (or an alias for
1135 another name such as ALL_REGS). This is the class of registers
1136 that is allowed by "g" or "r" in a register constraint.
1137 Also, registers outside this class are allocated only when
1138 instructions express preferences for them.
1139
1140 The classes must be numbered in nondecreasing order; that is,
1141 a larger-numbered class must never be contained completely
1142 in a smaller-numbered class.
1143
1144 For any two classes, it is very desirable that there be another
ab408a86
JVA
1145 class that represents their union.
1146
1147 It might seem that class BREG is unnecessary, since no useful 386
1148 opcode needs reg %ebx. But some systems pass args to the OS in ebx,
e075ae69
RH
1149 and the "b" register constraint is useful in asms for syscalls.
1150
1151 The flags and fpsr registers are in no class. */
c98f8742
JVA
1152
1153enum reg_class
1154{
1155 NO_REGS,
e075ae69 1156 AREG, DREG, CREG, BREG, SIREG, DIREG,
4b71cd6e 1157 AD_REGS, /* %eax/%edx for DImode */
c98f8742 1158 Q_REGS, /* %eax %ebx %ecx %edx */
564d80f4 1159 NON_Q_REGS, /* %esi %edi %ebp %esp */
c98f8742 1160 INDEX_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp */
3f3f2124
JH
1161 LEGACY_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp */
1162 GENERAL_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp %r8 - %r15*/
c98f8742
JVA
1163 FP_TOP_REG, FP_SECOND_REG, /* %st(0) %st(1) */
1164 FLOAT_REGS,
a7180f70
BS
1165 SSE_REGS,
1166 MMX_REGS,
446988df
JH
1167 FP_TOP_SSE_REGS,
1168 FP_SECOND_SSE_REGS,
1169 FLOAT_SSE_REGS,
1170 FLOAT_INT_REGS,
1171 INT_SSE_REGS,
1172 FLOAT_INT_SSE_REGS,
c98f8742
JVA
1173 ALL_REGS, LIM_REG_CLASSES
1174};
1175
d9a5f180
GS
1176#define N_REG_CLASSES ((int) LIM_REG_CLASSES)
1177
1178#define INTEGER_CLASS_P(CLASS) \
1179 reg_class_subset_p ((CLASS), GENERAL_REGS)
1180#define FLOAT_CLASS_P(CLASS) \
1181 reg_class_subset_p ((CLASS), FLOAT_REGS)
1182#define SSE_CLASS_P(CLASS) \
1183 reg_class_subset_p ((CLASS), SSE_REGS)
1184#define MMX_CLASS_P(CLASS) \
1185 reg_class_subset_p ((CLASS), MMX_REGS)
1186#define MAYBE_INTEGER_CLASS_P(CLASS) \
1187 reg_classes_intersect_p ((CLASS), GENERAL_REGS)
1188#define MAYBE_FLOAT_CLASS_P(CLASS) \
1189 reg_classes_intersect_p ((CLASS), FLOAT_REGS)
1190#define MAYBE_SSE_CLASS_P(CLASS) \
1191 reg_classes_intersect_p (SSE_REGS, (CLASS))
1192#define MAYBE_MMX_CLASS_P(CLASS) \
1193 reg_classes_intersect_p (MMX_REGS, (CLASS))
1194
1195#define Q_CLASS_P(CLASS) \
1196 reg_class_subset_p ((CLASS), Q_REGS)
7c6b971d 1197
c98f8742
JVA
1198/* Give names of register classes as strings for dump file. */
1199
1200#define REG_CLASS_NAMES \
1201{ "NO_REGS", \
ab408a86 1202 "AREG", "DREG", "CREG", "BREG", \
c98f8742 1203 "SIREG", "DIREG", \
e075ae69
RH
1204 "AD_REGS", \
1205 "Q_REGS", "NON_Q_REGS", \
c98f8742 1206 "INDEX_REGS", \
3f3f2124 1207 "LEGACY_REGS", \
c98f8742
JVA
1208 "GENERAL_REGS", \
1209 "FP_TOP_REG", "FP_SECOND_REG", \
1210 "FLOAT_REGS", \
a7180f70
BS
1211 "SSE_REGS", \
1212 "MMX_REGS", \
446988df
JH
1213 "FP_TOP_SSE_REGS", \
1214 "FP_SECOND_SSE_REGS", \
1215 "FLOAT_SSE_REGS", \
8fcaaa80 1216 "FLOAT_INT_REGS", \
446988df
JH
1217 "INT_SSE_REGS", \
1218 "FLOAT_INT_SSE_REGS", \
c98f8742
JVA
1219 "ALL_REGS" }
1220
1221/* Define which registers fit in which classes.
1222 This is an initializer for a vector of HARD_REG_SET
1223 of length N_REG_CLASSES. */
1224
a7180f70 1225#define REG_CLASS_CONTENTS \
3f3f2124
JH
1226{ { 0x00, 0x0 }, \
1227 { 0x01, 0x0 }, { 0x02, 0x0 }, /* AREG, DREG */ \
1228 { 0x04, 0x0 }, { 0x08, 0x0 }, /* CREG, BREG */ \
1229 { 0x10, 0x0 }, { 0x20, 0x0 }, /* SIREG, DIREG */ \
1230 { 0x03, 0x0 }, /* AD_REGS */ \
1231 { 0x0f, 0x0 }, /* Q_REGS */ \
1232 { 0x1100f0, 0x1fe0 }, /* NON_Q_REGS */ \
1233 { 0x7f, 0x1fe0 }, /* INDEX_REGS */ \
1234 { 0x1100ff, 0x0 }, /* LEGACY_REGS */ \
1235 { 0x1100ff, 0x1fe0 }, /* GENERAL_REGS */ \
1236 { 0x100, 0x0 }, { 0x0200, 0x0 },/* FP_TOP_REG, FP_SECOND_REG */\
1237 { 0xff00, 0x0 }, /* FLOAT_REGS */ \
1238{ 0x1fe00000,0x1fe000 }, /* SSE_REGS */ \
1239{ 0xe0000000, 0x1f }, /* MMX_REGS */ \
1240{ 0x1fe00100,0x1fe000 }, /* FP_TOP_SSE_REG */ \
1241{ 0x1fe00200,0x1fe000 }, /* FP_SECOND_SSE_REG */ \
1242{ 0x1fe0ff00,0x1fe000 }, /* FLOAT_SSE_REGS */ \
1243 { 0x1ffff, 0x1fe0 }, /* FLOAT_INT_REGS */ \
1244{ 0x1fe100ff,0x1fffe0 }, /* INT_SSE_REGS */ \
1245{ 0x1fe1ffff,0x1fffe0 }, /* FLOAT_INT_SSE_REGS */ \
1246{ 0xffffffff,0x1fffff } \
e075ae69 1247}
c98f8742
JVA
1248
1249/* The same information, inverted:
1250 Return the class number of the smallest class containing
1251 reg number REGNO. This could be a conditional expression
1252 or could index an array. */
1253
c98f8742
JVA
1254#define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO])
1255
1256/* When defined, the compiler allows registers explicitly used in the
1257 rtl to be used as spill registers but prevents the compiler from
892a2d68 1258 extending the lifetime of these registers. */
c98f8742 1259
2922fe9e 1260#define SMALL_REGISTER_CLASSES 1
c98f8742
JVA
1261
1262#define QI_REG_P(X) \
1263 (REG_P (X) && REGNO (X) < 4)
3f3f2124 1264
d9a5f180
GS
1265#define GENERAL_REGNO_P(N) \
1266 ((N) < 8 || REX_INT_REGNO_P (N))
3f3f2124
JH
1267
1268#define GENERAL_REG_P(X) \
6189a572 1269 (REG_P (X) && GENERAL_REGNO_P (REGNO (X)))
3f3f2124
JH
1270
1271#define ANY_QI_REG_P(X) (TARGET_64BIT ? GENERAL_REG_P(X) : QI_REG_P (X))
1272
c98f8742
JVA
1273#define NON_QI_REG_P(X) \
1274 (REG_P (X) && REGNO (X) >= 4 && REGNO (X) < FIRST_PSEUDO_REGISTER)
1275
d9a5f180 1276#define REX_INT_REGNO_P(N) ((N) >= FIRST_REX_INT_REG && (N) <= LAST_REX_INT_REG)
3f3f2124
JH
1277#define REX_INT_REG_P(X) (REG_P (X) && REX_INT_REGNO_P (REGNO (X)))
1278
c98f8742 1279#define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X)))
d9a5f180 1280#define FP_REGNO_P(N) ((N) >= FIRST_STACK_REG && (N) <= LAST_STACK_REG)
446988df 1281#define ANY_FP_REG_P(X) (REG_P (X) && ANY_FP_REGNO_P (REGNO (X)))
d9a5f180 1282#define ANY_FP_REGNO_P(N) (FP_REGNO_P (N) || SSE_REGNO_P (N))
a7180f70 1283
d9a5f180
GS
1284#define SSE_REGNO_P(N) \
1285 (((N) >= FIRST_SSE_REG && (N) <= LAST_SSE_REG) \
1286 || ((N) >= FIRST_REX_SSE_REG && (N) <= LAST_REX_SSE_REG))
3f3f2124 1287
d9a5f180
GS
1288#define SSE_REGNO(N) \
1289 ((N) < 8 ? FIRST_SSE_REG + (N) : FIRST_REX_SSE_REG + (N) - 8)
1290#define SSE_REG_P(N) (REG_P (N) && SSE_REGNO_P (REGNO (N)))
446988df 1291
d9a5f180 1292#define SSE_FLOAT_MODE_P(MODE) \
91da27c5 1293 ((TARGET_SSE && (MODE) == SFmode) || (TARGET_SSE2 && (MODE) == DFmode))
a7180f70 1294
d9a5f180
GS
1295#define MMX_REGNO_P(N) ((N) >= FIRST_MMX_REG && (N) <= LAST_MMX_REG)
1296#define MMX_REG_P(XOP) (REG_P (XOP) && MMX_REGNO_P (REGNO (XOP)))
c98f8742 1297
d9a5f180
GS
1298#define STACK_REG_P(XOP) \
1299 (REG_P (XOP) && \
1300 REGNO (XOP) >= FIRST_STACK_REG && \
1301 REGNO (XOP) <= LAST_STACK_REG)
c98f8742 1302
d9a5f180 1303#define NON_STACK_REG_P(XOP) (REG_P (XOP) && ! STACK_REG_P (XOP))
c98f8742 1304
d9a5f180 1305#define STACK_TOP_P(XOP) (REG_P (XOP) && REGNO (XOP) == FIRST_STACK_REG)
c98f8742 1306
e075ae69
RH
1307#define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X)))
1308#define CC_REGNO_P(X) ((X) == FLAGS_REG || (X) == FPSR_REG)
1309
cdbca172
JO
1310/* Indicate whether hard register numbered REG_NO should be converted
1311 to SSA form. */
1312#define CONVERT_HARD_REGISTER_TO_SSA_P(REG_NO) \
d9a5f180 1313 ((REG_NO) == FLAGS_REG || (REG_NO) == ARG_POINTER_REGNUM)
cdbca172 1314
c98f8742
JVA
1315/* The class value for index registers, and the one for base regs. */
1316
1317#define INDEX_REG_CLASS INDEX_REGS
1318#define BASE_REG_CLASS GENERAL_REGS
1319
1320/* Get reg_class from a letter such as appears in the machine description. */
1321
1322#define REG_CLASS_FROM_LETTER(C) \
8c2bf92a 1323 ((C) == 'r' ? GENERAL_REGS : \
3f3f2124
JH
1324 (C) == 'R' ? LEGACY_REGS : \
1325 (C) == 'q' ? TARGET_64BIT ? GENERAL_REGS : Q_REGS : \
1326 (C) == 'Q' ? Q_REGS : \
8c2bf92a
JVA
1327 (C) == 'f' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \
1328 ? FLOAT_REGS \
1329 : NO_REGS) : \
1330 (C) == 't' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \
1331 ? FP_TOP_REG \
1332 : NO_REGS) : \
1333 (C) == 'u' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \
1334 ? FP_SECOND_REG \
1335 : NO_REGS) : \
1336 (C) == 'a' ? AREG : \
1337 (C) == 'b' ? BREG : \
1338 (C) == 'c' ? CREG : \
1339 (C) == 'd' ? DREG : \
446988df
JH
1340 (C) == 'x' ? TARGET_SSE ? SSE_REGS : NO_REGS : \
1341 (C) == 'Y' ? TARGET_SSE2? SSE_REGS : NO_REGS : \
1342 (C) == 'y' ? TARGET_MMX ? MMX_REGS : NO_REGS : \
4b71cd6e 1343 (C) == 'A' ? AD_REGS : \
8c2bf92a 1344 (C) == 'D' ? DIREG : \
c98f8742
JVA
1345 (C) == 'S' ? SIREG : NO_REGS)
1346
1347/* The letters I, J, K, L and M in a register constraint string
1348 can be used to stand for particular ranges of immediate operands.
1349 This macro defines what the ranges are.
1350 C is the letter, and VALUE is a constant value.
1351 Return 1 if VALUE is in the range specified by C.
1352
1353 I is for non-DImode shifts.
1354 J is for DImode shifts.
e075ae69
RH
1355 K is for signed imm8 operands.
1356 L is for andsi as zero-extending move.
c98f8742 1357 M is for shifts that can be executed by the "lea" opcode.
1aa9fd24 1358 N is for immedaite operands for out/in instructions (0-255)
c98f8742
JVA
1359 */
1360
e075ae69
RH
1361#define CONST_OK_FOR_LETTER_P(VALUE, C) \
1362 ((C) == 'I' ? (VALUE) >= 0 && (VALUE) <= 31 \
1363 : (C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 63 \
1364 : (C) == 'K' ? (VALUE) >= -128 && (VALUE) <= 127 \
1365 : (C) == 'L' ? (VALUE) == 0xff || (VALUE) == 0xffff \
1366 : (C) == 'M' ? (VALUE) >= 0 && (VALUE) <= 3 \
1aa9fd24 1367 : (C) == 'N' ? (VALUE) >= 0 && (VALUE) <= 255 \
e075ae69 1368 : 0)
c98f8742
JVA
1369
1370/* Similar, but for floating constants, and defining letters G and H.
b4ac57ab
RS
1371 Here VALUE is the CONST_DOUBLE rtx itself. We allow constants even if
1372 TARGET_387 isn't set, because the stack register converter may need to
c47f5ea5 1373 load 0.0 into the function value register. */
c98f8742
JVA
1374
1375#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
2b04e52b
JH
1376 ((C) == 'G' ? standard_80387_constant_p (VALUE) \
1377 : ((C) == 'H' ? standard_sse_constant_p (VALUE) : 0))
c98f8742 1378
6189a572
JH
1379/* A C expression that defines the optional machine-dependent
1380 constraint letters that can be used to segregate specific types of
1381 operands, usually memory references, for the target machine. Any
1382 letter that is not elsewhere defined and not matched by
1383 `REG_CLASS_FROM_LETTER' may be used. Normally this macro will not
1384 be defined.
1385
1386 If it is required for a particular target machine, it should
1387 return 1 if VALUE corresponds to the operand type represented by
1388 the constraint letter C. If C is not defined as an extra
1389 constraint, the value returned should be 0 regardless of VALUE. */
1390
1391#define EXTRA_CONSTRAINT(VALUE, C) \
1392 ((C) == 'e' ? x86_64_sign_extended_value (VALUE) \
1393 : (C) == 'Z' ? x86_64_zero_extended_value (VALUE) \
1394 : 0)
1395
c98f8742 1396/* Place additional restrictions on the register class to use when it
4cbb525c 1397 is necessary to be able to hold a value of mode MODE in a reload
892a2d68 1398 register for which class CLASS would ordinarily be used. */
c98f8742 1399
d2836273
JH
1400#define LIMIT_RELOAD_CLASS(MODE, CLASS) \
1401 ((MODE) == QImode && !TARGET_64BIT \
3b8d200e
JJ
1402 && ((CLASS) == ALL_REGS || (CLASS) == GENERAL_REGS \
1403 || (CLASS) == LEGACY_REGS || (CLASS) == INDEX_REGS) \
c98f8742
JVA
1404 ? Q_REGS : (CLASS))
1405
1406/* Given an rtx X being reloaded into a reg required to be
1407 in class CLASS, return the class of reg to actually use.
1408 In general this is just CLASS; but on some machines
1409 in some cases it is preferable to use a more restrictive class.
1410 On the 80386 series, we prevent floating constants from being
1411 reloaded into floating registers (since no move-insn can do that)
1412 and we ensure that QImodes aren't reloaded into the esi or edi reg. */
1413
d398b3b1 1414/* Put float CONST_DOUBLE in the constant pool instead of fp regs.
c98f8742 1415 QImode must go into class Q_REGS.
d398b3b1 1416 Narrow ALL_REGS to GENERAL_REGS. This supports allowing movsf and
892a2d68 1417 movdf to do mem-to-mem moves through integer regs. */
c98f8742 1418
d9a5f180
GS
1419#define PREFERRED_RELOAD_CLASS(X, CLASS) \
1420 ix86_preferred_reload_class ((X), (CLASS))
85ff473e
JVA
1421
1422/* If we are copying between general and FP registers, we need a memory
f84aa48a 1423 location. The same is true for SSE and MMX registers. */
d9a5f180
GS
1424#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
1425 ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1)
e075ae69
RH
1426
1427/* QImode spills from non-QI registers need a scratch. This does not
1428 happen often -- the only example so far requires an uninitialized
1429 pseudo. */
1430
d9a5f180 1431#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, OUT) \
3b8d200e
JJ
1432 (((CLASS) == GENERAL_REGS || (CLASS) == LEGACY_REGS \
1433 || (CLASS) == INDEX_REGS) && !TARGET_64BIT && (MODE) == QImode \
d2836273 1434 ? Q_REGS : NO_REGS)
c98f8742
JVA
1435
1436/* Return the maximum number of consecutive registers
1437 needed to represent mode MODE in a register of class CLASS. */
1438/* On the 80386, this is the size of MODE in words,
92d0fb09
JH
1439 except in the FP regs, where a single reg is always enough.
1440 The TFmodes are really just 80bit values, so we use only 3 registers
1441 to hold them, instead of 4, as the size would suggest.
1442 */
a7180f70 1443#define CLASS_MAX_NREGS(CLASS, MODE) \
92d0fb09
JH
1444 (!MAYBE_INTEGER_CLASS_P (CLASS) \
1445 ? (COMPLEX_MODE_P (MODE) ? 2 : 1) \
1446 : ((GET_MODE_SIZE ((MODE) == TFmode ? XFmode : (MODE)) \
1447 + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
f5316dfe
MM
1448
1449/* A C expression whose value is nonzero if pseudos that have been
1450 assigned to registers of class CLASS would likely be spilled
1451 because registers of CLASS are needed for spill registers.
1452
1453 The default value of this macro returns 1 if CLASS has exactly one
1454 register and zero otherwise. On most machines, this default
1455 should be used. Only define this macro to some other expression
1456 if pseudo allocated by `local-alloc.c' end up in memory because
ddd5a7c1 1457 their hard registers were needed for spill registers. If this
f5316dfe
MM
1458 macro returns nonzero for those classes, those pseudos will only
1459 be allocated by `global.c', which knows how to reallocate the
1460 pseudo to another register. If there would not be another
1461 register available for reallocation, you should not change the
1462 definition of this macro since the only effect of such a
1463 definition would be to slow down register allocation. */
1464
1465#define CLASS_LIKELY_SPILLED_P(CLASS) \
1466 (((CLASS) == AREG) \
1467 || ((CLASS) == DREG) \
1468 || ((CLASS) == CREG) \
1469 || ((CLASS) == BREG) \
1470 || ((CLASS) == AD_REGS) \
1471 || ((CLASS) == SIREG) \
1472 || ((CLASS) == DIREG))
1473
e075ae69
RH
1474/* A C statement that adds to CLOBBERS any hard regs the port wishes
1475 to automatically clobber for all asms.
1476
1477 We do this in the new i386 backend to maintain source compatibility
1478 with the old cc0-based compiler. */
1479
d9a5f180
GS
1480#define MD_ASM_CLOBBERS(CLOBBERS) \
1481 do { \
1482 (CLOBBERS) = tree_cons (NULL_TREE, build_string (5, "flags"), \
1483 (CLOBBERS)); \
1484 (CLOBBERS) = tree_cons (NULL_TREE, build_string (4, "fpsr"), \
1485 (CLOBBERS)); \
1486 (CLOBBERS) = tree_cons (NULL_TREE, build_string (7, "dirflag"), \
1487 (CLOBBERS)); \
e075ae69 1488 } while (0)
c98f8742
JVA
1489\f
1490/* Stack layout; function entry, exit and calling. */
1491
1492/* Define this if pushing a word on the stack
1493 makes the stack pointer a smaller address. */
1494#define STACK_GROWS_DOWNWARD
1495
1496/* Define this if the nominal address of the stack frame
1497 is at the high-address end of the local variables;
1498 that is, each additional local variable allocated
1499 goes at a more negative offset in the frame. */
1500#define FRAME_GROWS_DOWNWARD
1501
1502/* Offset within stack frame to start allocating local variables at.
1503 If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
1504 first local allocated. Otherwise, it is the offset to the BEGINNING
1505 of the first local allocated. */
1506#define STARTING_FRAME_OFFSET 0
1507
1508/* If we generate an insn to push BYTES bytes,
1509 this says how many the stack pointer really advances by.
1510 On 386 pushw decrements by exactly 2 no matter what the position was.
1511 On the 386 there is no pushb; we use pushw instead, and this
d2836273
JH
1512 has the effect of rounding up to 2.
1513
1514 For 64bit ABI we round up to 8 bytes.
1515 */
c98f8742 1516
d2836273
JH
1517#define PUSH_ROUNDING(BYTES) \
1518 (TARGET_64BIT \
1519 ? (((BYTES) + 7) & (-8)) \
1520 : (((BYTES) + 1) & (-2)))
c98f8742 1521
f73ad30e
JH
1522/* If defined, the maximum amount of space required for outgoing arguments will
1523 be computed and placed into the variable
1524 `current_function_outgoing_args_size'. No space will be pushed onto the
1525 stack for each call; instead, the function prologue should increase the stack
1526 frame size by this amount. */
1527
1528#define ACCUMULATE_OUTGOING_ARGS TARGET_ACCUMULATE_OUTGOING_ARGS
1529
1530/* If defined, a C expression whose value is nonzero when we want to use PUSH
1531 instructions to pass outgoing arguments. */
1532
1533#define PUSH_ARGS (TARGET_PUSH_ARGS && !ACCUMULATE_OUTGOING_ARGS)
1534
c98f8742
JVA
1535/* Offset of first parameter from the argument pointer register value. */
1536#define FIRST_PARM_OFFSET(FNDECL) 0
1537
a7180f70
BS
1538/* Define this macro if functions should assume that stack space has been
1539 allocated for arguments even when their values are passed in registers.
1540
1541 The value of this macro is the size, in bytes, of the area reserved for
1542 arguments passed in registers for the function represented by FNDECL.
1543
1544 This space can be allocated by the caller, or be a part of the
1545 machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
1546 which. */
1547#define REG_PARM_STACK_SPACE(FNDECL) 0
1548
1549/* Define as a C expression that evaluates to nonzero if we do not know how
1550 to pass TYPE solely in registers. The file expr.h defines a
1551 definition that is usually appropriate, refer to expr.h for additional
1552 documentation. If `REG_PARM_STACK_SPACE' is defined, the argument will be
1553 computed in the stack and then loaded into a register. */
d9a5f180
GS
1554#define MUST_PASS_IN_STACK(MODE, TYPE) \
1555 ((TYPE) != 0 \
1556 && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \
1557 || TREE_ADDRESSABLE (TYPE) \
1558 || ((MODE) == TImode) \
1559 || ((MODE) == BLKmode \
1560 && ! ((TYPE) != 0 \
1561 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
1562 && 0 == (int_size_in_bytes (TYPE) \
1563 % (PARM_BOUNDARY / BITS_PER_UNIT))) \
1564 && (FUNCTION_ARG_PADDING (MODE, TYPE) \
a7180f70
BS
1565 == (BYTES_BIG_ENDIAN ? upward : downward)))))
1566
c98f8742
JVA
1567/* Value is the number of bytes of arguments automatically
1568 popped when returning from a subroutine call.
8b109b37 1569 FUNDECL is the declaration node of the function (as a tree),
c98f8742
JVA
1570 FUNTYPE is the data type of the function (as a tree),
1571 or for a library call it is an identifier node for the subroutine name.
1572 SIZE is the number of bytes of arguments passed on the stack.
1573
1574 On the 80386, the RTD insn may be used to pop them if the number
1575 of args is fixed, but if the number is variable then the caller
1576 must pop them all. RTD can't be used for library calls now
1577 because the library is compiled with the Unix compiler.
1578 Use of RTD is a selectable option, since it is incompatible with
1579 standard Unix calling sequences. If the option is not selected,
b08de47e
MM
1580 the caller must always pop the args.
1581
1582 The attribute stdcall is equivalent to RTD on a per module basis. */
c98f8742 1583
d9a5f180
GS
1584#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) \
1585 ix86_return_pops_args ((FUNDECL), (FUNTYPE), (SIZE))
c98f8742 1586
8c2bf92a
JVA
1587/* Define how to find the value returned by a function.
1588 VALTYPE is the data type of the value (as a tree).
1589 If the precise function being called is known, FUNC is its FUNCTION_DECL;
1590 otherwise, FUNC is 0. */
c98f8742 1591#define FUNCTION_VALUE(VALTYPE, FUNC) \
53c17031
JH
1592 ix86_function_value (VALTYPE)
1593
1594#define FUNCTION_VALUE_REGNO_P(N) \
1595 ix86_function_value_regno_p (N)
c98f8742
JVA
1596
1597/* Define how to find the value returned by a library function
1598 assuming the value has mode MODE. */
1599
1600#define LIBCALL_VALUE(MODE) \
53c17031 1601 ix86_libcall_value (MODE)
c98f8742 1602
e9125c09
TW
1603/* Define the size of the result block used for communication between
1604 untyped_call and untyped_return. The block contains a DImode value
1605 followed by the block used by fnsave and frstor. */
1606
1607#define APPLY_RESULT_SIZE (8+108)
1608
b08de47e 1609/* 1 if N is a possible register number for function argument passing. */
53c17031 1610#define FUNCTION_ARG_REGNO_P(N) ix86_function_arg_regno_p (N)
c98f8742
JVA
1611
1612/* Define a data type for recording info about an argument list
1613 during the scan of that argument list. This data type should
1614 hold all necessary information about the function itself
1615 and about the args processed so far, enough to enable macros
b08de47e 1616 such as FUNCTION_ARG to determine where the next arg should go. */
c98f8742 1617
e075ae69 1618typedef struct ix86_args {
b08de47e
MM
1619 int words; /* # words passed so far */
1620 int nregs; /* # registers available for passing */
1621 int regno; /* next available register number */
a7180f70
BS
1622 int sse_words; /* # sse words passed so far */
1623 int sse_nregs; /* # sse registers available for passing */
1624 int sse_regno; /* next available sse register number */
892a2d68 1625 int maybe_vaarg; /* true for calls to possibly vardic fncts. */
b08de47e 1626} CUMULATIVE_ARGS;
c98f8742
JVA
1627
1628/* Initialize a variable CUM of type CUMULATIVE_ARGS
1629 for a call to a function whose data type is FNTYPE.
b08de47e 1630 For a library call, FNTYPE is 0. */
c98f8742 1631
d9a5f180
GS
1632#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
1633 init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME))
c98f8742
JVA
1634
1635/* Update the data in CUM to advance over an argument
1636 of mode MODE and data type TYPE.
1637 (TYPE is null for libcalls where that information may not be available.) */
1638
d9a5f180
GS
1639#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
1640 function_arg_advance (&(CUM), (MODE), (TYPE), (NAMED))
c98f8742
JVA
1641
1642/* Define where to put the arguments to a function.
1643 Value is zero to push the argument on the stack,
1644 or a hard register in which to store the argument.
1645
1646 MODE is the argument's machine mode.
1647 TYPE is the data type of the argument (as a tree).
1648 This is null for libcalls where that information may
1649 not be available.
1650 CUM is a variable of type CUMULATIVE_ARGS which gives info about
1651 the preceding args and about the function being called.
1652 NAMED is nonzero if this argument is a named parameter
1653 (otherwise it is an extra parameter matching an ellipsis). */
1654
c98f8742 1655#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
d9a5f180 1656 function_arg (&(CUM), (MODE), (TYPE), (NAMED))
c98f8742
JVA
1657
1658/* For an arg passed partly in registers and partly in memory,
1659 this is the number of registers used.
1660 For args passed entirely in registers or entirely in memory, zero. */
1661
e075ae69 1662#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0
c98f8742 1663
26f2c02a
ZW
1664/* If PIC, we cannot make sibling calls to global functions
1665 because the PLT requires %ebx live.
1666 If we are returning floats on the register stack, we cannot make
1667 sibling calls to functions that return floats. (The stack adjust
1668 instruction will wind up after the sibcall jump, and not be executed.) */
d9a5f180
GS
1669#define FUNCTION_OK_FOR_SIBCALL(DECL) \
1670 ((DECL) \
1671 && (! flag_pic || ! TREE_PUBLIC (DECL)) \
1672 && (! TARGET_FLOAT_RETURNS_IN_80387 \
1673 || ! FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (DECL)))) \
26f2c02a 1674 || FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl))))))
cbbf65e0 1675
ad919812
JH
1676/* Perform any needed actions needed for a function that is receiving a
1677 variable number of arguments.
1678
1679 CUM is as above.
1680
1681 MODE and TYPE are the mode and type of the current parameter.
1682
1683 PRETEND_SIZE is a variable that should be set to the amount of stack
1684 that must be pushed by the prolog to pretend that our caller pushed
1685 it.
1686
1687 Normally, this macro will push all remaining incoming registers on the
1688 stack and set PRETEND_SIZE to the length of the registers pushed. */
1689
d9a5f180
GS
1690#define SETUP_INCOMING_VARARGS(CUM, MODE, TYPE, PRETEND_SIZE, NO_RTL) \
1691 ix86_setup_incoming_varargs (&(CUM), (MODE), (TYPE), &(PRETEND_SIZE), \
1692 (NO_RTL))
ad919812
JH
1693
1694/* Define the `__builtin_va_list' type for the ABI. */
1695#define BUILD_VA_LIST_TYPE(VALIST) \
d9a5f180 1696 ((VALIST) = ix86_build_va_list ())
ad919812
JH
1697
1698/* Implement `va_start' for varargs and stdarg. */
d9a5f180
GS
1699#define EXPAND_BUILTIN_VA_START(STDARG, VALIST, NEXTARG) \
1700 ix86_va_start ((STDARG), (VALIST), (NEXTARG))
ad919812
JH
1701
1702/* Implement `va_arg'. */
d9a5f180
GS
1703#define EXPAND_BUILTIN_VA_ARG(VALIST, TYPE) \
1704 ix86_va_arg ((VALIST), (TYPE))
ad919812 1705
4cf12e7e
RH
1706/* This macro is invoked at the end of compilation. It is used here to
1707 output code for -fpic that will load the return address into %ebx. */
3a0433fd 1708
4cf12e7e
RH
1709#undef ASM_FILE_END
1710#define ASM_FILE_END(FILE) ix86_asm_file_end (FILE)
3a0433fd 1711
c98f8742
JVA
1712/* Output assembler code to FILE to increment profiler label # LABELNO
1713 for profiling a function entry. */
1714
d9a5f180
GS
1715#define FUNCTION_PROFILER(FILE, LABELNO) \
1716do { \
c98f8742
JVA
1717 if (flag_pic) \
1718 { \
d9a5f180 1719 fprintf ((FILE), "\tleal\t%sP%d@GOTOFF(%%ebx),%%edx\n", \
c98f8742 1720 LPREFIX, (LABELNO)); \
d9a5f180 1721 fprintf ((FILE), "\tcall\t*_mcount@GOT(%%ebx)\n"); \
c98f8742
JVA
1722 } \
1723 else \
1724 { \
d9a5f180
GS
1725 fprintf ((FILE), "\tmovl\t$%sP%d,%%edx\n", LPREFIX, (LABELNO)); \
1726 fprintf ((FILE), "\tcall\t_mcount\n"); \
c98f8742 1727 } \
d9a5f180 1728} while (0)
c98f8742
JVA
1729
1730/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
1731 the stack pointer does not matter. The value is tested only in
1732 functions that have frame pointers.
1733 No definition is equivalent to always zero. */
1734/* Note on the 386 it might be more efficient not to define this since
1735 we have to restore it ourselves from the frame pointer, in order to
1736 use pop */
1737
1738#define EXIT_IGNORE_STACK 1
1739
c98f8742
JVA
1740/* Output assembler code for a block containing the constant parts
1741 of a trampoline, leaving space for the variable parts. */
1742
a269a03c 1743/* On the 386, the trampoline contains two instructions:
c98f8742 1744 mov #STATIC,ecx
a269a03c
JC
1745 jmp FUNCTION
1746 The trampoline is generated entirely at runtime. The operand of JMP
1747 is the address of FUNCTION relative to the instruction following the
1748 JMP (which is 5 bytes long). */
c98f8742
JVA
1749
1750/* Length in units of the trampoline for entering a nested function. */
1751
39d04363 1752#define TRAMPOLINE_SIZE (TARGET_64BIT ? 23 : 10)
c98f8742
JVA
1753
1754/* Emit RTL insns to initialize the variable parts of a trampoline.
1755 FNADDR is an RTX for the address of the function's pure code.
1756 CXT is an RTX for the static chain value for the function. */
1757
d9a5f180
GS
1758#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
1759 x86_initialize_trampoline ((TRAMP), (FNADDR), (CXT))
c98f8742
JVA
1760\f
1761/* Definitions for register eliminations.
1762
1763 This is an array of structures. Each structure initializes one pair
1764 of eliminable registers. The "from" register number is given first,
1765 followed by "to". Eliminations of the same "from" register are listed
1766 in order of preference.
1767
afc2cd05
NC
1768 There are two registers that can always be eliminated on the i386.
1769 The frame pointer and the arg pointer can be replaced by either the
1770 hard frame pointer or to the stack pointer, depending upon the
1771 circumstances. The hard frame pointer is not used before reload and
1772 so it is not eligible for elimination. */
c98f8742 1773
564d80f4
JH
1774#define ELIMINABLE_REGS \
1775{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
1776 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
1777 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
1778 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}} \
c98f8742 1779
2c5a510c
RH
1780/* Given FROM and TO register numbers, say whether this elimination is
1781 allowed. Frame pointer elimination is automatically handled.
c98f8742
JVA
1782
1783 All other eliminations are valid. */
1784
2c5a510c
RH
1785#define CAN_ELIMINATE(FROM, TO) \
1786 ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1)
c98f8742
JVA
1787
1788/* Define the offset between two registers, one to be eliminated, and the other
1789 its replacement, at the start of a routine. */
1790
d9a5f180
GS
1791#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
1792 ((OFFSET) = ix86_initial_elimination_offset ((FROM), (TO)))
c98f8742
JVA
1793\f
1794/* Addressing modes, and classification of registers for them. */
1795
940da324
JL
1796/* #define HAVE_POST_INCREMENT 0 */
1797/* #define HAVE_POST_DECREMENT 0 */
c98f8742 1798
940da324
JL
1799/* #define HAVE_PRE_DECREMENT 0 */
1800/* #define HAVE_PRE_INCREMENT 0 */
c98f8742
JVA
1801
1802/* Macros to check register numbers against specific register classes. */
1803
1804/* These assume that REGNO is a hard or pseudo reg number.
1805 They give nonzero only if REGNO is a hard reg of the suitable class
1806 or a pseudo reg currently allocated to a suitable hard reg.
1807 Since they use reg_renumber, they are safe only once reg_renumber
1808 has been allocated, which happens in local-alloc.c. */
1809
3f3f2124
JH
1810#define REGNO_OK_FOR_INDEX_P(REGNO) \
1811 ((REGNO) < STACK_POINTER_REGNUM \
1812 || (REGNO >= FIRST_REX_INT_REG \
1813 && (REGNO) <= LAST_REX_INT_REG) \
d9a5f180
GS
1814 || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG \
1815 && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG) \
1816 || (unsigned) reg_renumber[(REGNO)] < STACK_POINTER_REGNUM)
c98f8742 1817
3f3f2124
JH
1818#define REGNO_OK_FOR_BASE_P(REGNO) \
1819 ((REGNO) <= STACK_POINTER_REGNUM \
1820 || (REGNO) == ARG_POINTER_REGNUM \
1821 || (REGNO) == FRAME_POINTER_REGNUM \
1822 || (REGNO >= FIRST_REX_INT_REG \
1823 && (REGNO) <= LAST_REX_INT_REG) \
d9a5f180
GS
1824 || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG \
1825 && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG) \
1826 || (unsigned) reg_renumber[(REGNO)] <= STACK_POINTER_REGNUM)
c98f8742 1827
d9a5f180
GS
1828#define REGNO_OK_FOR_SIREG_P(REGNO) \
1829 ((REGNO) == 4 || reg_renumber[(REGNO)] == 4)
1830#define REGNO_OK_FOR_DIREG_P(REGNO) \
1831 ((REGNO) == 5 || reg_renumber[(REGNO)] == 5)
c98f8742
JVA
1832
1833/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1834 and check its validity for a certain class.
1835 We have two alternate definitions for each of them.
1836 The usual definition accepts all pseudo regs; the other rejects
1837 them unless they have been allocated suitable hard regs.
1838 The symbol REG_OK_STRICT causes the latter definition to be used.
1839
1840 Most source files want to accept pseudo regs in the hope that
1841 they will get allocated to the class that the insn wants them to be in.
1842 Source files for reload pass need to be strict.
1843 After reload, it makes no difference, since pseudo regs have
1844 been eliminated by then. */
1845
c98f8742 1846
3b3c6a3f
MM
1847/* Non strict versions, pseudos are ok */
1848#define REG_OK_FOR_INDEX_NONSTRICT_P(X) \
1849 (REGNO (X) < STACK_POINTER_REGNUM \
3f3f2124
JH
1850 || (REGNO (X) >= FIRST_REX_INT_REG \
1851 && REGNO (X) <= LAST_REX_INT_REG) \
c98f8742
JVA
1852 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1853
3b3c6a3f
MM
1854#define REG_OK_FOR_BASE_NONSTRICT_P(X) \
1855 (REGNO (X) <= STACK_POINTER_REGNUM \
1856 || REGNO (X) == ARG_POINTER_REGNUM \
3f3f2124
JH
1857 || REGNO (X) == FRAME_POINTER_REGNUM \
1858 || (REGNO (X) >= FIRST_REX_INT_REG \
1859 && REGNO (X) <= LAST_REX_INT_REG) \
3b3c6a3f 1860 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
c98f8742 1861
3b3c6a3f
MM
1862/* Strict versions, hard registers only */
1863#define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1864#define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
c98f8742 1865
3b3c6a3f 1866#ifndef REG_OK_STRICT
d9a5f180
GS
1867#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_NONSTRICT_P (X)
1868#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NONSTRICT_P (X)
3b3c6a3f
MM
1869
1870#else
d9a5f180
GS
1871#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P (X)
1872#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P (X)
c98f8742
JVA
1873#endif
1874
1875/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
1876 that is a valid memory address for an instruction.
1877 The MODE argument is the machine mode for the MEM expression
1878 that wants to use this address.
1879
1880 The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS,
1881 except for CONSTANT_ADDRESS_P which is usually machine-independent.
1882
1883 See legitimize_pic_address in i386.c for details as to what
1884 constitutes a legitimate address when -fpic is used. */
1885
1886#define MAX_REGS_PER_ADDRESS 2
1887
f996902d 1888#define CONSTANT_ADDRESS_P(X) constant_address_p (X)
c98f8742
JVA
1889
1890/* Nonzero if the constant value X is a legitimate general operand.
1891 It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
1892
f996902d 1893#define LEGITIMATE_CONSTANT_P(X) legitimate_constant_p (X)
c98f8742 1894
3b3c6a3f
MM
1895#ifdef REG_OK_STRICT
1896#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
d9a5f180
GS
1897do { \
1898 if (legitimate_address_p ((MODE), (X), 1)) \
3b3c6a3f 1899 goto ADDR; \
d9a5f180 1900} while (0)
c98f8742 1901
3b3c6a3f
MM
1902#else
1903#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
d9a5f180
GS
1904do { \
1905 if (legitimate_address_p ((MODE), (X), 0)) \
c98f8742 1906 goto ADDR; \
d9a5f180 1907} while (0)
c98f8742 1908
3b3c6a3f
MM
1909#endif
1910
b949ea8b
JW
1911/* If defined, a C expression to determine the base term of address X.
1912 This macro is used in only one place: `find_base_term' in alias.c.
1913
1914 It is always safe for this macro to not be defined. It exists so
1915 that alias analysis can understand machine-dependent addresses.
1916
1917 The typical use of this macro is to handle addresses containing
1918 a label_ref or symbol_ref within an UNSPEC. */
1919
d9a5f180 1920#define FIND_BASE_TERM(X) ix86_find_base_term (X)
b949ea8b 1921
c98f8742
JVA
1922/* Try machine-dependent ways of modifying an illegitimate address
1923 to be legitimate. If we find one, return the new, valid address.
1924 This macro is used in only one place: `memory_address' in explow.c.
1925
1926 OLDX is the address as it was before break_out_memory_refs was called.
1927 In some cases it is useful to look at this to decide what needs to be done.
1928
1929 MODE and WIN are passed so that this macro can use
1930 GO_IF_LEGITIMATE_ADDRESS.
1931
1932 It is always safe for this macro to do nothing. It exists to recognize
1933 opportunities to optimize the output.
1934
1935 For the 80386, we handle X+REG by loading X into a register R and
1936 using R+REG. R will go in a general reg and indexing will be used.
1937 However, if REG is a broken-out memory address or multiplication,
1938 nothing needs to be done because REG can certainly go in a general reg.
1939
1940 When -fpic is used, special handling is needed for symbolic references.
1941 See comments by legitimize_pic_address in i386.c for details. */
1942
3b3c6a3f 1943#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
d9a5f180
GS
1944do { \
1945 (X) = legitimize_address ((X), (OLDX), (MODE)); \
1946 if (memory_address_p ((MODE), (X))) \
3b3c6a3f 1947 goto WIN; \
d9a5f180 1948} while (0)
c98f8742 1949
d9a5f180 1950#define REWRITE_ADDRESS(X) rewrite_address (X)
d4ba09c0 1951
c98f8742
JVA
1952/* Nonzero if the constant value X is a legitimate general operand
1953 when generating PIC code. It is given that flag_pic is on and
1954 that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
1955
f996902d 1956#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
c98f8742
JVA
1957
1958#define SYMBOLIC_CONST(X) \
d9a5f180
GS
1959 (GET_CODE (X) == SYMBOL_REF \
1960 || GET_CODE (X) == LABEL_REF \
1961 || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
c98f8742
JVA
1962
1963/* Go to LABEL if ADDR (a legitimate address expression)
1964 has an effect that depends on the machine mode it is used for.
1965 On the 80386, only postdecrement and postincrement address depend thus
1966 (the amount of decrement or increment being the length of the operand). */
d9a5f180
GS
1967#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
1968do { \
1969 if (GET_CODE (ADDR) == POST_INC \
1970 || GET_CODE (ADDR) == POST_DEC) \
1971 goto LABEL; \
1972} while (0)
c98f8742 1973\f
bd793c65
BS
1974/* Codes for all the SSE/MMX builtins. */
1975enum ix86_builtins
1976{
1977 IX86_BUILTIN_ADDPS,
1978 IX86_BUILTIN_ADDSS,
1979 IX86_BUILTIN_DIVPS,
1980 IX86_BUILTIN_DIVSS,
1981 IX86_BUILTIN_MULPS,
1982 IX86_BUILTIN_MULSS,
1983 IX86_BUILTIN_SUBPS,
1984 IX86_BUILTIN_SUBSS,
1985
1986 IX86_BUILTIN_CMPEQPS,
1987 IX86_BUILTIN_CMPLTPS,
1988 IX86_BUILTIN_CMPLEPS,
1989 IX86_BUILTIN_CMPGTPS,
1990 IX86_BUILTIN_CMPGEPS,
1991 IX86_BUILTIN_CMPNEQPS,
1992 IX86_BUILTIN_CMPNLTPS,
1993 IX86_BUILTIN_CMPNLEPS,
1994 IX86_BUILTIN_CMPNGTPS,
1995 IX86_BUILTIN_CMPNGEPS,
1996 IX86_BUILTIN_CMPORDPS,
1997 IX86_BUILTIN_CMPUNORDPS,
1998 IX86_BUILTIN_CMPNEPS,
1999 IX86_BUILTIN_CMPEQSS,
2000 IX86_BUILTIN_CMPLTSS,
2001 IX86_BUILTIN_CMPLESS,
2002 IX86_BUILTIN_CMPGTSS,
2003 IX86_BUILTIN_CMPGESS,
2004 IX86_BUILTIN_CMPNEQSS,
2005 IX86_BUILTIN_CMPNLTSS,
2006 IX86_BUILTIN_CMPNLESS,
2007 IX86_BUILTIN_CMPNGTSS,
2008 IX86_BUILTIN_CMPNGESS,
2009 IX86_BUILTIN_CMPORDSS,
2010 IX86_BUILTIN_CMPUNORDSS,
2011 IX86_BUILTIN_CMPNESS,
2012
2013 IX86_BUILTIN_COMIEQSS,
2014 IX86_BUILTIN_COMILTSS,
2015 IX86_BUILTIN_COMILESS,
2016 IX86_BUILTIN_COMIGTSS,
2017 IX86_BUILTIN_COMIGESS,
2018 IX86_BUILTIN_COMINEQSS,
2019 IX86_BUILTIN_UCOMIEQSS,
2020 IX86_BUILTIN_UCOMILTSS,
2021 IX86_BUILTIN_UCOMILESS,
2022 IX86_BUILTIN_UCOMIGTSS,
2023 IX86_BUILTIN_UCOMIGESS,
2024 IX86_BUILTIN_UCOMINEQSS,
2025
2026 IX86_BUILTIN_CVTPI2PS,
2027 IX86_BUILTIN_CVTPS2PI,
2028 IX86_BUILTIN_CVTSI2SS,
2029 IX86_BUILTIN_CVTSS2SI,
2030 IX86_BUILTIN_CVTTPS2PI,
2031 IX86_BUILTIN_CVTTSS2SI,
bd793c65
BS
2032
2033 IX86_BUILTIN_MAXPS,
2034 IX86_BUILTIN_MAXSS,
2035 IX86_BUILTIN_MINPS,
2036 IX86_BUILTIN_MINSS,
2037
2038 IX86_BUILTIN_LOADAPS,
2039 IX86_BUILTIN_LOADUPS,
2040 IX86_BUILTIN_STOREAPS,
2041 IX86_BUILTIN_STOREUPS,
2042 IX86_BUILTIN_LOADSS,
2043 IX86_BUILTIN_STORESS,
2044 IX86_BUILTIN_MOVSS,
2045
2046 IX86_BUILTIN_MOVHLPS,
2047 IX86_BUILTIN_MOVLHPS,
2048 IX86_BUILTIN_LOADHPS,
2049 IX86_BUILTIN_LOADLPS,
2050 IX86_BUILTIN_STOREHPS,
2051 IX86_BUILTIN_STORELPS,
2052
2053 IX86_BUILTIN_MASKMOVQ,
2054 IX86_BUILTIN_MOVMSKPS,
2055 IX86_BUILTIN_PMOVMSKB,
2056
2057 IX86_BUILTIN_MOVNTPS,
2058 IX86_BUILTIN_MOVNTQ,
2059
2060 IX86_BUILTIN_PACKSSWB,
2061 IX86_BUILTIN_PACKSSDW,
2062 IX86_BUILTIN_PACKUSWB,
2063
2064 IX86_BUILTIN_PADDB,
2065 IX86_BUILTIN_PADDW,
2066 IX86_BUILTIN_PADDD,
2067 IX86_BUILTIN_PADDSB,
2068 IX86_BUILTIN_PADDSW,
2069 IX86_BUILTIN_PADDUSB,
2070 IX86_BUILTIN_PADDUSW,
2071 IX86_BUILTIN_PSUBB,
2072 IX86_BUILTIN_PSUBW,
2073 IX86_BUILTIN_PSUBD,
2074 IX86_BUILTIN_PSUBSB,
2075 IX86_BUILTIN_PSUBSW,
2076 IX86_BUILTIN_PSUBUSB,
2077 IX86_BUILTIN_PSUBUSW,
2078
2079 IX86_BUILTIN_PAND,
2080 IX86_BUILTIN_PANDN,
2081 IX86_BUILTIN_POR,
2082 IX86_BUILTIN_PXOR,
2083
2084 IX86_BUILTIN_PAVGB,
2085 IX86_BUILTIN_PAVGW,
2086
2087 IX86_BUILTIN_PCMPEQB,
2088 IX86_BUILTIN_PCMPEQW,
2089 IX86_BUILTIN_PCMPEQD,
2090 IX86_BUILTIN_PCMPGTB,
2091 IX86_BUILTIN_PCMPGTW,
2092 IX86_BUILTIN_PCMPGTD,
2093
2094 IX86_BUILTIN_PEXTRW,
2095 IX86_BUILTIN_PINSRW,
2096
2097 IX86_BUILTIN_PMADDWD,
2098
2099 IX86_BUILTIN_PMAXSW,
2100 IX86_BUILTIN_PMAXUB,
2101 IX86_BUILTIN_PMINSW,
2102 IX86_BUILTIN_PMINUB,
2103
2104 IX86_BUILTIN_PMULHUW,
2105 IX86_BUILTIN_PMULHW,
2106 IX86_BUILTIN_PMULLW,
2107
2108 IX86_BUILTIN_PSADBW,
2109 IX86_BUILTIN_PSHUFW,
2110
2111 IX86_BUILTIN_PSLLW,
2112 IX86_BUILTIN_PSLLD,
2113 IX86_BUILTIN_PSLLQ,
2114 IX86_BUILTIN_PSRAW,
2115 IX86_BUILTIN_PSRAD,
2116 IX86_BUILTIN_PSRLW,
2117 IX86_BUILTIN_PSRLD,
2118 IX86_BUILTIN_PSRLQ,
2119 IX86_BUILTIN_PSLLWI,
2120 IX86_BUILTIN_PSLLDI,
2121 IX86_BUILTIN_PSLLQI,
2122 IX86_BUILTIN_PSRAWI,
2123 IX86_BUILTIN_PSRADI,
2124 IX86_BUILTIN_PSRLWI,
2125 IX86_BUILTIN_PSRLDI,
2126 IX86_BUILTIN_PSRLQI,
2127
2128 IX86_BUILTIN_PUNPCKHBW,
2129 IX86_BUILTIN_PUNPCKHWD,
2130 IX86_BUILTIN_PUNPCKHDQ,
2131 IX86_BUILTIN_PUNPCKLBW,
2132 IX86_BUILTIN_PUNPCKLWD,
2133 IX86_BUILTIN_PUNPCKLDQ,
2134
2135 IX86_BUILTIN_SHUFPS,
2136
2137 IX86_BUILTIN_RCPPS,
2138 IX86_BUILTIN_RCPSS,
2139 IX86_BUILTIN_RSQRTPS,
2140 IX86_BUILTIN_RSQRTSS,
2141 IX86_BUILTIN_SQRTPS,
2142 IX86_BUILTIN_SQRTSS,
2143
2144 IX86_BUILTIN_UNPCKHPS,
2145 IX86_BUILTIN_UNPCKLPS,
2146
2147 IX86_BUILTIN_ANDPS,
2148 IX86_BUILTIN_ANDNPS,
2149 IX86_BUILTIN_ORPS,
2150 IX86_BUILTIN_XORPS,
2151
2152 IX86_BUILTIN_EMMS,
2153 IX86_BUILTIN_LDMXCSR,
2154 IX86_BUILTIN_STMXCSR,
2155 IX86_BUILTIN_SFENCE,
bd793c65 2156
47f339cf
BS
2157 /* 3DNow! Original */
2158 IX86_BUILTIN_FEMMS,
2159 IX86_BUILTIN_PAVGUSB,
2160 IX86_BUILTIN_PF2ID,
2161 IX86_BUILTIN_PFACC,
2162 IX86_BUILTIN_PFADD,
2163 IX86_BUILTIN_PFCMPEQ,
2164 IX86_BUILTIN_PFCMPGE,
2165 IX86_BUILTIN_PFCMPGT,
2166 IX86_BUILTIN_PFMAX,
2167 IX86_BUILTIN_PFMIN,
2168 IX86_BUILTIN_PFMUL,
2169 IX86_BUILTIN_PFRCP,
2170 IX86_BUILTIN_PFRCPIT1,
2171 IX86_BUILTIN_PFRCPIT2,
2172 IX86_BUILTIN_PFRSQIT1,
2173 IX86_BUILTIN_PFRSQRT,
2174 IX86_BUILTIN_PFSUB,
2175 IX86_BUILTIN_PFSUBR,
2176 IX86_BUILTIN_PI2FD,
2177 IX86_BUILTIN_PMULHRW,
47f339cf
BS
2178
2179 /* 3DNow! Athlon Extensions */
2180 IX86_BUILTIN_PF2IW,
2181 IX86_BUILTIN_PFNACC,
2182 IX86_BUILTIN_PFPNACC,
2183 IX86_BUILTIN_PI2FW,
2184 IX86_BUILTIN_PSWAPDSI,
2185 IX86_BUILTIN_PSWAPDSF,
2186
e37af218 2187 IX86_BUILTIN_SSE_ZERO,
bd793c65
BS
2188 IX86_BUILTIN_MMX_ZERO,
2189
fbe5eb6d
BS
2190 /* SSE2 */
2191 IX86_BUILTIN_ADDPD,
2192 IX86_BUILTIN_ADDSD,
2193 IX86_BUILTIN_DIVPD,
2194 IX86_BUILTIN_DIVSD,
2195 IX86_BUILTIN_MULPD,
2196 IX86_BUILTIN_MULSD,
2197 IX86_BUILTIN_SUBPD,
2198 IX86_BUILTIN_SUBSD,
2199
2200 IX86_BUILTIN_CMPEQPD,
2201 IX86_BUILTIN_CMPLTPD,
2202 IX86_BUILTIN_CMPLEPD,
2203 IX86_BUILTIN_CMPGTPD,
2204 IX86_BUILTIN_CMPGEPD,
2205 IX86_BUILTIN_CMPNEQPD,
2206 IX86_BUILTIN_CMPNLTPD,
2207 IX86_BUILTIN_CMPNLEPD,
2208 IX86_BUILTIN_CMPNGTPD,
2209 IX86_BUILTIN_CMPNGEPD,
2210 IX86_BUILTIN_CMPORDPD,
2211 IX86_BUILTIN_CMPUNORDPD,
2212 IX86_BUILTIN_CMPNEPD,
2213 IX86_BUILTIN_CMPEQSD,
2214 IX86_BUILTIN_CMPLTSD,
2215 IX86_BUILTIN_CMPLESD,
2216 IX86_BUILTIN_CMPGTSD,
2217 IX86_BUILTIN_CMPGESD,
2218 IX86_BUILTIN_CMPNEQSD,
2219 IX86_BUILTIN_CMPNLTSD,
2220 IX86_BUILTIN_CMPNLESD,
2221 IX86_BUILTIN_CMPNGTSD,
2222 IX86_BUILTIN_CMPNGESD,
2223 IX86_BUILTIN_CMPORDSD,
2224 IX86_BUILTIN_CMPUNORDSD,
2225 IX86_BUILTIN_CMPNESD,
2226
2227 IX86_BUILTIN_COMIEQSD,
2228 IX86_BUILTIN_COMILTSD,
2229 IX86_BUILTIN_COMILESD,
2230 IX86_BUILTIN_COMIGTSD,
2231 IX86_BUILTIN_COMIGESD,
2232 IX86_BUILTIN_COMINEQSD,
2233 IX86_BUILTIN_UCOMIEQSD,
2234 IX86_BUILTIN_UCOMILTSD,
2235 IX86_BUILTIN_UCOMILESD,
2236 IX86_BUILTIN_UCOMIGTSD,
2237 IX86_BUILTIN_UCOMIGESD,
2238 IX86_BUILTIN_UCOMINEQSD,
2239
2240 IX86_BUILTIN_MAXPD,
2241 IX86_BUILTIN_MAXSD,
2242 IX86_BUILTIN_MINPD,
2243 IX86_BUILTIN_MINSD,
2244
2245 IX86_BUILTIN_ANDPD,
2246 IX86_BUILTIN_ANDNPD,
2247 IX86_BUILTIN_ORPD,
2248 IX86_BUILTIN_XORPD,
2249
2250 IX86_BUILTIN_SQRTPD,
2251 IX86_BUILTIN_SQRTSD,
2252
2253 IX86_BUILTIN_UNPCKHPD,
2254 IX86_BUILTIN_UNPCKLPD,
2255
2256 IX86_BUILTIN_SHUFPD,
2257
2258 IX86_BUILTIN_LOADAPD,
2259 IX86_BUILTIN_LOADUPD,
2260 IX86_BUILTIN_STOREAPD,
2261 IX86_BUILTIN_STOREUPD,
2262 IX86_BUILTIN_LOADSD,
2263 IX86_BUILTIN_STORESD,
2264 IX86_BUILTIN_MOVSD,
2265
2266 IX86_BUILTIN_LOADHPD,
2267 IX86_BUILTIN_LOADLPD,
2268 IX86_BUILTIN_STOREHPD,
2269 IX86_BUILTIN_STORELPD,
2270
2271 IX86_BUILTIN_CVTDQ2PD,
2272 IX86_BUILTIN_CVTDQ2PS,
2273
2274 IX86_BUILTIN_CVTPD2DQ,
2275 IX86_BUILTIN_CVTPD2PI,
2276 IX86_BUILTIN_CVTPD2PS,
2277 IX86_BUILTIN_CVTTPD2DQ,
2278 IX86_BUILTIN_CVTTPD2PI,
2279
2280 IX86_BUILTIN_CVTPI2PD,
2281 IX86_BUILTIN_CVTSI2SD,
2282
2283 IX86_BUILTIN_CVTSD2SI,
2284 IX86_BUILTIN_CVTSD2SS,
2285 IX86_BUILTIN_CVTSS2SD,
2286 IX86_BUILTIN_CVTTSD2SI,
2287
2288 IX86_BUILTIN_CVTPS2DQ,
2289 IX86_BUILTIN_CVTPS2PD,
2290 IX86_BUILTIN_CVTTPS2DQ,
2291
2292 IX86_BUILTIN_MOVNTI,
2293 IX86_BUILTIN_MOVNTPD,
2294 IX86_BUILTIN_MOVNTDQ,
2295
2296 IX86_BUILTIN_SETPD1,
2297 IX86_BUILTIN_SETPD,
2298 IX86_BUILTIN_CLRPD,
2299 IX86_BUILTIN_SETRPD,
2300 IX86_BUILTIN_LOADPD1,
2301 IX86_BUILTIN_LOADRPD,
2302 IX86_BUILTIN_STOREPD1,
2303 IX86_BUILTIN_STORERPD,
2304
2305 /* SSE2 MMX */
2306 IX86_BUILTIN_MASKMOVDQU,
2307 IX86_BUILTIN_MOVMSKPD,
2308 IX86_BUILTIN_PMOVMSKB128,
2309 IX86_BUILTIN_MOVQ2DQ,
2310
2311 IX86_BUILTIN_PACKSSWB128,
2312 IX86_BUILTIN_PACKSSDW128,
2313 IX86_BUILTIN_PACKUSWB128,
2314
2315 IX86_BUILTIN_PADDB128,
2316 IX86_BUILTIN_PADDW128,
2317 IX86_BUILTIN_PADDD128,
2318 IX86_BUILTIN_PADDQ128,
2319 IX86_BUILTIN_PADDSB128,
2320 IX86_BUILTIN_PADDSW128,
2321 IX86_BUILTIN_PADDUSB128,
2322 IX86_BUILTIN_PADDUSW128,
2323 IX86_BUILTIN_PSUBB128,
2324 IX86_BUILTIN_PSUBW128,
2325 IX86_BUILTIN_PSUBD128,
2326 IX86_BUILTIN_PSUBQ128,
2327 IX86_BUILTIN_PSUBSB128,
2328 IX86_BUILTIN_PSUBSW128,
2329 IX86_BUILTIN_PSUBUSB128,
2330 IX86_BUILTIN_PSUBUSW128,
2331
2332 IX86_BUILTIN_PAND128,
2333 IX86_BUILTIN_PANDN128,
2334 IX86_BUILTIN_POR128,
2335 IX86_BUILTIN_PXOR128,
2336
2337 IX86_BUILTIN_PAVGB128,
2338 IX86_BUILTIN_PAVGW128,
2339
2340 IX86_BUILTIN_PCMPEQB128,
2341 IX86_BUILTIN_PCMPEQW128,
2342 IX86_BUILTIN_PCMPEQD128,
2343 IX86_BUILTIN_PCMPGTB128,
2344 IX86_BUILTIN_PCMPGTW128,
2345 IX86_BUILTIN_PCMPGTD128,
2346
2347 IX86_BUILTIN_PEXTRW128,
2348 IX86_BUILTIN_PINSRW128,
2349
2350 IX86_BUILTIN_PMADDWD128,
2351
2352 IX86_BUILTIN_PMAXSW128,
2353 IX86_BUILTIN_PMAXUB128,
2354 IX86_BUILTIN_PMINSW128,
2355 IX86_BUILTIN_PMINUB128,
2356
2357 IX86_BUILTIN_PMULUDQ,
2358 IX86_BUILTIN_PMULUDQ128,
2359 IX86_BUILTIN_PMULHUW128,
2360 IX86_BUILTIN_PMULHW128,
2361 IX86_BUILTIN_PMULLW128,
2362
2363 IX86_BUILTIN_PSADBW128,
2364 IX86_BUILTIN_PSHUFHW,
2365 IX86_BUILTIN_PSHUFLW,
2366 IX86_BUILTIN_PSHUFD,
2367
2368 IX86_BUILTIN_PSLLW128,
2369 IX86_BUILTIN_PSLLD128,
2370 IX86_BUILTIN_PSLLQ128,
2371 IX86_BUILTIN_PSRAW128,
2372 IX86_BUILTIN_PSRAD128,
2373 IX86_BUILTIN_PSRLW128,
2374 IX86_BUILTIN_PSRLD128,
2375 IX86_BUILTIN_PSRLQ128,
2376 IX86_BUILTIN_PSLLWI128,
2377 IX86_BUILTIN_PSLLDI128,
2378 IX86_BUILTIN_PSLLQI128,
2379 IX86_BUILTIN_PSRAWI128,
2380 IX86_BUILTIN_PSRADI128,
2381 IX86_BUILTIN_PSRLWI128,
2382 IX86_BUILTIN_PSRLDI128,
2383 IX86_BUILTIN_PSRLQI128,
2384
2385 IX86_BUILTIN_PUNPCKHBW128,
2386 IX86_BUILTIN_PUNPCKHWD128,
2387 IX86_BUILTIN_PUNPCKHDQ128,
2388 IX86_BUILTIN_PUNPCKLBW128,
2389 IX86_BUILTIN_PUNPCKLWD128,
2390 IX86_BUILTIN_PUNPCKLDQ128,
2391
2392 IX86_BUILTIN_CLFLUSH,
2393 IX86_BUILTIN_MFENCE,
2394 IX86_BUILTIN_LFENCE,
2395
bd793c65
BS
2396 IX86_BUILTIN_MAX
2397};
bd793c65 2398\f
f996902d
RH
2399#define TARGET_ENCODE_SECTION_INFO ix86_encode_section_info
2400#define TARGET_STRIP_NAME_ENCODING ix86_strip_name_encoding
2401
2402#define ASM_OUTPUT_LABELREF(FILE,NAME) \
2403 do { \
2404 const char *xname = (NAME); \
2405 if (xname[0] == '%') \
2406 xname += 2; \
2407 if (xname[0] == '*') \
2408 xname += 1; \
2409 else \
2410 fputs (user_label_prefix, FILE); \
2411 fputs (xname, FILE); \
2412 } while (0)
b08de47e 2413\f
b08de47e
MM
2414/* Max number of args passed in registers. If this is more than 3, we will
2415 have problems with ebx (register #4), since it is a caller save register and
2416 is also used as the pic register in ELF. So for now, don't allow more than
2417 3 registers to be passed in registers. */
2418
d2836273
JH
2419#define REGPARM_MAX (TARGET_64BIT ? 6 : 3)
2420
df4e780e 2421#define SSE_REGPARM_MAX (TARGET_64BIT ? 8 : 0)
b08de47e 2422
c98f8742
JVA
2423\f
2424/* Specify the machine mode that this machine uses
2425 for the index in the tablejump instruction. */
6eb791fc 2426#define CASE_VECTOR_MODE (!TARGET_64BIT || flag_pic ? SImode : DImode)
c98f8742 2427
18543a22
ILT
2428/* Define as C expression which evaluates to nonzero if the tablejump
2429 instruction expects the table to contain offsets from the address of the
2430 table.
892a2d68 2431 Do not define this if the table should contain absolute addresses. */
18543a22 2432/* #define CASE_VECTOR_PC_RELATIVE 1 */
c98f8742 2433
c98f8742
JVA
2434/* Define this as 1 if `char' should by default be signed; else as 0. */
2435#define DEFAULT_SIGNED_CHAR 1
2436
f4365627
JH
2437/* Number of bytes moved into a data cache for a single prefetch operation. */
2438#define PREFETCH_BLOCK ix86_cost->prefetch_block
2439
2440/* Number of prefetch operations that can be done in parallel. */
2441#define SIMULTANEOUS_PREFETCHES ix86_cost->simultaneous_prefetches
2442
c98f8742
JVA
2443/* Max number of bytes we can move from memory to memory
2444 in one reasonably fast instruction. */
65d9c0ab
JH
2445#define MOVE_MAX 16
2446
2447/* MOVE_MAX_PIECES is the number of bytes at a time which we can
2448 move efficiently, as opposed to MOVE_MAX which is the maximum
892a2d68 2449 number of bytes we can move with a single instruction. */
65d9c0ab 2450#define MOVE_MAX_PIECES (TARGET_64BIT ? 8 : 4)
c98f8742 2451
7e24ffc9
HPN
2452/* If a memory-to-memory move would take MOVE_RATIO or more simple
2453 move-instruction pairs, we will do a movstr or libcall instead.
2454 Increasing the value will always make code faster, but eventually
2455 incurs high cost in increased code size.
c98f8742 2456
e2e52e1b 2457 If you don't define this, a reasonable default is used. */
c98f8742 2458
e2e52e1b 2459#define MOVE_RATIO (optimize_size ? 3 : ix86_cost->move_ratio)
c98f8742
JVA
2460
2461/* Define if shifts truncate the shift count
2462 which implies one can omit a sign-extension or zero-extension
2463 of a shift count. */
892a2d68 2464/* On i386, shifts do truncate the count. But bit opcodes don't. */
c98f8742
JVA
2465
2466/* #define SHIFT_COUNT_TRUNCATED */
2467
2468/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
2469 is done just by pretending it is already truncated. */
2470#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
2471
2472/* We assume that the store-condition-codes instructions store 0 for false
2473 and some other value for true. This is the value stored for true. */
2474
2475#define STORE_FLAG_VALUE 1
2476
2477/* When a prototype says `char' or `short', really pass an `int'.
2478 (The 386 can't easily push less than an int.) */
2479
cb560352 2480#define PROMOTE_PROTOTYPES 1
c98f8742 2481
d9f32422
JH
2482/* A macro to update M and UNSIGNEDP when an object whose type is
2483 TYPE and which has the specified mode and signedness is to be
2484 stored in a register. This macro is only called when TYPE is a
2485 scalar type.
2486
f710504c 2487 On i386 it is sometimes useful to promote HImode and QImode
d9f32422
JH
2488 quantities to SImode. The choice depends on target type. */
2489
2490#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
d9a5f180 2491do { \
d9f32422
JH
2492 if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS) \
2493 || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS)) \
d9a5f180
GS
2494 (MODE) = SImode; \
2495} while (0)
d9f32422 2496
c98f8742
JVA
2497/* Specify the machine mode that pointers have.
2498 After generation of rtl, the compiler makes no further distinction
2499 between pointers and any other objects of this machine mode. */
65d9c0ab 2500#define Pmode (TARGET_64BIT ? DImode : SImode)
c98f8742
JVA
2501
2502/* A function address in a call instruction
2503 is a byte address (for indexing purposes)
2504 so give the MEM rtx a byte's mode. */
2505#define FUNCTION_MODE QImode
d4ba09c0
SC
2506\f
2507/* A part of a C `switch' statement that describes the relative costs
2508 of constant RTL expressions. It must contain `case' labels for
2509 expression codes `const_int', `const', `symbol_ref', `label_ref'
2510 and `const_double'. Each case must ultimately reach a `return'
2511 statement to return the relative cost of the use of that kind of
2512 constant value in an expression. The cost may depend on the
2513 precise value of the constant, which is available for examination
2514 in X, and the rtx code of the expression in which it is contained,
2515 found in OUTER_CODE.
2516
2517 CODE is the expression code--redundant, since it can be obtained
2518 with `GET_CODE (X)'. */
c98f8742 2519
d9a5f180 2520#define CONST_COSTS(RTX, CODE, OUTER_CODE) \
c98f8742
JVA
2521 case CONST_INT: \
2522 case CONST: \
2523 case LABEL_REF: \
2524 case SYMBOL_REF: \
44cf5b6a
JH
2525 if (TARGET_64BIT && !x86_64_sign_extended_value (RTX)) \
2526 return 3; \
2527 if (TARGET_64BIT && !x86_64_zero_extended_value (RTX)) \
2528 return 2; \
1acc845e 2529 return flag_pic && SYMBOLIC_CONST (RTX) ? 1 : 0; \
d4ba09c0 2530 \
c98f8742 2531 case CONST_DOUBLE: \
51286de6
RH
2532 if (GET_MODE (RTX) == VOIDmode) \
2533 return 0; \
2534 switch (standard_80387_constant_p (RTX)) \
2535 { \
2536 case 1: /* 0.0 */ \
2537 return 1; \
2538 case 2: /* 1.0 */ \
2539 return 2; \
2540 default: \
2541 /* Start with (MEM (SYMBOL_REF)), since that's where \
2542 it'll probably end up. Add a penalty for size. */ \
2543 return (COSTS_N_INSNS (1) + (flag_pic != 0) \
2544 + (GET_MODE (RTX) == SFmode ? 0 \
2545 : GET_MODE (RTX) == DFmode ? 1 : 2)); \
2546 }
c98f8742 2547
76565a24 2548/* Delete the definition here when TOPLEVEL_COSTS_N_INSNS gets added to cse.c */
e075ae69
RH
2549#define TOPLEVEL_COSTS_N_INSNS(N) \
2550 do { total = COSTS_N_INSNS (N); goto egress_rtx_costs; } while (0)
76565a24 2551
d4ba09c0
SC
2552/* Like `CONST_COSTS' but applies to nonconstant RTL expressions.
2553 This can be used, for example, to indicate how costly a multiply
2554 instruction is. In writing this macro, you can use the construct
2555 `COSTS_N_INSNS (N)' to specify a cost equal to N fast
2556 instructions. OUTER_CODE is the code of the expression in which X
2557 is contained.
2558
2559 This macro is optional; do not define it if the default cost
2560 assumptions are adequate for the target machine. */
2561
d9a5f180 2562#define RTX_COSTS(X, CODE, OUTER_CODE) \
44cf5b6a
JH
2563 case ZERO_EXTEND: \
2564 /* The zero extensions is often completely free on x86_64, so make \
2565 it as cheap as possible. */ \
2566 if (TARGET_64BIT && GET_MODE (X) == DImode \
2567 && GET_MODE (XEXP (X, 0)) == SImode) \
2568 { \
2569 total = 1; goto egress_rtx_costs; \
2570 } \
2571 else \
2572 TOPLEVEL_COSTS_N_INSNS (TARGET_ZERO_EXTEND_WITH_AND ? \
2573 ix86_cost->add : ix86_cost->movzx); \
2574 break; \
2575 case SIGN_EXTEND: \
2576 TOPLEVEL_COSTS_N_INSNS (ix86_cost->movsx); \
2577 break; \
d4ba09c0
SC
2578 case ASHIFT: \
2579 if (GET_CODE (XEXP (X, 1)) == CONST_INT \
44cf5b6a 2580 && (GET_MODE (XEXP (X, 0)) != DImode || TARGET_64BIT)) \
d4ba09c0
SC
2581 { \
2582 HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); \
d4ba09c0 2583 if (value == 1) \
e075ae69 2584 TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); \
b972dd02
JH
2585 if ((value == 2 || value == 3) \
2586 && !TARGET_DECOMPOSE_LEA \
2587 && ix86_cost->lea <= ix86_cost->shift_const) \
e075ae69 2588 TOPLEVEL_COSTS_N_INSNS (ix86_cost->lea); \
d4ba09c0
SC
2589 } \
2590 /* fall through */ \
2591 \
2592 case ROTATE: \
2593 case ASHIFTRT: \
2594 case LSHIFTRT: \
2595 case ROTATERT: \
44cf5b6a 2596 if (!TARGET_64BIT && GET_MODE (XEXP (X, 0)) == DImode) \
76565a24
SC
2597 { \
2598 if (GET_CODE (XEXP (X, 1)) == CONST_INT) \
54d26233
MH
2599 { \
2600 if (INTVAL (XEXP (X, 1)) > 32) \
e075ae69
RH
2601 TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_const + 2); \
2602 else \
2603 TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_const * 2); \
2604 } \
2605 else \
2606 { \
2607 if (GET_CODE (XEXP (X, 1)) == AND) \
2608 TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_var * 2); \
2609 else \
2610 TOPLEVEL_COSTS_N_INSNS(ix86_cost->shift_var * 6 + 2); \
54d26233 2611 } \
76565a24 2612 } \
e075ae69
RH
2613 else \
2614 { \
2615 if (GET_CODE (XEXP (X, 1)) == CONST_INT) \
2616 TOPLEVEL_COSTS_N_INSNS (ix86_cost->shift_const); \
2617 else \
2618 TOPLEVEL_COSTS_N_INSNS (ix86_cost->shift_var); \
2619 } \
2620 break; \
d4ba09c0
SC
2621 \
2622 case MULT: \
2623 if (GET_CODE (XEXP (X, 1)) == CONST_INT) \
2624 { \
2625 unsigned HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); \
2626 int nbits = 0; \
2627 \
2628 while (value != 0) \
2629 { \
2630 nbits++; \
2631 value >>= 1; \
2632 } \
2633 \
630c79be
BS
2634 TOPLEVEL_COSTS_N_INSNS (ix86_cost->mult_init \
2635 + nbits * ix86_cost->mult_bit); \
d4ba09c0 2636 } \
d4ba09c0 2637 else /* This is arbitrary */ \
76565a24
SC
2638 TOPLEVEL_COSTS_N_INSNS (ix86_cost->mult_init \
2639 + 7 * ix86_cost->mult_bit); \
d4ba09c0
SC
2640 \
2641 case DIV: \
2642 case UDIV: \
2643 case MOD: \
2644 case UMOD: \
76565a24 2645 TOPLEVEL_COSTS_N_INSNS (ix86_cost->divide); \
d4ba09c0
SC
2646 \
2647 case PLUS: \
b972dd02
JH
2648 if (!TARGET_DECOMPOSE_LEA \
2649 && INTEGRAL_MODE_P (GET_MODE (X)) \
2650 && GET_MODE_BITSIZE (GET_MODE (X)) <= GET_MODE_BITSIZE (Pmode)) \
e075ae69 2651 { \
b972dd02
JH
2652 if (GET_CODE (XEXP (X, 0)) == PLUS \
2653 && GET_CODE (XEXP (XEXP (X, 0), 0)) == MULT \
2654 && GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 1)) == CONST_INT \
2655 && CONSTANT_P (XEXP (X, 1))) \
e075ae69 2656 { \
b972dd02
JH
2657 HOST_WIDE_INT val = INTVAL (XEXP (XEXP (XEXP (X, 0), 0), 1));\
2658 if (val == 2 || val == 4 || val == 8) \
2659 { \
2660 return (COSTS_N_INSNS (ix86_cost->lea) \
d9a5f180
GS
2661 + rtx_cost (XEXP (XEXP (X, 0), 1), \
2662 (OUTER_CODE)) \
2663 + rtx_cost (XEXP (XEXP (XEXP (X, 0), 0), 0), \
2664 (OUTER_CODE)) \
2665 + rtx_cost (XEXP (X, 1), (OUTER_CODE))); \
b972dd02 2666 } \
e075ae69 2667 } \
b972dd02
JH
2668 else if (GET_CODE (XEXP (X, 0)) == MULT \
2669 && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT) \
2670 { \
2671 HOST_WIDE_INT val = INTVAL (XEXP (XEXP (X, 0), 1)); \
2672 if (val == 2 || val == 4 || val == 8) \
2673 { \
2674 return (COSTS_N_INSNS (ix86_cost->lea) \
d9a5f180
GS
2675 + rtx_cost (XEXP (XEXP (X, 0), 0), \
2676 (OUTER_CODE)) \
2677 + rtx_cost (XEXP (X, 1), (OUTER_CODE))); \
b972dd02
JH
2678 } \
2679 } \
2680 else if (GET_CODE (XEXP (X, 0)) == PLUS) \
e075ae69
RH
2681 { \
2682 return (COSTS_N_INSNS (ix86_cost->lea) \
d9a5f180
GS
2683 + rtx_cost (XEXP (XEXP (X, 0), 0), (OUTER_CODE)) \
2684 + rtx_cost (XEXP (XEXP (X, 0), 1), (OUTER_CODE)) \
2685 + rtx_cost (XEXP (X, 1), (OUTER_CODE))); \
e075ae69 2686 } \
e075ae69 2687 } \
d4ba09c0
SC
2688 \
2689 /* fall through */ \
2690 case AND: \
2691 case IOR: \
2692 case XOR: \
2693 case MINUS: \
44cf5b6a 2694 if (!TARGET_64BIT && GET_MODE (X) == DImode) \
e075ae69 2695 return (COSTS_N_INSNS (ix86_cost->add) * 2 \
d9a5f180 2696 + (rtx_cost (XEXP (X, 0), (OUTER_CODE)) \
e075ae69 2697 << (GET_MODE (XEXP (X, 0)) != DImode)) \
d9a5f180 2698 + (rtx_cost (XEXP (X, 1), (OUTER_CODE)) \
e075ae69
RH
2699 << (GET_MODE (XEXP (X, 1)) != DImode))); \
2700 \
2701 /* fall through */ \
d4ba09c0
SC
2702 case NEG: \
2703 case NOT: \
44cf5b6a 2704 if (!TARGET_64BIT && GET_MODE (X) == DImode) \
e075ae69
RH
2705 TOPLEVEL_COSTS_N_INSNS (ix86_cost->add * 2); \
2706 TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); \
2707 \
51286de6
RH
2708 case FLOAT_EXTEND: \
2709 TOPLEVEL_COSTS_N_INSNS (0); \
2710 \
e075ae69
RH
2711 egress_rtx_costs: \
2712 break;
d4ba09c0
SC
2713
2714
2715/* An expression giving the cost of an addressing mode that contains
2716 ADDRESS. If not defined, the cost is computed from the ADDRESS
2717 expression and the `CONST_COSTS' values.
2718
2719 For most CISC machines, the default cost is a good approximation
2720 of the true cost of the addressing mode. However, on RISC
2721 machines, all instructions normally have the same length and
2722 execution time. Hence all addresses will have equal costs.
2723
2724 In cases where more than one form of an address is known, the form
2725 with the lowest cost will be used. If multiple forms have the
2726 same, lowest, cost, the one that is the most complex will be used.
2727
2728 For example, suppose an address that is equal to the sum of a
2729 register and a constant is used twice in the same basic block.
2730 When this macro is not defined, the address will be computed in a
2731 register and memory references will be indirect through that
2732 register. On machines where the cost of the addressing mode
2733 containing the sum is no higher than that of a simple indirect
2734 reference, this will produce an additional instruction and
2735 possibly require an additional register. Proper specification of
2736 this macro eliminates this overhead for such machines.
2737
2738 Similar use of this macro is made in strength reduction of loops.
2739
2740 ADDRESS need not be valid as an address. In such a case, the cost
2741 is not relevant and can be any value; invalid addresses need not be
2742 assigned a different cost.
2743
2744 On machines where an address involving more than one register is as
2745 cheap as an address computation involving only one register,
2746 defining `ADDRESS_COST' to reflect this can cause two registers to
2747 be live over a region of code where only one would have been if
2748 `ADDRESS_COST' were not defined in that manner. This effect should
2749 be considered in the definition of this macro. Equivalent costs
2750 should probably only be given to addresses with different numbers
2751 of registers on machines with lots of registers.
2752
2753 This macro will normally either not be defined or be defined as a
2754 constant.
c98f8742
JVA
2755
2756 For i386, it is better to use a complex address than let gcc copy
2757 the address into a reg and make a new pseudo. But not if the address
2758 requires to two regs - that would mean more pseudos with longer
2759 lifetimes. */
2760
2761#define ADDRESS_COST(RTX) \
0806f95f 2762 ix86_address_cost (RTX)
d4ba09c0 2763
96e7ae40
JH
2764/* A C expression for the cost of moving data from a register in class FROM to
2765 one in class TO. The classes are expressed using the enumeration values
2766 such as `GENERAL_REGS'. A value of 2 is the default; other values are
2767 interpreted relative to that.
d4ba09c0 2768
96e7ae40
JH
2769 It is not required that the cost always equal 2 when FROM is the same as TO;
2770 on some machines it is expensive to move between registers if they are not
f84aa48a 2771 general registers. */
d4ba09c0 2772
f84aa48a 2773#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
d9a5f180 2774 ix86_register_move_cost ((MODE), (CLASS1), (CLASS2))
d4ba09c0
SC
2775
2776/* A C expression for the cost of moving data of mode M between a
2777 register and memory. A value of 2 is the default; this cost is
2778 relative to those in `REGISTER_MOVE_COST'.
2779
2780 If moving between registers and memory is more expensive than
2781 between two registers, you should define this macro to express the
fa79946e 2782 relative cost. */
d4ba09c0 2783
d9a5f180
GS
2784#define MEMORY_MOVE_COST(MODE, CLASS, IN) \
2785 ix86_memory_move_cost ((MODE), (CLASS), (IN))
d4ba09c0
SC
2786
2787/* A C expression for the cost of a branch instruction. A value of 1
2788 is the default; other values are interpreted relative to that. */
2789
e075ae69 2790#define BRANCH_COST ix86_branch_cost
d4ba09c0
SC
2791
2792/* Define this macro as a C expression which is nonzero if accessing
2793 less than a word of memory (i.e. a `char' or a `short') is no
2794 faster than accessing a word of memory, i.e., if such access
2795 require more than one instruction or if there is no difference in
2796 cost between byte and (aligned) word loads.
2797
2798 When this macro is not defined, the compiler will access a field by
2799 finding the smallest containing object; when it is defined, a
2800 fullword load will be used if alignment permits. Unless bytes
2801 accesses are faster than word accesses, using word accesses is
2802 preferable since it may eliminate subsequent memory access if
2803 subsequent accesses occur to other fields in the same word of the
2804 structure, but to different bytes. */
2805
2806#define SLOW_BYTE_ACCESS 0
2807
2808/* Nonzero if access to memory by shorts is slow and undesirable. */
2809#define SLOW_SHORT_ACCESS 0
2810
d4ba09c0
SC
2811/* Define this macro to be the value 1 if unaligned accesses have a
2812 cost many times greater than aligned accesses, for example if they
2813 are emulated in a trap handler.
2814
2815 When this macro is non-zero, the compiler will act as if
2816 `STRICT_ALIGNMENT' were non-zero when generating code for block
2817 moves. This can cause significantly more instructions to be
2818 produced. Therefore, do not set this macro non-zero if unaligned
2819 accesses only add a cycle or two to the time for a memory access.
2820
2821 If the value of this macro is always zero, it need not be defined. */
2822
e1565e65 2823/* #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 0 */
d4ba09c0
SC
2824
2825/* Define this macro to inhibit strength reduction of memory
2826 addresses. (On some machines, such strength reduction seems to do
2827 harm rather than good.) */
2828
2829/* #define DONT_REDUCE_ADDR */
2830
2831/* Define this macro if it is as good or better to call a constant
2832 function address than to call an address kept in a register.
2833
2834 Desirable on the 386 because a CALL with a constant address is
2835 faster than one with a register address. */
2836
2837#define NO_FUNCTION_CSE
2838
2839/* Define this macro if it is as good or better for a function to call
2840 itself with an explicit address than to call an address kept in a
2841 register. */
2842
2843#define NO_RECURSIVE_FUNCTION_CSE
c98f8742 2844\f
c572e5ba
JVA
2845/* Add any extra modes needed to represent the condition code.
2846
e075ae69
RH
2847 For the i386, we need separate modes when floating-point
2848 equality comparisons are being done.
9076b9c1
JH
2849
2850 Add CCNO to indicate comparisons against zero that requires
7e08e190
JH
2851 Overflow flag to be unset. Sign bit test is used instead and
2852 thus can be used to form "a&b>0" type of tests.
9076b9c1
JH
2853
2854 Add CCGC to indicate comparisons agains zero that allows
2855 unspecified garbage in the Carry flag. This mode is used
2856 by inc/dec instructions.
e075ae69 2857
2c873473 2858 Add CCGOC to indicate comparisons agains zero that allows
9076b9c1
JH
2859 unspecified garbage in the Carry and Overflow flag. This
2860 mode is used to simulate comparisons of (a-b) and (a+b)
2861 against zero using sub/cmp/add operations.
16189740 2862
7e08e190 2863 Add CCZ to indicate that only the Zero flag is valid. */
c572e5ba 2864
d9a5f180
GS
2865#define EXTRA_CC_MODES \
2866 CC (CCGCmode, "CCGC") \
2867 CC (CCGOCmode, "CCGOC") \
2868 CC (CCNOmode, "CCNO") \
2869 CC (CCZmode, "CCZ") \
2870 CC (CCFPmode, "CCFP") \
2871 CC (CCFPUmode, "CCFPU")
c572e5ba
JVA
2872
2873/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
2874 return the mode to be used for the comparison.
2875
2876 For floating-point equality comparisons, CCFPEQmode should be used.
e075ae69 2877 VOIDmode should be used in all other cases.
c572e5ba 2878
16189740 2879 For integer comparisons against zero, reduce to CCNOmode or CCZmode if
e075ae69 2880 possible, to allow for more combinations. */
c98f8742 2881
d9a5f180 2882#define SELECT_CC_MODE(OP, X, Y) ix86_cc_mode ((OP), (X), (Y))
9e7adcb3
JH
2883
2884/* Return non-zero if MODE implies a floating point inequality can be
2885 reversed. */
2886
2887#define REVERSIBLE_CC_MODE(MODE) 1
2888
2889/* A C expression whose value is reversed condition code of the CODE for
2890 comparison done in CC_MODE mode. */
2891#define REVERSE_CONDITION(CODE, MODE) \
2892 ((MODE) != CCFPmode && (MODE) != CCFPUmode ? reverse_condition (CODE) \
2893 : reverse_condition_maybe_unordered (CODE))
2894
c98f8742
JVA
2895\f
2896/* Control the assembler format that we output, to the extent
2897 this does not vary between assemblers. */
2898
2899/* How to refer to registers in assembler output.
892a2d68 2900 This sequence is indexed by compiler's hard-register-number (see above). */
c98f8742
JVA
2901
2902/* In order to refer to the first 8 regs as 32 bit regs prefix an "e"
2903 For non floating point regs, the following are the HImode names.
2904
2905 For float regs, the stack top is sometimes referred to as "%st(0)"
9e06e321 2906 instead of just "%st". PRINT_REG handles this with the "y" code. */
c98f8742 2907
a7180f70
BS
2908#undef HI_REGISTER_NAMES
2909#define HI_REGISTER_NAMES \
2910{"ax","dx","cx","bx","si","di","bp","sp", \
2911 "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)","", \
2912 "flags","fpsr", "dirflag", "frame", \
2913 "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", \
3f3f2124
JH
2914 "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" , \
2915 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
2916 "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"}
a7180f70 2917
c98f8742
JVA
2918#define REGISTER_NAMES HI_REGISTER_NAMES
2919
2920/* Table of additional register names to use in user input. */
2921
2922#define ADDITIONAL_REGISTER_NAMES \
54d26233
MH
2923{ { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 }, \
2924 { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 }, \
3f3f2124
JH
2925 { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 }, \
2926 { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 }, \
54d26233 2927 { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 }, \
a7180f70
BS
2928 { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 }, \
2929 { "mm0", 8}, { "mm1", 9}, { "mm2", 10}, { "mm3", 11}, \
2930 { "mm4", 12}, { "mm5", 13}, { "mm6", 14}, { "mm7", 15} }
c98f8742
JVA
2931
2932/* Note we are omitting these since currently I don't know how
2933to get gcc to use these, since they want the same but different
2934number as al, and ax.
2935*/
2936
c98f8742 2937#define QI_REGISTER_NAMES \
3f3f2124 2938{"al", "dl", "cl", "bl", "sil", "dil", "bpl", "spl",}
c98f8742
JVA
2939
2940/* These parallel the array above, and can be used to access bits 8:15
892a2d68 2941 of regs 0 through 3. */
c98f8742
JVA
2942
2943#define QI_HIGH_REGISTER_NAMES \
2944{"ah", "dh", "ch", "bh", }
2945
2946/* How to renumber registers for dbx and gdb. */
2947
d9a5f180
GS
2948#define DBX_REGISTER_NUMBER(N) \
2949 (TARGET_64BIT ? dbx64_register_map[(N)] : dbx_register_map[(N)])
83774849
RH
2950
2951extern int const dbx_register_map[FIRST_PSEUDO_REGISTER];
0f7fa3d0 2952extern int const dbx64_register_map[FIRST_PSEUDO_REGISTER];
83774849 2953extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
c98f8742 2954
469ac993
JM
2955/* Before the prologue, RA is at 0(%esp). */
2956#define INCOMING_RETURN_ADDR_RTX \
f64cecad 2957 gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM))
c5c76735 2958
e414ab29 2959/* After the prologue, RA is at -4(AP) in the current frame. */
1020a5ab
RH
2960#define RETURN_ADDR_RTX(COUNT, FRAME) \
2961 ((COUNT) == 0 \
2962 ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -UNITS_PER_WORD)) \
2963 : gen_rtx_MEM (Pmode, plus_constant (FRAME, UNITS_PER_WORD)))
e414ab29 2964
892a2d68 2965/* PC is dbx register 8; let's use that column for RA. */
0f7fa3d0 2966#define DWARF_FRAME_RETURN_COLUMN (TARGET_64BIT ? 16 : 8)
469ac993 2967
a6ab3aad 2968/* Before the prologue, the top of the frame is at 4(%esp). */
0f7fa3d0 2969#define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD
a6ab3aad 2970
1020a5ab
RH
2971/* Describe how we implement __builtin_eh_return. */
2972#define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) : INVALID_REGNUM)
2973#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 2)
2974
ad919812 2975
e4c4ebeb
RH
2976/* Select a format to encode pointers in exception handling data. CODE
2977 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
2978 true if the symbol may be affected by dynamic relocations.
2979
2980 ??? All x86 object file formats are capable of representing this.
2981 After all, the relocation needed is the same as for the call insn.
2982 Whether or not a particular assembler allows us to enter such, I
2983 guess we'll have to see. */
d9a5f180 2984#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
b932f770 2985 (flag_pic \
d9a5f180 2986 ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\
e4c4ebeb
RH
2987 : DW_EH_PE_absptr)
2988
c98f8742
JVA
2989/* This is how to output the definition of a user-level label named NAME,
2990 such as the label on a static function or variable NAME. */
2991
d9a5f180
GS
2992#define ASM_OUTPUT_LABEL(FILE, NAME) \
2993 (assemble_name ((FILE), (NAME)), fputs (":\n", (FILE)))
c98f8742 2994
c98f8742
JVA
2995/* Store in OUTPUT a string (made with alloca) containing
2996 an assembler-name for a local static variable named NAME.
2997 LABELNO is an integer which is different for each call. */
2998
2999#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
3000( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
3001 sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
3002
c98f8742
JVA
3003/* This is how to output an insn to push a register on the stack.
3004 It need not be very fast code. */
3005
d9a5f180
GS
3006#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
3007 asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)])
c98f8742
JVA
3008
3009/* This is how to output an insn to pop a register from the stack.
3010 It need not be very fast code. */
3011
d9a5f180
GS
3012#define ASM_OUTPUT_REG_POP(FILE, REGNO) \
3013 asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)])
c98f8742 3014
f88c65f7 3015/* This is how to output an element of a case-vector that is absolute. */
c98f8742
JVA
3016
3017#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
d9a5f180 3018 ix86_output_addr_vec_elt ((FILE), (VALUE))
c98f8742 3019
f88c65f7 3020/* This is how to output an element of a case-vector that is relative. */
c98f8742 3021
33f7f353 3022#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
d9a5f180 3023 ix86_output_addr_diff_elt ((FILE), (VALUE), (REL))
f88c65f7
RH
3024
3025/* Under some conditions we need jump tables in the text section, because
3026 the assembler cannot handle label differences between sections. */
3027
3028#define JUMP_TABLES_IN_TEXT_SECTION \
3029 (!TARGET_64BIT && flag_pic && !HAVE_AS_GOTOFF_IN_DATA)
c98f8742 3030
1865dbb5
JM
3031/* A C statement that outputs an address constant appropriate to
3032 for DWARF debugging. */
3033
d9a5f180
GS
3034#define ASM_OUTPUT_DWARF_ADDR_CONST(FILE, X) \
3035 i386_dwarf_output_addr_const ((FILE), (X))
1865dbb5
JM
3036
3037/* Either simplify a location expression, or return the original. */
3038
3039#define ASM_SIMPLIFY_DWARF_ADDR(X) \
d9a5f180 3040 i386_simplify_dwarf_addr (X)
cea3bd3e
RH
3041
3042/* Switch to init or fini section via SECTION_OP, emit a call to FUNC,
3043 and switch back. For x86 we do this only to save a few bytes that
3044 would otherwise be unused in the text section. */
3045#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
3046 asm (SECTION_OP "\n\t" \
3047 "call " USER_LABEL_PREFIX #FUNC "\n" \
3048 TEXT_SECTION_ASM_OP);
74b42c8b 3049\f
c98f8742
JVA
3050/* Print operand X (an rtx) in assembler syntax to file FILE.
3051 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
ef6257cd
JH
3052 Effect of various CODE letters is described in i386.c near
3053 print_operand function. */
c98f8742 3054
d9a5f180 3055#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
f996902d 3056 ((CODE) == '*' || (CODE) == '+' || (CODE) == '&')
c98f8742 3057
74b42c8b
RS
3058/* Print the name of a register based on its machine mode and number.
3059 If CODE is 'w', pretend the mode is HImode.
3060 If CODE is 'b', pretend the mode is QImode.
3061 If CODE is 'k', pretend the mode is SImode.
ef6257cd 3062 If CODE is 'q', pretend the mode is DImode.
74b42c8b 3063 If CODE is 'h', pretend the reg is the `high' byte register.
ef6257cd 3064 If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. */
74b42c8b 3065
e075ae69 3066#define PRINT_REG(X, CODE, FILE) \
d9a5f180 3067 print_reg ((X), (CODE), (FILE))
74b42c8b 3068
c98f8742 3069#define PRINT_OPERAND(FILE, X, CODE) \
d9a5f180 3070 print_operand ((FILE), (X), (CODE))
c98f8742
JVA
3071
3072#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
d9a5f180 3073 print_operand_address ((FILE), (ADDR))
c98f8742 3074
f996902d
RH
3075#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL) \
3076do { \
3077 if (! output_addr_const_extra (FILE, (X))) \
3078 goto FAIL; \
3079} while (0);
3080
aa3e8d2a
JVA
3081/* Print the name of a register for based on its machine mode and number.
3082 This macro is used to print debugging output.
3083 This macro is different from PRINT_REG in that it may be used in
3084 programs that are not linked with aux-output.o. */
3085
e075ae69 3086#define DEBUG_PRINT_REG(X, CODE, FILE) \
69ddee61
KG
3087 do { static const char * const hi_name[] = HI_REGISTER_NAMES; \
3088 static const char * const qi_name[] = QI_REGISTER_NAMES; \
d9a5f180 3089 fprintf ((FILE), "%d ", REGNO (X)); \
e075ae69 3090 if (REGNO (X) == FLAGS_REG) \
d9a5f180 3091 { fputs ("flags", (FILE)); break; } \
7c7ef435 3092 if (REGNO (X) == DIRFLAG_REG) \
d9a5f180 3093 { fputs ("dirflag", (FILE)); break; } \
e075ae69 3094 if (REGNO (X) == FPSR_REG) \
d9a5f180 3095 { fputs ("fpsr", (FILE)); break; } \
aa3e8d2a 3096 if (REGNO (X) == ARG_POINTER_REGNUM) \
d9a5f180 3097 { fputs ("argp", (FILE)); break; } \
564d80f4 3098 if (REGNO (X) == FRAME_POINTER_REGNUM) \
d9a5f180 3099 { fputs ("frame", (FILE)); break; } \
aa3e8d2a 3100 if (STACK_TOP_P (X)) \
d9a5f180 3101 { fputs ("st(0)", (FILE)); break; } \
b0ceea8c 3102 if (FP_REG_P (X)) \
d9a5f180 3103 { fputs (hi_name[REGNO(X)], (FILE)); break; } \
3f3f2124
JH
3104 if (REX_INT_REG_P (X)) \
3105 { \
3106 switch (GET_MODE_SIZE (GET_MODE (X))) \
3107 { \
3108 default: \
3109 case 8: \
d9a5f180 3110 fprintf ((FILE), "r%i", REGNO (X) \
3f3f2124
JH
3111 - FIRST_REX_INT_REG + 8); \
3112 break; \
3113 case 4: \
d9a5f180 3114 fprintf ((FILE), "r%id", REGNO (X) \
3f3f2124
JH
3115 - FIRST_REX_INT_REG + 8); \
3116 break; \
3117 case 2: \
d9a5f180 3118 fprintf ((FILE), "r%iw", REGNO (X) \
3f3f2124
JH
3119 - FIRST_REX_INT_REG + 8); \
3120 break; \
3121 case 1: \
d9a5f180 3122 fprintf ((FILE), "r%ib", REGNO (X) \
3f3f2124
JH
3123 - FIRST_REX_INT_REG + 8); \
3124 break; \
3125 } \
3126 break; \
3127 } \
aa3e8d2a
JVA
3128 switch (GET_MODE_SIZE (GET_MODE (X))) \
3129 { \
3f3f2124 3130 case 8: \
d9a5f180
GS
3131 fputs ("r", (FILE)); \
3132 fputs (hi_name[REGNO (X)], (FILE)); \
3f3f2124 3133 break; \
b0ceea8c 3134 default: \
d9a5f180 3135 fputs ("e", (FILE)); \
aa3e8d2a 3136 case 2: \
d9a5f180 3137 fputs (hi_name[REGNO (X)], (FILE)); \
aa3e8d2a
JVA
3138 break; \
3139 case 1: \
d9a5f180 3140 fputs (qi_name[REGNO (X)], (FILE)); \
aa3e8d2a
JVA
3141 break; \
3142 } \
3143 } while (0)
3144
c98f8742
JVA
3145/* a letter which is not needed by the normal asm syntax, which
3146 we can use for operand syntax in the extended asm */
3147
3148#define ASM_OPERAND_LETTER '#'
c98f8742 3149#define RET return ""
d9a5f180 3150#define AT_SP(MODE) (gen_rtx_MEM ((MODE), stack_pointer_rtx))
d4ba09c0 3151\f
e075ae69
RH
3152/* Define the codes that are matched by predicates in i386.c. */
3153
3154#define PREDICATE_CODES \
7dd4b4a3
JH
3155 {"x86_64_immediate_operand", {CONST_INT, SUBREG, REG, \
3156 SYMBOL_REF, LABEL_REF, CONST}}, \
3157 {"x86_64_nonmemory_operand", {CONST_INT, SUBREG, REG, \
3158 SYMBOL_REF, LABEL_REF, CONST}}, \
3159 {"x86_64_movabs_operand", {CONST_INT, SUBREG, REG, \
3160 SYMBOL_REF, LABEL_REF, CONST}}, \
3161 {"x86_64_szext_nonmemory_operand", {CONST_INT, SUBREG, REG, \
3162 SYMBOL_REF, LABEL_REF, CONST}}, \
3163 {"x86_64_general_operand", {CONST_INT, SUBREG, REG, MEM, \
3164 SYMBOL_REF, LABEL_REF, CONST}}, \
3165 {"x86_64_szext_general_operand", {CONST_INT, SUBREG, REG, MEM, \
3166 SYMBOL_REF, LABEL_REF, CONST}}, \
3167 {"x86_64_zext_immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, \
3168 SYMBOL_REF, LABEL_REF}}, \
371bc54b 3169 {"shiftdi_operand", {SUBREG, REG, MEM}}, \
8bad7136 3170 {"const_int_1_operand", {CONST_INT}}, \
e075ae69 3171 {"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, \
2247f6ed
JH
3172 {"aligned_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \
3173 LABEL_REF, SUBREG, REG, MEM}}, \
e075ae69 3174 {"pic_symbolic_operand", {CONST}}, \
e1ff012c 3175 {"call_insn_operand", {REG, SUBREG, MEM, SYMBOL_REF}}, \
eaf19aba 3176 {"constant_call_address_operand", {SYMBOL_REF, CONST}}, \
e075ae69
RH
3177 {"const0_operand", {CONST_INT, CONST_DOUBLE}}, \
3178 {"const1_operand", {CONST_INT}}, \
3179 {"const248_operand", {CONST_INT}}, \
3180 {"incdec_operand", {CONST_INT}}, \
915119a5 3181 {"mmx_reg_operand", {REG}}, \
e075ae69 3182 {"reg_no_sp_operand", {SUBREG, REG}}, \
2c5a510c
RH
3183 {"general_no_elim_operand", {CONST_INT, CONST_DOUBLE, CONST, \
3184 SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, \
3185 {"nonmemory_no_elim_operand", {CONST_INT, REG, SUBREG}}, \
e075ae69
RH
3186 {"q_regs_operand", {SUBREG, REG}}, \
3187 {"non_q_regs_operand", {SUBREG, REG}}, \
9e7adcb3
JH
3188 {"fcmov_comparison_operator", {EQ, NE, LTU, GTU, LEU, GEU, UNORDERED, \
3189 ORDERED, LT, UNLT, GT, UNGT, LE, UNLE, \
3190 GE, UNGE, LTGT, UNEQ}}, \
bf71a4f8
JH
3191 {"sse_comparison_operator", {EQ, LT, LE, UNORDERED, NE, UNGE, UNGT, \
3192 ORDERED, UNEQ, UNLT, UNLE, LTGT, GE, GT \
3193 }}, \
9076b9c1 3194 {"ix86_comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, \
9e7adcb3
JH
3195 GTU, UNORDERED, ORDERED, UNLE, UNLT, \
3196 UNGE, UNGT, LTGT, UNEQ }}, \
e075ae69
RH
3197 {"cmp_fp_expander_operand", {CONST_DOUBLE, SUBREG, REG, MEM}}, \
3198 {"ext_register_operand", {SUBREG, REG}}, \
3199 {"binary_fp_operator", {PLUS, MINUS, MULT, DIV}}, \
3200 {"mult_operator", {MULT}}, \
3201 {"div_operator", {DIV}}, \
3202 {"arith_or_logical_operator", {PLUS, MULT, AND, IOR, XOR, SMIN, SMAX, \
3203 UMIN, UMAX, COMPARE, MINUS, DIV, MOD, \
3204 UDIV, UMOD, ASHIFT, ROTATE, ASHIFTRT, \
3205 LSHIFTRT, ROTATERT}}, \
e9e80858 3206 {"promotable_binary_operator", {PLUS, MULT, AND, IOR, XOR, ASHIFT}}, \
e075ae69
RH
3207 {"memory_displacement_operand", {MEM}}, \
3208 {"cmpsi_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \
6343a50e 3209 LABEL_REF, SUBREG, REG, MEM, AND}}, \
f996902d
RH
3210 {"long_memory_operand", {MEM}}, \
3211 {"tls_symbolic_operand", {SYMBOL_REF}}, \
3212 {"global_dynamic_symbolic_operand", {SYMBOL_REF}}, \
3213 {"local_dynamic_symbolic_operand", {SYMBOL_REF}}, \
3214 {"initial_exec_symbolic_operand", {SYMBOL_REF}}, \
3215 {"local_exec_symbolic_operand", {SYMBOL_REF}},
c76aab11
RH
3216
3217/* A list of predicates that do special things with modes, and so
3218 should not elicit warnings for VOIDmode match_operand. */
3219
3220#define SPECIAL_MODE_PREDICATES \
3221 "ext_register_operand",
c98f8742 3222\f
5bf0ebab
RH
3223/* Which processor to schedule for. The cpu attribute defines a list that
3224 mirrors this list, so changes to i386.md must be made at the same time. */
3225
3226enum processor_type
3227{
3228 PROCESSOR_I386, /* 80386 */
3229 PROCESSOR_I486, /* 80486DX, 80486SX, 80486DX[24] */
3230 PROCESSOR_PENTIUM,
3231 PROCESSOR_PENTIUMPRO,
3232 PROCESSOR_K6,
3233 PROCESSOR_ATHLON,
3234 PROCESSOR_PENTIUM4,
3235 PROCESSOR_max
3236};
3237
3238extern enum processor_type ix86_cpu;
3239extern const char *ix86_cpu_string;
3240
3241extern enum processor_type ix86_arch;
3242extern const char *ix86_arch_string;
3243
3244enum fpmath_unit
3245{
3246 FPMATH_387 = 1,
3247 FPMATH_SSE = 2
3248};
3249
3250extern enum fpmath_unit ix86_fpmath;
3251extern const char *ix86_fpmath_string;
3252
f996902d
RH
3253enum tls_dialect
3254{
3255 TLS_DIALECT_GNU,
3256 TLS_DIALECT_SUN
3257};
3258
3259extern enum tls_dialect ix86_tls_dialect;
3260extern const char *ix86_tls_dialect_string;
3261
6189a572 3262enum cmodel {
5bf0ebab
RH
3263 CM_32, /* The traditional 32-bit ABI. */
3264 CM_SMALL, /* Assumes all code and data fits in the low 31 bits. */
3265 CM_KERNEL, /* Assumes all code and data fits in the high 31 bits. */
3266 CM_MEDIUM, /* Assumes code fits in the low 31 bits; data unlimited. */
3267 CM_LARGE, /* No assumptions. */
3268 CM_SMALL_PIC /* Assumes code+data+got/plt fits in a 31 bit region. */
6189a572
JH
3269};
3270
5bf0ebab
RH
3271extern enum cmodel ix86_cmodel;
3272extern const char *ix86_cmodel_string;
3273
8362f420
JH
3274/* Size of the RED_ZONE area. */
3275#define RED_ZONE_SIZE 128
3276/* Reserved area of the red zone for temporaries. */
3277#define RED_ZONE_RESERVE 8
c93e80a5
JH
3278
3279enum asm_dialect {
3280 ASM_ATT,
3281 ASM_INTEL
3282};
5bf0ebab 3283
c93e80a5 3284extern const char *ix86_asm_string;
80f33d06 3285extern enum asm_dialect ix86_asm_dialect;
5bf0ebab
RH
3286
3287extern int ix86_regparm;
3288extern const char *ix86_regparm_string;
3289
3290extern int ix86_preferred_stack_boundary;
3291extern const char *ix86_preferred_stack_boundary_string;
3292
3293extern int ix86_branch_cost;
3294extern const char *ix86_branch_cost_string;
3295
3296extern const char *ix86_debug_arg_string;
3297extern const char *ix86_debug_addr_string;
3298
3299/* Obsoleted by -f options. Remove before 3.2 ships. */
3300extern const char *ix86_align_loops_string;
3301extern const char *ix86_align_jumps_string;
3302extern const char *ix86_align_funcs_string;
3303
3304/* Smallest class containing REGNO. */
3305extern enum reg_class const regclass_map[FIRST_PSEUDO_REGISTER];
3306
d9a5f180
GS
3307extern rtx ix86_compare_op0; /* operand 0 for comparisons */
3308extern rtx ix86_compare_op1; /* operand 1 for comparisons */
22fb740d
JH
3309\f
3310/* To properly truncate FP values into integers, we need to set i387 control
3311 word. We can't emit proper mode switching code before reload, as spills
3312 generated by reload may truncate values incorrectly, but we still can avoid
3313 redundant computation of new control word by the mode switching pass.
3314 The fldcw instructions are still emitted redundantly, but this is probably
3315 not going to be noticeable problem, as most CPUs do have fast path for
3316 the sequence.
3317
3318 The machinery is to emit simple truncation instructions and split them
3319 before reload to instructions having USEs of two memory locations that
3320 are filled by this code to old and new control word.
3321
3322 Post-reload pass may be later used to eliminate the redundant fildcw if
3323 needed. */
3324
3325enum fp_cw_mode {FP_CW_STORED, FP_CW_UNINITIALIZED, FP_CW_ANY};
3326
3327/* Define this macro if the port needs extra instructions inserted
3328 for mode switching in an optimizing compilation. */
3329
3330#define OPTIMIZE_MODE_SWITCHING(ENTITY) 1
3331
3332/* If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
3333 initializer for an array of integers. Each initializer element N
3334 refers to an entity that needs mode switching, and specifies the
3335 number of different modes that might need to be set for this
3336 entity. The position of the initializer in the initializer -
3337 starting counting at zero - determines the integer that is used to
3338 refer to the mode-switched entity in question. */
3339
3340#define NUM_MODES_FOR_MODE_SWITCHING { FP_CW_ANY }
3341
3342/* ENTITY is an integer specifying a mode-switched entity. If
3343 `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
3344 return an integer value not larger than the corresponding element
3345 in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
3346 must be switched into prior to the execution of INSN. */
3347
3348#define MODE_NEEDED(ENTITY, I) \
3349 (GET_CODE (I) == CALL_INSN \
3350 || (GET_CODE (I) == INSN && (asm_noperands (PATTERN (I)) >= 0 \
3351 || GET_CODE (PATTERN (I)) == ASM_INPUT))\
3352 ? FP_CW_UNINITIALIZED \
3353 : recog_memoized (I) < 0 || get_attr_type (I) != TYPE_FISTP \
3354 ? FP_CW_ANY \
3355 : FP_CW_STORED)
3356
3357/* This macro specifies the order in which modes for ENTITY are
3358 processed. 0 is the highest priority. */
3359
d9a5f180 3360#define MODE_PRIORITY_TO_MODE(ENTITY, N) (N)
22fb740d
JH
3361
3362/* Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE
3363 is the set of hard registers live at the point where the insn(s)
3364 are to be inserted. */
3365
3366#define EMIT_MODE_SET(ENTITY, MODE, HARD_REGS_LIVE) \
d9a5f180 3367 ((MODE) == FP_CW_STORED \
22fb740d
JH
3368 ? emit_i387_cw_initialization (assign_386_stack_local (HImode, 1), \
3369 assign_386_stack_local (HImode, 2)), 0\
3370 : 0)
0f0138b6
JH
3371\f
3372/* Avoid renaming of stack registers, as doing so in combination with
3373 scheduling just increases amount of live registers at time and in
3374 the turn amount of fxch instructions needed.
3375
3376 ??? Maybe Pentium chips benefits from renaming, someone can try... */
3377
d9a5f180
GS
3378#define HARD_REGNO_RENAME_OK(SRC, TARGET) \
3379 ((SRC) < FIRST_STACK_REG || (SRC) > LAST_STACK_REG)
22fb740d 3380
3b3c6a3f 3381\f
c98f8742
JVA
3382/*
3383Local variables:
3384version-control: t
3385End:
3386*/