OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [config/] [i386/] [i386.h] - Blame information for rev 38

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/* Definitions of target machine for GCC for IA-32.
2
   Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3
   2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4
 
5
This file is part of GCC.
6
 
7
GCC is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 3, or (at your option)
10
any later version.
11
 
12
GCC is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING3.  If not see
19
<http://www.gnu.org/licenses/>.  */
20
 
21
/* The purpose of this file is to define the characteristics of the i386,
22
   independent of assembler syntax or operating system.
23
 
24
   Three other files build on this one to describe a specific assembler syntax:
25
   bsd386.h, att386.h, and sun386.h.
26
 
27
   The actual tm.h file for a particular system should include
28
   this file, and then the file for the appropriate assembler syntax.
29
 
30
   Many macros that specify assembler syntax are omitted entirely from
31
   this file because they really belong in the files for particular
32
   assemblers.  These include RP, IP, LPREFIX, PUT_OP_SIZE, USE_STAR,
33
   ADDR_BEG, ADDR_END, PRINT_IREG, PRINT_SCALE, PRINT_B_I_S, and many
34
   that start with ASM_ or end in ASM_OP.  */
35
 
36
/* Define the specific costs for a given cpu */
37
 
38
struct processor_costs {
39
  const int add;                /* cost of an add instruction */
40
  const int lea;                /* cost of a lea instruction */
41
  const int shift_var;          /* variable shift costs */
42
  const int shift_const;        /* constant shift costs */
43
  const int mult_init[5];       /* cost of starting a multiply
44
                                   in QImode, HImode, SImode, DImode, TImode*/
45
  const int mult_bit;           /* cost of multiply per each bit set */
46
  const int divide[5];          /* cost of a divide/mod
47
                                   in QImode, HImode, SImode, DImode, TImode*/
48
  int movsx;                    /* The cost of movsx operation.  */
49
  int movzx;                    /* The cost of movzx operation.  */
50
  const int large_insn;         /* insns larger than this cost more */
51
  const int move_ratio;         /* The threshold of number of scalar
52
                                   memory-to-memory move insns.  */
53
  const int movzbl_load;        /* cost of loading using movzbl */
54
  const int int_load[3];        /* cost of loading integer registers
55
                                   in QImode, HImode and SImode relative
56
                                   to reg-reg move (2).  */
57
  const int int_store[3];       /* cost of storing integer register
58
                                   in QImode, HImode and SImode */
59
  const int fp_move;            /* cost of reg,reg fld/fst */
60
  const int fp_load[3];         /* cost of loading FP register
61
                                   in SFmode, DFmode and XFmode */
62
  const int fp_store[3];        /* cost of storing FP register
63
                                   in SFmode, DFmode and XFmode */
64
  const int mmx_move;           /* cost of moving MMX register.  */
65
  const int mmx_load[2];        /* cost of loading MMX register
66
                                   in SImode and DImode */
67
  const int mmx_store[2];       /* cost of storing MMX register
68
                                   in SImode and DImode */
69
  const int sse_move;           /* cost of moving SSE register.  */
70
  const int sse_load[3];        /* cost of loading SSE register
71
                                   in SImode, DImode and TImode*/
72
  const int sse_store[3];       /* cost of storing SSE register
73
                                   in SImode, DImode and TImode*/
74
  const int mmxsse_to_integer;  /* cost of moving mmxsse register to
75
                                   integer and vice versa.  */
76
  const int prefetch_block;     /* bytes moved to cache for prefetch.  */
77
  const int simultaneous_prefetches; /* number of parallel prefetch
78
                                   operations.  */
79
  const int branch_cost;        /* Default value for BRANCH_COST.  */
80
  const int fadd;               /* cost of FADD and FSUB instructions.  */
81
  const int fmul;               /* cost of FMUL instruction.  */
82
  const int fdiv;               /* cost of FDIV instruction.  */
83
  const int fabs;               /* cost of FABS instruction.  */
84
  const int fchs;               /* cost of FCHS instruction.  */
85
  const int fsqrt;              /* cost of FSQRT instruction.  */
86
};
87
 
88
extern const struct processor_costs *ix86_cost;
89
 
90
/* Macros used in the machine description to test the flags.  */
91
 
92
/* configure can arrange to make this 2, to force a 486.  */
93
 
94
#ifndef TARGET_CPU_DEFAULT
95
#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
96
#endif
97
 
98
#ifndef TARGET_FPMATH_DEFAULT
99
#define TARGET_FPMATH_DEFAULT \
100
  (TARGET_64BIT && TARGET_SSE ? FPMATH_SSE : FPMATH_387)
101
#endif
102
 
103
#define TARGET_FLOAT_RETURNS_IN_80387 TARGET_FLOAT_RETURNS
104
 
105
/* 64bit Sledgehammer mode.  For libgcc2 we make sure this is a
106
   compile-time constant.  */
107
#ifdef IN_LIBGCC2
108
#undef TARGET_64BIT
109
#ifdef __x86_64__
110
#define TARGET_64BIT 1
111
#else
112
#define TARGET_64BIT 0
113
#endif
114
#else
115
#ifndef TARGET_BI_ARCH
116
#undef TARGET_64BIT
117
#if TARGET_64BIT_DEFAULT
118
#define TARGET_64BIT 1
119
#else
120
#define TARGET_64BIT 0
121
#endif
122
#endif
123
#endif
124
 
125
#define HAS_LONG_COND_BRANCH 1
126
#define HAS_LONG_UNCOND_BRANCH 1
127
 
128
#define TARGET_386 (ix86_tune == PROCESSOR_I386)
129
#define TARGET_486 (ix86_tune == PROCESSOR_I486)
130
#define TARGET_PENTIUM (ix86_tune == PROCESSOR_PENTIUM)
131
#define TARGET_PENTIUMPRO (ix86_tune == PROCESSOR_PENTIUMPRO)
132
#define TARGET_K6 (ix86_tune == PROCESSOR_K6)
133
#define TARGET_ATHLON (ix86_tune == PROCESSOR_ATHLON)
134
#define TARGET_PENTIUM4 (ix86_tune == PROCESSOR_PENTIUM4)
135
#define TARGET_K8 (ix86_tune == PROCESSOR_K8)
136
#define TARGET_ATHLON_K8 (TARGET_K8 || TARGET_ATHLON)
137
#define TARGET_NOCONA (ix86_tune == PROCESSOR_NOCONA)
138
#define TARGET_GENERIC32 (ix86_tune == PROCESSOR_GENERIC32)
139
#define TARGET_GENERIC64 (ix86_tune == PROCESSOR_GENERIC64)
140
#define TARGET_GENERIC (TARGET_GENERIC32 || TARGET_GENERIC64)
141
 
142
#define TUNEMASK (1 << ix86_tune)
143
extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
144
extern const int x86_use_bit_test, x86_cmove, x86_deep_branch;
145
extern const int x86_branch_hints, x86_unroll_strlen;
146
extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx;
147
extern const int x86_use_himode_fiop, x86_use_simode_fiop;
148
extern const int x86_use_mov0, x86_use_cltd, x86_read_modify_write;
149
extern const int x86_read_modify, x86_split_long_moves;
150
extern const int x86_promote_QImode, x86_single_stringop, x86_fast_prefix;
151
extern const int x86_himode_math, x86_qimode_math, x86_promote_qi_regs;
152
extern const int x86_promote_hi_regs, x86_integer_DFmode_moves;
153
extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8;
154
extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
155
extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
156
extern const int x86_epilogue_using_move, x86_decompose_lea;
157
extern const int x86_arch_always_fancy_math_387, x86_shift1;
158
extern const int x86_sse_partial_reg_dependency, x86_sse_split_regs;
159
extern const int x86_sse_typeless_stores, x86_sse_load0_by_pxor;
160
extern const int x86_use_ffreep;
161
extern const int x86_inter_unit_moves, x86_schedule;
162
extern const int x86_use_bt;
163
extern const int x86_cmpxchg, x86_cmpxchg8b, x86_cmpxchg16b, x86_xadd;
164
extern const int x86_use_incdec;
165
extern const int x86_pad_returns;
166
extern const int x86_partial_flag_reg_stall;
167
extern int x86_prefetch_sse;
168
 
169
#define TARGET_USE_LEAVE (x86_use_leave & TUNEMASK)
170
#define TARGET_PUSH_MEMORY (x86_push_memory & TUNEMASK)
171
#define TARGET_ZERO_EXTEND_WITH_AND (x86_zero_extend_with_and & TUNEMASK)
172
#define TARGET_USE_BIT_TEST (x86_use_bit_test & TUNEMASK)
173
#define TARGET_UNROLL_STRLEN (x86_unroll_strlen & TUNEMASK)
174
/* For sane SSE instruction set generation we need fcomi instruction.  It is
175
   safe to enable all CMOVE instructions.  */
176
#define TARGET_CMOVE ((x86_cmove & (1 << ix86_arch)) || TARGET_SSE)
177
#define TARGET_FISTTP (TARGET_SSE3 && TARGET_80387)
178
#define TARGET_DEEP_BRANCH_PREDICTION (x86_deep_branch & TUNEMASK)
179
#define TARGET_BRANCH_PREDICTION_HINTS (x86_branch_hints & TUNEMASK)
180
#define TARGET_DOUBLE_WITH_ADD (x86_double_with_add & TUNEMASK)
181
#define TARGET_USE_SAHF ((x86_use_sahf & TUNEMASK) && !TARGET_64BIT)
182
#define TARGET_MOVX (x86_movx & TUNEMASK)
183
#define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & TUNEMASK)
184
#define TARGET_PARTIAL_FLAG_REG_STALL (x86_partial_flag_reg_stall & TUNEMASK)
185
#define TARGET_USE_HIMODE_FIOP (x86_use_himode_fiop & TUNEMASK)
186
#define TARGET_USE_SIMODE_FIOP (x86_use_simode_fiop & TUNEMASK)
187
#define TARGET_USE_MOV0 (x86_use_mov0 & TUNEMASK)
188
#define TARGET_USE_CLTD (x86_use_cltd & TUNEMASK)
189
#define TARGET_SPLIT_LONG_MOVES (x86_split_long_moves & TUNEMASK)
190
#define TARGET_READ_MODIFY_WRITE (x86_read_modify_write & TUNEMASK)
191
#define TARGET_READ_MODIFY (x86_read_modify & TUNEMASK)
192
#define TARGET_PROMOTE_QImode (x86_promote_QImode & TUNEMASK)
193
#define TARGET_FAST_PREFIX (x86_fast_prefix & TUNEMASK)
194
#define TARGET_SINGLE_STRINGOP (x86_single_stringop & TUNEMASK)
195
#define TARGET_QIMODE_MATH (x86_qimode_math & TUNEMASK)
196
#define TARGET_HIMODE_MATH (x86_himode_math & TUNEMASK)
197
#define TARGET_PROMOTE_QI_REGS (x86_promote_qi_regs & TUNEMASK)
198
#define TARGET_PROMOTE_HI_REGS (x86_promote_hi_regs & TUNEMASK)
199
#define TARGET_ADD_ESP_4 (x86_add_esp_4 & TUNEMASK)
200
#define TARGET_ADD_ESP_8 (x86_add_esp_8 & TUNEMASK)
201
#define TARGET_SUB_ESP_4 (x86_sub_esp_4 & TUNEMASK)
202
#define TARGET_SUB_ESP_8 (x86_sub_esp_8 & TUNEMASK)
203
#define TARGET_INTEGER_DFMODE_MOVES (x86_integer_DFmode_moves & TUNEMASK)
204
#define TARGET_PARTIAL_REG_DEPENDENCY (x86_partial_reg_dependency & TUNEMASK)
205
#define TARGET_SSE_PARTIAL_REG_DEPENDENCY \
206
                                      (x86_sse_partial_reg_dependency & TUNEMASK)
207
#define TARGET_SSE_SPLIT_REGS (x86_sse_split_regs & TUNEMASK)
208
#define TARGET_SSE_TYPELESS_STORES (x86_sse_typeless_stores & TUNEMASK)
209
#define TARGET_SSE_LOAD0_BY_PXOR (x86_sse_load0_by_pxor & TUNEMASK)
210
#define TARGET_MEMORY_MISMATCH_STALL (x86_memory_mismatch_stall & TUNEMASK)
211
#define TARGET_PROLOGUE_USING_MOVE (x86_prologue_using_move & TUNEMASK)
212
#define TARGET_EPILOGUE_USING_MOVE (x86_epilogue_using_move & TUNEMASK)
213
#define TARGET_PREFETCH_SSE (x86_prefetch_sse)
214
#define TARGET_SHIFT1 (x86_shift1 & TUNEMASK)
215
#define TARGET_USE_FFREEP (x86_use_ffreep & TUNEMASK)
216
#define TARGET_REP_MOVL_OPTIMAL (x86_rep_movl_optimal & TUNEMASK)
217
#define TARGET_INTER_UNIT_MOVES (x86_inter_unit_moves & TUNEMASK)
218
#define TARGET_FOUR_JUMP_LIMIT (x86_four_jump_limit & TUNEMASK)
219
#define TARGET_SCHEDULE (x86_schedule & TUNEMASK)
220
#define TARGET_USE_BT (x86_use_bt & TUNEMASK)
221
#define TARGET_USE_INCDEC (x86_use_incdec & TUNEMASK)
222
#define TARGET_PAD_RETURNS (x86_pad_returns & TUNEMASK)
223
 
224
#define ASSEMBLER_DIALECT (ix86_asm_dialect)
225
 
226
#define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0)
227
#define TARGET_MIX_SSE_I387 ((ix86_fpmath & FPMATH_SSE) \
228
                             && (ix86_fpmath & FPMATH_387))
229
 
230
#define TARGET_GNU_TLS (ix86_tls_dialect == TLS_DIALECT_GNU)
231
#define TARGET_GNU2_TLS (ix86_tls_dialect == TLS_DIALECT_GNU2)
232
#define TARGET_ANY_GNU_TLS (TARGET_GNU_TLS || TARGET_GNU2_TLS)
233
#define TARGET_SUN_TLS (ix86_tls_dialect == TLS_DIALECT_SUN)
234
 
235
#define TARGET_CMPXCHG (x86_cmpxchg & (1 << ix86_arch))
236
#define TARGET_CMPXCHG8B (x86_cmpxchg8b & (1 << ix86_arch))
237
#define TARGET_CMPXCHG16B (x86_cmpxchg16b & (1 << ix86_arch))
238
#define TARGET_XADD (x86_xadd & (1 << ix86_arch))
239
 
240
#ifndef TARGET_64BIT_DEFAULT
241
#define TARGET_64BIT_DEFAULT 0
242
#endif
243
#ifndef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT
244
#define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT 0
245
#endif
246
 
247
/* Once GDB has been enhanced to deal with functions without frame
248
   pointers, we can change this to allow for elimination of
249
   the frame pointer in leaf functions.  */
250
#define TARGET_DEFAULT 0
251
 
252
/* This is not really a target flag, but is done this way so that
253
   it's analogous to similar code for Mach-O on PowerPC.  darwin.h
254
   redefines this to 1.  */
255
#define TARGET_MACHO 0
256
 
257
/* Subtargets may reset this to 1 in order to enable 96-bit long double
258
   with the rounding mode forced to 53 bits.  */
259
#define TARGET_96_ROUND_53_LONG_DOUBLE 0
260
 
261
/* Sometimes certain combinations of command options do not make
262
   sense on a particular target machine.  You can define a macro
263
   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
264
   defined, is executed once just after all the command options have
265
   been parsed.
266
 
267
   Don't use this macro to turn on various extra optimizations for
268
   `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.  */
269
 
270
#define OVERRIDE_OPTIONS override_options ()
271
 
272
/* Define this to change the optimizations performed by default.  */
273
#define OPTIMIZATION_OPTIONS(LEVEL, SIZE) \
274
  optimization_options ((LEVEL), (SIZE))
275
 
276
/* -march=native handling only makes sense with compiler running on
277
   an x86 or x86_64 chip.  If changing this condition, also change
278
   the condition in driver-i386.c.  */
279
#if defined(__i386__) || defined(__x86_64__)
280
/* In driver-i386.c.  */
281
extern const char *host_detect_local_cpu (int argc, const char **argv);
282
#define EXTRA_SPEC_FUNCTIONS \
283
  { "local_cpu_detect", host_detect_local_cpu },
284
#define HAVE_LOCAL_CPU_DETECT
285
#endif
286
 
287
/* Support for configure-time defaults of some command line options.
288
   The order here is important so that -march doesn't squash the
289
   tune or cpu values.  */
290
#define OPTION_DEFAULT_SPECS \
291
  {"tune", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" }, \
292
  {"cpu", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" }, \
293
  {"arch", "%{!march=*:-march=%(VALUE)}"}
294
 
295
/* Specs for the compiler proper */
296
 
297
#ifndef CC1_CPU_SPEC
298
#define CC1_CPU_SPEC_1 "\
299
%{!mtune*: \
300
%{m386:mtune=i386 \
301
%n`-m386' is deprecated. Use `-march=i386' or `-mtune=i386' instead.\n} \
302
%{m486:-mtune=i486 \
303
%n`-m486' is deprecated. Use `-march=i486' or `-mtune=i486' instead.\n} \
304
%{mpentium:-mtune=pentium \
305
%n`-mpentium' is deprecated. Use `-march=pentium' or `-mtune=pentium' instead.\n} \
306
%{mpentiumpro:-mtune=pentiumpro \
307
%n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mtune=pentiumpro' instead.\n} \
308
%{mcpu=*:-mtune=%* \
309
%n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.\n}} \
310
%<mcpu=* \
311
%{mintel-syntax:-masm=intel \
312
%n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \
313
%{mno-intel-syntax:-masm=att \
314
%n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.\n}"
315
 
316
#ifndef HAVE_LOCAL_CPU_DETECT
317
#define CC1_CPU_SPEC CC1_CPU_SPEC_1
318
#else
319
#define CC1_CPU_SPEC CC1_CPU_SPEC_1 \
320
"%{march=native:%<march=native %:local_cpu_detect(arch) \
321
  %{!mtune=*:%<mtune=native %:local_cpu_detect(tune)}} \
322
%{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
323
#endif
324
#endif
325
 
326
/* Target CPU builtins.  */
327
#define TARGET_CPU_CPP_BUILTINS()                               \
328
  do                                                            \
329
    {                                                           \
330
      size_t arch_len = strlen (ix86_arch_string);              \
331
      size_t tune_len = strlen (ix86_tune_string);              \
332
      int last_arch_char = ix86_arch_string[arch_len - 1];      \
333
      int last_tune_char = ix86_tune_string[tune_len - 1];              \
334
                                                                \
335
      if (TARGET_64BIT)                                         \
336
        {                                                       \
337
          builtin_assert ("cpu=x86_64");                        \
338
          builtin_assert ("machine=x86_64");                    \
339
          builtin_define ("__amd64");                           \
340
          builtin_define ("__amd64__");                         \
341
          builtin_define ("__x86_64");                          \
342
          builtin_define ("__x86_64__");                        \
343
        }                                                       \
344
      else                                                      \
345
        {                                                       \
346
          builtin_assert ("cpu=i386");                          \
347
          builtin_assert ("machine=i386");                      \
348
          builtin_define_std ("i386");                          \
349
        }                                                       \
350
                                                                \
351
      /* Built-ins based on -mtune= (or -march= if no           \
352
         -mtune= given).  */                                    \
353
      if (TARGET_386)                                           \
354
        builtin_define ("__tune_i386__");                       \
355
      else if (TARGET_486)                                      \
356
        builtin_define ("__tune_i486__");                       \
357
      else if (TARGET_PENTIUM)                                  \
358
        {                                                       \
359
          builtin_define ("__tune_i586__");                     \
360
          builtin_define ("__tune_pentium__");                  \
361
          if (last_tune_char == 'x')                            \
362
            builtin_define ("__tune_pentium_mmx__");            \
363
        }                                                       \
364
      else if (TARGET_PENTIUMPRO)                               \
365
        {                                                       \
366
          builtin_define ("__tune_i686__");                     \
367
          builtin_define ("__tune_pentiumpro__");               \
368
          switch (last_tune_char)                               \
369
            {                                                   \
370
            case '3':                                           \
371
              builtin_define ("__tune_pentium3__");             \
372
              /* FALLTHRU */                                    \
373
            case '2':                                           \
374
              builtin_define ("__tune_pentium2__");             \
375
              break;                                            \
376
            }                                                   \
377
        }                                                       \
378
      else if (TARGET_K6)                                       \
379
        {                                                       \
380
          builtin_define ("__tune_k6__");                       \
381
          if (last_tune_char == '2')                            \
382
            builtin_define ("__tune_k6_2__");                   \
383
          else if (last_tune_char == '3')                       \
384
            builtin_define ("__tune_k6_3__");                   \
385
        }                                                       \
386
      else if (TARGET_ATHLON)                                   \
387
        {                                                       \
388
          builtin_define ("__tune_athlon__");                   \
389
          /* Only plain "athlon" lacks SSE.  */                 \
390
          if (last_tune_char != 'n')                            \
391
            builtin_define ("__tune_athlon_sse__");             \
392
        }                                                       \
393
      else if (TARGET_K8)                                       \
394
        builtin_define ("__tune_k8__");                         \
395
      else if (TARGET_PENTIUM4)                                 \
396
        builtin_define ("__tune_pentium4__");                   \
397
      else if (TARGET_NOCONA)                                   \
398
        builtin_define ("__tune_nocona__");                     \
399
                                                                \
400
      if (TARGET_MMX)                                           \
401
        builtin_define ("__MMX__");                             \
402
      if (TARGET_3DNOW)                                         \
403
        builtin_define ("__3dNOW__");                           \
404
      if (TARGET_3DNOW_A)                                       \
405
        builtin_define ("__3dNOW_A__");                         \
406
      if (TARGET_SSE)                                           \
407
        builtin_define ("__SSE__");                             \
408
      if (TARGET_SSE2)                                          \
409
        builtin_define ("__SSE2__");                            \
410
      if (TARGET_SSE3)                                          \
411
        builtin_define ("__SSE3__");                            \
412
      if (TARGET_SSE_MATH && TARGET_SSE)                        \
413
        builtin_define ("__SSE_MATH__");                        \
414
      if (TARGET_SSE_MATH && TARGET_SSE2)                       \
415
        builtin_define ("__SSE2_MATH__");                       \
416
                                                                \
417
      /* Built-ins based on -march=.  */                        \
418
      if (ix86_arch == PROCESSOR_I486)                          \
419
        {                                                       \
420
          builtin_define ("__i486");                            \
421
          builtin_define ("__i486__");                          \
422
        }                                                       \
423
      else if (ix86_arch == PROCESSOR_PENTIUM)                  \
424
        {                                                       \
425
          builtin_define ("__i586");                            \
426
          builtin_define ("__i586__");                          \
427
          builtin_define ("__pentium");                         \
428
          builtin_define ("__pentium__");                       \
429
          if (last_arch_char == 'x')                            \
430
            builtin_define ("__pentium_mmx__");                 \
431
        }                                                       \
432
      else if (ix86_arch == PROCESSOR_PENTIUMPRO)               \
433
        {                                                       \
434
          builtin_define ("__i686");                            \
435
          builtin_define ("__i686__");                          \
436
          builtin_define ("__pentiumpro");                      \
437
          builtin_define ("__pentiumpro__");                    \
438
        }                                                       \
439
      else if (ix86_arch == PROCESSOR_K6)                       \
440
        {                                                       \
441
                                                                \
442
          builtin_define ("__k6");                              \
443
          builtin_define ("__k6__");                            \
444
          if (last_arch_char == '2')                            \
445
            builtin_define ("__k6_2__");                        \
446
          else if (last_arch_char == '3')                       \
447
            builtin_define ("__k6_3__");                        \
448
        }                                                       \
449
      else if (ix86_arch == PROCESSOR_ATHLON)                   \
450
        {                                                       \
451
          builtin_define ("__athlon");                          \
452
          builtin_define ("__athlon__");                        \
453
          /* Only plain "athlon" lacks SSE.  */                 \
454
          if (last_arch_char != 'n')                            \
455
            builtin_define ("__athlon_sse__");                  \
456
        }                                                       \
457
      else if (ix86_arch == PROCESSOR_K8)                       \
458
        {                                                       \
459
          builtin_define ("__k8");                              \
460
          builtin_define ("__k8__");                            \
461
        }                                                       \
462
      else if (ix86_arch == PROCESSOR_PENTIUM4)                 \
463
        {                                                       \
464
          builtin_define ("__pentium4");                        \
465
          builtin_define ("__pentium4__");                      \
466
        }                                                       \
467
      else if (ix86_arch == PROCESSOR_NOCONA)                   \
468
        {                                                       \
469
          builtin_define ("__nocona");                          \
470
          builtin_define ("__nocona__");                        \
471
        }                                                       \
472
    }                                                           \
473
  while (0)
474
 
475
#define TARGET_CPU_DEFAULT_i386 0
476
#define TARGET_CPU_DEFAULT_i486 1
477
#define TARGET_CPU_DEFAULT_pentium 2
478
#define TARGET_CPU_DEFAULT_pentium_mmx 3
479
#define TARGET_CPU_DEFAULT_pentiumpro 4
480
#define TARGET_CPU_DEFAULT_pentium2 5
481
#define TARGET_CPU_DEFAULT_pentium3 6
482
#define TARGET_CPU_DEFAULT_pentium4 7
483
#define TARGET_CPU_DEFAULT_k6 8
484
#define TARGET_CPU_DEFAULT_k6_2 9
485
#define TARGET_CPU_DEFAULT_k6_3 10
486
#define TARGET_CPU_DEFAULT_athlon 11
487
#define TARGET_CPU_DEFAULT_athlon_sse 12
488
#define TARGET_CPU_DEFAULT_k8 13
489
#define TARGET_CPU_DEFAULT_pentium_m 14
490
#define TARGET_CPU_DEFAULT_prescott 15
491
#define TARGET_CPU_DEFAULT_nocona 16
492
#define TARGET_CPU_DEFAULT_generic 17
493
 
494
#define TARGET_CPU_DEFAULT_NAMES {"i386", "i486", "pentium", "pentium-mmx",\
495
                                  "pentiumpro", "pentium2", "pentium3", \
496
                                  "pentium4", "k6", "k6-2", "k6-3",\
497
                                  "athlon", "athlon-4", "k8", \
498
                                  "pentium-m", "prescott", "nocona", \
499
                                  "generic"}
500
 
501
#ifndef CC1_SPEC
502
#define CC1_SPEC "%(cc1_cpu) "
503
#endif
504
 
505
/* This macro defines names of additional specifications to put in the
506
   specs that can be used in various specifications like CC1_SPEC.  Its
507
   definition is an initializer with a subgrouping for each command option.
508
 
509
   Each subgrouping contains a string constant, that defines the
510
   specification name, and a string constant that used by the GCC driver
511
   program.
512
 
513
   Do not define this macro if it does not need to do anything.  */
514
 
515
#ifndef SUBTARGET_EXTRA_SPECS
516
#define SUBTARGET_EXTRA_SPECS
517
#endif
518
 
519
#define EXTRA_SPECS                                                     \
520
  { "cc1_cpu",  CC1_CPU_SPEC },                                         \
521
  SUBTARGET_EXTRA_SPECS
522
 
523
/* target machine storage layout */
524
 
525
#define LONG_DOUBLE_TYPE_SIZE 80
526
 
527
/* Set the value of FLT_EVAL_METHOD in float.h.  When using only the
528
   FPU, assume that the fpcw is set to extended precision; when using
529
   only SSE, rounding is correct; when using both SSE and the FPU,
530
   the rounding precision is indeterminate, since either may be chosen
531
   apparently at random.  */
532
#define TARGET_FLT_EVAL_METHOD \
533
  (TARGET_MIX_SSE_I387 ? -1 : TARGET_SSE_MATH ? 0 : 2)
534
 
535
#define SHORT_TYPE_SIZE 16
536
#define INT_TYPE_SIZE 32
537
#define FLOAT_TYPE_SIZE 32
538
#define LONG_TYPE_SIZE BITS_PER_WORD
539
#define DOUBLE_TYPE_SIZE 64
540
#define LONG_LONG_TYPE_SIZE 64
541
 
542
#if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT
543
#define MAX_BITS_PER_WORD 64
544
#else
545
#define MAX_BITS_PER_WORD 32
546
#endif
547
 
548
/* Define this if most significant byte of a word is the lowest numbered.  */
549
/* That is true on the 80386.  */
550
 
551
#define BITS_BIG_ENDIAN 0
552
 
553
/* Define this if most significant byte of a word is the lowest numbered.  */
554
/* That is not true on the 80386.  */
555
#define BYTES_BIG_ENDIAN 0
556
 
557
/* Define this if most significant word of a multiword number is the lowest
558
   numbered.  */
559
/* Not true for 80386 */
560
#define WORDS_BIG_ENDIAN 0
561
 
562
/* Width of a word, in units (bytes).  */
563
#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
564
#ifdef IN_LIBGCC2
565
#define MIN_UNITS_PER_WORD      (TARGET_64BIT ? 8 : 4)
566
#else
567
#define MIN_UNITS_PER_WORD      4
568
#endif
569
 
570
/* Allocation boundary (in *bits*) for storing arguments in argument list.  */
571
#define PARM_BOUNDARY BITS_PER_WORD
572
 
573
/* Boundary (in *bits*) on which stack pointer should be aligned.  */
574
#define STACK_BOUNDARY BITS_PER_WORD
575
 
576
/* Boundary (in *bits*) on which the stack pointer prefers to be
577
   aligned; the compiler cannot rely on having this alignment.  */
578
#define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary
579
 
580
/* As of July 2001, many runtimes do not align the stack properly when
581
   entering main.  This causes expand_main_function to forcibly align
582
   the stack, which results in aligned frames for functions called from
583
   main, though it does nothing for the alignment of main itself.  */
584
#define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \
585
  (ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT)
586
 
587
/* Minimum allocation boundary for the code of a function.  */
588
#define FUNCTION_BOUNDARY 8
589
 
590
/* C++ stores the virtual bit in the lowest bit of function pointers.  */
591
#define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn
592
 
593
/* Alignment of field after `int : 0' in a structure.  */
594
 
595
#define EMPTY_FIELD_BOUNDARY BITS_PER_WORD
596
 
597
/* Minimum size in bits of the largest boundary to which any
598
   and all fundamental data types supported by the hardware
599
   might need to be aligned. No data type wants to be aligned
600
   rounder than this.
601
 
602
   Pentium+ prefers DFmode values to be aligned to 64 bit boundary
603
   and Pentium Pro XFmode values at 128 bit boundaries.  */
604
 
605
#define BIGGEST_ALIGNMENT 128
606
 
607
/* Decide whether a variable of mode MODE should be 128 bit aligned.  */
608
#define ALIGN_MODE_128(MODE) \
609
 ((MODE) == XFmode || SSE_REG_MODE_P (MODE))
610
 
611
/* The published ABIs say that doubles should be aligned on word
612
   boundaries, so lower the alignment for structure fields unless
613
   -malign-double is set.  */
614
 
615
/* ??? Blah -- this macro is used directly by libobjc.  Since it
616
   supports no vector modes, cut out the complexity and fall back
617
   on BIGGEST_FIELD_ALIGNMENT.  */
618
#ifdef IN_TARGET_LIBS
619
#ifdef __x86_64__
620
#define BIGGEST_FIELD_ALIGNMENT 128
621
#else
622
#define BIGGEST_FIELD_ALIGNMENT 32
623
#endif
624
#else
625
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
626
   x86_field_alignment (FIELD, COMPUTED)
627
#endif
628
 
629
/* If defined, a C expression to compute the alignment given to a
630
   constant that is being placed in memory.  EXP is the constant
631
   and ALIGN is the alignment that the object would ordinarily have.
632
   The value of this macro is used instead of that alignment to align
633
   the object.
634
 
635
   If this macro is not defined, then ALIGN is used.
636
 
637
   The typical use of this macro is to increase alignment for string
638
   constants to be word aligned so that `strcpy' calls that copy
639
   constants can be done inline.  */
640
 
641
#define CONSTANT_ALIGNMENT(EXP, ALIGN) ix86_constant_alignment ((EXP), (ALIGN))
642
 
643
/* If defined, a C expression to compute the alignment for a static
644
   variable.  TYPE is the data type, and ALIGN is the alignment that
645
   the object would ordinarily have.  The value of this macro is used
646
   instead of that alignment to align the object.
647
 
648
   If this macro is not defined, then ALIGN is used.
649
 
650
   One use of this macro is to increase alignment of medium-size
651
   data to make it all fit in fewer cache lines.  Another is to
652
   cause character arrays to be word-aligned so that `strcpy' calls
653
   that copy constants to character arrays can be done inline.  */
654
 
655
#define DATA_ALIGNMENT(TYPE, ALIGN) ix86_data_alignment ((TYPE), (ALIGN))
656
 
657
/* If defined, a C expression to compute the alignment for a local
658
   variable.  TYPE is the data type, and ALIGN is the alignment that
659
   the object would ordinarily have.  The value of this macro is used
660
   instead of that alignment to align the object.
661
 
662
   If this macro is not defined, then ALIGN is used.
663
 
664
   One use of this macro is to increase alignment of medium-size
665
   data to make it all fit in fewer cache lines.  */
666
 
667
#define LOCAL_ALIGNMENT(TYPE, ALIGN) ix86_local_alignment ((TYPE), (ALIGN))
668
 
669
/* If defined, a C expression that gives the alignment boundary, in
670
   bits, of an argument with the specified mode and type.  If it is
671
   not defined, `PARM_BOUNDARY' is used for all arguments.  */
672
 
673
#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
674
  ix86_function_arg_boundary ((MODE), (TYPE))
675
 
676
/* Set this nonzero if move instructions will actually fail to work
677
   when given unaligned data.  */
678
#define STRICT_ALIGNMENT 0
679
 
680
/* If bit field type is int, don't let it cross an int,
681
   and give entire struct the alignment of an int.  */
682
/* Required on the 386 since it doesn't have bit-field insns.  */
683
#define PCC_BITFIELD_TYPE_MATTERS 1
684
 
685
/* Standard register usage.  */
686
 
687
/* This processor has special stack-like registers.  See reg-stack.c
688
   for details.  */
689
 
690
#define STACK_REGS
691
#define IS_STACK_MODE(MODE)                                     \
692
  (((MODE) == SFmode && (!TARGET_SSE || !TARGET_SSE_MATH))      \
693
   || ((MODE) == DFmode && (!TARGET_SSE2 || !TARGET_SSE_MATH))  \
694
   || (MODE) == XFmode)
695
 
696
/* Number of actual hardware registers.
697
   The hardware registers are assigned numbers for the compiler
698
   from 0 to just below FIRST_PSEUDO_REGISTER.
699
   All registers that the compiler knows about must be given numbers,
700
   even those that are not normally considered general registers.
701
 
702
   In the 80386 we give the 8 general purpose registers the numbers 0-7.
703
   We number the floating point registers 8-15.
704
   Note that registers 0-7 can be accessed as a  short or int,
705
   while only 0-3 may be used with byte `mov' instructions.
706
 
707
   Reg 16 does not correspond to any hardware register, but instead
708
   appears in the RTL as an argument pointer prior to reload, and is
709
   eliminated during reloading in favor of either the stack or frame
710
   pointer.  */
711
 
712
#define FIRST_PSEUDO_REGISTER 53
713
 
714
/* Number of hardware registers that go into the DWARF-2 unwind info.
715
   If not defined, equals FIRST_PSEUDO_REGISTER.  */
716
 
717
#define DWARF_FRAME_REGISTERS 17
718
 
719
/* 1 for registers that have pervasive standard uses
720
   and are not available for the register allocator.
721
   On the 80386, the stack pointer is such, as is the arg pointer.
722
 
723
   The value is zero if the register is not fixed on either 32 or
724
   64 bit targets, one if the register if fixed on both 32 and 64
725
   bit targets, two if it is only fixed on 32bit targets and three
726
   if its only fixed on 64bit targets.
727
   Proper values are computed in the CONDITIONAL_REGISTER_USAGE.
728
 */
729
#define FIXED_REGISTERS                                         \
730
/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/      \
731
{  0, 0, 0, 0, 0, 0, 0, 1, 0,  0,  0,  0,  0,  0,  0,  0,       \
732
/*arg,flags,fpsr,dir,frame*/                                    \
733
    1,    1,   1,  1,    1,                                     \
734
/*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/                     \
735
     0,   0,   0,   0,   0,   0,   0,   0,                      \
736
/*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/                     \
737
     0,   0,   0,   0,   0,   0,   0,   0,                      \
738
/*  r8,  r9, r10, r11, r12, r13, r14, r15*/                     \
739
     2,   2,   2,   2,   2,   2,   2,   2,                      \
740
/*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/               \
741
     2,   2,    2,    2,    2,    2,    2,    2}
742
 
743
 
744
/* 1 for registers not available across function calls.
745
   These must include the FIXED_REGISTERS and also any
746
   registers that can be used without being saved.
747
   The latter must include the registers where values are returned
748
   and the register where structure-value addresses are passed.
749
   Aside from that, you can include as many other registers as you like.
750
 
751
   The value is zero if the register is not call used on either 32 or
752
   64 bit targets, one if the register if call used on both 32 and 64
753
   bit targets, two if it is only call used on 32bit targets and three
754
   if its only call used on 64bit targets.
755
   Proper values are computed in the CONDITIONAL_REGISTER_USAGE.
756
*/
757
#define CALL_USED_REGISTERS                                     \
758
/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/      \
759
{  1, 1, 1, 0, 3, 3, 0, 1, 1,  1,  1,  1,  1,  1,  1,  1,       \
760
/*arg,flags,fpsr,dir,frame*/                                    \
761
     1,   1,   1,  1,    1,                                     \
762
/*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/                     \
763
     1,   1,   1,   1,   1,  1,    1,   1,                      \
764
/*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/                     \
765
     1,   1,   1,   1,   1,   1,   1,   1,                      \
766
/*  r8,  r9, r10, r11, r12, r13, r14, r15*/                     \
767
     1,   1,   1,   1,   2,   2,   2,   2,                      \
768
/*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/               \
769
     1,   1,    1,    1,    1,    1,    1,    1}                \
770
 
771
/* Order in which to allocate registers.  Each register must be
772
   listed once, even those in FIXED_REGISTERS.  List frame pointer
773
   late and fixed registers last.  Note that, in general, we prefer
774
   registers listed in CALL_USED_REGISTERS, keeping the others
775
   available for storage of persistent values.
776
 
777
   The ORDER_REGS_FOR_LOCAL_ALLOC actually overwrite the order,
778
   so this is just empty initializer for array.  */
779
 
780
#define REG_ALLOC_ORDER                                         \
781
{  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\
782
   18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,  \
783
   33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,  \
784
   48, 49, 50, 51, 52 }
785
 
786
/* ORDER_REGS_FOR_LOCAL_ALLOC is a macro which permits reg_alloc_order
787
   to be rearranged based on a particular function.  When using sse math,
788
   we want to allocate SSE before x87 registers and vice vera.  */
789
 
790
#define ORDER_REGS_FOR_LOCAL_ALLOC x86_order_regs_for_local_alloc ()
791
 
792
 
793
/* Macro to conditionally modify fixed_regs/call_used_regs.  */
794
#define CONDITIONAL_REGISTER_USAGE                                      \
795
do {                                                                    \
796
    int i;                                                              \
797
    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)                         \
798
      {                                                                 \
799
        if (fixed_regs[i] > 1)                                          \
800
          fixed_regs[i] = (fixed_regs[i] == (TARGET_64BIT ? 3 : 2));    \
801
        if (call_used_regs[i] > 1)                                      \
802
          call_used_regs[i] = (call_used_regs[i]                        \
803
                               == (TARGET_64BIT ? 3 : 2));              \
804
      }                                                                 \
805
    if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)                      \
806
      {                                                                 \
807
        fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;                        \
808
        call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;                    \
809
      }                                                                 \
810
    if (! TARGET_MMX)                                                   \
811
      {                                                                 \
812
        int i;                                                          \
813
        for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)                     \
814
          if (TEST_HARD_REG_BIT (reg_class_contents[(int)MMX_REGS], i)) \
815
            fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = "";   \
816
      }                                                                 \
817
    if (! TARGET_SSE)                                                   \
818
      {                                                                 \
819
        int i;                                                          \
820
        for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)                     \
821
          if (TEST_HARD_REG_BIT (reg_class_contents[(int)SSE_REGS], i)) \
822
            fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = "";   \
823
      }                                                                 \
824
    if (! TARGET_80387 && ! TARGET_FLOAT_RETURNS_IN_80387)              \
825
      {                                                                 \
826
        int i;                                                          \
827
        HARD_REG_SET x;                                                 \
828
        COPY_HARD_REG_SET (x, reg_class_contents[(int)FLOAT_REGS]);     \
829
        for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)                     \
830
          if (TEST_HARD_REG_BIT (x, i))                                 \
831
            fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = "";   \
832
      }                                                                 \
833
    if (! TARGET_64BIT)                                                 \
834
      {                                                                 \
835
        int i;                                                          \
836
        for (i = FIRST_REX_INT_REG; i <= LAST_REX_INT_REG; i++)         \
837
          reg_names[i] = "";                                            \
838
        for (i = FIRST_REX_SSE_REG; i <= LAST_REX_SSE_REG; i++)         \
839
          reg_names[i] = "";                                            \
840
      }                                                                 \
841
  } while (0)
842
 
843
/* Return number of consecutive hard regs needed starting at reg REGNO
844
   to hold something of mode MODE.
845
   This is ordinarily the length in words of a value of mode MODE
846
   but can be less for certain modes in special long registers.
847
 
848
   Actually there are no two word move instructions for consecutive
849
   registers.  And only registers 0-3 may have mov byte instructions
850
   applied to them.
851
   */
852
 
853
#define HARD_REGNO_NREGS(REGNO, MODE)   \
854
  (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO)     \
855
   ? (COMPLEX_MODE_P (MODE) ? 2 : 1)                                    \
856
   : ((MODE) == XFmode                                                  \
857
      ? (TARGET_64BIT ? 2 : 3)                                          \
858
      : (MODE) == XCmode                                                \
859
      ? (TARGET_64BIT ? 4 : 6)                                          \
860
      : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)))
861
 
862
#define HARD_REGNO_NREGS_HAS_PADDING(REGNO, MODE)                       \
863
  ((TARGET_128BIT_LONG_DOUBLE && !TARGET_64BIT)                         \
864
   ? (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO)  \
865
      ? 0                                                               \
866
      : ((MODE) == XFmode || (MODE) == XCmode))                         \
867
   : 0)
868
 
869
#define HARD_REGNO_NREGS_WITH_PADDING(REGNO, MODE) ((MODE) == XFmode ? 4 : 8)
870
 
871
#define VALID_SSE2_REG_MODE(MODE) \
872
    ((MODE) == V16QImode || (MODE) == V8HImode || (MODE) == V2DFmode    \
873
     || (MODE) == V2DImode || (MODE) == DFmode)
874
 
875
#define VALID_SSE_REG_MODE(MODE)                                        \
876
    ((MODE) == TImode || (MODE) == V4SFmode || (MODE) == V4SImode       \
877
     || (MODE) == SFmode || (MODE) == TFmode)
878
 
879
#define VALID_MMX_REG_MODE_3DNOW(MODE) \
880
    ((MODE) == V2SFmode || (MODE) == SFmode)
881
 
882
#define VALID_MMX_REG_MODE(MODE)                                        \
883
    ((MODE) == DImode || (MODE) == V8QImode || (MODE) == V4HImode       \
884
     || (MODE) == V2SImode || (MODE) == SImode)
885
 
886
/* ??? No autovectorization into MMX or 3DNOW until we can reliably
887
   place emms and femms instructions.  */
888
#define UNITS_PER_SIMD_WORD (TARGET_SSE ? 16 : UNITS_PER_WORD)
889
 
890
#define VALID_FP_MODE_P(MODE)                                           \
891
    ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode           \
892
     || (MODE) == SCmode || (MODE) == DCmode || (MODE) == XCmode)       \
893
 
894
#define VALID_INT_MODE_P(MODE)                                          \
895
    ((MODE) == QImode || (MODE) == HImode || (MODE) == SImode           \
896
     || (MODE) == DImode                                                \
897
     || (MODE) == CQImode || (MODE) == CHImode || (MODE) == CSImode     \
898
     || (MODE) == CDImode                                               \
899
     || (TARGET_64BIT && ((MODE) == TImode || (MODE) == CTImode         \
900
         || (MODE) == TFmode || (MODE) == TCmode)))
901
 
902
/* Return true for modes passed in SSE registers.  */
903
#define SSE_REG_MODE_P(MODE) \
904
 ((MODE) == TImode || (MODE) == V16QImode || (MODE) == TFmode           \
905
   || (MODE) == V8HImode || (MODE) == V2DFmode || (MODE) == V2DImode    \
906
   || (MODE) == V4SFmode || (MODE) == V4SImode)
907
 
908
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.  */
909
 
910
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
911
   ix86_hard_regno_mode_ok ((REGNO), (MODE))
912
 
913
/* Value is 1 if it is a good idea to tie two pseudo registers
914
   when one has mode MODE1 and one has mode MODE2.
915
   If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
916
   for any hard reg, then this must be 0 for correct output.  */
917
 
918
#define MODES_TIEABLE_P(MODE1, MODE2)  ix86_modes_tieable_p (MODE1, MODE2)
919
 
920
/* It is possible to write patterns to move flags; but until someone
921
   does it,  */
922
#define AVOID_CCMODE_COPIES
923
 
924
/* Specify the modes required to caller save a given hard regno.
925
   We do this on i386 to prevent flags from being saved at all.
926
 
927
   Kill any attempts to combine saving of modes.  */
928
 
929
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE)                 \
930
  (CC_REGNO_P (REGNO) ? VOIDmode                                        \
931
   : (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode                      \
932
   : (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS), false)\
933
   : (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode             \
934
   : (MODE) == QImode && (REGNO) >= 4 && !TARGET_64BIT ? SImode         \
935
   : (MODE))
936
/* Specify the registers used for certain standard purposes.
937
   The values of these macros are register numbers.  */
938
 
939
/* on the 386 the pc register is %eip, and is not usable as a general
940
   register.  The ordinary mov instructions won't work */
941
/* #define PC_REGNUM  */
942
 
943
/* Register to use for pushing function arguments.  */
944
#define STACK_POINTER_REGNUM 7
945
 
946
/* Base register for access to local variables of the function.  */
947
#define HARD_FRAME_POINTER_REGNUM 6
948
 
949
/* Base register for access to local variables of the function.  */
950
#define FRAME_POINTER_REGNUM 20
951
 
952
/* First floating point reg */
953
#define FIRST_FLOAT_REG 8
954
 
955
/* First & last stack-like regs */
956
#define FIRST_STACK_REG FIRST_FLOAT_REG
957
#define LAST_STACK_REG (FIRST_FLOAT_REG + 7)
958
 
959
#define FIRST_SSE_REG (FRAME_POINTER_REGNUM + 1)
960
#define LAST_SSE_REG  (FIRST_SSE_REG + 7)
961
 
962
#define FIRST_MMX_REG  (LAST_SSE_REG + 1)
963
#define LAST_MMX_REG   (FIRST_MMX_REG + 7)
964
 
965
#define FIRST_REX_INT_REG  (LAST_MMX_REG + 1)
966
#define LAST_REX_INT_REG   (FIRST_REX_INT_REG + 7)
967
 
968
#define FIRST_REX_SSE_REG  (LAST_REX_INT_REG + 1)
969
#define LAST_REX_SSE_REG   (FIRST_REX_SSE_REG + 7)
970
 
971
/* Value should be nonzero if functions must have frame pointers.
972
   Zero means the frame pointer need not be set up (and parms
973
   may be accessed via the stack pointer) in functions that seem suitable.
974
   This is computed in `reload', in reload1.c.  */
975
#define FRAME_POINTER_REQUIRED  ix86_frame_pointer_required ()
976
 
977
/* Override this in other tm.h files to cope with various OS lossage
978
   requiring a frame pointer.  */
979
#ifndef SUBTARGET_FRAME_POINTER_REQUIRED
980
#define SUBTARGET_FRAME_POINTER_REQUIRED 0
981
#endif
982
 
983
/* Make sure we can access arbitrary call frames.  */
984
#define SETUP_FRAME_ADDRESSES()  ix86_setup_frame_addresses ()
985
 
986
/* Base register for access to arguments of the function.  */
987
#define ARG_POINTER_REGNUM 16
988
 
989
/* Register in which static-chain is passed to a function.
990
   We do use ECX as static chain register for 32 bit ABI.  On the
991
   64bit ABI, ECX is an argument register, so we use R10 instead.  */
992
#define STATIC_CHAIN_REGNUM (TARGET_64BIT ? FIRST_REX_INT_REG + 10 - 8 : 2)
993
 
994
/* Register to hold the addressing base for position independent
995
   code access to data items.  We don't use PIC pointer for 64bit
996
   mode.  Define the regnum to dummy value to prevent gcc from
997
   pessimizing code dealing with EBX.
998
 
999
   To avoid clobbering a call-saved register unnecessarily, we renumber
1000
   the pic register when possible.  The change is visible after the
1001
   prologue has been emitted.  */
1002
 
1003
#define REAL_PIC_OFFSET_TABLE_REGNUM  3
1004
 
1005
#define PIC_OFFSET_TABLE_REGNUM                         \
1006
  ((TARGET_64BIT && ix86_cmodel == CM_SMALL_PIC)        \
1007
   || !flag_pic ? INVALID_REGNUM                        \
1008
   : reload_completed ? REGNO (pic_offset_table_rtx)    \
1009
   : REAL_PIC_OFFSET_TABLE_REGNUM)
1010
 
1011
#define GOT_SYMBOL_NAME "_GLOBAL_OFFSET_TABLE_"
1012
 
1013
/* A C expression which can inhibit the returning of certain function
1014
   values in registers, based on the type of value.  A nonzero value
1015
   says to return the function value in memory, just as large
1016
   structures are always returned.  Here TYPE will be a C expression
1017
   of type `tree', representing the data type of the value.
1018
 
1019
   Note that values of mode `BLKmode' must be explicitly handled by
1020
   this macro.  Also, the option `-fpcc-struct-return' takes effect
1021
   regardless of this macro.  On most systems, it is possible to
1022
   leave the macro undefined; this causes a default definition to be
1023
   used, whose value is the constant 1 for `BLKmode' values, and 0
1024
   otherwise.
1025
 
1026
   Do not use this macro to indicate that structures and unions
1027
   should always be returned in memory.  You should instead use
1028
   `DEFAULT_PCC_STRUCT_RETURN' to indicate this.  */
1029
 
1030
#define RETURN_IN_MEMORY(TYPE) \
1031
  ix86_return_in_memory (TYPE)
1032
 
1033
/* This is overridden by <cygwin.h>.  */
1034
#define MS_AGGREGATE_RETURN 0
1035
 
1036
/* This is overridden by <netware.h>.  */
1037
#define KEEP_AGGREGATE_RETURN_POINTER 0
1038
 
1039
/* Define the classes of registers for register constraints in the
1040
   machine description.  Also define ranges of constants.
1041
 
1042
   One of the classes must always be named ALL_REGS and include all hard regs.
1043
   If there is more than one class, another class must be named NO_REGS
1044
   and contain no registers.
1045
 
1046
   The name GENERAL_REGS must be the name of a class (or an alias for
1047
   another name such as ALL_REGS).  This is the class of registers
1048
   that is allowed by "g" or "r" in a register constraint.
1049
   Also, registers outside this class are allocated only when
1050
   instructions express preferences for them.
1051
 
1052
   The classes must be numbered in nondecreasing order; that is,
1053
   a larger-numbered class must never be contained completely
1054
   in a smaller-numbered class.
1055
 
1056
   For any two classes, it is very desirable that there be another
1057
   class that represents their union.
1058
 
1059
   It might seem that class BREG is unnecessary, since no useful 386
1060
   opcode needs reg %ebx.  But some systems pass args to the OS in ebx,
1061
   and the "b" register constraint is useful in asms for syscalls.
1062
 
1063
   The flags and fpsr registers are in no class.  */
1064
 
1065
enum reg_class
1066
{
1067
  NO_REGS,
1068
  AREG, DREG, CREG, BREG, SIREG, DIREG,
1069
  AD_REGS,                      /* %eax/%edx for DImode */
1070
  Q_REGS,                       /* %eax %ebx %ecx %edx */
1071
  NON_Q_REGS,                   /* %esi %edi %ebp %esp */
1072
  INDEX_REGS,                   /* %eax %ebx %ecx %edx %esi %edi %ebp */
1073
  LEGACY_REGS,                  /* %eax %ebx %ecx %edx %esi %edi %ebp %esp */
1074
  GENERAL_REGS,                 /* %eax %ebx %ecx %edx %esi %edi %ebp %esp %r8 - %r15*/
1075
  FP_TOP_REG, FP_SECOND_REG,    /* %st(0) %st(1) */
1076
  FLOAT_REGS,
1077
  SSE_REGS,
1078
  MMX_REGS,
1079
  FP_TOP_SSE_REGS,
1080
  FP_SECOND_SSE_REGS,
1081
  FLOAT_SSE_REGS,
1082
  FLOAT_INT_REGS,
1083
  INT_SSE_REGS,
1084
  FLOAT_INT_SSE_REGS,
1085
  ALL_REGS, LIM_REG_CLASSES
1086
};
1087
 
1088
#define N_REG_CLASSES ((int) LIM_REG_CLASSES)
1089
 
1090
#define INTEGER_CLASS_P(CLASS) \
1091
  reg_class_subset_p ((CLASS), GENERAL_REGS)
1092
#define FLOAT_CLASS_P(CLASS) \
1093
  reg_class_subset_p ((CLASS), FLOAT_REGS)
1094
#define SSE_CLASS_P(CLASS) \
1095
  ((CLASS) == SSE_REGS)
1096
#define MMX_CLASS_P(CLASS) \
1097
  ((CLASS) == MMX_REGS)
1098
#define MAYBE_INTEGER_CLASS_P(CLASS) \
1099
  reg_classes_intersect_p ((CLASS), GENERAL_REGS)
1100
#define MAYBE_FLOAT_CLASS_P(CLASS) \
1101
  reg_classes_intersect_p ((CLASS), FLOAT_REGS)
1102
#define MAYBE_SSE_CLASS_P(CLASS) \
1103
  reg_classes_intersect_p (SSE_REGS, (CLASS))
1104
#define MAYBE_MMX_CLASS_P(CLASS) \
1105
  reg_classes_intersect_p (MMX_REGS, (CLASS))
1106
 
1107
#define Q_CLASS_P(CLASS) \
1108
  reg_class_subset_p ((CLASS), Q_REGS)
1109
 
1110
/* Give names of register classes as strings for dump file.  */
1111
 
1112
#define REG_CLASS_NAMES \
1113
{  "NO_REGS",                           \
1114
   "AREG", "DREG", "CREG", "BREG",      \
1115
   "SIREG", "DIREG",                    \
1116
   "AD_REGS",                           \
1117
   "Q_REGS", "NON_Q_REGS",              \
1118
   "INDEX_REGS",                        \
1119
   "LEGACY_REGS",                       \
1120
   "GENERAL_REGS",                      \
1121
   "FP_TOP_REG", "FP_SECOND_REG",       \
1122
   "FLOAT_REGS",                        \
1123
   "SSE_REGS",                          \
1124
   "MMX_REGS",                          \
1125
   "FP_TOP_SSE_REGS",                   \
1126
   "FP_SECOND_SSE_REGS",                \
1127
   "FLOAT_SSE_REGS",                    \
1128
   "FLOAT_INT_REGS",                    \
1129
   "INT_SSE_REGS",                      \
1130
   "FLOAT_INT_SSE_REGS",                \
1131
   "ALL_REGS" }
1132
 
1133
/* Define which registers fit in which classes.
1134
   This is an initializer for a vector of HARD_REG_SET
1135
   of length N_REG_CLASSES.  */
1136
 
1137
#define REG_CLASS_CONTENTS                                              \
1138
{     { 0x00,     0x0 },                                                \
1139
      { 0x01,     0x0 }, { 0x02, 0x0 }, /* AREG, DREG */                \
1140
      { 0x04,     0x0 }, { 0x08, 0x0 }, /* CREG, BREG */                \
1141
      { 0x10,     0x0 }, { 0x20, 0x0 }, /* SIREG, DIREG */              \
1142
      { 0x03,     0x0 },                /* AD_REGS */                   \
1143
      { 0x0f,     0x0 },                /* Q_REGS */                    \
1144
  { 0x1100f0,  0x1fe0 },                /* NON_Q_REGS */                \
1145
      { 0x7f,  0x1fe0 },                /* INDEX_REGS */                \
1146
  { 0x1100ff,  0x0 },                   /* LEGACY_REGS */               \
1147
  { 0x1100ff,  0x1fe0 },                /* GENERAL_REGS */              \
1148
     { 0x100,     0x0 }, { 0x0200, 0x0 },/* FP_TOP_REG, FP_SECOND_REG */\
1149
    { 0xff00,     0x0 },                /* FLOAT_REGS */                \
1150
{ 0x1fe00000,0x1fe000 },                /* SSE_REGS */                  \
1151
{ 0xe0000000,    0x1f },                /* MMX_REGS */                  \
1152
{ 0x1fe00100,0x1fe000 },                /* FP_TOP_SSE_REG */            \
1153
{ 0x1fe00200,0x1fe000 },                /* FP_SECOND_SSE_REG */         \
1154
{ 0x1fe0ff00,0x1fe000 },                /* FLOAT_SSE_REGS */            \
1155
   { 0x1ffff,  0x1fe0 },                /* FLOAT_INT_REGS */            \
1156
{ 0x1fe100ff,0x1fffe0 },                /* INT_SSE_REGS */              \
1157
{ 0x1fe1ffff,0x1fffe0 },                /* FLOAT_INT_SSE_REGS */        \
1158
{ 0xffffffff,0x1fffff }                                                 \
1159
}
1160
 
1161
/* The same information, inverted:
1162
   Return the class number of the smallest class containing
1163
   reg number REGNO.  This could be a conditional expression
1164
   or could index an array.  */
1165
 
1166
#define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO])
1167
 
1168
/* When defined, the compiler allows registers explicitly used in the
1169
   rtl to be used as spill registers but prevents the compiler from
1170
   extending the lifetime of these registers.  */
1171
 
1172
#define SMALL_REGISTER_CLASSES 1
1173
 
1174
#define QI_REG_P(X) \
1175
  (REG_P (X) && REGNO (X) < 4)
1176
 
1177
#define GENERAL_REGNO_P(N) \
1178
  ((N) < 8 || REX_INT_REGNO_P (N))
1179
 
1180
#define GENERAL_REG_P(X) \
1181
  (REG_P (X) && GENERAL_REGNO_P (REGNO (X)))
1182
 
1183
#define ANY_QI_REG_P(X) (TARGET_64BIT ? GENERAL_REG_P(X) : QI_REG_P (X))
1184
 
1185
#define NON_QI_REG_P(X) \
1186
  (REG_P (X) && REGNO (X) >= 4 && REGNO (X) < FIRST_PSEUDO_REGISTER)
1187
 
1188
#define REX_INT_REGNO_P(N) ((N) >= FIRST_REX_INT_REG && (N) <= LAST_REX_INT_REG)
1189
#define REX_INT_REG_P(X) (REG_P (X) && REX_INT_REGNO_P (REGNO (X)))
1190
 
1191
#define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X)))
1192
#define FP_REGNO_P(N) ((N) >= FIRST_STACK_REG && (N) <= LAST_STACK_REG)
1193
#define ANY_FP_REG_P(X) (REG_P (X) && ANY_FP_REGNO_P (REGNO (X)))
1194
#define ANY_FP_REGNO_P(N) (FP_REGNO_P (N) || SSE_REGNO_P (N))
1195
 
1196
#define SSE_REGNO_P(N) \
1197
  (((N) >= FIRST_SSE_REG && (N) <= LAST_SSE_REG) \
1198
   || ((N) >= FIRST_REX_SSE_REG && (N) <= LAST_REX_SSE_REG))
1199
 
1200
#define REX_SSE_REGNO_P(N) \
1201
   ((N) >= FIRST_REX_SSE_REG && (N) <= LAST_REX_SSE_REG)
1202
 
1203
#define SSE_REGNO(N) \
1204
  ((N) < 8 ? FIRST_SSE_REG + (N) : FIRST_REX_SSE_REG + (N) - 8)
1205
#define SSE_REG_P(N) (REG_P (N) && SSE_REGNO_P (REGNO (N)))
1206
 
1207
#define SSE_FLOAT_MODE_P(MODE) \
1208
  ((TARGET_SSE && (MODE) == SFmode) || (TARGET_SSE2 && (MODE) == DFmode))
1209
 
1210
#define MMX_REGNO_P(N) ((N) >= FIRST_MMX_REG && (N) <= LAST_MMX_REG)
1211
#define MMX_REG_P(XOP) (REG_P (XOP) && MMX_REGNO_P (REGNO (XOP)))
1212
 
1213
#define STACK_REG_P(XOP)                \
1214
  (REG_P (XOP) &&                       \
1215
   REGNO (XOP) >= FIRST_STACK_REG &&    \
1216
   REGNO (XOP) <= LAST_STACK_REG)
1217
 
1218
#define NON_STACK_REG_P(XOP) (REG_P (XOP) && ! STACK_REG_P (XOP))
1219
 
1220
#define STACK_TOP_P(XOP) (REG_P (XOP) && REGNO (XOP) == FIRST_STACK_REG)
1221
 
1222
#define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X)))
1223
#define CC_REGNO_P(X) ((X) == FLAGS_REG || (X) == FPSR_REG)
1224
 
1225
/* The class value for index registers, and the one for base regs.  */
1226
 
1227
#define INDEX_REG_CLASS INDEX_REGS
1228
#define BASE_REG_CLASS GENERAL_REGS
1229
 
1230
/* Place additional restrictions on the register class to use when it
1231
   is necessary to be able to hold a value of mode MODE in a reload
1232
   register for which class CLASS would ordinarily be used.  */
1233
 
1234
#define LIMIT_RELOAD_CLASS(MODE, CLASS)                         \
1235
  ((MODE) == QImode && !TARGET_64BIT                            \
1236
   && ((CLASS) == ALL_REGS || (CLASS) == GENERAL_REGS           \
1237
       || (CLASS) == LEGACY_REGS || (CLASS) == INDEX_REGS)      \
1238
   ? Q_REGS : (CLASS))
1239
 
1240
/* Given an rtx X being reloaded into a reg required to be
1241
   in class CLASS, return the class of reg to actually use.
1242
   In general this is just CLASS; but on some machines
1243
   in some cases it is preferable to use a more restrictive class.
1244
   On the 80386 series, we prevent floating constants from being
1245
   reloaded into floating registers (since no move-insn can do that)
1246
   and we ensure that QImodes aren't reloaded into the esi or edi reg.  */
1247
 
1248
/* Put float CONST_DOUBLE in the constant pool instead of fp regs.
1249
   QImode must go into class Q_REGS.
1250
   Narrow ALL_REGS to GENERAL_REGS.  This supports allowing movsf and
1251
   movdf to do mem-to-mem moves through integer regs.  */
1252
 
1253
#define PREFERRED_RELOAD_CLASS(X, CLASS) \
1254
   ix86_preferred_reload_class ((X), (CLASS))
1255
 
1256
/* Discourage putting floating-point values in SSE registers unless
1257
   SSE math is being used, and likewise for the 387 registers.  */
1258
 
1259
#define PREFERRED_OUTPUT_RELOAD_CLASS(X, CLASS) \
1260
   ix86_preferred_output_reload_class ((X), (CLASS))
1261
 
1262
/* If we are copying between general and FP registers, we need a memory
1263
   location. The same is true for SSE and MMX registers.  */
1264
#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
1265
  ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1)
1266
 
1267
/* QImode spills from non-QI registers need a scratch.  This does not
1268
   happen often -- the only example so far requires an uninitialized
1269
   pseudo.  */
1270
 
1271
#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, OUT)                 \
1272
  (((CLASS) == GENERAL_REGS || (CLASS) == LEGACY_REGS                   \
1273
    || (CLASS) == INDEX_REGS) && !TARGET_64BIT && (MODE) == QImode      \
1274
   ? Q_REGS : NO_REGS)
1275
 
1276
/* Return the maximum number of consecutive registers
1277
   needed to represent mode MODE in a register of class CLASS.  */
1278
/* On the 80386, this is the size of MODE in words,
1279
   except in the FP regs, where a single reg is always enough.  */
1280
#define CLASS_MAX_NREGS(CLASS, MODE)                                    \
1281
 (!MAYBE_INTEGER_CLASS_P (CLASS)                                        \
1282
  ? (COMPLEX_MODE_P (MODE) ? 2 : 1)                                     \
1283
  : (((((MODE) == XFmode ? 12 : GET_MODE_SIZE (MODE)))                  \
1284
      + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
1285
 
1286
/* A C expression whose value is nonzero if pseudos that have been
1287
   assigned to registers of class CLASS would likely be spilled
1288
   because registers of CLASS are needed for spill registers.
1289
 
1290
   The default value of this macro returns 1 if CLASS has exactly one
1291
   register and zero otherwise.  On most machines, this default
1292
   should be used.  Only define this macro to some other expression
1293
   if pseudo allocated by `local-alloc.c' end up in memory because
1294
   their hard registers were needed for spill registers.  If this
1295
   macro returns nonzero for those classes, those pseudos will only
1296
   be allocated by `global.c', which knows how to reallocate the
1297
   pseudo to another register.  If there would not be another
1298
   register available for reallocation, you should not change the
1299
   definition of this macro since the only effect of such a
1300
   definition would be to slow down register allocation.  */
1301
 
1302
#define CLASS_LIKELY_SPILLED_P(CLASS)                                   \
1303
  (((CLASS) == AREG)                                                    \
1304
   || ((CLASS) == DREG)                                                 \
1305
   || ((CLASS) == CREG)                                                 \
1306
   || ((CLASS) == BREG)                                                 \
1307
   || ((CLASS) == AD_REGS)                                              \
1308
   || ((CLASS) == SIREG)                                                \
1309
   || ((CLASS) == DIREG)                                                \
1310
   || ((CLASS) == FP_TOP_REG)                                           \
1311
   || ((CLASS) == FP_SECOND_REG))
1312
 
1313
/* Return a class of registers that cannot change FROM mode to TO mode.  */
1314
 
1315
#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
1316
  ix86_cannot_change_mode_class (FROM, TO, CLASS)
1317
 
1318
/* Stack layout; function entry, exit and calling.  */
1319
 
1320
/* Define this if pushing a word on the stack
1321
   makes the stack pointer a smaller address.  */
1322
#define STACK_GROWS_DOWNWARD
1323
 
1324
/* Define this to nonzero if the nominal address of the stack frame
1325
   is at the high-address end of the local variables;
1326
   that is, each additional local variable allocated
1327
   goes at a more negative offset in the frame.  */
1328
#define FRAME_GROWS_DOWNWARD 1
1329
 
1330
/* Offset within stack frame to start allocating local variables at.
1331
   If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
1332
   first local allocated.  Otherwise, it is the offset to the BEGINNING
1333
   of the first local allocated.  */
1334
#define STARTING_FRAME_OFFSET 0
1335
 
1336
/* If we generate an insn to push BYTES bytes,
1337
   this says how many the stack pointer really advances by.
1338
   On 386, we have pushw instruction that decrements by exactly 2 no
1339
   matter what the position was, there is no pushb.
1340
   But as CIE data alignment factor on this arch is -4, we need to make
1341
   sure all stack pointer adjustments are in multiple of 4.
1342
 
1343
   For 64bit ABI we round up to 8 bytes.
1344
 */
1345
 
1346
#define PUSH_ROUNDING(BYTES) \
1347
  (TARGET_64BIT              \
1348
   ? (((BYTES) + 7) & (-8))  \
1349
   : (((BYTES) + 3) & (-4)))
1350
 
1351
/* If defined, the maximum amount of space required for outgoing arguments will
1352
   be computed and placed into the variable
1353
   `current_function_outgoing_args_size'.  No space will be pushed onto the
1354
   stack for each call; instead, the function prologue should increase the stack
1355
   frame size by this amount.  */
1356
 
1357
#define ACCUMULATE_OUTGOING_ARGS TARGET_ACCUMULATE_OUTGOING_ARGS
1358
 
1359
/* If defined, a C expression whose value is nonzero when we want to use PUSH
1360
   instructions to pass outgoing arguments.  */
1361
 
1362
#define PUSH_ARGS (TARGET_PUSH_ARGS && !ACCUMULATE_OUTGOING_ARGS)
1363
 
1364
/* We want the stack and args grow in opposite directions, even if
1365
   PUSH_ARGS is 0.  */
1366
#define PUSH_ARGS_REVERSED 1
1367
 
1368
/* Offset of first parameter from the argument pointer register value.  */
1369
#define FIRST_PARM_OFFSET(FNDECL) 0
1370
 
1371
/* Define this macro if functions should assume that stack space has been
1372
   allocated for arguments even when their values are passed in registers.
1373
 
1374
   The value of this macro is the size, in bytes, of the area reserved for
1375
   arguments passed in registers for the function represented by FNDECL.
1376
 
1377
   This space can be allocated by the caller, or be a part of the
1378
   machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
1379
   which.  */
1380
#define REG_PARM_STACK_SPACE(FNDECL) 0
1381
 
1382
/* Value is the number of bytes of arguments automatically
1383
   popped when returning from a subroutine call.
1384
   FUNDECL is the declaration node of the function (as a tree),
1385
   FUNTYPE is the data type of the function (as a tree),
1386
   or for a library call it is an identifier node for the subroutine name.
1387
   SIZE is the number of bytes of arguments passed on the stack.
1388
 
1389
   On the 80386, the RTD insn may be used to pop them if the number
1390
     of args is fixed, but if the number is variable then the caller
1391
     must pop them all.  RTD can't be used for library calls now
1392
     because the library is compiled with the Unix compiler.
1393
   Use of RTD is a selectable option, since it is incompatible with
1394
   standard Unix calling sequences.  If the option is not selected,
1395
   the caller must always pop the args.
1396
 
1397
   The attribute stdcall is equivalent to RTD on a per module basis.  */
1398
 
1399
#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) \
1400
  ix86_return_pops_args ((FUNDECL), (FUNTYPE), (SIZE))
1401
 
1402
#define FUNCTION_VALUE_REGNO_P(N) \
1403
  ix86_function_value_regno_p (N)
1404
 
1405
/* Define how to find the value returned by a library function
1406
   assuming the value has mode MODE.  */
1407
 
1408
#define LIBCALL_VALUE(MODE) \
1409
  ix86_libcall_value (MODE)
1410
 
1411
/* Define the size of the result block used for communication between
1412
   untyped_call and untyped_return.  The block contains a DImode value
1413
   followed by the block used by fnsave and frstor.  */
1414
 
1415
#define APPLY_RESULT_SIZE (8+108)
1416
 
1417
/* 1 if N is a possible register number for function argument passing.  */
1418
#define FUNCTION_ARG_REGNO_P(N) ix86_function_arg_regno_p (N)
1419
 
1420
/* Define a data type for recording info about an argument list
1421
   during the scan of that argument list.  This data type should
1422
   hold all necessary information about the function itself
1423
   and about the args processed so far, enough to enable macros
1424
   such as FUNCTION_ARG to determine where the next arg should go.  */
1425
 
1426
typedef struct ix86_args {
1427
  int words;                    /* # words passed so far */
1428
  int nregs;                    /* # registers available for passing */
1429
  int regno;                    /* next available register number */
1430
  int fastcall;                 /* fastcall calling convention is used */
1431
  int sse_words;                /* # sse words passed so far */
1432
  int sse_nregs;                /* # sse registers available for passing */
1433
  int warn_sse;                 /* True when we want to warn about SSE ABI.  */
1434
  int warn_mmx;                 /* True when we want to warn about MMX ABI.  */
1435
  int sse_regno;                /* next available sse register number */
1436
  int mmx_words;                /* # mmx words passed so far */
1437
  int mmx_nregs;                /* # mmx registers available for passing */
1438
  int mmx_regno;                /* next available mmx register number */
1439
  int maybe_vaarg;              /* true for calls to possibly vardic fncts.  */
1440
  int float_in_sse;             /* 1 if in 32-bit mode SFmode (2 for DFmode) should
1441
                                   be passed in SSE registers.  Otherwise 0.  */
1442
} CUMULATIVE_ARGS;
1443
 
1444
/* Initialize a variable CUM of type CUMULATIVE_ARGS
1445
   for a call to a function whose data type is FNTYPE.
1446
   For a library call, FNTYPE is 0.  */
1447
 
1448
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
1449
  init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL))
1450
 
1451
/* Update the data in CUM to advance over an argument
1452
   of mode MODE and data type TYPE.
1453
   (TYPE is null for libcalls where that information may not be available.)  */
1454
 
1455
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
1456
  function_arg_advance (&(CUM), (MODE), (TYPE), (NAMED))
1457
 
1458
/* Define where to put the arguments to a function.
1459
   Value is zero to push the argument on the stack,
1460
   or a hard register in which to store the argument.
1461
 
1462
   MODE is the argument's machine mode.
1463
   TYPE is the data type of the argument (as a tree).
1464
    This is null for libcalls where that information may
1465
    not be available.
1466
   CUM is a variable of type CUMULATIVE_ARGS which gives info about
1467
    the preceding args and about the function being called.
1468
   NAMED is nonzero if this argument is a named parameter
1469
    (otherwise it is an extra parameter matching an ellipsis).  */
1470
 
1471
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
1472
  function_arg (&(CUM), (MODE), (TYPE), (NAMED))
1473
 
1474
/* Implement `va_start' for varargs and stdarg.  */
1475
#define EXPAND_BUILTIN_VA_START(VALIST, NEXTARG) \
1476
  ix86_va_start (VALIST, NEXTARG)
1477
 
1478
#define TARGET_ASM_FILE_END ix86_file_end
1479
#define NEED_INDICATE_EXEC_STACK 0
1480
 
1481
/* Output assembler code to FILE to increment profiler label # LABELNO
1482
   for profiling a function entry.  */
1483
 
1484
#define FUNCTION_PROFILER(FILE, LABELNO) x86_function_profiler (FILE, LABELNO)
1485
 
1486
#define MCOUNT_NAME "_mcount"
1487
 
1488
#define PROFILE_COUNT_REGISTER "edx"
1489
 
1490
/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
1491
   the stack pointer does not matter.  The value is tested only in
1492
   functions that have frame pointers.
1493
   No definition is equivalent to always zero.  */
1494
/* Note on the 386 it might be more efficient not to define this since
1495
   we have to restore it ourselves from the frame pointer, in order to
1496
   use pop */
1497
 
1498
#define EXIT_IGNORE_STACK 1
1499
 
1500
/* Output assembler code for a block containing the constant parts
1501
   of a trampoline, leaving space for the variable parts.  */
1502
 
1503
/* On the 386, the trampoline contains two instructions:
1504
     mov #STATIC,ecx
1505
     jmp FUNCTION
1506
   The trampoline is generated entirely at runtime.  The operand of JMP
1507
   is the address of FUNCTION relative to the instruction following the
1508
   JMP (which is 5 bytes long).  */
1509
 
1510
/* Length in units of the trampoline for entering a nested function.  */
1511
 
1512
#define TRAMPOLINE_SIZE (TARGET_64BIT ? 23 : 10)
1513
 
1514
/* Emit RTL insns to initialize the variable parts of a trampoline.
1515
   FNADDR is an RTX for the address of the function's pure code.
1516
   CXT is an RTX for the static chain value for the function.  */
1517
 
1518
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
1519
  x86_initialize_trampoline ((TRAMP), (FNADDR), (CXT))
1520
 
1521
/* Definitions for register eliminations.
1522
 
1523
   This is an array of structures.  Each structure initializes one pair
1524
   of eliminable registers.  The "from" register number is given first,
1525
   followed by "to".  Eliminations of the same "from" register are listed
1526
   in order of preference.
1527
 
1528
   There are two registers that can always be eliminated on the i386.
1529
   The frame pointer and the arg pointer can be replaced by either the
1530
   hard frame pointer or to the stack pointer, depending upon the
1531
   circumstances.  The hard frame pointer is not used before reload and
1532
   so it is not eligible for elimination.  */
1533
 
1534
#define ELIMINABLE_REGS                                 \
1535
{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM},           \
1536
 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM},      \
1537
 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},         \
1538
 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}    \
1539
 
1540
/* Given FROM and TO register numbers, say whether this elimination is
1541
   allowed.  Frame pointer elimination is automatically handled.
1542
 
1543
   All other eliminations are valid.  */
1544
 
1545
#define CAN_ELIMINATE(FROM, TO) \
1546
  ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1)
1547
 
1548
/* Define the offset between two registers, one to be eliminated, and the other
1549
   its replacement, at the start of a routine.  */
1550
 
1551
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
1552
  ((OFFSET) = ix86_initial_elimination_offset ((FROM), (TO)))
1553
 
1554
/* Addressing modes, and classification of registers for them.  */
1555
 
1556
/* Macros to check register numbers against specific register classes.  */
1557
 
1558
/* These assume that REGNO is a hard or pseudo reg number.
1559
   They give nonzero only if REGNO is a hard reg of the suitable class
1560
   or a pseudo reg currently allocated to a suitable hard reg.
1561
   Since they use reg_renumber, they are safe only once reg_renumber
1562
   has been allocated, which happens in local-alloc.c.  */
1563
 
1564
#define REGNO_OK_FOR_INDEX_P(REGNO)                                     \
1565
  ((REGNO) < STACK_POINTER_REGNUM                                       \
1566
   || (REGNO >= FIRST_REX_INT_REG                                       \
1567
       && (REGNO) <= LAST_REX_INT_REG)                                  \
1568
   || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG            \
1569
       && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG)         \
1570
   || (unsigned) reg_renumber[(REGNO)] < STACK_POINTER_REGNUM)
1571
 
1572
#define REGNO_OK_FOR_BASE_P(REGNO)                                      \
1573
  ((REGNO) <= STACK_POINTER_REGNUM                                      \
1574
   || (REGNO) == ARG_POINTER_REGNUM                                     \
1575
   || (REGNO) == FRAME_POINTER_REGNUM                                   \
1576
   || (REGNO >= FIRST_REX_INT_REG                                       \
1577
       && (REGNO) <= LAST_REX_INT_REG)                                  \
1578
   || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG            \
1579
       && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG)         \
1580
   || (unsigned) reg_renumber[(REGNO)] <= STACK_POINTER_REGNUM)
1581
 
1582
#define REGNO_OK_FOR_SIREG_P(REGNO) \
1583
  ((REGNO) == 4 || reg_renumber[(REGNO)] == 4)
1584
#define REGNO_OK_FOR_DIREG_P(REGNO) \
1585
  ((REGNO) == 5 || reg_renumber[(REGNO)] == 5)
1586
 
1587
/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1588
   and check its validity for a certain class.
1589
   We have two alternate definitions for each of them.
1590
   The usual definition accepts all pseudo regs; the other rejects
1591
   them unless they have been allocated suitable hard regs.
1592
   The symbol REG_OK_STRICT causes the latter definition to be used.
1593
 
1594
   Most source files want to accept pseudo regs in the hope that
1595
   they will get allocated to the class that the insn wants them to be in.
1596
   Source files for reload pass need to be strict.
1597
   After reload, it makes no difference, since pseudo regs have
1598
   been eliminated by then.  */
1599
 
1600
 
1601
/* Non strict versions, pseudos are ok.  */
1602
#define REG_OK_FOR_INDEX_NONSTRICT_P(X)                                 \
1603
  (REGNO (X) < STACK_POINTER_REGNUM                                     \
1604
   || (REGNO (X) >= FIRST_REX_INT_REG                                   \
1605
       && REGNO (X) <= LAST_REX_INT_REG)                                \
1606
   || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1607
 
1608
#define REG_OK_FOR_BASE_NONSTRICT_P(X)                                  \
1609
  (REGNO (X) <= STACK_POINTER_REGNUM                                    \
1610
   || REGNO (X) == ARG_POINTER_REGNUM                                   \
1611
   || REGNO (X) == FRAME_POINTER_REGNUM                                 \
1612
   || (REGNO (X) >= FIRST_REX_INT_REG                                   \
1613
       && REGNO (X) <= LAST_REX_INT_REG)                                \
1614
   || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1615
 
1616
/* Strict versions, hard registers only */
1617
#define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1618
#define REG_OK_FOR_BASE_STRICT_P(X)  REGNO_OK_FOR_BASE_P (REGNO (X))
1619
 
1620
#ifndef REG_OK_STRICT
1621
#define REG_OK_FOR_INDEX_P(X)  REG_OK_FOR_INDEX_NONSTRICT_P (X)
1622
#define REG_OK_FOR_BASE_P(X)   REG_OK_FOR_BASE_NONSTRICT_P (X)
1623
 
1624
#else
1625
#define REG_OK_FOR_INDEX_P(X)  REG_OK_FOR_INDEX_STRICT_P (X)
1626
#define REG_OK_FOR_BASE_P(X)   REG_OK_FOR_BASE_STRICT_P (X)
1627
#endif
1628
 
1629
/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
1630
   that is a valid memory address for an instruction.
1631
   The MODE argument is the machine mode for the MEM expression
1632
   that wants to use this address.
1633
 
1634
   The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS,
1635
   except for CONSTANT_ADDRESS_P which is usually machine-independent.
1636
 
1637
   See legitimize_pic_address in i386.c for details as to what
1638
   constitutes a legitimate address when -fpic is used.  */
1639
 
1640
#define MAX_REGS_PER_ADDRESS 2
1641
 
1642
#define CONSTANT_ADDRESS_P(X)  constant_address_p (X)
1643
 
1644
/* Nonzero if the constant value X is a legitimate general operand.
1645
   It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.  */
1646
 
1647
#define LEGITIMATE_CONSTANT_P(X)  legitimate_constant_p (X)
1648
 
1649
#ifdef REG_OK_STRICT
1650
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                         \
1651
do {                                                                    \
1652
  if (legitimate_address_p ((MODE), (X), 1))                            \
1653
    goto ADDR;                                                          \
1654
} while (0)
1655
 
1656
#else
1657
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                         \
1658
do {                                                                    \
1659
  if (legitimate_address_p ((MODE), (X), 0))                            \
1660
    goto ADDR;                                                          \
1661
} while (0)
1662
 
1663
#endif
1664
 
1665
/* If defined, a C expression to determine the base term of address X.
1666
   This macro is used in only one place: `find_base_term' in alias.c.
1667
 
1668
   It is always safe for this macro to not be defined.  It exists so
1669
   that alias analysis can understand machine-dependent addresses.
1670
 
1671
   The typical use of this macro is to handle addresses containing
1672
   a label_ref or symbol_ref within an UNSPEC.  */
1673
 
1674
#define FIND_BASE_TERM(X) ix86_find_base_term (X)
1675
 
1676
/* Try machine-dependent ways of modifying an illegitimate address
1677
   to be legitimate.  If we find one, return the new, valid address.
1678
   This macro is used in only one place: `memory_address' in explow.c.
1679
 
1680
   OLDX is the address as it was before break_out_memory_refs was called.
1681
   In some cases it is useful to look at this to decide what needs to be done.
1682
 
1683
   MODE and WIN are passed so that this macro can use
1684
   GO_IF_LEGITIMATE_ADDRESS.
1685
 
1686
   It is always safe for this macro to do nothing.  It exists to recognize
1687
   opportunities to optimize the output.
1688
 
1689
   For the 80386, we handle X+REG by loading X into a register R and
1690
   using R+REG.  R will go in a general reg and indexing will be used.
1691
   However, if REG is a broken-out memory address or multiplication,
1692
   nothing needs to be done because REG can certainly go in a general reg.
1693
 
1694
   When -fpic is used, special handling is needed for symbolic references.
1695
   See comments by legitimize_pic_address in i386.c for details.  */
1696
 
1697
#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)                          \
1698
do {                                                                    \
1699
  (X) = legitimize_address ((X), (OLDX), (MODE));                       \
1700
  if (memory_address_p ((MODE), (X)))                                   \
1701
    goto WIN;                                                           \
1702
} while (0)
1703
 
1704
#define REWRITE_ADDRESS(X) rewrite_address (X)
1705
 
1706
/* Nonzero if the constant value X is a legitimate general operand
1707
   when generating PIC code.  It is given that flag_pic is on and
1708
   that X satisfies CONSTANT_P or is a CONST_DOUBLE.  */
1709
 
1710
#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
1711
 
1712
#define SYMBOLIC_CONST(X)       \
1713
  (GET_CODE (X) == SYMBOL_REF                                           \
1714
   || GET_CODE (X) == LABEL_REF                                         \
1715
   || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
1716
 
1717
/* Go to LABEL if ADDR (a legitimate address expression)
1718
   has an effect that depends on the machine mode it is used for.
1719
   On the 80386, only postdecrement and postincrement address depend thus
1720
   (the amount of decrement or increment being the length of the operand).  */
1721
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)       \
1722
do {                                                    \
1723
 if (GET_CODE (ADDR) == POST_INC                        \
1724
     || GET_CODE (ADDR) == POST_DEC)                    \
1725
   goto LABEL;                                          \
1726
} while (0)
1727
 
1728
/* Max number of args passed in registers.  If this is more than 3, we will
1729
   have problems with ebx (register #4), since it is a caller save register and
1730
   is also used as the pic register in ELF.  So for now, don't allow more than
1731
   3 registers to be passed in registers.  */
1732
 
1733
#define REGPARM_MAX (TARGET_64BIT ? 6 : 3)
1734
 
1735
#define SSE_REGPARM_MAX (TARGET_64BIT ? 8 : (TARGET_SSE ? 3 : 0))
1736
 
1737
#define MMX_REGPARM_MAX (TARGET_64BIT ? 0 : (TARGET_MMX ? 3 : 0))
1738
 
1739
 
1740
/* Specify the machine mode that this machine uses
1741
   for the index in the tablejump instruction.  */
1742
#define CASE_VECTOR_MODE (!TARGET_64BIT || flag_pic ? SImode : DImode)
1743
 
1744
/* Define this as 1 if `char' should by default be signed; else as 0.  */
1745
#define DEFAULT_SIGNED_CHAR 1
1746
 
1747
/* Number of bytes moved into a data cache for a single prefetch operation.  */
1748
#define PREFETCH_BLOCK ix86_cost->prefetch_block
1749
 
1750
/* Number of prefetch operations that can be done in parallel.  */
1751
#define SIMULTANEOUS_PREFETCHES ix86_cost->simultaneous_prefetches
1752
 
1753
/* Max number of bytes we can move from memory to memory
1754
   in one reasonably fast instruction.  */
1755
#define MOVE_MAX 16
1756
 
1757
/* MOVE_MAX_PIECES is the number of bytes at a time which we can
1758
   move efficiently, as opposed to  MOVE_MAX which is the maximum
1759
   number of bytes we can move with a single instruction.  */
1760
#define MOVE_MAX_PIECES (TARGET_64BIT ? 8 : 4)
1761
 
1762
/* If a memory-to-memory move would take MOVE_RATIO or more simple
1763
   move-instruction pairs, we will do a movmem or libcall instead.
1764
   Increasing the value will always make code faster, but eventually
1765
   incurs high cost in increased code size.
1766
 
1767
   If you don't define this, a reasonable default is used.  */
1768
 
1769
#define MOVE_RATIO (optimize_size ? 3 : ix86_cost->move_ratio)
1770
 
1771
/* If a clear memory operation would take CLEAR_RATIO or more simple
1772
   move-instruction sequences, we will do a clrmem or libcall instead.  */
1773
 
1774
#define CLEAR_RATIO (optimize_size ? 2 \
1775
                     : ix86_cost->move_ratio > 6 ? 6 : ix86_cost->move_ratio)
1776
 
1777
/* Define if shifts truncate the shift count
1778
   which implies one can omit a sign-extension or zero-extension
1779
   of a shift count.  */
1780
/* On i386, shifts do truncate the count.  But bit opcodes don't.  */
1781
 
1782
/* #define SHIFT_COUNT_TRUNCATED */
1783
 
1784
/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1785
   is done just by pretending it is already truncated.  */
1786
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1787
 
1788
/* A macro to update M and UNSIGNEDP when an object whose type is
1789
   TYPE and which has the specified mode and signedness is to be
1790
   stored in a register.  This macro is only called when TYPE is a
1791
   scalar type.
1792
 
1793
   On i386 it is sometimes useful to promote HImode and QImode
1794
   quantities to SImode.  The choice depends on target type.  */
1795
 
1796
#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE)             \
1797
do {                                                    \
1798
  if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS)      \
1799
      || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS))  \
1800
    (MODE) = SImode;                                    \
1801
} while (0)
1802
 
1803
/* Specify the machine mode that pointers have.
1804
   After generation of rtl, the compiler makes no further distinction
1805
   between pointers and any other objects of this machine mode.  */
1806
#define Pmode (TARGET_64BIT ? DImode : SImode)
1807
 
1808
/* A function address in a call instruction
1809
   is a byte address (for indexing purposes)
1810
   so give the MEM rtx a byte's mode.  */
1811
#define FUNCTION_MODE QImode
1812
 
1813
/* A C expression for the cost of moving data from a register in class FROM to
1814
   one in class TO.  The classes are expressed using the enumeration values
1815
   such as `GENERAL_REGS'.  A value of 2 is the default; other values are
1816
   interpreted relative to that.
1817
 
1818
   It is not required that the cost always equal 2 when FROM is the same as TO;
1819
   on some machines it is expensive to move between registers if they are not
1820
   general registers.  */
1821
 
1822
#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
1823
   ix86_register_move_cost ((MODE), (CLASS1), (CLASS2))
1824
 
1825
/* A C expression for the cost of moving data of mode M between a
1826
   register and memory.  A value of 2 is the default; this cost is
1827
   relative to those in `REGISTER_MOVE_COST'.
1828
 
1829
   If moving between registers and memory is more expensive than
1830
   between two registers, you should define this macro to express the
1831
   relative cost.  */
1832
 
1833
#define MEMORY_MOVE_COST(MODE, CLASS, IN)       \
1834
  ix86_memory_move_cost ((MODE), (CLASS), (IN))
1835
 
1836
/* A C expression for the cost of a branch instruction.  A value of 1
1837
   is the default; other values are interpreted relative to that.  */
1838
 
1839
#define BRANCH_COST ix86_branch_cost
1840
 
1841
/* Define this macro as a C expression which is nonzero if accessing
1842
   less than a word of memory (i.e. a `char' or a `short') is no
1843
   faster than accessing a word of memory, i.e., if such access
1844
   require more than one instruction or if there is no difference in
1845
   cost between byte and (aligned) word loads.
1846
 
1847
   When this macro is not defined, the compiler will access a field by
1848
   finding the smallest containing object; when it is defined, a
1849
   fullword load will be used if alignment permits.  Unless bytes
1850
   accesses are faster than word accesses, using word accesses is
1851
   preferable since it may eliminate subsequent memory access if
1852
   subsequent accesses occur to other fields in the same word of the
1853
   structure, but to different bytes.  */
1854
 
1855
#define SLOW_BYTE_ACCESS 0
1856
 
1857
/* Nonzero if access to memory by shorts is slow and undesirable.  */
1858
#define SLOW_SHORT_ACCESS 0
1859
 
1860
/* Define this macro to be the value 1 if unaligned accesses have a
1861
   cost many times greater than aligned accesses, for example if they
1862
   are emulated in a trap handler.
1863
 
1864
   When this macro is nonzero, the compiler will act as if
1865
   `STRICT_ALIGNMENT' were nonzero when generating code for block
1866
   moves.  This can cause significantly more instructions to be
1867
   produced.  Therefore, do not set this macro nonzero if unaligned
1868
   accesses only add a cycle or two to the time for a memory access.
1869
 
1870
   If the value of this macro is always zero, it need not be defined.  */
1871
 
1872
/* #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 0 */
1873
 
1874
/* Define this macro if it is as good or better to call a constant
1875
   function address than to call an address kept in a register.
1876
 
1877
   Desirable on the 386 because a CALL with a constant address is
1878
   faster than one with a register address.  */
1879
 
1880
#define NO_FUNCTION_CSE
1881
 
1882
/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
1883
   return the mode to be used for the comparison.
1884
 
1885
   For floating-point equality comparisons, CCFPEQmode should be used.
1886
   VOIDmode should be used in all other cases.
1887
 
1888
   For integer comparisons against zero, reduce to CCNOmode or CCZmode if
1889
   possible, to allow for more combinations.  */
1890
 
1891
#define SELECT_CC_MODE(OP, X, Y) ix86_cc_mode ((OP), (X), (Y))
1892
 
1893
/* Return nonzero if MODE implies a floating point inequality can be
1894
   reversed.  */
1895
 
1896
#define REVERSIBLE_CC_MODE(MODE) 1
1897
 
1898
/* A C expression whose value is reversed condition code of the CODE for
1899
   comparison done in CC_MODE mode.  */
1900
#define REVERSE_CONDITION(CODE, MODE) ix86_reverse_condition ((CODE), (MODE))
1901
 
1902
 
1903
/* Control the assembler format that we output, to the extent
1904
   this does not vary between assemblers.  */
1905
 
1906
/* How to refer to registers in assembler output.
1907
   This sequence is indexed by compiler's hard-register-number (see above).  */
1908
 
1909
/* In order to refer to the first 8 regs as 32 bit regs, prefix an "e".
1910
   For non floating point regs, the following are the HImode names.
1911
 
1912
   For float regs, the stack top is sometimes referred to as "%st(0)"
1913
   instead of just "%st".  PRINT_OPERAND handles this with the "y" code.  */
1914
 
1915
#define HI_REGISTER_NAMES                                               \
1916
{"ax","dx","cx","bx","si","di","bp","sp",                               \
1917
 "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)",          \
1918
 "argp", "flags", "fpsr", "dirflag", "frame",                           \
1919
 "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7",               \
1920
 "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" ,               \
1921
 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",                  \
1922
 "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"}
1923
 
1924
#define REGISTER_NAMES HI_REGISTER_NAMES
1925
 
1926
/* Table of additional register names to use in user input.  */
1927
 
1928
#define ADDITIONAL_REGISTER_NAMES \
1929
{ { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 },       \
1930
  { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 },       \
1931
  { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 },       \
1932
  { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 },       \
1933
  { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 },           \
1934
  { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 } }
1935
 
1936
/* Note we are omitting these since currently I don't know how
1937
to get gcc to use these, since they want the same but different
1938
number as al, and ax.
1939
*/
1940
 
1941
#define QI_REGISTER_NAMES \
1942
{"al", "dl", "cl", "bl", "sil", "dil", "bpl", "spl",}
1943
 
1944
/* These parallel the array above, and can be used to access bits 8:15
1945
   of regs 0 through 3.  */
1946
 
1947
#define QI_HIGH_REGISTER_NAMES \
1948
{"ah", "dh", "ch", "bh", }
1949
 
1950
/* How to renumber registers for dbx and gdb.  */
1951
 
1952
#define DBX_REGISTER_NUMBER(N) \
1953
  (TARGET_64BIT ? dbx64_register_map[(N)] : dbx_register_map[(N)])
1954
 
1955
extern int const dbx_register_map[FIRST_PSEUDO_REGISTER];
1956
extern int const dbx64_register_map[FIRST_PSEUDO_REGISTER];
1957
extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
1958
 
1959
/* Before the prologue, RA is at 0(%esp).  */
1960
#define INCOMING_RETURN_ADDR_RTX \
1961
  gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM))
1962
 
1963
/* After the prologue, RA is at -4(AP) in the current frame.  */
1964
#define RETURN_ADDR_RTX(COUNT, FRAME)                                      \
1965
  ((COUNT) == 0                                                            \
1966
   ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -UNITS_PER_WORD)) \
1967
   : gen_rtx_MEM (Pmode, plus_constant (FRAME, UNITS_PER_WORD)))
1968
 
1969
/* PC is dbx register 8; let's use that column for RA.  */
1970
#define DWARF_FRAME_RETURN_COLUMN       (TARGET_64BIT ? 16 : 8)
1971
 
1972
/* Before the prologue, the top of the frame is at 4(%esp).  */
1973
#define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD
1974
 
1975
/* Describe how we implement __builtin_eh_return.  */
1976
#define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) : INVALID_REGNUM)
1977
#define EH_RETURN_STACKADJ_RTX  gen_rtx_REG (Pmode, 2)
1978
 
1979
 
1980
/* Select a format to encode pointers in exception handling data.  CODE
1981
   is 0 for data, 1 for code labels, 2 for function pointers.  GLOBAL is
1982
   true if the symbol may be affected by dynamic relocations.
1983
 
1984
   ??? All x86 object file formats are capable of representing this.
1985
   After all, the relocation needed is the same as for the call insn.
1986
   Whether or not a particular assembler allows us to enter such, I
1987
   guess we'll have to see.  */
1988
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)                      \
1989
  asm_preferred_eh_data_format ((CODE), (GLOBAL))
1990
 
1991
/* This is how to output an insn to push a register on the stack.
1992
   It need not be very fast code.  */
1993
 
1994
#define ASM_OUTPUT_REG_PUSH(FILE, REGNO)  \
1995
do {                                                                    \
1996
  if (TARGET_64BIT)                                                     \
1997
    asm_fprintf ((FILE), "\tpush{q}\t%%r%s\n",                          \
1998
                 reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0));  \
1999
  else                                                                  \
2000
    asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)]);     \
2001
} while (0)
2002
 
2003
/* This is how to output an insn to pop a register from the stack.
2004
   It need not be very fast code.  */
2005
 
2006
#define ASM_OUTPUT_REG_POP(FILE, REGNO)  \
2007
do {                                                                    \
2008
  if (TARGET_64BIT)                                                     \
2009
    asm_fprintf ((FILE), "\tpop{q}\t%%r%s\n",                           \
2010
                 reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0));  \
2011
  else                                                                  \
2012
    asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)]);      \
2013
} while (0)
2014
 
2015
/* This is how to output an element of a case-vector that is absolute.  */
2016
 
2017
#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
2018
  ix86_output_addr_vec_elt ((FILE), (VALUE))
2019
 
2020
/* This is how to output an element of a case-vector that is relative.  */
2021
 
2022
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
2023
  ix86_output_addr_diff_elt ((FILE), (VALUE), (REL))
2024
 
2025
/* Under some conditions we need jump tables in the text section,
2026
   because the assembler cannot handle label differences between
2027
   sections.  This is the case for x86_64 on Mach-O for example.  */
2028
 
2029
#define JUMP_TABLES_IN_TEXT_SECTION \
2030
  (flag_pic && ((TARGET_MACHO && TARGET_64BIT) \
2031
   || (!TARGET_64BIT && !HAVE_AS_GOTOFF_IN_DATA)))
2032
 
2033
/* Switch to init or fini section via SECTION_OP, emit a call to FUNC,
2034
   and switch back.  For x86 we do this only to save a few bytes that
2035
   would otherwise be unused in the text section.  */
2036
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)      \
2037
   asm (SECTION_OP "\n\t"                               \
2038
        "call " USER_LABEL_PREFIX #FUNC "\n"            \
2039
        TEXT_SECTION_ASM_OP);
2040
 
2041
/* Print operand X (an rtx) in assembler syntax to file FILE.
2042
   CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
2043
   Effect of various CODE letters is described in i386.c near
2044
   print_operand function.  */
2045
 
2046
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
2047
  ((CODE) == '*' || (CODE) == '+' || (CODE) == '&')
2048
 
2049
#define PRINT_OPERAND(FILE, X, CODE)  \
2050
  print_operand ((FILE), (X), (CODE))
2051
 
2052
#define PRINT_OPERAND_ADDRESS(FILE, ADDR)  \
2053
  print_operand_address ((FILE), (ADDR))
2054
 
2055
#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL)  \
2056
do {                                            \
2057
  if (! output_addr_const_extra (FILE, (X)))    \
2058
    goto FAIL;                                  \
2059
} while (0);
2060
 
2061
/* a letter which is not needed by the normal asm syntax, which
2062
   we can use for operand syntax in the extended asm */
2063
 
2064
#define ASM_OPERAND_LETTER '#'
2065
#define RET return ""
2066
#define AT_SP(MODE) (gen_rtx_MEM ((MODE), stack_pointer_rtx))
2067
 
2068
/* Which processor to schedule for. The cpu attribute defines a list that
2069
   mirrors this list, so changes to i386.md must be made at the same time.  */
2070
 
2071
enum processor_type
2072
{
2073
  PROCESSOR_I386,                       /* 80386 */
2074
  PROCESSOR_I486,                       /* 80486DX, 80486SX, 80486DX[24] */
2075
  PROCESSOR_PENTIUM,
2076
  PROCESSOR_PENTIUMPRO,
2077
  PROCESSOR_K6,
2078
  PROCESSOR_ATHLON,
2079
  PROCESSOR_PENTIUM4,
2080
  PROCESSOR_K8,
2081
  PROCESSOR_NOCONA,
2082
  PROCESSOR_GENERIC32,
2083
  PROCESSOR_GENERIC64,
2084
  PROCESSOR_max
2085
};
2086
 
2087
extern enum processor_type ix86_tune;
2088
extern enum processor_type ix86_arch;
2089
 
2090
enum fpmath_unit
2091
{
2092
  FPMATH_387 = 1,
2093
  FPMATH_SSE = 2
2094
};
2095
 
2096
extern enum fpmath_unit ix86_fpmath;
2097
 
2098
enum tls_dialect
2099
{
2100
  TLS_DIALECT_GNU,
2101
  TLS_DIALECT_GNU2,
2102
  TLS_DIALECT_SUN
2103
};
2104
 
2105
extern enum tls_dialect ix86_tls_dialect;
2106
 
2107
enum cmodel {
2108
  CM_32,        /* The traditional 32-bit ABI.  */
2109
  CM_SMALL,     /* Assumes all code and data fits in the low 31 bits.  */
2110
  CM_KERNEL,    /* Assumes all code and data fits in the high 31 bits.  */
2111
  CM_MEDIUM,    /* Assumes code fits in the low 31 bits; data unlimited.  */
2112
  CM_LARGE,     /* No assumptions.  */
2113
  CM_SMALL_PIC, /* Assumes code+data+got/plt fits in a 31 bit region.  */
2114
  CM_MEDIUM_PIC /* Assumes code+got/plt fits in a 31 bit region.  */
2115
};
2116
 
2117
extern enum cmodel ix86_cmodel;
2118
 
2119
/* Size of the RED_ZONE area.  */
2120
#define RED_ZONE_SIZE 128
2121
/* Reserved area of the red zone for temporaries.  */
2122
#define RED_ZONE_RESERVE 8
2123
 
2124
enum asm_dialect {
2125
  ASM_ATT,
2126
  ASM_INTEL
2127
};
2128
 
2129
extern enum asm_dialect ix86_asm_dialect;
2130
extern unsigned int ix86_preferred_stack_boundary;
2131
extern int ix86_branch_cost, ix86_section_threshold;
2132
 
2133
/* Smallest class containing REGNO.  */
2134
extern enum reg_class const regclass_map[FIRST_PSEUDO_REGISTER];
2135
 
2136
extern rtx ix86_compare_op0;    /* operand 0 for comparisons */
2137
extern rtx ix86_compare_op1;    /* operand 1 for comparisons */
2138
extern rtx ix86_compare_emitted;
2139
 
2140
/* To properly truncate FP values into integers, we need to set i387 control
2141
   word.  We can't emit proper mode switching code before reload, as spills
2142
   generated by reload may truncate values incorrectly, but we still can avoid
2143
   redundant computation of new control word by the mode switching pass.
2144
   The fldcw instructions are still emitted redundantly, but this is probably
2145
   not going to be noticeable problem, as most CPUs do have fast path for
2146
   the sequence.
2147
 
2148
   The machinery is to emit simple truncation instructions and split them
2149
   before reload to instructions having USEs of two memory locations that
2150
   are filled by this code to old and new control word.
2151
 
2152
   Post-reload pass may be later used to eliminate the redundant fildcw if
2153
   needed.  */
2154
 
2155
enum ix86_entity
2156
{
2157
  I387_TRUNC = 0,
2158
  I387_FLOOR,
2159
  I387_CEIL,
2160
  I387_MASK_PM,
2161
  MAX_386_ENTITIES
2162
};
2163
 
2164
enum ix86_stack_slot
2165
{
2166
  SLOT_VIRTUAL = 0,
2167
  SLOT_TEMP,
2168
  SLOT_CW_STORED,
2169
  SLOT_CW_TRUNC,
2170
  SLOT_CW_FLOOR,
2171
  SLOT_CW_CEIL,
2172
  SLOT_CW_MASK_PM,
2173
  MAX_386_STACK_LOCALS
2174
};
2175
 
2176
/* Define this macro if the port needs extra instructions inserted
2177
   for mode switching in an optimizing compilation.  */
2178
 
2179
#define OPTIMIZE_MODE_SWITCHING(ENTITY) \
2180
   ix86_optimize_mode_switching[(ENTITY)]
2181
 
2182
/* If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
2183
   initializer for an array of integers.  Each initializer element N
2184
   refers to an entity that needs mode switching, and specifies the
2185
   number of different modes that might need to be set for this
2186
   entity.  The position of the initializer in the initializer -
2187
   starting counting at zero - determines the integer that is used to
2188
   refer to the mode-switched entity in question.  */
2189
 
2190
#define NUM_MODES_FOR_MODE_SWITCHING \
2191
   { I387_CW_ANY, I387_CW_ANY, I387_CW_ANY, I387_CW_ANY }
2192
 
2193
/* ENTITY is an integer specifying a mode-switched entity.  If
2194
   `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
2195
   return an integer value not larger than the corresponding element
2196
   in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
2197
   must be switched into prior to the execution of INSN. */
2198
 
2199
#define MODE_NEEDED(ENTITY, I) ix86_mode_needed ((ENTITY), (I))
2200
 
2201
/* This macro specifies the order in which modes for ENTITY are
2202
   processed.  0 is the highest priority.  */
2203
 
2204
#define MODE_PRIORITY_TO_MODE(ENTITY, N) (N)
2205
 
2206
/* Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE
2207
   is the set of hard registers live at the point where the insn(s)
2208
   are to be inserted.  */
2209
 
2210
#define EMIT_MODE_SET(ENTITY, MODE, HARD_REGS_LIVE)                     \
2211
  ((MODE) != I387_CW_ANY && (MODE) != I387_CW_UNINITIALIZED             \
2212
   ? emit_i387_cw_initialization (MODE), 0                              \
2213
   : 0)
2214
 
2215
 
2216
/* Avoid renaming of stack registers, as doing so in combination with
2217
   scheduling just increases amount of live registers at time and in
2218
   the turn amount of fxch instructions needed.
2219
 
2220
   ??? Maybe Pentium chips benefits from renaming, someone can try....  */
2221
 
2222
#define HARD_REGNO_RENAME_OK(SRC, TARGET)  \
2223
   ((SRC) < FIRST_STACK_REG || (SRC) > LAST_STACK_REG)
2224
 
2225
 
2226
#define DLL_IMPORT_EXPORT_PREFIX '#'
2227
 
2228
#define FASTCALL_PREFIX '@'
2229
 
2230
struct machine_function GTY(())
2231
{
2232
  struct stack_local_entry *stack_locals;
2233
  const char *some_ld_name;
2234
  rtx force_align_arg_pointer;
2235
  int save_varrargs_registers;
2236
  int accesses_prev_frame;
2237
  int optimize_mode_switching[MAX_386_ENTITIES];
2238
  /* Set by ix86_compute_frame_layout and used by prologue/epilogue expander to
2239
     determine the style used.  */
2240
  int use_fast_prologue_epilogue;
2241
  /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE has been computed
2242
     for.  */
2243
  int use_fast_prologue_epilogue_nregs;
2244
  /* If true, the current function needs the default PIC register, not
2245
     an alternate register (on x86) and must not use the red zone (on
2246
     x86_64), even if it's a leaf function.  We don't want the
2247
     function to be regarded as non-leaf because TLS calls need not
2248
     affect register allocation.  This flag is set when a TLS call
2249
     instruction is expanded within a function, and never reset, even
2250
     if all such instructions are optimized away.  Use the
2251
     ix86_current_function_calls_tls_descriptor macro for a better
2252
     approximation.  */
2253
  int tls_descriptor_call_expanded_p;
2254
};
2255
 
2256
#define ix86_stack_locals (cfun->machine->stack_locals)
2257
#define ix86_save_varrargs_registers (cfun->machine->save_varrargs_registers)
2258
#define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching)
2259
#define ix86_tls_descriptor_calls_expanded_in_cfun \
2260
  (cfun->machine->tls_descriptor_call_expanded_p)
2261
/* Since tls_descriptor_call_expanded is not cleared, even if all TLS
2262
   calls are optimized away, we try to detect cases in which it was
2263
   optimized away.  Since such instructions (use (reg REG_SP)), we can
2264
   verify whether there's any such instruction live by testing that
2265
   REG_SP is live.  */
2266
#define ix86_current_function_calls_tls_descriptor \
2267
  (ix86_tls_descriptor_calls_expanded_in_cfun && regs_ever_live[SP_REG])
2268
 
2269
/* Control behavior of x86_file_start.  */
2270
#define X86_FILE_START_VERSION_DIRECTIVE false
2271
#define X86_FILE_START_FLTUSED false
2272
 
2273
/* Flag to mark data that is in the large address area.  */
2274
#define SYMBOL_FLAG_FAR_ADDR            (SYMBOL_FLAG_MACH_DEP << 0)
2275
#define SYMBOL_REF_FAR_ADDR_P(X)        \
2276
        ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_FAR_ADDR) != 0)
2277
/*
2278
Local variables:
2279
version-control: t
2280
End:
2281
*/

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.