]> gcc.gnu.org Git - gcc.git/blame - gcc/config/ia64/ia64.h
cpplex.c (parse_args): Don't set VOID_REST flag.
[gcc.git] / gcc / config / ia64 / ia64.h
CommitLineData
e65271be
JW
1/* Definitions of target machine GNU compiler. IA-64 version.
2 Copyright (C) 1999, 2000 Free Software Foundation, Inc.
c65ebc55
JW
3 Contributed by James E. Wilson <wilson@cygnus.com> and
4 David Mosberger <davidm@hpl.hp.com>.
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GNU CC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GNU CC; see the file COPYING. If not, write to
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
22
c65ebc55
JW
23/* ??? Look at ABI group documents for list of preprocessor macros and
24 other features required for ABI compliance. */
25
26/* ??? Functions containing a non-local goto target save many registers. Why?
27 See for instance execute/920428-2.c. */
28
c65ebc55
JW
29/* ??? Add support for short data/bss sections. */
30
31\f
32/* Run-time target specifications */
33
34/* Define this to be a string constant containing `-D' options to define the
35 predefined macros that identify this machine and system. These macros will
36 be predefined unless the `-ansi' option is specified. */
37/* ??? This is undefed in svr4.h. */
38#define CPP_PREDEFINES "-Dia64 -Amachine(ia64)"
39
40/* This declaration should be present. */
41extern int target_flags;
42
43/* This series of macros is to allow compiler command arguments to enable or
44 disable the use of optional features of the target machine. */
45
46#define MASK_BIG_ENDIAN 0x00000001 /* Generate big endian code. */
47
48#define MASK_GNU_AS 0x00000002 /* Generate code for GNU as. */
49
50#define MASK_GNU_LD 0x00000004 /* Generate code for GNU ld. */
51
52#define MASK_NO_PIC 0x00000008 /* Generate code without GP reg. */
53
54#define MASK_VOL_ASM_STOP 0x00000010 /* Emit stop bits for vol ext asm. */
55
56#define MASK_A_STEP 0x00000020 /* Emit code for Itanium A step. */
57
58#define MASK_REG_NAMES 0x00000040 /* Use in/loc/out register names. */
59
60#define MASK_NO_SDATA 0x00000080 /* Disable sdata/scommon/sbss. */
61
59da9a7d
JW
62#define MASK_CONST_GP 0x00000100 /* treat gp as program-wide constant */
63
64#define MASK_AUTO_PIC 0x00000200 /* generate automatically PIC */
65
655f2eb9
RH
66#define MASK_INLINE_DIV_LAT 0x00000400 /* inline div, min latency. */
67
68#define MASK_INLINE_DIV_THR 0x00000800 /* inline div, max throughput. */
69
c65ebc55
JW
70#define MASK_DWARF2_ASM 0x40000000 /* test dwarf2 line info via gas. */
71
72#define TARGET_BIG_ENDIAN (target_flags & MASK_BIG_ENDIAN)
73
74#define TARGET_GNU_AS (target_flags & MASK_GNU_AS)
75
76#define TARGET_GNU_LD (target_flags & MASK_GNU_LD)
77
78#define TARGET_NO_PIC (target_flags & MASK_NO_PIC)
79
80#define TARGET_VOL_ASM_STOP (target_flags & MASK_VOL_ASM_STOP)
81
82#define TARGET_A_STEP (target_flags & MASK_A_STEP)
83
84#define TARGET_REG_NAMES (target_flags & MASK_REG_NAMES)
85
86#define TARGET_NO_SDATA (target_flags & MASK_NO_SDATA)
87
59da9a7d
JW
88#define TARGET_CONST_GP (target_flags & MASK_CONST_GP)
89
90#define TARGET_AUTO_PIC (target_flags & MASK_AUTO_PIC)
91
655f2eb9
RH
92#define TARGET_INLINE_DIV_LAT (target_flags & MASK_INLINE_DIV_LAT)
93
94#define TARGET_INLINE_DIV_THR (target_flags & MASK_INLINE_DIV_THR)
95
96#define TARGET_INLINE_DIV \
97 (target_flags & (MASK_INLINE_DIV_LAT | MASK_INLINE_DIV_THR))
98
c65ebc55
JW
99#define TARGET_DWARF2_ASM (target_flags & MASK_DWARF2_ASM)
100
101/* This macro defines names of command options to set and clear bits in
102 `target_flags'. Its definition is an initializer with a subgrouping for
103 each command option. */
104
59da9a7d 105#define TARGET_SWITCHES \
c65ebc55
JW
106{ \
107 { "big-endian", MASK_BIG_ENDIAN, \
047142d3 108 N_("Generate big endian code") }, \
c65ebc55 109 { "little-endian", -MASK_BIG_ENDIAN, \
047142d3 110 N_("Generate little endian code") }, \
c65ebc55 111 { "gnu-as", MASK_GNU_AS, \
047142d3 112 N_("Generate code for GNU as") }, \
c65ebc55 113 { "no-gnu-as", -MASK_GNU_AS, \
047142d3 114 N_("Generate code for Intel as") }, \
c65ebc55 115 { "gnu-ld", MASK_GNU_LD, \
047142d3 116 N_("Generate code for GNU ld") }, \
c65ebc55 117 { "no-gnu-ld", -MASK_GNU_LD, \
047142d3 118 N_("Generate code for Intel ld") }, \
c65ebc55 119 { "no-pic", MASK_NO_PIC, \
047142d3 120 N_("Generate code without GP reg") }, \
c65ebc55 121 { "volatile-asm-stop", MASK_VOL_ASM_STOP, \
047142d3 122 N_("Emit stop bits before and after volatile extended asms") }, \
c65ebc55 123 { "no-volatile-asm-stop", -MASK_VOL_ASM_STOP, \
047142d3 124 N_("Don't emit stop bits before and after volatile extended asms") }, \
c65ebc55 125 { "a-step", MASK_A_STEP, \
047142d3 126 N_("Emit code for Itanium (TM) processor A step")}, \
c65ebc55 127 { "register-names", MASK_REG_NAMES, \
047142d3 128 N_("Use in/loc/out register names")}, \
c65ebc55 129 { "no-sdata", MASK_NO_SDATA, \
047142d3 130 N_("Disable use of sdata/scommon/sbss")}, \
c65ebc55 131 { "sdata", -MASK_NO_SDATA, \
047142d3 132 N_("Enable use of sdata/scommon/sbss")}, \
59da9a7d 133 { "constant-gp", MASK_CONST_GP, \
047142d3 134 N_("gp is constant (but save/restore gp on indirect calls)") }, \
59da9a7d 135 { "auto-pic", MASK_AUTO_PIC, \
047142d3 136 N_("Generate self-relocatable code") }, \
655f2eb9
RH
137 { "inline-divide-min-latency", MASK_INLINE_DIV_LAT, \
138 N_("Generate inline division, optimize for latency") }, \
139 { "inline-divide-max-throughput", MASK_INLINE_DIV_THR, \
140 N_("Generate inline division, optimize for throughput") }, \
c65ebc55 141 { "dwarf2-asm", MASK_DWARF2_ASM, \
047142d3 142 N_("Enable Dwarf 2 line debug info via GNU as")}, \
c65ebc55 143 { "no-dwarf2-asm", -MASK_DWARF2_ASM, \
047142d3 144 N_("Disable Dwarf 2 line debug info via GNU as")}, \
c65ebc55
JW
145 { "", TARGET_DEFAULT | TARGET_CPU_DEFAULT, \
146 NULL } \
147}
148
149/* Default target_flags if no switches are specified */
150
151#ifndef TARGET_DEFAULT
152#define TARGET_DEFAULT MASK_DWARF2_ASM
153#endif
154
155#ifndef TARGET_CPU_DEFAULT
156#define TARGET_CPU_DEFAULT 0
157#endif
158
159/* This macro is similar to `TARGET_SWITCHES' but defines names of command
160 options that have values. Its definition is an initializer with a
161 subgrouping for each command option. */
162
163extern const char *ia64_fixed_range_string;
164#define TARGET_OPTIONS \
165{ \
166 { "fixed-range=", &ia64_fixed_range_string, \
047142d3 167 N_("Specify range of registers to make fixed.")}, \
c65ebc55
JW
168}
169
170/* This macro is a C statement to print on `stderr' a string describing the
171 particular machine description choice. */
172
173#define TARGET_VERSION fprintf (stderr, " (IA-64)");
174
175/* Sometimes certain combinations of command options do not make sense on a
176 particular target machine. You can define a macro `OVERRIDE_OPTIONS' to
177 take account of this. This macro, if defined, is executed once just after
178 all the command options have been parsed. */
179
180#define OVERRIDE_OPTIONS ia64_override_options ()
181
182/* Some machines may desire to change what optimizations are performed for
183 various optimization levels. This macro, if defined, is executed once just
184 after the optimization level is determined and before the remainder of the
185 command options have been parsed. Values set in this macro are used as the
186 default values for the other command line options. */
187
188/* #define OPTIMIZATION_OPTIONS(LEVEL,SIZE) */
c65ebc55
JW
189\f
190/* Driver configuration */
191
192/* A C string constant that tells the GNU CC driver program options to pass to
193 CPP. It can also specify how to translate options you give to GNU CC into
194 options for GNU CC to pass to the CPP. */
195
196/* ??? __LONG_MAX__ depends on LP64/ILP32 switch. */
197/* ??? An alternative is to modify glimits.h to check for __LP64__ instead
198 of checked for CPU specific defines. We could also get rid of all LONG_MAX
199 defines in other tm.h files. */
200#define CPP_SPEC \
201 "%{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} \
202 -D__LONG_MAX__=9223372036854775807L"
203
204/* If this macro is defined, the preprocessor will not define the builtin macro
205 `__SIZE_TYPE__'. The macro `__SIZE_TYPE__' must then be defined by
206 `CPP_SPEC' instead.
207
208 This should be defined if `SIZE_TYPE' depends on target dependent flags
209 which are not accessible to the preprocessor. Otherwise, it should not be
210 defined. */
211/* ??? Needs to be defined for P64 code. */
212/* #define NO_BUILTIN_SIZE_TYPE */
213
214/* If this macro is defined, the preprocessor will not define the builtin macro
215 `__PTRDIFF_TYPE__'. The macro `__PTRDIFF_TYPE__' must then be defined by
216 `CPP_SPEC' instead.
217
218 This should be defined if `PTRDIFF_TYPE' depends on target dependent flags
219 which are not accessible to the preprocessor. Otherwise, it should not be
220 defined. */
221/* ??? Needs to be defined for P64 code. */
222/* #define NO_BUILTIN_PTRDIFF_TYPE */
223
224/* A C string constant that tells the GNU CC driver program options to pass to
225 `cc1'. It can also specify how to translate options you give to GNU CC into
226 options for GNU CC to pass to the `cc1'. */
227
228/* #define CC1_SPEC "" */
229
230/* A C string constant that tells the GNU CC driver program options to pass to
231 `cc1plus'. It can also specify how to translate options you give to GNU CC
232 into options for GNU CC to pass to the `cc1plus'. */
233
234/* #define CC1PLUS_SPEC "" */
235
236/* A C string constant that tells the GNU CC driver program options to pass to
237 the assembler. It can also specify how to translate options you give to GNU
238 CC into options for GNU CC to pass to the assembler. */
239
240#if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GNU_AS) != 0
241/* GNU AS. */
00e149c7
JW
242#define ASM_SPEC \
243 "%{mno-gnu-as:-N so} %{!mno-gnu-as:-x} %{mconstant-gp} %{mauto-pic}"
c65ebc55
JW
244#else
245/* Intel ias. */
00e149c7
JW
246#define ASM_SPEC \
247 "%{!mgnu-as:-N so} %{mgnu-as:-x} %{mconstant-gp:-M const_gp}\
248 %{mauto-pic:-M no_plabel}"
c65ebc55
JW
249#endif
250
251/* A C string constant that tells the GNU CC driver program options to pass to
252 the linker. It can also specify how to translate options you give to GNU CC
253 into options for GNU CC to pass to the linker. */
254
255/* The Intel linker does not support dynamic linking, so we need -dn.
256 The Intel linker gives annoying messages unless -N so is used. */
257#if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GNU_LD) != 0
258/* GNU LD. */
259#define LINK_SPEC "%{mno-gnu-ld:-dn -N so}"
260#else
261/* Intel ild. */
262#define LINK_SPEC "%{!mgnu-ld:-dn -N so}"
263#endif
264
265\f
266/* Storage Layout */
267
268/* Define this macro to have the value 1 if the most significant bit in a byte
269 has the lowest number; otherwise define it to have the value zero. */
270
271#define BITS_BIG_ENDIAN 0
272
273/* Define this macro to have the value 1 if the most significant byte in a word
274 has the lowest number. This macro need not be a constant. */
275
276#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)
277
278/* Define this macro to have the value 1 if, in a multiword object, the most
279 significant word has the lowest number. */
280
281#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)
282
283/* Define this macro if WORDS_BIG_ENDIAN is not constant. This must be a
284 constant value with the same meaning as WORDS_BIG_ENDIAN, which will be used
285 only when compiling libgcc2.c. Typically the value will be set based on
286 preprocessor defines. */
287#if defined(__BIG_ENDIAN__)
288#define LIBGCC2_WORDS_BIG_ENDIAN 1
289#else
290#define LIBGCC2_WORDS_BIG_ENDIAN 0
291#endif
292
293/* Define this macro to be the number of bits in an addressable storage unit
294 (byte); normally 8. */
295#define BITS_PER_UNIT 8
296
297/* Number of bits in a word; normally 32. */
298#define BITS_PER_WORD 64
299
300/* Number of storage units in a word; normally 4. */
301#define UNITS_PER_WORD 8
302
303/* Width of a pointer, in bits. You must specify a value no wider than the
304 width of `Pmode'. If it is not equal to the width of `Pmode', you must
305 define `POINTERS_EXTEND_UNSIGNED'. */
306/* ??? Implement optional 32 bit pointer size later? */
307#define POINTER_SIZE 64
308
309/* A C expression whose value is nonzero if pointers that need to be extended
310 from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and zero if
311 they are zero-extended.
312
313 You need not define this macro if the `POINTER_SIZE' is equal to the width
314 of `Pmode'. */
315/* ??? May need this for 32 bit pointers. */
316/* #define POINTERS_EXTEND_UNSIGNED */
317
318/* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and
319 which has the specified mode and signedness is to be stored in a register.
320 This macro is only called when TYPE is a scalar type. */
c65ebc55
JW
321#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
322do \
323 { \
324 if (GET_MODE_CLASS (MODE) == MODE_INT \
dcf6e674
RH
325 && GET_MODE_SIZE (MODE) < 4) \
326 (MODE) = SImode; \
c65ebc55
JW
327 } \
328while (0)
329
330/* Define this macro if the promotion described by `PROMOTE_MODE' should also
331 be done for outgoing function arguments. */
332/* ??? ABI doesn't allow us to define this. */
333/* #define PROMOTE_FUNCTION_ARGS */
334
335/* Define this macro if the promotion described by `PROMOTE_MODE' should also
336 be done for the return value of functions.
337
338 If this macro is defined, `FUNCTION_VALUE' must perform the same promotions
339 done by `PROMOTE_MODE'. */
340/* ??? ABI doesn't allow us to define this. */
341/* #define PROMOTE_FUNCTION_RETURN */
342
343/* Normal alignment required for function parameters on the stack, in bits.
344 All stack parameters receive at least this much alignment regardless of data
345 type. On most machines, this is the same as the size of an integer. */
346#define PARM_BOUNDARY 64
347
348/* Define this macro if you wish to preserve a certain alignment for the stack
349 pointer. The definition is a C expression for the desired alignment
350 (measured in bits). */
351
352#define STACK_BOUNDARY 128
353
354/* Align frames on double word boundaries */
355#ifndef IA64_STACK_ALIGN
356#define IA64_STACK_ALIGN(LOC) (((LOC) + 15) & ~15)
357#endif
358
359/* Alignment required for a function entry point, in bits. */
360#define FUNCTION_BOUNDARY 128
361
362/* Biggest alignment that any data type can require on this machine,
363 in bits. */
364/* Optional x86 80-bit float, quad-precision 128-bit float, and quad-word
365 128 bit integers all require 128 bit alignment. */
366#define BIGGEST_ALIGNMENT 128
367
368/* If defined, a C expression to compute the alignment for a static variable.
369 TYPE is the data type, and ALIGN is the alignment that the object
370 would ordinarily have. The value of this macro is used instead of that
371 alignment to align the object. */
372
373#define DATA_ALIGNMENT(TYPE, ALIGN) \
374 (TREE_CODE (TYPE) == ARRAY_TYPE \
375 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
376 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
377
378/* If defined, a C expression to compute the alignment given to a constant that
379 is being placed in memory. CONSTANT is the constant and ALIGN is the
380 alignment that the object would ordinarily have. The value of this macro is
381 used instead of that alignment to align the object. */
382
383#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
384 (TREE_CODE (EXP) == STRING_CST \
385 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
386
387/* Define this macro to be the value 1 if instructions will fail to work if
388 given data not on the nominal alignment. If instructions will merely go
389 slower in that case, define this macro as 0. */
390#define STRICT_ALIGNMENT 1
391
392/* Define this if you wish to imitate the way many other C compilers handle
393 alignment of bitfields and the structures that contain them.
394 The behavior is that the type written for a bitfield (`int', `short', or
395 other integer type) imposes an alignment for the entire structure, as if the
396 structure really did contain an ordinary field of that type. In addition,
397 the bitfield is placed within the structure so that it would fit within such
398 a field, not crossing a boundary for it. */
399#define PCC_BITFIELD_TYPE_MATTERS 1
400
c65ebc55
JW
401/* An integer expression for the size in bits of the largest integer machine
402 mode that should actually be used. */
403
404/* Allow pairs of registers to be used, which is the intent of the default. */
405#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)
406
407/* A code distinguishing the floating point format of the target machine. */
408#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT
409
410/* GNU CC supports two ways of implementing C++ vtables: traditional or with
411 so-called "thunks". The flag `-fvtable-thunk' chooses between them. Define
412 this macro to be a C expression for the default value of that flag. If
413 `DEFAULT_VTABLE_THUNKS' is 0, GNU CC uses the traditional implementation by
414 default. The "thunk" implementation is more efficient (especially if you
415 have provided an implementation of `ASM_OUTPUT_MI_THUNK', but is not binary
416 compatible with code compiled using the traditional implementation. If you
417 are writing a new ports, define `DEFAULT_VTABLE_THUNKS' to 1.
418
419 If you do not define this macro, the default for `-fvtable-thunk' is 0. */
420#define DEFAULT_VTABLE_THUNKS 1
421
422\f
423/* Layout of Source Language Data Types */
424
425/* A C expression for the size in bits of the type `int' on the target machine.
426 If you don't define this, the default is one word. */
427#define INT_TYPE_SIZE 32
428
429/* A C expression for the size in bits of the type `short' on the target
430 machine. If you don't define this, the default is half a word. (If this
431 would be less than one storage unit, it is rounded up to one unit.) */
432#define SHORT_TYPE_SIZE 16
433
434/* A C expression for the size in bits of the type `long' on the target
435 machine. If you don't define this, the default is one word. */
436/* ??? Should be 32 for ILP32 code. */
437#define LONG_TYPE_SIZE 64
438
439/* Maximum number for the size in bits of the type `long' on the target
440 machine. If this is undefined, the default is `LONG_TYPE_SIZE'. Otherwise,
441 it is the constant value that is the largest value that `LONG_TYPE_SIZE' can
442 have at run-time. This is used in `cpp'. */
443/* ??? Should be 64 for ILP32 code. */
444/* #define MAX_LONG_TYPE_SIZE */
445
446/* A C expression for the size in bits of the type `long long' on the target
447 machine. If you don't define this, the default is two words. If you want
448 to support GNU Ada on your machine, the value of macro must be at least 64. */
449#define LONG_LONG_TYPE_SIZE 64
450
451/* A C expression for the size in bits of the type `char' on the target
452 machine. If you don't define this, the default is one quarter of a word.
453 (If this would be less than one storage unit, it is rounded up to one unit.) */
454#define CHAR_TYPE_SIZE 8
455
456/* A C expression for the size in bits of the type `float' on the target
457 machine. If you don't define this, the default is one word. */
458#define FLOAT_TYPE_SIZE 32
459
460/* A C expression for the size in bits of the type `double' on the target
461 machine. If you don't define this, the default is two words. */
462#define DOUBLE_TYPE_SIZE 64
463
464/* A C expression for the size in bits of the type `long double' on the target
465 machine. If you don't define this, the default is two words. */
3f622353
RH
466#define LONG_DOUBLE_TYPE_SIZE 128
467
468/* Tell real.c that this is the 80-bit Intel extended float format
469 packaged in a 128-bit entity. */
470#define INTEL_EXTENDED_IEEE_FORMAT
c65ebc55
JW
471
472/* An expression whose value is 1 or 0, according to whether the type `char'
473 should be signed or unsigned by default. The user can always override this
474 default with the options `-fsigned-char' and `-funsigned-char'. */
475#define DEFAULT_SIGNED_CHAR 1
476
477/* A C expression for a string describing the name of the data type to use for
478 size values. The typedef name `size_t' is defined using the contents of the
479 string. */
480/* ??? Needs to be defined for P64 code. */
481/* #define SIZE_TYPE */
482
483/* A C expression for a string describing the name of the data type to use for
484 the result of subtracting two pointers. The typedef name `ptrdiff_t' is
485 defined using the contents of the string. See `SIZE_TYPE' above for more
486 information. */
487/* ??? Needs to be defined for P64 code. */
488/* #define PTRDIFF_TYPE */
489
490/* A C expression for a string describing the name of the data type to use for
491 wide characters. The typedef name `wchar_t' is defined using the contents
492 of the string. See `SIZE_TYPE' above for more information. */
493/* #define WCHAR_TYPE */
494
495/* A C expression for the size in bits of the data type for wide characters.
496 This is used in `cpp', which cannot make use of `WCHAR_TYPE'. */
497/* #define WCHAR_TYPE_SIZE */
498
499/* Maximum number for the size in bits of the data type for wide characters.
500 If this is undefined, the default is `WCHAR_TYPE_SIZE'. Otherwise, it is
501 the constant value that is the largest value that `WCHAR_TYPE_SIZE' can have
502 at run-time. This is used in `cpp'. */
503/* #define MAX_WCHAR_TYPE_SIZE */
504
505/* A C constant expression for the integer value for escape sequence
506 `\a'. */
507#define TARGET_BELL 0x7
508
509/* C constant expressions for the integer values for escape sequences
510 `\b', `\t' and `\n'. */
511#define TARGET_BS 0x8
512#define TARGET_TAB 0x9
513#define TARGET_NEWLINE 0xa
514
515/* C constant expressions for the integer values for escape sequences
516 `\v', `\f' and `\r'. */
517#define TARGET_VT 0xb
518#define TARGET_FF 0xc
519#define TARGET_CR 0xd
520
521\f
522/* Register Basics */
523
524/* Number of hardware registers known to the compiler.
5527bf14
RH
525 We have 128 general registers, 128 floating point registers,
526 64 predicate registers, 8 branch registers, one frame pointer,
527 and several "application" registers. */
c65ebc55 528
97e242b0 529#define FIRST_PSEUDO_REGISTER 335
c65ebc55
JW
530
531/* Ranges for the various kinds of registers. */
3b572406
RH
532#define ADDL_REGNO_P(REGNO) ((unsigned HOST_WIDE_INT) (REGNO) <= 3)
533#define GR_REGNO_P(REGNO) ((unsigned HOST_WIDE_INT) (REGNO) <= 127)
c65ebc55
JW
534#define FR_REGNO_P(REGNO) ((REGNO) >= 128 && (REGNO) <= 255)
535#define PR_REGNO_P(REGNO) ((REGNO) >= 256 && (REGNO) <= 319)
536#define BR_REGNO_P(REGNO) ((REGNO) >= 320 && (REGNO) <= 327)
537#define GENERAL_REGNO_P(REGNO) \
538 (GR_REGNO_P (REGNO) \
539 || (REGNO) == FRAME_POINTER_REGNUM \
46327bc5 540 || (REGNO) == RETURN_ADDRESS_POINTER_REGNUM)
c65ebc55
JW
541
542#define GR_REG(REGNO) ((REGNO) + 0)
543#define FR_REG(REGNO) ((REGNO) + 128)
544#define PR_REG(REGNO) ((REGNO) + 256)
545#define BR_REG(REGNO) ((REGNO) + 320)
546#define OUT_REG(REGNO) ((REGNO) + 120)
547#define IN_REG(REGNO) ((REGNO) + 112)
548#define LOC_REG(REGNO) ((REGNO) + 32)
549
5527bf14 550#define AR_CCV_REGNUM 330
97e242b0
RH
551#define AR_UNAT_REGNUM 331
552#define AR_PFS_REGNUM 332
553#define AR_LC_REGNUM 333
554#define AR_EC_REGNUM 334
5527bf14 555
c65ebc55
JW
556#define IN_REGNO_P(REGNO) ((REGNO) >= IN_REG (0) && (REGNO) <= IN_REG (7))
557#define LOC_REGNO_P(REGNO) ((REGNO) >= LOC_REG (0) && (REGNO) <= LOC_REG (79))
558#define OUT_REGNO_P(REGNO) ((REGNO) >= OUT_REG (0) && (REGNO) <= OUT_REG (7))
559
97e242b0
RH
560#define AR_M_REGNO_P(REGNO) ((REGNO) == AR_CCV_REGNUM \
561 || (REGNO) == AR_UNAT_REGNUM)
562#define AR_I_REGNO_P(REGNO) ((REGNO) >= AR_PFS_REGNUM \
5527bf14
RH
563 && (REGNO) < FIRST_PSEUDO_REGISTER)
564#define AR_REGNO_P(REGNO) ((REGNO) >= AR_CCV_REGNUM \
565 && (REGNO) < FIRST_PSEUDO_REGISTER)
566
567
c65ebc55
JW
568/* ??? Don't really need two sets of macros. I like this one better because
569 it is less typing. */
570#define R_GR(REGNO) GR_REG (REGNO)
571#define R_FR(REGNO) FR_REG (REGNO)
572#define R_PR(REGNO) PR_REG (REGNO)
573#define R_BR(REGNO) BR_REG (REGNO)
574
575/* An initializer that says which registers are used for fixed purposes all
576 throughout the compiled code and are therefore not available for general
577 allocation.
578
579 r0: constant 0
580 r1: global pointer (gp)
581 r12: stack pointer (sp)
582 r13: thread pointer (tp)
583 f0: constant 0.0
584 f1: constant 1.0
585 p0: constant true
586 fp: eliminable frame pointer */
587
1ff5b671
JW
588/* The last 16 stacked regs are reserved for the 8 input and 8 output
589 registers. */
c65ebc55 590
c65ebc55
JW
591#define FIXED_REGISTERS \
592{ /* General registers. */ \
593 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, \
594 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
595 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
596 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
597 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
598 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
97e242b0 599 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
1ff5b671 600 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
c65ebc55
JW
601 /* Floating-point registers. */ \
602 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
603 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
604 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
605 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
606 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
607 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
608 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
609 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
610 /* Predicate registers. */ \
611 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
612 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
613 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
614 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
615 /* Branch registers. */ \
616 0, 0, 0, 0, 0, 0, 0, 0, \
97e242b0
RH
617 /*FP RA CCV UNAT PFS LC EC */ \
618 1, 1, 1, 1, 1, 0, 1 \
c65ebc55
JW
619 }
620
5527bf14
RH
621/* Like `FIXED_REGISTERS' but has 1 for each register that is clobbered
622 (in general) by function calls as well as for fixed registers. This
623 macro therefore identifies the registers that are not available for
624 general allocation of values that must live across function calls. */
c65ebc55 625
c65ebc55
JW
626#define CALL_USED_REGISTERS \
627{ /* General registers. */ \
628 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
629 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
630 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
631 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
633 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
97e242b0 634 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
1ff5b671 635 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
c65ebc55
JW
636 /* Floating-point registers. */ \
637 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
638 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
639 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
640 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
641 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
642 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
643 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
644 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
645 /* Predicate registers. */ \
646 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
647 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
648 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
649 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
650 /* Branch registers. */ \
651 1, 0, 0, 0, 0, 0, 1, 1, \
97e242b0
RH
652 /*FP RA CCV UNAT PFS LC EC */ \
653 1, 1, 1, 1, 1, 0, 1 \
c65ebc55
JW
654}
655
656/* Define this macro if the target machine has register windows. This C
657 expression returns the register number as seen by the called function
658 corresponding to the register number OUT as seen by the calling function.
659 Return OUT if register number OUT is not an outbound register. */
660
661#define INCOMING_REGNO(OUT) \
662 ((unsigned) ((OUT) - OUT_REG (0)) < 8 ? IN_REG ((OUT) - OUT_REG (0)) : (OUT))
663
664/* Define this macro if the target machine has register windows. This C
665 expression returns the register number as seen by the calling function
666 corresponding to the register number IN as seen by the called function.
667 Return IN if register number IN is not an inbound register. */
668
669#define OUTGOING_REGNO(IN) \
670 ((unsigned) ((IN) - IN_REG (0)) < 8 ? OUT_REG ((IN) - IN_REG (0)) : (IN))
671
2a3e384f
RH
672/* Define this macro if the target machine has register windows. This
673 C expression returns true if the register is call-saved but is in the
674 register window. */
675
676#define LOCAL_REGNO(REGNO) \
677 (IN_REGNO_P (REGNO) || LOC_REGNO_P (REGNO))
97e242b0
RH
678
679/* Add any extra modes needed to represent the condition code.
680
681 CCImode is used to mark a single predicate register instead
682 of a register pair. This is currently only used in reg_raw_mode
683 so that flow doesn't do something stupid. */
684
685#define EXTRA_CC_MODES CC(CCImode, "CCI")
686
687/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
688 return the mode to be used for the comparison. Must be defined if
689 EXTRA_CC_MODES is defined. */
690
691#define SELECT_CC_MODE(OP,X,Y) CCmode
c65ebc55
JW
692\f
693/* Order of allocation of registers */
694
695/* If defined, an initializer for a vector of integers, containing the numbers
696 of hard registers in the order in which GNU CC should prefer to use them
697 (from most preferred to least).
698
699 If this macro is not defined, registers are used lowest numbered first (all
700 else being equal).
701
702 One use of this macro is on machines where the highest numbered registers
703 must always be saved and the save-multiple-registers instruction supports
704 only sequences of consecutive registers. On such machines, define
705 `REG_ALLOC_ORDER' to be an initializer that lists the highest numbered
706 allocatable register first. */
707
708/* ??? Should the GR return value registers come before or after the rest
709 of the caller-save GRs? */
710
97e242b0 711#define REG_ALLOC_ORDER \
c65ebc55
JW
712{ \
713 /* Caller-saved general registers. */ \
97e242b0
RH
714 R_GR (14), R_GR (15), R_GR (16), R_GR (17), \
715 R_GR (18), R_GR (19), R_GR (20), R_GR (21), R_GR (22), R_GR (23), \
716 R_GR (24), R_GR (25), R_GR (26), R_GR (27), R_GR (28), R_GR (29), \
c65ebc55 717 R_GR (30), R_GR (31), \
1ff5b671
JW
718 /* Output registers. */ \
719 R_GR (120), R_GR (121), R_GR (122), R_GR (123), R_GR (124), R_GR (125), \
97e242b0 720 R_GR (126), R_GR (127), \
c65ebc55 721 /* Caller-saved general registers, also used for return values. */ \
97e242b0 722 R_GR (8), R_GR (9), R_GR (10), R_GR (11), \
c65ebc55
JW
723 /* addl caller-saved general registers. */ \
724 R_GR (2), R_GR (3), \
725 /* Caller-saved FP registers. */ \
726 R_FR (6), R_FR (7), \
727 /* Caller-saved FP registers, used for parameters and return values. */ \
97e242b0
RH
728 R_FR (8), R_FR (9), R_FR (10), R_FR (11), \
729 R_FR (12), R_FR (13), R_FR (14), R_FR (15), \
c65ebc55 730 /* Rotating caller-saved FP registers. */ \
97e242b0
RH
731 R_FR (32), R_FR (33), R_FR (34), R_FR (35), \
732 R_FR (36), R_FR (37), R_FR (38), R_FR (39), R_FR (40), R_FR (41), \
733 R_FR (42), R_FR (43), R_FR (44), R_FR (45), R_FR (46), R_FR (47), \
734 R_FR (48), R_FR (49), R_FR (50), R_FR (51), R_FR (52), R_FR (53), \
735 R_FR (54), R_FR (55), R_FR (56), R_FR (57), R_FR (58), R_FR (59), \
736 R_FR (60), R_FR (61), R_FR (62), R_FR (63), R_FR (64), R_FR (65), \
737 R_FR (66), R_FR (67), R_FR (68), R_FR (69), R_FR (70), R_FR (71), \
738 R_FR (72), R_FR (73), R_FR (74), R_FR (75), R_FR (76), R_FR (77), \
739 R_FR (78), R_FR (79), R_FR (80), R_FR (81), R_FR (82), R_FR (83), \
740 R_FR (84), R_FR (85), R_FR (86), R_FR (87), R_FR (88), R_FR (89), \
741 R_FR (90), R_FR (91), R_FR (92), R_FR (93), R_FR (94), R_FR (95), \
742 R_FR (96), R_FR (97), R_FR (98), R_FR (99), R_FR (100), R_FR (101), \
c65ebc55
JW
743 R_FR (102), R_FR (103), R_FR (104), R_FR (105), R_FR (106), R_FR (107), \
744 R_FR (108), R_FR (109), R_FR (110), R_FR (111), R_FR (112), R_FR (113), \
745 R_FR (114), R_FR (115), R_FR (116), R_FR (117), R_FR (118), R_FR (119), \
746 R_FR (120), R_FR (121), R_FR (122), R_FR (123), R_FR (124), R_FR (125), \
97e242b0 747 R_FR (126), R_FR (127), \
c65ebc55 748 /* Caller-saved predicate registers. */ \
97e242b0 749 R_PR (6), R_PR (7), R_PR (8), R_PR (9), R_PR (10), R_PR (11), \
c65ebc55
JW
750 R_PR (12), R_PR (13), R_PR (14), R_PR (15), \
751 /* Rotating caller-saved predicate registers. */ \
97e242b0
RH
752 R_PR (16), R_PR (17), \
753 R_PR (18), R_PR (19), R_PR (20), R_PR (21), R_PR (22), R_PR (23), \
754 R_PR (24), R_PR (25), R_PR (26), R_PR (27), R_PR (28), R_PR (29), \
755 R_PR (30), R_PR (31), R_PR (32), R_PR (33), R_PR (34), R_PR (35), \
756 R_PR (36), R_PR (37), R_PR (38), R_PR (39), R_PR (40), R_PR (41), \
757 R_PR (42), R_PR (43), R_PR (44), R_PR (45), R_PR (46), R_PR (47), \
758 R_PR (48), R_PR (49), R_PR (50), R_PR (51), R_PR (52), R_PR (53), \
759 R_PR (54), R_PR (55), R_PR (56), R_PR (57), R_PR (58), R_PR (59), \
760 R_PR (60), R_PR (61), R_PR (62), R_PR (63), \
c65ebc55
JW
761 /* Caller-saved branch registers. */ \
762 R_BR (6), R_BR (7), \
763 \
764 /* Stacked callee-saved general registers. */ \
97e242b0
RH
765 R_GR (32), R_GR (33), R_GR (34), R_GR (35), \
766 R_GR (36), R_GR (37), R_GR (38), R_GR (39), R_GR (40), R_GR (41), \
767 R_GR (42), R_GR (43), R_GR (44), R_GR (45), R_GR (46), R_GR (47), \
768 R_GR (48), R_GR (49), R_GR (50), R_GR (51), R_GR (52), R_GR (53), \
769 R_GR (54), R_GR (55), R_GR (56), R_GR (57), R_GR (58), R_GR (59), \
770 R_GR (60), R_GR (61), R_GR (62), R_GR (63), R_GR (64), R_GR (65), \
771 R_GR (66), R_GR (67), R_GR (68), R_GR (69), R_GR (70), R_GR (71), \
772 R_GR (72), R_GR (73), R_GR (74), R_GR (75), R_GR (76), R_GR (77), \
773 R_GR (78), R_GR (79), R_GR (80), R_GR (81), R_GR (82), R_GR (83), \
774 R_GR (84), R_GR (85), R_GR (86), R_GR (87), R_GR (88), R_GR (89), \
775 R_GR (90), R_GR (91), R_GR (92), R_GR (93), R_GR (94), R_GR (95), \
776 R_GR (96), R_GR (97), R_GR (98), R_GR (99), R_GR (100), R_GR (101), \
c65ebc55
JW
777 R_GR (102), R_GR (103), R_GR (104), R_GR (105), R_GR (106), R_GR (107), \
778 R_GR (108), \
1ff5b671
JW
779 /* Input registers. */ \
780 R_GR (112), R_GR (113), R_GR (114), R_GR (115), R_GR (116), R_GR (117), \
781 R_GR (118), R_GR (119), \
c65ebc55
JW
782 /* Callee-saved general registers. */ \
783 R_GR (4), R_GR (5), R_GR (6), R_GR (7), \
784 /* Callee-saved FP registers. */ \
97e242b0
RH
785 R_FR (2), R_FR (3), R_FR (4), R_FR (5), R_FR (16), R_FR (17), \
786 R_FR (18), R_FR (19), R_FR (20), R_FR (21), R_FR (22), R_FR (23), \
787 R_FR (24), R_FR (25), R_FR (26), R_FR (27), R_FR (28), R_FR (29), \
c65ebc55
JW
788 R_FR (30), R_FR (31), \
789 /* Callee-saved predicate registers. */ \
97e242b0 790 R_PR (1), R_PR (2), R_PR (3), R_PR (4), R_PR (5), \
c65ebc55
JW
791 /* Callee-saved branch registers. */ \
792 R_BR (1), R_BR (2), R_BR (3), R_BR (4), R_BR (5), \
793 \
794 /* ??? Stacked registers reserved for fp, rp, and ar.pfs. */ \
795 R_GR (109), R_GR (110), R_GR (111), \
c65ebc55
JW
796 \
797 /* Special general registers. */ \
97e242b0 798 R_GR (0), R_GR (1), R_GR (12), R_GR (13), \
c65ebc55
JW
799 /* Special FP registers. */ \
800 R_FR (0), R_FR (1), \
801 /* Special predicate registers. */ \
802 R_PR (0), \
803 /* Special branch registers. */ \
804 R_BR (0), \
5527bf14 805 /* Other fixed registers. */ \
46327bc5 806 FRAME_POINTER_REGNUM, RETURN_ADDRESS_POINTER_REGNUM, \
97e242b0
RH
807 AR_CCV_REGNUM, AR_UNAT_REGNUM, AR_PFS_REGNUM, AR_LC_REGNUM, \
808 AR_EC_REGNUM \
c65ebc55 809}
c65ebc55
JW
810\f
811/* How Values Fit in Registers */
812
813/* A C expression for the number of consecutive hard registers, starting at
814 register number REGNO, required to hold a value of mode MODE. */
815
f2f90c63 816/* ??? We say that BImode PR values require two registers. This allows us to
97e242b0
RH
817 easily store the normal and inverted values. We use CCImode to indicate
818 a single predicate register. */
c65ebc55 819
97e242b0
RH
820#define HARD_REGNO_NREGS(REGNO, MODE) \
821 ((REGNO) == PR_REG (0) && (MODE) == DImode ? 64 \
f2f90c63 822 : PR_REGNO_P (REGNO) && (MODE) == BImode ? 2 \
97e242b0 823 : PR_REGNO_P (REGNO) && (MODE) == CCImode ? 1 \
3f622353 824 : FR_REGNO_P (REGNO) && (MODE) == TFmode ? 1 \
c65ebc55
JW
825 : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
826
827/* A C expression that is nonzero if it is permissible to store a value of mode
828 MODE in hard register number REGNO (or in several registers starting with
829 that one). */
0ea1e106 830
f2f90c63
RH
831#define HARD_REGNO_MODE_OK(REGNO, MODE) \
832 (FR_REGNO_P (REGNO) ? \
833 GET_MODE_CLASS (MODE) != MODE_CC && (MODE) != TImode && (MODE) != BImode \
834 : PR_REGNO_P (REGNO) ? \
835 (MODE) == BImode || GET_MODE_CLASS (MODE) == MODE_CC \
836 : GR_REGNO_P (REGNO) ? (MODE) != CCImode && (MODE) != TFmode \
837 : AR_REGNO_P (REGNO) ? (MODE) == DImode \
838 : BR_REGNO_P (REGNO) ? (MODE) == DImode \
3f622353 839 : 0)
c65ebc55
JW
840
841/* A C expression that is nonzero if it is desirable to choose register
842 allocation so as to avoid move instructions between a value of mode MODE1
843 and a value of mode MODE2.
844
845 If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, MODE2)' are
846 ever different for any R, then `MODES_TIEABLE_P (MODE1, MODE2)' must be
847 zero. */
ad06f2e3 848/* Don't tie integer and FP modes, as that causes us to get integer registers
3f622353
RH
849 allocated for FP instructions. TFmode only supported in FP registers so
850 we can't tie it with any other modes. */
f2f90c63
RH
851#define MODES_TIEABLE_P(MODE1, MODE2) \
852 (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2) \
853 && (((MODE1) == TFmode) == ((MODE2) == TFmode)) \
854 && (((MODE1) == BImode) == ((MODE2) == BImode)))
c65ebc55
JW
855\f
856/* Handling Leaf Functions */
857
858/* A C initializer for a vector, indexed by hard register number, which
859 contains 1 for a register that is allowable in a candidate for leaf function
860 treatment. */
861/* ??? This might be useful. */
862/* #define LEAF_REGISTERS */
863
864/* A C expression whose value is the register number to which REGNO should be
865 renumbered, when a function is treated as a leaf function. */
866/* ??? This might be useful. */
867/* #define LEAF_REG_REMAP(REGNO) */
868
869\f
870/* Register Classes */
871
872/* An enumeral type that must be defined with all the register class names as
873 enumeral values. `NO_REGS' must be first. `ALL_REGS' must be the last
874 register class, followed by one more enumeral value, `LIM_REG_CLASSES',
875 which is not a register class but rather tells how many classes there
876 are. */
c65ebc55
JW
877/* ??? When compiling without optimization, it is possible for the only use of
878 a pseudo to be a parameter load from the stack with a REG_EQUIV note.
879 Regclass handles this case specially and does not assign any costs to the
880 pseudo. The pseudo then ends up using the last class before ALL_REGS.
881 Thus we must not let either PR_REGS or BR_REGS be the last class. The
882 testcase for this is gcc.c-torture/execute/va-arg-7.c. */
883enum reg_class
884{
885 NO_REGS,
886 PR_REGS,
887 BR_REGS,
888 ADDL_REGS,
889 GR_REGS,
c65ebc55 890 FR_REGS,
c65ebc55 891 GR_AND_FR_REGS,
5527bf14
RH
892 AR_M_REGS,
893 AR_I_REGS,
c65ebc55
JW
894 ALL_REGS,
895 LIM_REG_CLASSES
896};
897
898#define GENERAL_REGS GR_REGS
899
900/* The number of distinct register classes. */
901#define N_REG_CLASSES ((int) LIM_REG_CLASSES)
902
903/* An initializer containing the names of the register classes as C string
904 constants. These names are used in writing some of the debugging dumps. */
905#define REG_CLASS_NAMES \
f2f90c63
RH
906{ "NO_REGS", "PR_REGS", "BR_REGS", "ADDL_REGS", "GR_REGS", "FR_REGS", \
907 "GR_AND_FR_REGS", "AR_M_REGS", "AR_I_REGS", "ALL_REGS" }
c65ebc55
JW
908
909/* An initializer containing the contents of the register classes, as integers
910 which are bit masks. The Nth integer specifies the contents of class N.
911 The way the integer MASK is interpreted is that register R is in the class
912 if `MASK & (1 << R)' is 1. */
913#define REG_CLASS_CONTENTS \
914{ \
915 /* NO_REGS. */ \
916 { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
917 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
5527bf14 918 0x00000000, 0x00000000, 0x0000 }, \
c65ebc55
JW
919 /* PR_REGS. */ \
920 { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
921 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
5527bf14 922 0xFFFFFFFF, 0xFFFFFFFF, 0x0000 }, \
c65ebc55
JW
923 /* BR_REGS. */ \
924 { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
925 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
5527bf14 926 0x00000000, 0x00000000, 0x00FF }, \
c65ebc55
JW
927 /* ADDL_REGS. */ \
928 { 0x0000000F, 0x00000000, 0x00000000, 0x00000000, \
929 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
5527bf14 930 0x00000000, 0x00000000, 0x0000 }, \
c65ebc55
JW
931 /* GR_REGS. */ \
932 { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \
933 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
5527bf14 934 0x00000000, 0x00000000, 0x0300 }, \
c65ebc55
JW
935 /* FR_REGS. */ \
936 { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
937 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \
5527bf14 938 0x00000000, 0x00000000, 0x0000 }, \
c65ebc55
JW
939 /* GR_AND_FR_REGS. */ \
940 { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \
941 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \
5527bf14
RH
942 0x00000000, 0x00000000, 0x0300 }, \
943 /* AR_M_REGS. */ \
944 { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
945 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
97e242b0 946 0x00000000, 0x00000000, 0x0C00 }, \
5527bf14
RH
947 /* AR_I_REGS. */ \
948 { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
949 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
97e242b0 950 0x00000000, 0x00000000, 0x7000 }, \
c65ebc55
JW
951 /* ALL_REGS. */ \
952 { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \
953 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \
97e242b0 954 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFF }, \
c65ebc55
JW
955}
956
957/* A C expression whose value is a register class containing hard register
958 REGNO. In general there is more than one such class; choose a class which
959 is "minimal", meaning that no smaller class also contains the register. */
960/* The NO_REGS case is primarily for the benefit of rws_access_reg, which
961 may call here with private (invalid) register numbers, such as
962 REG_VOLATILE. */
963#define REGNO_REG_CLASS(REGNO) \
964(ADDL_REGNO_P (REGNO) ? ADDL_REGS \
965 : GENERAL_REGNO_P (REGNO) ? GR_REGS \
13da91fd 966 : FR_REGNO_P (REGNO) ? FR_REGS \
c65ebc55
JW
967 : PR_REGNO_P (REGNO) ? PR_REGS \
968 : BR_REGNO_P (REGNO) ? BR_REGS \
97e242b0
RH
969 : AR_M_REGNO_P (REGNO) ? AR_M_REGS \
970 : AR_I_REGNO_P (REGNO) ? AR_I_REGS \
c65ebc55
JW
971 : NO_REGS)
972
973/* A macro whose definition is the name of the class to which a valid base
974 register must belong. A base register is one used in an address which is
975 the register value plus a displacement. */
976#define BASE_REG_CLASS GENERAL_REGS
977
978/* A macro whose definition is the name of the class to which a valid index
979 register must belong. An index register is one used in an address where its
980 value is either multiplied by a scale factor or added to another register
981 (as well as added to a displacement). */
982#define INDEX_REG_CLASS NO_REGS
983
984/* A C expression which defines the machine-dependent operand constraint
985 letters for register classes. If CHAR is such a letter, the value should be
986 the register class corresponding to it. Otherwise, the value should be
987 `NO_REGS'. The register letter `r', corresponding to class `GENERAL_REGS',
988 will not be passed to this macro; you do not need to handle it. */
989
990#define REG_CLASS_FROM_LETTER(CHAR) \
13da91fd 991((CHAR) == 'f' ? FR_REGS \
c65ebc55
JW
992 : (CHAR) == 'a' ? ADDL_REGS \
993 : (CHAR) == 'b' ? BR_REGS \
994 : (CHAR) == 'c' ? PR_REGS \
5527bf14
RH
995 : (CHAR) == 'd' ? AR_M_REGS \
996 : (CHAR) == 'e' ? AR_I_REGS \
c65ebc55
JW
997 : NO_REGS)
998
999/* A C expression which is nonzero if register number NUM is suitable for use
1000 as a base register in operand addresses. It may be either a suitable hard
1001 register or a pseudo register that has been allocated such a hard reg. */
1002#define REGNO_OK_FOR_BASE_P(REGNO) \
1003 (GENERAL_REGNO_P (REGNO) || GENERAL_REGNO_P (reg_renumber[REGNO]))
1004
1005/* A C expression which is nonzero if register number NUM is suitable for use
1006 as an index register in operand addresses. It may be either a suitable hard
1007 register or a pseudo register that has been allocated such a hard reg. */
1008#define REGNO_OK_FOR_INDEX_P(NUM) 0
1009
1010/* A C expression that places additional restrictions on the register class to
1011 use when it is necessary to copy value X into a register in class CLASS.
1012 The value is a register class; perhaps CLASS, or perhaps another, smaller
1013 class. */
1014
ffaff414
JW
1015/* Don't allow volatile mem reloads into floating point registers. This
1016 is defined to force reload to choose the r/m case instead of the f/f case
f2f90c63
RH
1017 when reloading (set (reg fX) (mem/v)).
1018
1019 Do not reload expressions into AR regs. */
ffaff414
JW
1020
1021#define PREFERRED_RELOAD_CLASS(X, CLASS) \
f2f90c63
RH
1022 (CLASS == FR_REGS && GET_CODE (X) == MEM && MEM_VOLATILE_P (X) ? NO_REGS \
1023 : GET_RTX_CLASS (GET_CODE (X)) != 'o' && CLASS > GR_AND_FR_REGS ? NO_REGS \
ffaff414 1024 : CLASS)
c65ebc55
JW
1025
1026/* You should define this macro to indicate to the reload phase that it may
1027 need to allocate at least one register for a reload in addition to the
1028 register to contain the data. Specifically, if copying X to a register
1029 CLASS in MODE requires an intermediate register, you should define this
1030 to return the largest register class all of whose registers can be used
1031 as intermediate registers or scratch registers. */
1032
1033#define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \
1034 ia64_secondary_reload_class (CLASS, MODE, X)
1035
1036/* Certain machines have the property that some registers cannot be copied to
1037 some other registers without using memory. Define this macro on those
1038 machines to be a C expression that is non-zero if objects of mode M in
1039 registers of CLASS1 can only be copied to registers of class CLASS2 by
1040 storing a register of CLASS1 into memory and loading that memory location
1041 into a register of CLASS2. */
3f622353
RH
1042
1043#if 0
1044/* ??? May need this, but since we've disallowed TFmode in GR_REGS,
1045 I'm not quite sure how it could be invoked. The normal problems
1046 with unions should be solved with the addressof fiddling done by
1047 movtf and friends. */
1048#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
1049 ((MODE) == TFmode && (((CLASS1) == GR_REGS && (CLASS2) == FR_REGS) \
1050 || ((CLASS1) == FR_REGS && (CLASS2) == GR_REGS)))
1051#endif
c65ebc55
JW
1052
1053/* A C expression for the maximum number of consecutive registers of
1054 class CLASS needed to hold a value of mode MODE.
1055 This is closely related to the macro `HARD_REGNO_NREGS'. */
1056
1057#define CLASS_MAX_NREGS(CLASS, MODE) \
f2f90c63 1058 ((MODE) == BImode && (CLASS) == PR_REGS ? 2 \
3f622353 1059 : ((CLASS) == FR_REGS && (MODE) == TFmode) ? 1 \
c65ebc55
JW
1060 : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
1061
02188693
RH
1062/* If defined, gives a class of registers that cannot be used as the
1063 operand of a SUBREG that changes the mode of the object illegally. */
1064
1065#define CLASS_CANNOT_CHANGE_MODE FR_REGS
1066
46146529
JW
1067/* Defines illegal mode changes for CLASS_CANNOT_CHANGE_MODE.
1068 In FP regs, we can't change FP values to integer values and vice
1069 versa, but we can change e.g. DImode to SImode. */
02188693 1070
46146529
JW
1071#define CLASS_CANNOT_CHANGE_MODE_P(FROM,TO) \
1072 (GET_MODE_CLASS (FROM) != GET_MODE_CLASS (TO))
02188693 1073
97e242b0
RH
1074/* A C expression that defines the machine-dependent operand constraint
1075 letters (`I', `J', `K', .. 'P') that specify particular ranges of
1076 integer values. */
c65ebc55
JW
1077
1078/* 14 bit signed immediate for arithmetic instructions. */
1079#define CONST_OK_FOR_I(VALUE) \
1080 ((unsigned HOST_WIDE_INT)(VALUE) + 0x2000 < 0x4000)
1081/* 22 bit signed immediate for arith instructions with r0/r1/r2/r3 source. */
1082#define CONST_OK_FOR_J(VALUE) \
1083 ((unsigned HOST_WIDE_INT)(VALUE) + 0x200000 < 0x400000)
1084/* 8 bit signed immediate for logical instructions. */
1085#define CONST_OK_FOR_K(VALUE) ((unsigned HOST_WIDE_INT)(VALUE) + 0x80 < 0x100)
1086/* 8 bit adjusted signed immediate for compare pseudo-ops. */
1087#define CONST_OK_FOR_L(VALUE) ((unsigned HOST_WIDE_INT)(VALUE) + 0x7F < 0x100)
1088/* 6 bit unsigned immediate for shift counts. */
1089#define CONST_OK_FOR_M(VALUE) ((unsigned HOST_WIDE_INT)(VALUE) < 0x40)
1090/* 9 bit signed immediate for load/store post-increments. */
c65ebc55
JW
1091#define CONST_OK_FOR_N(VALUE) ((unsigned HOST_WIDE_INT)(VALUE) + 0x100 < 0x200)
1092/* 0 for r0. Used by Linux kernel, do not change. */
1093#define CONST_OK_FOR_O(VALUE) ((VALUE) == 0)
1094/* 0 or -1 for dep instruction. */
1095#define CONST_OK_FOR_P(VALUE) ((VALUE) == 0 || (VALUE) == -1)
1096
1097#define CONST_OK_FOR_LETTER_P(VALUE, C) \
1098((C) == 'I' ? CONST_OK_FOR_I (VALUE) \
1099 : (C) == 'J' ? CONST_OK_FOR_J (VALUE) \
1100 : (C) == 'K' ? CONST_OK_FOR_K (VALUE) \
1101 : (C) == 'L' ? CONST_OK_FOR_L (VALUE) \
1102 : (C) == 'M' ? CONST_OK_FOR_M (VALUE) \
1103 : (C) == 'N' ? CONST_OK_FOR_N (VALUE) \
1104 : (C) == 'O' ? CONST_OK_FOR_O (VALUE) \
1105 : (C) == 'P' ? CONST_OK_FOR_P (VALUE) \
1106 : 0)
1107
1108/* A C expression that defines the machine-dependent operand constraint letters
1109 (`G', `H') that specify particular ranges of `const_double' values. */
1110
1111/* 0.0 and 1.0 for fr0 and fr1. */
1112#define CONST_DOUBLE_OK_FOR_G(VALUE) \
1113 ((VALUE) == CONST0_RTX (GET_MODE (VALUE)) \
1114 || (VALUE) == CONST1_RTX (GET_MODE (VALUE)))
1115
1116#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
1117 ((C) == 'G' ? CONST_DOUBLE_OK_FOR_G (VALUE) : 0)
1118
1119/* A C expression that defines the optional machine-dependent constraint
1120 letters (`Q', `R', `S', `T', `U') that can be used to segregate specific
1121 types of operands, usually memory references, for the target machine. */
3b572406 1122
041f25e6 1123/* Non-volatile memory for FP_REG loads/stores. */
3b572406
RH
1124#define CONSTRAINT_OK_FOR_Q(VALUE) \
1125 (memory_operand((VALUE), VOIDmode) && ! MEM_VOLATILE_P (VALUE))
041f25e6
RH
1126/* 1..4 for shladd arguments. */
1127#define CONSTRAINT_OK_FOR_R(VALUE) \
1128 (GET_CODE (VALUE) == CONST_INT && INTVAL (VALUE) >= 1 && INTVAL (VALUE) <= 4)
0551c32d
RH
1129/* Non-post-inc memory for asms and other unsavory creatures. */
1130#define CONSTRAINT_OK_FOR_S(VALUE) \
1131 (GET_CODE (VALUE) == MEM \
1132 && GET_RTX_CLASS (GET_CODE (XEXP ((VALUE), 0))) != 'a' \
1133 && (reload_in_progress || memory_operand ((VALUE), VOIDmode)))
3b572406
RH
1134
1135#define EXTRA_CONSTRAINT(VALUE, C) \
041f25e6
RH
1136 ((C) == 'Q' ? CONSTRAINT_OK_FOR_Q (VALUE) \
1137 : (C) == 'R' ? CONSTRAINT_OK_FOR_R (VALUE) \
0551c32d 1138 : (C) == 'S' ? CONSTRAINT_OK_FOR_S (VALUE) \
041f25e6 1139 : 0)
c65ebc55
JW
1140\f
1141/* Basic Stack Layout */
1142
1143/* Define this macro if pushing a word onto the stack moves the stack pointer
1144 to a smaller address. */
1145#define STACK_GROWS_DOWNWARD 1
1146
1147/* Define this macro if the addresses of local variable slots are at negative
1148 offsets from the frame pointer. */
97e242b0
RH
1149/* #define FRAME_GROWS_DOWNWARD */
1150
1151/* Offset from the frame pointer to the first local variable slot to
1152 be allocated. */
1153#define STARTING_FRAME_OFFSET 0
c65ebc55
JW
1154
1155/* Offset from the stack pointer register to the first location at which
1156 outgoing arguments are placed. If not specified, the default value of zero
1157 is used. This is the proper value for most machines. */
1158/* IA64 has a 16 byte scratch area that is at the bottom of the stack. */
1159#define STACK_POINTER_OFFSET 16
1160
1161/* Offset from the argument pointer register to the first argument's address.
1162 On some machines it may depend on the data type of the function. */
1163#define FIRST_PARM_OFFSET(FUNDECL) 0
1164
1165/* A C expression whose value is RTL representing the value of the return
1166 address for the frame COUNT steps up from the current frame, after the
1167 prologue. */
1168
1169/* ??? Frames other than zero would likely require interpreting the frame
1170 unwind info, so we don't try to support them. We would also need to define
1171 DYNAMIC_CHAIN_ADDRESS and SETUP_FRAME_ADDRESS (for the reg stack flush). */
1172
46327bc5
RH
1173#define RETURN_ADDR_RTX(COUNT, FRAME) \
1174 ((COUNT) == 0 ? return_address_pointer_rtx : const0_rtx)
c65ebc55
JW
1175
1176/* A C expression whose value is RTL representing the location of the incoming
1177 return address at the beginning of any function, before the prologue. This
1178 RTL is either a `REG', indicating that the return value is saved in `REG',
1179 or a `MEM' representing a location in the stack. This enables DWARF2
1180 unwind info for C++ EH. */
1181#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (VOIDmode, BR_REG (0))
13da91fd 1182
c65ebc55
JW
1183/* ??? This is not defined because of three problems.
1184 1) dwarf2out.c assumes that DWARF_FRAME_RETURN_COLUMN fits in one byte.
1185 The default value is FIRST_PSEUDO_REGISTER which doesn't. This can be
1186 worked around by setting PC_REGNUM to FR_REG (0) which is an otherwise
1187 unused register number.
1188 2) dwarf2out_frame_debug core dumps while processing prologue insns. We
1189 need to refine which insns have RTX_FRAME_RELATED_P set and which don't.
1190 3) It isn't possible to turn off EH frame info by defining DWARF2_UNIND_INFO
1191 to zero, despite what the documentation implies, because it is tested in
1192 a few places with #ifdef instead of #if. */
1193#undef INCOMING_RETURN_ADDR_RTX
1194
1195/* A C expression whose value is an integer giving the offset, in bytes, from
1196 the value of the stack pointer register to the top of the stack frame at the
1197 beginning of any function, before the prologue. The top of the frame is
1198 defined to be the value of the stack pointer in the previous frame, just
1199 before the call instruction. */
1200#define INCOMING_FRAME_SP_OFFSET 0
1201
1202\f
1203/* Register That Address the Stack Frame. */
1204
1205/* The register number of the stack pointer register, which must also be a
1206 fixed register according to `FIXED_REGISTERS'. On most machines, the
1207 hardware determines which register this is. */
1208
1209#define STACK_POINTER_REGNUM 12
1210
1211/* The register number of the frame pointer register, which is used to access
1212 automatic variables in the stack frame. On some machines, the hardware
1213 determines which register this is. On other machines, you can choose any
1214 register you wish for this purpose. */
1215
1216#define FRAME_POINTER_REGNUM 328
1217
97e242b0
RH
1218/* Base register for access to local variables of the function. */
1219#define HARD_FRAME_POINTER_REGNUM LOC_REG (79)
c65ebc55
JW
1220
1221/* The register number of the arg pointer register, which is used to access the
1222 function's argument list. */
1223/* r0 won't otherwise be used, so put the always eliminated argument pointer
1224 in it. */
1225#define ARG_POINTER_REGNUM R_GR(0)
1226
97e242b0
RH
1227/* The register number for the return address register. For IA-64, this
1228 is not actually a pointer as the name suggests, but that's a name that
1229 gen_rtx_REG already takes care to keep unique. We modify
1230 return_address_pointer_rtx in ia64_expand_prologue to reference the
1231 final output regnum. */
46327bc5 1232#define RETURN_ADDRESS_POINTER_REGNUM 329
c65ebc55
JW
1233
1234/* Register numbers used for passing a function's static chain pointer. */
97e242b0 1235/* ??? The ABI sez the static chain should be passed as a normal parameter. */
c65ebc55 1236#define STATIC_CHAIN_REGNUM 15
c65ebc55
JW
1237\f
1238/* Eliminating the Frame Pointer and the Arg Pointer */
1239
1240/* A C expression which is nonzero if a function must have and use a frame
1241 pointer. This expression is evaluated in the reload pass. If its value is
1242 nonzero the function will have a frame pointer. */
c65ebc55
JW
1243#define FRAME_POINTER_REQUIRED 0
1244
97e242b0
RH
1245/* Show we can debug even without a frame pointer. */
1246#define CAN_DEBUG_WITHOUT_FP
1247
c65ebc55
JW
1248/* If defined, this macro specifies a table of register pairs used to eliminate
1249 unneeded registers that point into the stack frame. */
1250
1251#define ELIMINABLE_REGS \
1252{ \
1253 {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
97e242b0 1254 {ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
46327bc5 1255 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
97e242b0
RH
1256 {FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
1257 {RETURN_ADDRESS_POINTER_REGNUM, BR_REG (0)}, \
c65ebc55
JW
1258}
1259
1260/* A C expression that returns non-zero if the compiler is allowed to try to
97e242b0
RH
1261 replace register number FROM with register number TO. The frame pointer
1262 is automatically handled. */
c65ebc55 1263
46327bc5
RH
1264#define CAN_ELIMINATE(FROM, TO) \
1265 (TO == BR_REG (0) ? current_function_is_leaf : 1)
c65ebc55 1266
97e242b0
RH
1267/* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It
1268 specifies the initial difference between the specified pair of
1269 registers. This macro must be defined if `ELIMINABLE_REGS' is
1270 defined. */
1271#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
1272 ((OFFSET) = ia64_initial_elimination_offset ((FROM), (TO)))
c65ebc55
JW
1273\f
1274/* Passing Function Arguments on the Stack */
1275
1276/* Define this macro if an argument declared in a prototype as an integral type
1277 smaller than `int' should actually be passed as an `int'. In addition to
1278 avoiding errors in certain cases of mismatch, it also makes for better code
1279 on certain machines. */
1280/* ??? Investigate. */
1281/* #define PROMOTE_PROTOTYPES */
1282
1283/* If defined, the maximum amount of space required for outgoing arguments will
1284 be computed and placed into the variable
1285 `current_function_outgoing_args_size'. */
1286
f73ad30e 1287#define ACCUMULATE_OUTGOING_ARGS 1
c65ebc55
JW
1288
1289/* A C expression that should indicate the number of bytes of its own arguments
1290 that a function pops on returning, or 0 if the function pops no arguments
1291 and the caller must therefore pop them all after the function returns. */
1292
1293#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0
1294
1295\f
1296/* Function Arguments in Registers */
1297
1298#define MAX_ARGUMENT_SLOTS 8
1299#define MAX_INT_RETURN_SLOTS 4
1300#define GR_ARG_FIRST IN_REG (0)
1301#define GR_RET_FIRST GR_REG (8)
1302#define GR_RET_LAST GR_REG (11)
1303#define FR_ARG_FIRST FR_REG (8)
1304#define FR_RET_FIRST FR_REG (8)
1305#define FR_RET_LAST FR_REG (15)
1306#define AR_ARG_FIRST OUT_REG (0)
1307
1308/* A C expression that controls whether a function argument is passed in a
1309 register, and which register. */
1310
1311#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
1312 ia64_function_arg (&CUM, MODE, TYPE, NAMED, 0)
1313
1314/* Define this macro if the target machine has "register windows", so that the
1315 register in which a function sees an arguments is not necessarily the same
1316 as the one in which the caller passed the argument. */
1317
1318#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
1319 ia64_function_arg (&CUM, MODE, TYPE, NAMED, 1)
1320
1321/* A C expression for the number of words, at the beginning of an argument,
1322 must be put in registers. The value must be zero for arguments that are
1323 passed entirely in registers or that are entirely pushed on the stack. */
1324
1325#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
1326 ia64_function_arg_partial_nregs (&CUM, MODE, TYPE, NAMED)
1327
1328/* A C expression that indicates when an argument must be passed by reference.
1329 If nonzero for an argument, a copy of that argument is made in memory and a
1330 pointer to the argument is passed instead of the argument itself. The
1331 pointer is passed in whatever way is appropriate for passing a pointer to
1332 that type. */
1333
1334#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) 0
1335
1336/* A C type for declaring a variable that is used as the first argument of
1337 `FUNCTION_ARG' and other related values. For some target machines, the type
1338 `int' suffices and can hold the number of bytes of argument so far. */
1339
1340typedef struct ia64_args
1341{
1342 int words; /* # words of arguments so far */
1343 int fp_regs; /* # FR registers used so far */
1344 int prototype; /* whether function prototyped */
1345} CUMULATIVE_ARGS;
1346
1347/* A C statement (sans semicolon) for initializing the variable CUM for the
1348 state at the beginning of the argument list. */
1349
1350#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
1351do { \
1352 (CUM).words = 0; \
1353 (CUM).fp_regs = 0; \
1354 (CUM).prototype = ((FNTYPE) && TYPE_ARG_TYPES (FNTYPE)) || (LIBNAME); \
1355} while (0)
1356
1357/* Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of finding the
1358 arguments for the function being compiled. If this macro is undefined,
1359 `INIT_CUMULATIVE_ARGS' is used instead. */
1360
1361/* We set prototype to true so that we never try to return a PARALLEL from
1362 function_arg. */
1363#define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \
1364do { \
1365 (CUM).words = 0; \
1366 (CUM).fp_regs = 0; \
1367 (CUM).prototype = 1; \
1368} while (0)
1369
1370/* A C statement (sans semicolon) to update the summarizer variable CUM to
1371 advance past an argument in the argument list. The values MODE, TYPE and
1372 NAMED describe that argument. Once this is done, the variable CUM is
1373 suitable for analyzing the *following* argument with `FUNCTION_ARG'. */
1374
1375#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
1376 ia64_function_arg_advance (&CUM, MODE, TYPE, NAMED)
1377
1378/* If defined, a C expression that gives the alignment boundary, in bits, of an
1379 argument with the specified mode and type. */
1380
1381/* Arguments larger than 64 bits require 128 bit alignment. */
1382
1383#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
1384 (((((MODE) == BLKmode ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) \
1385 + UNITS_PER_WORD - 1) / UNITS_PER_WORD) > 1 ? 128 : PARM_BOUNDARY)
1386
1387/* A C expression that is nonzero if REGNO is the number of a hard register in
1388 which function arguments are sometimes passed. This does *not* include
1389 implicit arguments such as the static chain and the structure-value address.
1390 On many machines, no registers can be used for this purpose since all
1391 function arguments are pushed on the stack. */
1392#define FUNCTION_ARG_REGNO_P(REGNO) \
1393(((REGNO) >= GR_ARG_FIRST && (REGNO) < (GR_ARG_FIRST + MAX_ARGUMENT_SLOTS)) \
1394 || ((REGNO) >= FR_ARG_FIRST && (REGNO) < (FR_ARG_FIRST + MAX_ARGUMENT_SLOTS)))
1395\f
1396/* Implement `va_start' for varargs and stdarg. */
1397#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
1398 ia64_va_start (stdarg, valist, nextarg)
1399
1400/* Implement `va_arg'. */
1401#define EXPAND_BUILTIN_VA_ARG(valist, type) \
1402 ia64_va_arg (valist, type)
1403\f
1404/* How Scalar Function Values are Returned */
1405
1406/* A C expression to create an RTX representing the place where a function
1407 returns a value of data type VALTYPE. */
1408
1409#define FUNCTION_VALUE(VALTYPE, FUNC) \
1410 ia64_function_value (VALTYPE, FUNC)
1411
1412/* A C expression to create an RTX representing the place where a library
1413 function returns a value of mode MODE. */
1414
1415#define LIBCALL_VALUE(MODE) \
1416 gen_rtx_REG (MODE, \
1417 ((GET_MODE_CLASS (MODE) == MODE_FLOAT \
1418 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) \
1419 ? FR_RET_FIRST : GR_RET_FIRST))
1420
1421/* A C expression that is nonzero if REGNO is the number of a hard register in
1422 which the values of called function may come back. */
1423
1424#define FUNCTION_VALUE_REGNO_P(REGNO) \
1425 (((REGNO) >= GR_RET_FIRST && (REGNO) <= GR_RET_LAST) \
1426 || ((REGNO) >= FR_RET_FIRST && (REGNO) <= FR_RET_LAST))
1427
1428\f
1429/* How Large Values are Returned */
1430
1431/* A nonzero value says to return the function value in memory, just as large
1432 structures are always returned. */
1433
1434#define RETURN_IN_MEMORY(TYPE) \
1435 ia64_return_in_memory (TYPE)
1436
1437/* If you define this macro to be 0, then the conventions used for structure
1438 and union return values are decided by the `RETURN_IN_MEMORY' macro. */
1439
1440#define DEFAULT_PCC_STRUCT_RETURN 0
1441
1442/* If the structure value address is passed in a register, then
1443 `STRUCT_VALUE_REGNUM' should be the number of that register. */
1444
1445#define STRUCT_VALUE_REGNUM GR_REG (8)
1446
1447\f
1448/* Caller-Saves Register Allocation */
1449
1450/* A C expression to determine whether it is worthwhile to consider placing a
1451 pseudo-register in a call-clobbered hard register and saving and restoring
1452 it around each function call. The expression should be 1 when this is worth
1453 doing, and 0 otherwise.
1454
1455 If you don't define this macro, a default is used which is good on most
1456 machines: `4 * CALLS < REFS'. */
1457/* ??? Investigate. */
1458/* #define CALLER_SAVE_PROFITABLE(REFS, CALLS) */
1459
1460\f
1461/* Function Entry and Exit */
1462
1463/* A C compound statement that outputs the assembler code for entry to a
1464 function. */
1465
1466#define FUNCTION_PROLOGUE(FILE, SIZE) \
1467 ia64_function_prologue (FILE, SIZE)
1468
0186257f
JW
1469/* This macro notes the end of the prologue. */
1470
1471#define FUNCTION_END_PROLOGUE(FILE) ia64_output_end_prologue (FILE)
1472
c65ebc55
JW
1473/* Define this macro as a C expression that is nonzero if the return
1474 instruction or the function epilogue ignores the value of the stack pointer;
1475 in other words, if it is safe to delete an instruction to adjust the stack
1476 pointer before a return from the function. */
1477
1478#define EXIT_IGNORE_STACK 1
1479
1480/* Define this macro as a C expression that is nonzero for registers
1481 used by the epilogue or the `return' pattern. */
1482
1483#define EPILOGUE_USES(REGNO) ia64_epilogue_uses (REGNO)
1484
1485/* A C compound statement that outputs the assembler code for exit from a
1486 function. */
1487
1488#define FUNCTION_EPILOGUE(FILE, SIZE) \
1489 ia64_function_epilogue (FILE, SIZE)
1490
3b572406
RH
1491/* Output at beginning of assembler file. */
1492
1493#define ASM_FILE_START(FILE) \
ca3920ad 1494 emit_safe_across_calls (FILE)
3b572406 1495
c65ebc55
JW
1496/* A C compound statement that outputs the assembler code for a thunk function,
1497 used to implement C++ virtual function calls with multiple inheritance. */
1498
c65ebc55
JW
1499#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
1500do { \
591eb4ba
JW
1501 if (CONST_OK_FOR_I (DELTA)) \
1502 fprintf (FILE, "\tadds r32 = %d, r32\n", (DELTA)); \
1503 else \
1504 { \
1505 if (CONST_OK_FOR_J (DELTA)) \
1506 fprintf (FILE, "\taddl r2 = %d, r0\n", (DELTA)); \
1507 else \
1508 fprintf (FILE, "\tmovl r2 = %d\n", (DELTA)); \
1509 fprintf (FILE, "\t;;\n"); \
1510 fprintf (FILE, "\tadd r32 = r2, r32\n"); \
1511 } \
c65ebc55
JW
1512 fprintf (FILE, "\tbr "); \
1513 assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
1514 fprintf (FILE, "\n"); \
1515} while (0)
1516
1517\f
1518/* Generating Code for Profiling. */
1519
1520/* A C statement or compound statement to output to FILE some assembler code to
1521 call the profiling subroutine `mcount'. */
1522
1523/* ??? Unclear if this will actually work. No way to test this currently. */
1524
1525#define FUNCTION_PROFILER(FILE, LABELNO) \
1526do { \
1527 char buf[20]; \
1528 ASM_GENERATE_INTERNAL_LABEL (buf, "LP", LABELNO); \
1529 fputs ("\taddl r16 = @ltoff(", FILE); \
1530 assemble_name (FILE, buf); \
1531 fputs ("), gp\n", FILE); \
1532 fputs ("\tmov r17 = r1;;\n", FILE); \
1533 fputs ("\tld8 out0 = [r16]\n", FILE); \
1534 fputs ("\tmov r18 = b0\n", FILE); \
1535 fputs ("\tbr.call.sptk.many rp = mcount;;\n", FILE); \
1536 fputs ("\tmov b0 = r18\n", FILE); \
1537 fputs ("\tmov r1 = r17;;\n", FILE); \
1538} while (0)
1539
1540/* A C statement or compound statement to output to FILE some assembler code to
1541 initialize basic-block profiling for the current object module. */
1542
1543/* ??? Unclear if this will actually work. No way to test this currently. */
1544
1545#define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \
1546do { \
1547 int labelno = LABELNO; \
1548 switch (profile_block_flag) \
1549 { \
1550 case 2: \
1551 fputs ("\taddl r16 = @ltoff(LPBX0), gp\n", FILE); \
1552 fprintf (FILE, "\tmov out1 = %d;;\n", labelno); \
1553 fputs ("\tld8 out0 = [r16]\n", FILE); \
1554 fputs ("\tmov r17 = r1\n", FILE); \
1555 fputs ("\tmov r18 = b0\n", FILE); \
1556 fputs ("\tbr.call.sptk.many rp = __bb_init_trace_func;;\n", FILE);\
1557 fputs ("\tmov r1 = r17\n", FILE); \
1558 fputs ("\tmov b0 = r18;;\n", FILE); \
1559 break; \
1560 default: \
1561 fputs ("\taddl r16 = @ltoff(LPBX0), gp;;\n", FILE); \
1562 fputs ("\tld8 out0 = [r16];;\n", FILE); \
1563 fputs ("\tld8 r17 = [out0];;\n", FILE); \
1564 fputs ("\tcmp.eq p6, p0 = r0, r17;;\n", FILE); \
1565 fputs ("(p6)\tmov r16 = r1\n", FILE); \
1566 fputs ("(p6)\tmov r17 = b0\n", FILE); \
1567 fputs ("(p6)\tbr.call.sptk.many rp = __bb_init_func;;\n", FILE); \
1568 fputs ("(p6)\tmov r1 = r16\n", FILE); \
1569 fputs ("(p6)\tmov b0 = r17;;\n", FILE); \
1570 break; \
1571 } \
1572} while (0)
1573
1574/* A C statement or compound statement to output to FILE some assembler code to
1575 increment the count associated with the basic block number BLOCKNO. */
1576
1577/* ??? This can't work unless we mark some registers as fixed, so that we
1578 can use them as temporaries in this macro. We need two registers for -a
1579 profiling and 4 registers for -ax profiling. */
1580
1581#define BLOCK_PROFILER(FILE, BLOCKNO) \
1582do { \
1583 int blockn = BLOCKNO; \
1584 switch (profile_block_flag) \
1585 { \
1586 case 2: \
1587 fputs ("\taddl r2 = @ltoff(__bb), gp\n", FILE); \
1588 fputs ("\taddl r3 = @ltoff(LPBX0), gp;;\n", FILE); \
1589 fprintf (FILE, "\tmov r9 = %d\n", blockn); \
1590 fputs ("\tld8 r2 = [r2]\n", FILE); \
1591 fputs ("\tld8 r3 = [r3];;\n", FILE); \
1592 fputs ("\tadd r8 = 8, r2\n", FILE); \
1593 fputs ("\tst8 [r2] = r9;;\n", FILE); \
1594 fputs ("\tst8 [r8] = r3\n", FILE); \
1595 fputs ("\tbr.call.sptk.many rp = __bb_trace_func\n", FILE); \
1596 break; \
1597 \
1598 default: \
1599 fputs ("\taddl r2 = @ltoff(LPBX2), gp;;\n", FILE); \
1600 fputs ("\tld8 r2 = [r2];;\n", FILE); \
1601 fprintf (FILE, "\taddl r2 = %d, r2;;\n", 8 * blockn); \
1602 fputs ("\tld8 r3 = [r2];;\n", FILE); \
1603 fputs ("\tadd r3 = 1, r3;;\n", FILE); \
1604 fputs ("\tst8 [r2] = r3;;\n", FILE); \
1605 break; \
1606 } \
1607} while(0)
1608
1609/* A C statement or compound statement to output to FILE assembler
1610 code to call function `__bb_trace_ret'. */
1611
1612/* ??? Unclear if this will actually work. No way to test this currently. */
1613
1614/* ??? This needs to be emitted into the epilogue. Perhaps rewrite to emit
1615 rtl and call from ia64_expand_epilogue? */
1616
1617#define FUNCTION_BLOCK_PROFILER_EXIT(FILE) \
1618 fputs ("\tbr.call.sptk.many rp = __bb_trace_ret\n", FILE);
1619#undef FUNCTION_BLOCK_PROFILER_EXIT
1620
1621/* A C statement or compound statement to save all registers, which may be
1622 clobbered by a function call, including condition codes. */
1623
1624/* ??? We would have to save 20 GRs, 106 FRs, 10 PRs, 2 BRs, and possibly
1625 other things. This is not practical. Perhaps leave this feature (-ax)
1626 unsupported by undefining above macros? */
1627
1628/* #define MACHINE_STATE_SAVE(ID) */
1629
1630/* A C statement or compound statement to restore all registers, including
1631 condition codes, saved by `MACHINE_STATE_SAVE'. */
1632
1633/* ??? We would have to restore 20 GRs, 106 FRs, 10 PRs, 2 BRs, and possibly
1634 other things. This is not practical. Perhaps leave this feature (-ax)
1635 unsupported by undefining above macros? */
1636
1637/* #define MACHINE_STATE_RESTORE(ID) */
1638
1639\f
1640/* Implementing the Varargs Macros. */
1641
1642/* Define this macro to store the anonymous register arguments into the stack
1643 so that all the arguments appear to have been passed consecutively on the
1644 stack. */
1645
1646#define SETUP_INCOMING_VARARGS(ARGS_SO_FAR, MODE, TYPE, PRETEND_ARGS_SIZE, SECOND_TIME) \
1647 ia64_setup_incoming_varargs (ARGS_SO_FAR, MODE, TYPE, & PRETEND_ARGS_SIZE, SECOND_TIME)
1648
1649/* Define this macro if the location where a function argument is passed
1650 depends on whether or not it is a named argument. */
1651
1652#define STRICT_ARGUMENT_NAMING 1
1653
1654\f
1655/* Trampolines for Nested Functions. */
1656
1657/* We need 32 bytes, so we can save the sp, ar.rnat, ar.bsp, and ar.pfs of
1658 the function containing a non-local goto target. */
1659
1660#define STACK_SAVEAREA_MODE(LEVEL) \
1661 ((LEVEL) == SAVE_NONLOCAL ? OImode : Pmode)
1662
1663/* Output assembler code for a block containing the constant parts of
1664 a trampoline, leaving space for the variable parts.
1665
1666 The trampoline should set the static chain pointer to value placed
97e242b0
RH
1667 into the trampoline and should branch to the specified routine.
1668 To make the normal indirect-subroutine calling convention work,
1669 the trampoline must look like a function descriptor; the first
1670 word being the target address and the second being the target's
1671 global pointer.
1672
1673 We abuse the concept of a global pointer by arranging for it
1674 to point to the data we need to load. The complete trampoline
c65ebc55
JW
1675 has the following form:
1676
97e242b0
RH
1677 +-------------------+ \
1678 TRAMP: | __ia64_trampoline | |
1679 +-------------------+ > fake function descriptor
1680 | TRAMP+16 | |
1681 +-------------------+ /
1682 | target descriptor |
1683 +-------------------+
1684 | static link |
1685 +-------------------+
c65ebc55
JW
1686*/
1687
c65ebc55
JW
1688/* A C expression for the size in bytes of the trampoline, as an integer. */
1689
97e242b0 1690#define TRAMPOLINE_SIZE 32
c65ebc55
JW
1691
1692/* Alignment required for trampolines, in bits. */
1693
97e242b0 1694#define TRAMPOLINE_ALIGNMENT 64
c65ebc55
JW
1695
1696/* A C statement to initialize the variable parts of a trampoline. */
1697
1698#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN) \
97e242b0 1699 ia64_initialize_trampoline((ADDR), (FNADDR), (STATIC_CHAIN))
c65ebc55
JW
1700\f
1701/* Implicit Calls to Library Routines */
1702
1703/* ??? The ia64 linux kernel requires that we use the standard names for
1704 divide and modulo routines. However, if we aren't careful, lib1funcs.asm
1705 will be overridden by libgcc2.c. We avoid this by using different names
1706 for lib1funcs.asm modules, e.g. __divdi3 vs _divdi3. Since lib1funcs.asm
1707 goes into libgcc.a first, the linker will find it first. */
1708
c65ebc55
JW
1709/* Define this macro if GNU CC should generate calls to the System V (and ANSI
1710 C) library functions `memcpy' and `memset' rather than the BSD functions
1711 `bcopy' and `bzero'. */
1712
1713#define TARGET_MEM_FUNCTIONS
1714
1715\f
1716/* Addressing Modes */
1717
1718/* Define this macro if the machine supports post-increment addressing. */
1719
1720#define HAVE_POST_INCREMENT 1
1721#define HAVE_POST_DECREMENT 1
4b983fdc
RH
1722#define HAVE_POST_MODIFY_DISP 1
1723#define HAVE_POST_MODIFY_REG 1
c65ebc55
JW
1724
1725/* A C expression that is 1 if the RTX X is a constant which is a valid
1726 address. */
1727
1728#define CONSTANT_ADDRESS_P(X) 0
1729
1730/* The max number of registers that can appear in a valid memory address. */
1731
4b983fdc 1732#define MAX_REGS_PER_ADDRESS 2
c65ebc55
JW
1733
1734/* A C compound statement with a conditional `goto LABEL;' executed if X (an
1735 RTX) is a legitimate memory address on the target machine for a memory
1736 operand of mode MODE. */
1737
4b983fdc
RH
1738#define LEGITIMATE_ADDRESS_REG(X) \
1739 ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
1740 || (GET_CODE (X) == SUBREG && GET_CODE (XEXP (X, 0)) == REG \
1741 && REG_OK_FOR_BASE_P (XEXP (X, 0))))
1742
1743#define LEGITIMATE_ADDRESS_DISP(R, X) \
1744 (GET_CODE (X) == PLUS \
1745 && rtx_equal_p (R, XEXP (X, 0)) \
1746 && (GET_CODE (XEXP (X, 1)) == REG \
1747 || (GET_CODE (XEXP (X, 1)) == CONST_INT \
5527bf14
RH
1748 && INTVAL (XEXP (X, 1)) >= -256 \
1749 && INTVAL (XEXP (X, 1)) < 256)))
c65ebc55
JW
1750
1751#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \
1752do { \
4b983fdc 1753 if (LEGITIMATE_ADDRESS_REG (X)) \
c65ebc55 1754 goto LABEL; \
4b983fdc
RH
1755 else if ((GET_CODE (X) == POST_INC || GET_CODE (X) == POST_DEC) \
1756 && LEGITIMATE_ADDRESS_REG (XEXP (X, 0)) \
1757 && XEXP (X, 0) != arg_pointer_rtx) \
1758 goto LABEL; \
1759 else if (GET_CODE (X) == POST_MODIFY \
1760 && LEGITIMATE_ADDRESS_REG (XEXP (X, 0)) \
1761 && XEXP (X, 0) != arg_pointer_rtx \
1762 && LEGITIMATE_ADDRESS_DISP (XEXP (X, 0), XEXP (X, 1))) \
c65ebc55 1763 goto LABEL; \
c65ebc55
JW
1764} while (0)
1765
1766/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
1767 use as a base register. */
1768
1769#ifdef REG_OK_STRICT
1770#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1771#else
1772#define REG_OK_FOR_BASE_P(X) \
1773 (GENERAL_REGNO_P (REGNO (X)) || (REGNO (X) >= FIRST_PSEUDO_REGISTER))
1774#endif
1775
1776/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
1777 use as an index register. */
1778
1779#define REG_OK_FOR_INDEX_P(X) 0
1780
1781/* A C compound statement that attempts to replace X with a valid memory
1782 address for an operand of mode MODE.
1783
1784 This must be present, but there is nothing useful to be done here. */
1785
1786#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)
1787
1788/* A C statement or compound statement with a conditional `goto LABEL;'
1789 executed if memory address X (an RTX) can have different meanings depending
1790 on the machine mode of the memory reference it is used for or if the address
1791 is valid for some modes but not others. */
1792
3f622353 1793#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
c65ebc55
JW
1794 if (GET_CODE (ADDR) == POST_DEC || GET_CODE (ADDR) == POST_INC) \
1795 goto LABEL;
1796
1797/* A C expression that is nonzero if X is a legitimate constant for an
1798 immediate operand on the target machine. */
1799
1800#define LEGITIMATE_CONSTANT_P(X) \
1801 (GET_CODE (X) != CONST_DOUBLE || GET_MODE (X) == VOIDmode \
1802 || GET_MODE (X) == DImode || CONST_DOUBLE_OK_FOR_G (X)) \
1803
1804\f
1805/* Condition Code Status */
1806
1807/* One some machines not all possible comparisons are defined, but you can
1808 convert an invalid comparison into a valid one. */
1809/* ??? Investigate. See the alpha definition. */
1810/* #define CANONICALIZE_COMPARISON(CODE, OP0, OP1) */
1811
1812\f
1813/* Describing Relative Costs of Operations */
1814
1815/* A part of a C `switch' statement that describes the relative costs of
1816 constant RTL expressions. */
1817
1818/* ??? This is incomplete. */
1819
f2f90c63 1820#define CONST_COSTS(X, CODE, OUTER_CODE) \
c65ebc55
JW
1821 case CONST_INT: \
1822 if ((X) == const0_rtx) \
1823 return 0; \
f2f90c63
RH
1824 switch (OUTER_CODE) \
1825 { \
1826 case SET: \
1827 return CONST_OK_FOR_J (INTVAL (X)) ? 0 : COSTS_N_INSNS (1); \
1828 case PLUS: \
1829 if (CONST_OK_FOR_I (INTVAL (X))) \
1830 return 0; \
1831 if (CONST_OK_FOR_J (INTVAL (X))) \
1832 return 1; \
1833 return COSTS_N_INSNS (1); \
1834 default: \
1835 if (CONST_OK_FOR_K (INTVAL (X)) || CONST_OK_FOR_L (INTVAL (X))) \
1836 return 0; \
1837 return COSTS_N_INSNS (1); \
1838 } \
c65ebc55 1839 case CONST_DOUBLE: \
f2f90c63 1840 return COSTS_N_INSNS (1); \
c65ebc55
JW
1841 case CONST: \
1842 case SYMBOL_REF: \
1843 case LABEL_REF: \
f2f90c63 1844 return COSTS_N_INSNS (2);
c65ebc55
JW
1845
1846/* Like `CONST_COSTS' but applies to nonconstant RTL expressions. */
1847
f2f90c63
RH
1848#define RTX_COSTS(X, CODE, OUTER_CODE) \
1849 case MULT: \
1850 /* For multiplies wider than HImode, we have to go to the FPU, \
1851 which normally involves copies. Plus there's the latency \
1852 of the multiply itself. */ \
1853 if (GET_MODE_SIZE (GET_MODE (X)) > 2) \
1854 return COSTS_N_INSNS (4); \
1855 return COSTS_N_INSNS (1); \
c65ebc55
JW
1856 case DIV: \
1857 case UDIV: \
1858 case MOD: \
1859 case UMOD: \
f2f90c63
RH
1860 /* We make divide expensive, so that divide-by-constant will be \
1861 optimized to a multiply. */ \
1862 return COSTS_N_INSNS (60);
c65ebc55
JW
1863
1864/* An expression giving the cost of an addressing mode that contains ADDRESS.
1865 If not defined, the cost is computed from the ADDRESS expression and the
1866 `CONST_COSTS' values. */
1867
1868#define ADDRESS_COST(ADDRESS) 0
1869
1870/* A C expression for the cost of moving data from a register in class FROM to
1871 one in class TO. */
1872
1873#define REGISTER_MOVE_COST(FROM, TO) \
5527bf14 1874 ia64_register_move_cost((FROM), (TO))
c65ebc55 1875
f2f90c63
RH
1876/* A C expression for the cost of moving data of mode M between a
1877 register and memory. */
1878#define MEMORY_MOVE_COST(MODE,CLASS,IN) \
1879 ((CLASS) == GENERAL_REGS || (CLASS) == FR_REGS ? 4 : 10)
c65ebc55
JW
1880
1881/* A C expression for the cost of a branch instruction. A value of 1 is the
e5bde68a
RH
1882 default; other values are interpreted relative to that. Used by the
1883 if-conversion code as max instruction count. */
1884/* ??? This requires investigation. The primary effect might be how
1885 many additional insn groups we run into, vs how good the dynamic
1886 branch predictor is. */
1887
1888#define BRANCH_COST 6
c65ebc55
JW
1889
1890/* Define this macro as a C expression which is nonzero if accessing less than
1891 a word of memory (i.e. a `char' or a `short') is no faster than accessing a
1892 word of memory. */
1893
1894#define SLOW_BYTE_ACCESS 1
1895
1896/* Define this macro if it is as good or better to call a constant function
1897 address than to call an address kept in a register.
1898
1899 Indirect function calls are more expensive that direct function calls, so
1900 don't cse function addresses. */
1901
1902#define NO_FUNCTION_CSE
1903
1904/* A C statement (sans semicolon) to update the integer variable COST based on
1905 the relationship between INSN that is dependent on DEP_INSN through the
1906 dependence LINK. */
1907
1908/* ??? Investigate. */
1909/* #define ADJUST_COST(INSN, LINK, DEP_INSN, COST) */
1910
1911/* A C statement (sans semicolon) to update the integer scheduling
1912 priority `INSN_PRIORITY(INSN)'. */
1913
1914/* ??? Investigate. */
1915/* #define ADJUST_PRIORITY (INSN) */
1916
1917\f
1918/* Dividing the output into sections. */
1919
1920/* A C expression whose value is a string containing the assembler operation
1921 that should precede instructions and read-only data. */
1922
de323aa1 1923#define TEXT_SECTION_ASM_OP "\t.text"
c65ebc55
JW
1924
1925/* A C expression whose value is a string containing the assembler operation to
1926 identify the following data as writable initialized data. */
1927
de323aa1 1928#define DATA_SECTION_ASM_OP "\t.data"
c65ebc55
JW
1929
1930/* If defined, a C expression whose value is a string containing the assembler
1931 operation to identify the following data as uninitialized global data. */
1932
de323aa1 1933#define BSS_SECTION_ASM_OP "\t.bss"
c65ebc55
JW
1934
1935/* Define this macro if jump tables (for `tablejump' insns) should be output in
1936 the text section, along with the assembler instructions. */
1937
1938/* ??? It is probably better for the jump tables to be in the rodata section,
1939 which is where they go by default. Unfortunately, that currently does not
1940 work, because of some problem with pcrelative relocations not getting
1941 resolved correctly. */
1942/* ??? FIXME ??? rth says that we should use @gprel to solve this problem. */
1943/* ??? If jump tables are in the text section, then we can use 4 byte
1944 entries instead of 8 byte entries. */
1945
1946#define JUMP_TABLES_IN_TEXT_SECTION 1
1947
1948/* Define this macro if references to a symbol must be treated differently
1949 depending on something about the variable or function named by the symbol
1950 (such as what section it is in). */
1951
1952#define ENCODE_SECTION_INFO(DECL) ia64_encode_section_info (DECL)
1953
32adf8e6
AH
1954/* If a variable is weakened, made one only or moved into a different
1955 section, it may be necessary to redo the section info to move the
1956 variable out of sdata. */
1957
1958#define REDO_SECTION_INFO_P(DECL) \
1959 ((TREE_CODE (DECL) == VAR_DECL) \
94c21c17
GS
1960 && (DECL_ONE_ONLY (DECL) || DECL_WEAK (DECL) || DECL_COMMON (DECL) \
1961 || DECL_SECTION_NAME (DECL) != 0))
32adf8e6 1962
c65ebc55
JW
1963#define SDATA_NAME_FLAG_CHAR '@'
1964
1965#define IA64_DEFAULT_GVALUE 8
1966
1967/* Decode SYM_NAME and store the real name part in VAR, sans the characters
1968 that encode section info. */
1969
1970#define STRIP_NAME_ENCODING(VAR, SYMBOL_NAME) \
1971 (VAR) = (SYMBOL_NAME) + ((SYMBOL_NAME)[0] == SDATA_NAME_FLAG_CHAR)
1972
1973\f
1974/* Position Independent Code. */
1975
1976/* The register number of the register used to address a table of static data
1977 addresses in memory. */
1978
1979/* ??? Should modify ia64.md to use pic_offset_table_rtx instead of
1980 gen_rtx_REG (DImode, 1). */
1981
1982/* ??? Should we set flag_pic? Probably need to define
1983 LEGITIMIZE_PIC_OPERAND_P to make that work. */
1984
1985#define PIC_OFFSET_TABLE_REGNUM GR_REG (1)
1986
1987/* Define this macro if the register defined by `PIC_OFFSET_TABLE_REGNUM' is
1988 clobbered by calls. */
1989
1990#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
1991
1992\f
1993/* The Overall Framework of an Assembler File. */
1994
1995/* A C string constant describing how to begin a comment in the target
1996 assembler language. The compiler assumes that the comment will end at the
1997 end of the line. */
1998
1999#define ASM_COMMENT_START "//"
2000
2001/* A C string constant for text to be output before each `asm' statement or
2002 group of consecutive ones. */
2003
2004/* ??? This won't work with the Intel assembler, because it does not accept
2005 # as a comment start character. However, //APP does not work in gas, so we
2006 can't use that either. Same problem for ASM_APP_OFF below. */
2007
2008#define ASM_APP_ON "#APP\n"
2009
2010/* A C string constant for text to be output after each `asm' statement or
2011 group of consecutive ones. */
2012
2013#define ASM_APP_OFF "#NO_APP\n"
2014
2015\f
2016/* Output of Data. */
2017
2018/* A C statement to output to the stdio stream STREAM an assembler instruction
3f622353 2019 to assemble a floating-point constant of `TFmode', `DFmode', `SFmode',
c65ebc55
JW
2020 respectively, whose value is VALUE. */
2021
c65ebc55
JW
2022/* ??? Must reverse the word order for big-endian code? */
2023
2024#define ASM_OUTPUT_LONG_DOUBLE(FILE, VALUE) \
2025do { \
2026 long t[3]; \
2027 REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, t); \
3f622353
RH
2028 fprintf (FILE, "\tdata4 0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx\n", \
2029 t[0] & 0xffffffff, t[1] & 0xffffffff, t[2] & 0xffffffff, 0); \
c65ebc55
JW
2030} while (0)
2031
2032/* ??? Must reverse the word order for big-endian code? */
2033
2034#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
2035do { \
2036 long t[2]; \
2037 REAL_VALUE_TO_TARGET_DOUBLE (VALUE, t); \
2038 fprintf (FILE, "\tdata8 0x%08lx%08lx\n", \
2039 t[1] & 0xffffffff, t[0] & 0xffffffff); \
2040} while (0)
2041
2042#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
2043 do { \
2044 long t; \
2045 REAL_VALUE_TO_TARGET_SINGLE (VALUE, t); \
2046 fprintf (FILE, "\tdata4 0x%lx\n", t & 0xffffffff); \
2047} while (0)
2048
2049/* A C statement to output to the stdio stream STREAM an assembler instruction
2050 to assemble an integer of 1, 2, 4, or 8 bytes, respectively, whose value
2051 is VALUE. */
2052
2053/* This is how to output an assembler line defining a `char' constant. */
2054
2055#define ASM_OUTPUT_CHAR(FILE, VALUE) \
2056do { \
f0ca81d2 2057 fprintf (FILE, "%s", ASM_BYTE_OP); \
c65ebc55
JW
2058 output_addr_const (FILE, (VALUE)); \
2059 fprintf (FILE, "\n"); \
2060} while (0)
2061
2062/* This is how to output an assembler line defining a `short' constant. */
2063
2064#define ASM_OUTPUT_SHORT(FILE, VALUE) \
2065do { \
2066 fprintf (FILE, "\tdata2\t"); \
2067 output_addr_const (FILE, (VALUE)); \
2068 fprintf (FILE, "\n"); \
2069} while (0)
2070
2071/* This is how to output an assembler line defining an `int' constant.
2072 We also handle symbol output here. */
2073
2074/* ??? For ILP32, also need to handle function addresses here. */
2075
2076#define ASM_OUTPUT_INT(FILE, VALUE) \
2077do { \
2078 fprintf (FILE, "\tdata4\t"); \
2079 output_addr_const (FILE, (VALUE)); \
2080 fprintf (FILE, "\n"); \
2081} while (0)
2082
2083/* This is how to output an assembler line defining a `long' constant.
2084 We also handle symbol output here. */
2085
2086#define ASM_OUTPUT_DOUBLE_INT(FILE, VALUE) \
2087do { \
2088 fprintf (FILE, "\tdata8\t"); \
59da9a7d 2089 if (!(TARGET_NO_PIC || TARGET_AUTO_PIC) && SYMBOL_REF_FLAG (VALUE)) \
c65ebc55
JW
2090 fprintf (FILE, "@fptr("); \
2091 output_addr_const (FILE, (VALUE)); \
59da9a7d 2092 if (!(TARGET_NO_PIC || TARGET_AUTO_PIC) && SYMBOL_REF_FLAG (VALUE)) \
c65ebc55
JW
2093 fprintf (FILE, ")"); \
2094 fprintf (FILE, "\n"); \
2095} while (0)
2096
0c96007e
AM
2097/* This is how to output an assembler line defining a `char' constant
2098 to an xdata segment. */
2099
2100#define ASM_OUTPUT_XDATA_CHAR(FILE, SECTION, VALUE) \
2101do { \
2102 fprintf (FILE, "\t.xdata1\t\"%s\", ", SECTION); \
2103 output_addr_const (FILE, (VALUE)); \
2104 fprintf (FILE, "\n"); \
2105} while (0)
2106
2107/* This is how to output an assembler line defining a `short' constant
2108 to an xdata segment. */
2109
2110#define ASM_OUTPUT_XDATA_SHORT(FILE, SECTION, VALUE) \
2111do { \
2112 fprintf (FILE, "\t.xdata2\t\"%s\", ", SECTION); \
2113 output_addr_const (FILE, (VALUE)); \
2114 fprintf (FILE, "\n"); \
2115} while (0)
2116
2117/* This is how to output an assembler line defining an `int' constant
2118 to an xdata segment. We also handle symbol output here. */
2119
2120/* ??? For ILP32, also need to handle function addresses here. */
2121
2122#define ASM_OUTPUT_XDATA_INT(FILE, SECTION, VALUE) \
2123do { \
2124 fprintf (FILE, "\t.xdata4\t\"%s\", ", SECTION); \
2125 output_addr_const (FILE, (VALUE)); \
2126 fprintf (FILE, "\n"); \
2127} while (0)
2128
2129/* This is how to output an assembler line defining a `long' constant
2130 to an xdata segment. We also handle symbol output here. */
2131
2132#define ASM_OUTPUT_XDATA_DOUBLE_INT(FILE, SECTION, VALUE) \
2133do { \
59da9a7d 2134 int need_closing_paren = 0; \
0c96007e 2135 fprintf (FILE, "\t.xdata8\t\"%s\", ", SECTION); \
59da9a7d
JW
2136 if (!(TARGET_NO_PIC || TARGET_AUTO_PIC) \
2137 && GET_CODE (VALUE) == SYMBOL_REF) \
0c96007e 2138 { \
59da9a7d
JW
2139 fprintf (FILE, SYMBOL_REF_FLAG (VALUE) ? "@fptr(" : "@segrel("); \
2140 need_closing_paren = 1; \
0c96007e 2141 } \
59da9a7d
JW
2142 output_addr_const (FILE, VALUE); \
2143 if (need_closing_paren) \
0c96007e
AM
2144 fprintf (FILE, ")"); \
2145 fprintf (FILE, "\n"); \
2146} while (0)
2147
2148
2149/* Output EH data to the unwind segment. */
2150#define ASM_OUTPUT_EH_CHAR(FILE, VALUE) \
2151 ASM_OUTPUT_XDATA_CHAR(FILE, ".IA_64.unwind_info", VALUE)
2152
2153#define ASM_OUTPUT_EH_SHORT(FILE, VALUE) \
2154 ASM_OUTPUT_XDATA_SHORT(FILE, ".IA_64.unwind_info", VALUE)
2155
2156#define ASM_OUTPUT_EH_INT(FILE, VALUE) \
2157 ASM_OUTPUT_XDATA_INT(FILE, ".IA_64.unwind_info", VALUE)
2158
2159#define ASM_OUTPUT_EH_DOUBLE_INT(FILE, VALUE) \
2160 ASM_OUTPUT_XDATA_DOUBLE_INT(FILE, ".IA_64.unwind_info", VALUE)
2161
c65ebc55
JW
2162/* A C statement to output to the stdio stream STREAM an assembler instruction
2163 to assemble a single byte containing the number VALUE. */
2164
2165#define ASM_OUTPUT_BYTE(STREAM, VALUE) \
f0ca81d2 2166 fprintf (STREAM, "%s0x%x\n", ASM_BYTE_OP, (int)(VALUE) & 0xff)
c65ebc55
JW
2167
2168/* These macros are defined as C string constant, describing the syntax in the
2169 assembler for grouping arithmetic expressions. */
2170
2171#define ASM_OPEN_PAREN "("
2172#define ASM_CLOSE_PAREN ")"
2173
2174\f
2175/* Output of Uninitialized Variables. */
2176
2177/* This is all handled by svr4.h. */
2178
2179\f
2180/* Output and Generation of Labels. */
2181
2182/* A C statement (sans semicolon) to output to the stdio stream STREAM the
2183 assembler definition of a label named NAME. */
2184
2185/* See the ASM_OUTPUT_LABELREF definition in sysv4.h for an explanation of
2186 why ia64_asm_output_label exists. */
2187
2188extern int ia64_asm_output_label;
2189#define ASM_OUTPUT_LABEL(STREAM, NAME) \
2190do { \
2191 ia64_asm_output_label = 1; \
2192 assemble_name (STREAM, NAME); \
2193 fputs (":\n", STREAM); \
2194 ia64_asm_output_label = 0; \
2195} while (0)
2196
2197/* A C statement (sans semicolon) to output to the stdio stream STREAM some
2198 commands that will make the label NAME global; that is, available for
2199 reference from other files. */
2200
2201#define ASM_GLOBALIZE_LABEL(STREAM,NAME) \
2202do { \
2203 fputs ("\t.global ", STREAM); \
2204 assemble_name (STREAM, NAME); \
2205 fputs ("\n", STREAM); \
2206} while (0)
2207
2208/* A C statement (sans semicolon) to output to the stdio stream STREAM any text
2209 necessary for declaring the name of an external symbol named NAME which is
2210 referenced in this compilation but not defined. */
2211
2212#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
2213 ia64_asm_output_external (FILE, DECL, NAME)
2214
2215/* A C statement to store into the string STRING a label whose name is made
2216 from the string PREFIX and the number NUM. */
2217
2218#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
2219do { \
2220 sprintf (LABEL, "*.%s%d", PREFIX, NUM); \
2221} while (0)
2222
2223/* A C expression to assign to OUTVAR (which is a variable of type `char *') a
2224 newly allocated string made from the string NAME and the number NUMBER, with
2225 some suitable punctuation added. */
2226
2227/* ??? Not sure if using a ? in the name for Intel as is safe. */
2228
2229#define ASM_FORMAT_PRIVATE_NAME(OUTVAR, NAME, NUMBER) \
2230do { \
2231 (OUTVAR) = (char *) alloca (strlen (NAME) + 12); \
2232 sprintf (OUTVAR, "%s%c%ld", (NAME), (TARGET_GNU_AS ? '.' : '?'), \
2233 (long)(NUMBER)); \
2234} while (0)
2235
2236/* A C statement to output to the stdio stream STREAM assembler code which
2237 defines (equates) the symbol NAME to have the value VALUE. */
2238
2239#define ASM_OUTPUT_DEF(STREAM, NAME, VALUE) \
2240do { \
2241 assemble_name (STREAM, NAME); \
2242 fputs (" = ", STREAM); \
2243 assemble_name (STREAM, VALUE); \
2244 fputc ('\n', STREAM); \
2245} while (0)
2246
2247\f
2248/* Macros Controlling Initialization Routines. */
2249
2250/* This is handled by svr4.h and sysv4.h. */
2251
2252\f
2253/* Output of Assembler Instructions. */
2254
2255/* A C initializer containing the assembler's names for the machine registers,
2256 each one as a C string constant. */
2257
2258#define REGISTER_NAMES \
2259{ \
2260 /* General registers. */ \
2261 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", \
2262 "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", \
2263 "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", \
2264 "r30", "r31", \
2265 /* Local registers. */ \
2266 "loc0", "loc1", "loc2", "loc3", "loc4", "loc5", "loc6", "loc7", \
2267 "loc8", "loc9", "loc10","loc11","loc12","loc13","loc14","loc15", \
2268 "loc16","loc17","loc18","loc19","loc20","loc21","loc22","loc23", \
2269 "loc24","loc25","loc26","loc27","loc28","loc29","loc30","loc31", \
2270 "loc32","loc33","loc34","loc35","loc36","loc37","loc38","loc39", \
2271 "loc40","loc41","loc42","loc43","loc44","loc45","loc46","loc47", \
2272 "loc48","loc49","loc50","loc51","loc52","loc53","loc54","loc55", \
2273 "loc56","loc57","loc58","loc59","loc60","loc61","loc62","loc63", \
2274 "loc64","loc65","loc66","loc67","loc68","loc69","loc70","loc71", \
2275 "loc72","loc73","loc74","loc75","loc76","loc77","loc78","loc79", \
2276 /* Input registers. */ \
2277 "in0", "in1", "in2", "in3", "in4", "in5", "in6", "in7", \
2278 /* Output registers. */ \
2279 "out0", "out1", "out2", "out3", "out4", "out5", "out6", "out7", \
2280 /* Floating-point registers. */ \
2281 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", \
2282 "f10", "f11", "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", \
2283 "f20", "f21", "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29", \
2284 "f30", "f31", "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39", \
2285 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47", "f48", "f49", \
2286 "f50", "f51", "f52", "f53", "f54", "f55", "f56", "f57", "f58", "f59", \
2287 "f60", "f61", "f62", "f63", "f64", "f65", "f66", "f67", "f68", "f69", \
2288 "f70", "f71", "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79", \
2289 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87", "f88", "f89", \
2290 "f90", "f91", "f92", "f93", "f94", "f95", "f96", "f97", "f98", "f99", \
2291 "f100","f101","f102","f103","f104","f105","f106","f107","f108","f109",\
2292 "f110","f111","f112","f113","f114","f115","f116","f117","f118","f119",\
2293 "f120","f121","f122","f123","f124","f125","f126","f127", \
2294 /* Predicate registers. */ \
2295 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", \
2296 "p10", "p11", "p12", "p13", "p14", "p15", "p16", "p17", "p18", "p19", \
2297 "p20", "p21", "p22", "p23", "p24", "p25", "p26", "p27", "p28", "p29", \
2298 "p30", "p31", "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39", \
2299 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47", "p48", "p49", \
2300 "p50", "p51", "p52", "p53", "p54", "p55", "p56", "p57", "p58", "p59", \
2301 "p60", "p61", "p62", "p63", \
2302 /* Branch registers. */ \
2303 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", \
2304 /* Frame pointer. Return address. */ \
97e242b0 2305 "sfp", "retaddr", "ar.ccv", "ar.unat", "ar.pfs", "ar.lc", "ar.ec", \
c65ebc55
JW
2306}
2307
2308/* If defined, a C initializer for an array of structures containing a name and
2309 a register number. This macro defines additional names for hard registers,
2310 thus allowing the `asm' option in declarations to refer to registers using
2311 alternate names. */
2312
2313#define ADDITIONAL_REGISTER_NAMES \
2314{ \
2315 { "gp", R_GR (1) }, \
2316 { "sp", R_GR (12) }, \
2317 { "in0", IN_REG (0) }, \
2318 { "in1", IN_REG (1) }, \
2319 { "in2", IN_REG (2) }, \
2320 { "in3", IN_REG (3) }, \
2321 { "in4", IN_REG (4) }, \
2322 { "in5", IN_REG (5) }, \
2323 { "in6", IN_REG (6) }, \
2324 { "in7", IN_REG (7) }, \
2325 { "out0", OUT_REG (0) }, \
2326 { "out1", OUT_REG (1) }, \
2327 { "out2", OUT_REG (2) }, \
2328 { "out3", OUT_REG (3) }, \
2329 { "out4", OUT_REG (4) }, \
2330 { "out5", OUT_REG (5) }, \
2331 { "out6", OUT_REG (6) }, \
2332 { "out7", OUT_REG (7) }, \
2333 { "loc0", LOC_REG (0) }, \
2334 { "loc1", LOC_REG (1) }, \
2335 { "loc2", LOC_REG (2) }, \
2336 { "loc3", LOC_REG (3) }, \
2337 { "loc4", LOC_REG (4) }, \
2338 { "loc5", LOC_REG (5) }, \
2339 { "loc6", LOC_REG (6) }, \
2340 { "loc7", LOC_REG (7) }, \
2341 { "loc8", LOC_REG (8) }, \
2342 { "loc9", LOC_REG (9) }, \
2343 { "loc10", LOC_REG (10) }, \
2344 { "loc11", LOC_REG (11) }, \
2345 { "loc12", LOC_REG (12) }, \
2346 { "loc13", LOC_REG (13) }, \
2347 { "loc14", LOC_REG (14) }, \
2348 { "loc15", LOC_REG (15) }, \
2349 { "loc16", LOC_REG (16) }, \
2350 { "loc17", LOC_REG (17) }, \
2351 { "loc18", LOC_REG (18) }, \
2352 { "loc19", LOC_REG (19) }, \
2353 { "loc20", LOC_REG (20) }, \
2354 { "loc21", LOC_REG (21) }, \
2355 { "loc22", LOC_REG (22) }, \
2356 { "loc23", LOC_REG (23) }, \
2357 { "loc24", LOC_REG (24) }, \
2358 { "loc25", LOC_REG (25) }, \
2359 { "loc26", LOC_REG (26) }, \
2360 { "loc27", LOC_REG (27) }, \
2361 { "loc28", LOC_REG (28) }, \
2362 { "loc29", LOC_REG (29) }, \
2363 { "loc30", LOC_REG (30) }, \
2364 { "loc31", LOC_REG (31) }, \
2365 { "loc32", LOC_REG (32) }, \
2366 { "loc33", LOC_REG (33) }, \
2367 { "loc34", LOC_REG (34) }, \
2368 { "loc35", LOC_REG (35) }, \
2369 { "loc36", LOC_REG (36) }, \
2370 { "loc37", LOC_REG (37) }, \
2371 { "loc38", LOC_REG (38) }, \
2372 { "loc39", LOC_REG (39) }, \
2373 { "loc40", LOC_REG (40) }, \
2374 { "loc41", LOC_REG (41) }, \
2375 { "loc42", LOC_REG (42) }, \
2376 { "loc43", LOC_REG (43) }, \
2377 { "loc44", LOC_REG (44) }, \
2378 { "loc45", LOC_REG (45) }, \
2379 { "loc46", LOC_REG (46) }, \
2380 { "loc47", LOC_REG (47) }, \
2381 { "loc48", LOC_REG (48) }, \
2382 { "loc49", LOC_REG (49) }, \
2383 { "loc50", LOC_REG (50) }, \
2384 { "loc51", LOC_REG (51) }, \
2385 { "loc52", LOC_REG (52) }, \
2386 { "loc53", LOC_REG (53) }, \
2387 { "loc54", LOC_REG (54) }, \
2388 { "loc55", LOC_REG (55) }, \
2389 { "loc56", LOC_REG (56) }, \
2390 { "loc57", LOC_REG (57) }, \
2391 { "loc58", LOC_REG (58) }, \
2392 { "loc59", LOC_REG (59) }, \
2393 { "loc60", LOC_REG (60) }, \
2394 { "loc61", LOC_REG (61) }, \
2395 { "loc62", LOC_REG (62) }, \
2396 { "loc63", LOC_REG (63) }, \
2397 { "loc64", LOC_REG (64) }, \
2398 { "loc65", LOC_REG (65) }, \
2399 { "loc66", LOC_REG (66) }, \
2400 { "loc67", LOC_REG (67) }, \
2401 { "loc68", LOC_REG (68) }, \
2402 { "loc69", LOC_REG (69) }, \
2403 { "loc70", LOC_REG (70) }, \
2404 { "loc71", LOC_REG (71) }, \
2405 { "loc72", LOC_REG (72) }, \
2406 { "loc73", LOC_REG (73) }, \
2407 { "loc74", LOC_REG (74) }, \
2408 { "loc75", LOC_REG (75) }, \
2409 { "loc76", LOC_REG (76) }, \
2410 { "loc77", LOC_REG (77) }, \
2411 { "loc78", LOC_REG (78) }, \
794eefd9 2412 { "loc79", LOC_REG (79) }, \
c65ebc55
JW
2413}
2414
2415/* A C compound statement to output to stdio stream STREAM the assembler syntax
2416 for an instruction operand X. X is an RTL expression. */
2417
2418#define PRINT_OPERAND(STREAM, X, CODE) \
2419 ia64_print_operand (STREAM, X, CODE)
2420
2421/* A C expression which evaluates to true if CODE is a valid punctuation
2422 character for use in the `PRINT_OPERAND' macro. */
2423
2424/* ??? Keep this around for now, as we might need it later. */
2425
6f8aa100
RH
2426#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
2427 ((CODE) == '+' || (CODE) == ',')
c65ebc55
JW
2428
2429/* A C compound statement to output to stdio stream STREAM the assembler syntax
2430 for an instruction operand that is a memory reference whose address is X. X
2431 is an RTL expression. */
2432
2433#define PRINT_OPERAND_ADDRESS(STREAM, X) \
2434 ia64_print_operand_address (STREAM, X)
2435
2436/* If defined, C string expressions to be used for the `%R', `%L', `%U', and
2437 `%I' options of `asm_fprintf' (see `final.c'). */
2438
2439#define REGISTER_PREFIX ""
2440#define LOCAL_LABEL_PREFIX "."
2441#define USER_LABEL_PREFIX ""
2442#define IMMEDIATE_PREFIX ""
2443
2444\f
2445/* Output of dispatch tables. */
2446
2447/* This macro should be provided on machines where the addresses in a dispatch
2448 table are relative to the table's own address. */
2449
2450/* ??? Depends on the pointer size. */
2451
2452#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
2453 fprintf (STREAM, "\tdata8 .L%d-.L%d\n", VALUE, REL)
2454
2455/* This is how to output an element of a case-vector that is absolute.
2456 (Ia64 does not use such vectors, but we must define this macro anyway.) */
2457
2458#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) abort ()
2459
2460/* Define this if something special must be output at the end of a jump-table.
2461 We need to align back to a 16 byte boundary because offsets are smaller than
2462 instructions. */
2463
2464#define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE) ASM_OUTPUT_ALIGN (STREAM, 4)
2465
2466/* Jump tables only need 8 byte alignment. */
2467
2468#define ADDR_VEC_ALIGN(ADDR_VEC) 3
2469
2470\f
2471/* Assembler Commands for Exception Regions. */
2472
2473/* ??? This entire section of ia64.h needs to be implemented and then cleaned
2474 up. */
2475
2476/* A C expression to output text to mark the start of an exception region.
2477
2478 This macro need not be defined on most platforms. */
2479/* #define ASM_OUTPUT_EH_REGION_BEG() */
2480
2481/* A C expression to output text to mark the end of an exception region.
2482
2483 This macro need not be defined on most platforms. */
2484/* #define ASM_OUTPUT_EH_REGION_END() */
2485
2486/* A C expression to switch to the section in which the main exception table is
2487 to be placed. The default is a section named `.gcc_except_table' on machines
2488 that support named sections via `ASM_OUTPUT_SECTION_NAME', otherwise if `-fpic'
2489 or `-fPIC' is in effect, the `data_section', otherwise the
2490 `readonly_data_section'. */
2491/* #define EXCEPTION_SECTION() */
2492
2493/* If defined, a C string constant for the assembler operation to switch to the
2494 section for exception handling frame unwind information. If not defined,
2495 GNU CC will provide a default definition if the target supports named
2496 sections. `crtstuff.c' uses this macro to switch to the appropriate
2497 section.
2498
2499 You should define this symbol if your target supports DWARF 2 frame unwind
2500 information and the default definition does not work. */
de323aa1 2501#define EH_FRAME_SECTION_ASM_OP "\t.section\t.IA_64.unwind,\"aw\""
c65ebc55
JW
2502
2503/* A C expression that is nonzero if the normal exception table output should
2504 be omitted.
2505
2506 This macro need not be defined on most platforms. */
2507/* #define OMIT_EH_TABLE() */
2508
2509/* Alternate runtime support for looking up an exception at runtime and finding
2510 the associated handler, if the default method won't work.
2511
2512 This macro need not be defined on most platforms. */
2513/* #define EH_TABLE_LOOKUP() */
2514
2515/* A C expression that decides whether or not the current function needs to
2516 have a function unwinder generated for it. See the file `except.c' for
2517 details on when to define this, and how. */
2518/* #define DOESNT_NEED_UNWINDER */
2519
2520/* An rtx used to mask the return address found via RETURN_ADDR_RTX, so that it
2521 does not contain any extraneous set bits in it. */
2522/* #define MASK_RETURN_ADDR */
2523
2524/* Define this macro to 0 if your target supports DWARF 2 frame unwind
2525 information, but it does not yet work with exception handling. Otherwise,
2526 if your target supports this information (if it defines
2527 `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or
2528 `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1.
2529
2530 If this macro is defined to 1, the DWARF 2 unwinder will be the default
2531 exception handling mechanism; otherwise, setjmp/longjmp will be used by
2532 default.
2533
2534 If this macro is defined to anything, the DWARF 2 unwinder will be used
2535 instead of inline unwinders and __unwind_function in the non-setjmp case. */
2536/* #define DWARF2_UNWIND_INFO */
2537
2538\f
2539/* Assembler Commands for Alignment. */
2540
2541/* The alignment (log base 2) to put in front of LABEL, which follows
2542 a BARRIER. */
2543
2544/* ??? Investigate. */
2545
2546/* ??? Emitting align directives increases the size of the line number debug
2547 info, because each .align forces use of an extended opcode. Perhaps try
2548 to fix this in the assembler? */
2549
2550/* #define LABEL_ALIGN_AFTER_BARRIER(LABEL) */
2551
2552/* The desired alignment for the location counter at the beginning
2553 of a loop. */
2554
2555/* ??? Investigate. */
2556/* #define LOOP_ALIGN(LABEL) */
2557
2558/* Define this macro if `ASM_OUTPUT_SKIP' should not be used in the text
2559 section because it fails put zeros in the bytes that are skipped. */
2560
2561#define ASM_NO_SKIP_IN_TEXT 1
2562
2563/* A C statement to output to the stdio stream STREAM an assembler command to
2564 advance the location counter to a multiple of 2 to the POWER bytes. */
2565
2566#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
2567 fprintf (STREAM, "\t.align %d\n", 1<<(POWER))
2568
2569\f
2570/* Macros Affecting all Debug Formats. */
2571
2572/* This is handled in svr4.h and sysv4.h. */
2573
2574\f
2575/* Specific Options for DBX Output. */
2576
2577/* This is handled by dbxelf.h which is included by svr4.h. */
2578
2579\f
2580/* Open ended Hooks for DBX Output. */
2581
2582/* Likewise. */
2583
2584\f
2585/* File names in DBX format. */
2586
2587/* Likewise. */
2588
2589\f
2590/* Macros for SDB and Dwarf Output. */
2591
2592/* Define this macro if GNU CC should produce dwarf version 2 format debugging
2593 output in response to the `-g' option. */
2594
2595#define DWARF2_DEBUGGING_INFO
2596
2597/* Section names for DWARF2 debug info. */
2598
2599#define DEBUG_INFO_SECTION ".debug_info, \"\", \"progbits\""
2600#define ABBREV_SECTION ".debug_abbrev, \"\", \"progbits\""
2601#define ARANGES_SECTION ".debug_aranges, \"\", \"progbits\""
2602#define DEBUG_LINE_SECTION ".debug_line, \"\", \"progbits\""
2603#define PUBNAMES_SECTION ".debug_pubnames, \"\", \"progbits\""
2604
2605/* C string constants giving the pseudo-op to use for a sequence of
2606 2, 4, and 8 byte unaligned constants. dwarf2out.c needs these. */
2607
de323aa1
HPN
2608#define UNALIGNED_SHORT_ASM_OP "\tdata2.ua\t"
2609#define UNALIGNED_INT_ASM_OP "\tdata4.ua\t"
2610#define UNALIGNED_DOUBLE_INT_ASM_OP "\tdata8.ua\t"
c65ebc55
JW
2611
2612/* We need to override the default definition for this in dwarf2out.c so that
2613 we can emit the necessary # postfix. */
2614#define ASM_NAME_TO_STRING(STR, NAME) \
2615 do { \
2616 if ((NAME)[0] == '*') \
2617 dyn_string_append (STR, NAME + 1); \
2618 else \
2619 { \
2620 char *newstr; \
2621 STRIP_NAME_ENCODING (newstr, NAME); \
2622 dyn_string_append (STR, user_label_prefix); \
2623 dyn_string_append (STR, newstr); \
2624 dyn_string_append (STR, "#"); \
2625 } \
2626 } \
2627 while (0)
2628
2629#define DWARF2_ASM_LINE_DEBUG_INFO (TARGET_DWARF2_ASM)
2630
2631\f
2632/* Cross Compilation and Floating Point. */
2633
2634/* Define to enable software floating point emulation. */
2635#define REAL_ARITHMETIC
2636
7b82b5da
SC
2637\f
2638/* Register Renaming Parameters. */
2639
2640/* A C expression that is nonzero if hard register number REGNO2 can be
2641 considered for use as a rename register for REGNO1 */
2642
2643#define HARD_REGNO_RENAME_OK(REGNO1,REGNO2) \
2644 ((! PR_REGNO_P (REGNO1) && ! PR_REGNO_P (REGNO2)) \
2645 ? (!call_fixed_regs [REGNO1] && !call_fixed_regs [REGNO2]) \
2646 ? 1 : 0 \
2647 : ((REGNO2) > 256 && ((REGNO2 & 1) == 0)) \
2648 ? 1 : 0)
2649
2650/* Define this macro if the compiler should use extended basic blocks
2651 when renaming registers. Define this macro if the target has predicate
2652 registers. */
2653
2654#define RENAME_EXTENDED_BLOCKS
2655
c65ebc55
JW
2656\f
2657/* Miscellaneous Parameters. */
2658
2659/* Define this if you have defined special-purpose predicates in the file
2660 `MACHINE.c'. For each predicate, list all rtl codes that can be in
2661 expressions matched by the predicate. */
2662
2663#define PREDICATE_CODES \
2664{ "call_operand", {SUBREG, REG, SYMBOL_REF}}, \
ec039e3c 2665{ "got_symbolic_operand", {SYMBOL_REF, CONST, LABEL_REF}}, \
c65ebc55
JW
2666{ "sdata_symbolic_operand", {SYMBOL_REF, CONST}}, \
2667{ "symbolic_operand", {SYMBOL_REF, CONST, LABEL_REF}}, \
2668{ "function_operand", {SYMBOL_REF}}, \
2669{ "setjmp_operand", {SYMBOL_REF}}, \
4b983fdc 2670{ "destination_operand", {SUBREG, REG, MEM}}, \
0551c32d 2671{ "not_postinc_memory_operand", {MEM}}, \
c65ebc55
JW
2672{ "move_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \
2673 CONSTANT_P_RTX, SYMBOL_REF, CONST, LABEL_REF}}, \
0551c32d
RH
2674{ "gr_register_operand", {SUBREG, REG}}, \
2675{ "fr_register_operand", {SUBREG, REG}}, \
2676{ "grfr_register_operand", {SUBREG, REG}}, \
2677{ "gr_nonimmediate_operand", {SUBREG, REG, MEM}}, \
655f2eb9 2678{ "fr_nonimmediate_operand", {SUBREG, REG, MEM}}, \
0551c32d
RH
2679{ "grfr_nonimmediate_operand", {SUBREG, REG, MEM}}, \
2680{ "gr_reg_or_0_operand", {SUBREG, REG, CONST_INT}}, \
2681{ "gr_reg_or_5bit_operand", {SUBREG, REG, CONST_INT, CONSTANT_P_RTX}}, \
2682{ "gr_reg_or_6bit_operand", {SUBREG, REG, CONST_INT, CONSTANT_P_RTX}}, \
2683{ "gr_reg_or_8bit_operand", {SUBREG, REG, CONST_INT, CONSTANT_P_RTX}}, \
2684{ "grfr_reg_or_8bit_operand", {SUBREG, REG, CONST_INT, CONSTANT_P_RTX}}, \
2685{ "gr_reg_or_8bit_adjusted_operand", {SUBREG, REG, CONST_INT, \
c65ebc55 2686 CONSTANT_P_RTX}}, \
0551c32d 2687{ "gr_reg_or_8bit_and_adjusted_operand", {SUBREG, REG, CONST_INT, \
c65ebc55 2688 CONSTANT_P_RTX}}, \
0551c32d
RH
2689{ "gr_reg_or_14bit_operand", {SUBREG, REG, CONST_INT, CONSTANT_P_RTX}}, \
2690{ "gr_reg_or_22bit_operand", {SUBREG, REG, CONST_INT, CONSTANT_P_RTX}}, \
c65ebc55
JW
2691{ "shift_count_operand", {SUBREG, REG, CONST_INT, CONSTANT_P_RTX}}, \
2692{ "shift_32bit_count_operand", {SUBREG, REG, CONST_INT, \
2693 CONSTANT_P_RTX}}, \
2694{ "shladd_operand", {CONST_INT}}, \
2695{ "fetchadd_operand", {CONST_INT}}, \
0551c32d 2696{ "fr_reg_or_fp01_operand", {SUBREG, REG, CONST_DOUBLE}}, \
c65ebc55
JW
2697{ "normal_comparison_operator", {EQ, NE, GT, LE, GTU, LEU}}, \
2698{ "adjusted_comparison_operator", {LT, GE, LTU, GEU}}, \
f2f90c63 2699{ "signed_inequality_operator", {GE, GT, LE, LT}}, \
5527bf14 2700{ "predicate_operator", {NE, EQ}}, \
97e242b0 2701{ "ar_lc_reg_operand", {REG}}, \
3f622353
RH
2702{ "ar_ccv_reg_operand", {REG}}, \
2703{ "general_tfmode_operand", {SUBREG, REG, CONST_DOUBLE, MEM}}, \
2704{ "destination_tfmode_operand", {SUBREG, REG, MEM}}, \
2705{ "tfreg_or_fp01_operand", {REG, CONST_DOUBLE}},
c65ebc55
JW
2706
2707/* An alias for a machine mode name. This is the machine mode that elements of
2708 a jump-table should have. */
2709
2710#define CASE_VECTOR_MODE Pmode
2711
2712/* Define as C expression which evaluates to nonzero if the tablejump
2713 instruction expects the table to contain offsets from the address of the
2714 table. */
2715
2716#define CASE_VECTOR_PC_RELATIVE 1
2717
2718/* Define this macro if operations between registers with integral mode smaller
2719 than a word are always performed on the entire register. */
2720
2721#define WORD_REGISTER_OPERATIONS
2722
2723/* Define this macro to be a C expression indicating when insns that read
2724 memory in MODE, an integral mode narrower than a word, set the bits outside
2725 of MODE to be either the sign-extension or the zero-extension of the data
2726 read. */
2727
2728#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
2729
2730/* An alias for a tree code that should be used by default for conversion of
2731 floating point values to fixed point. */
2732
2733/* ??? Looks like this macro is obsolete and should be deleted everywhere. */
2734
2735#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
2736
2737/* An alias for a tree code that is the easiest kind of division to compile
2738 code for in the general case. */
2739
2740#define EASY_DIV_EXPR TRUNC_DIV_EXPR
2741
2742/* The maximum number of bytes that a single instruction can move quickly from
2743 memory to memory. */
2744#define MOVE_MAX 8
2745
2746/* A C expression which is nonzero if on this machine it is safe to "convert"
2747 an integer of INPREC bits to one of OUTPREC bits (where OUTPREC is smaller
2748 than INPREC) by merely operating on it as if it had only OUTPREC bits. */
2749
2750#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
2751
2752/* A C expression describing the value returned by a comparison operator with
2753 an integral mode and stored by a store-flag instruction (`sCOND') when the
2754 condition is true. */
2755
2756/* ??? Investigate using -1 instead of 1. */
2757
2758#define STORE_FLAG_VALUE 1
2759
2760/* An alias for the machine mode for pointers. */
2761
2762/* ??? This would change if we had ILP32 support. */
2763
2764#define Pmode DImode
2765
2766/* An alias for the machine mode used for memory references to functions being
2767 called, in `call' RTL expressions. */
2768
2769#define FUNCTION_MODE Pmode
2770
2771/* Define this macro to handle System V style pragmas: #pragma pack and
2772 #pragma weak. Note, #pragma weak will only be supported if SUPPORT_WEAK is
2773 defined. */
2774
2775#define HANDLE_SYSV_PRAGMA
2776
2777/* If defined, a C expression whose value is nonzero if IDENTIFIER with
2778 arguments ARGS is a valid machine specific attribute for TYPE. The
2779 attributes in ATTRIBUTES have previously been assigned to TYPE. */
2780
2781#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \
2782 ia64_valid_type_attribute (TYPE, ATTRIBUTES, IDENTIFIER, ARGS)
2783
2784/* In rare cases, correct code generation requires extra machine dependent
2785 processing between the second jump optimization pass and delayed branch
2786 scheduling. On those machines, define this macro as a C statement to act on
2787 the code starting at INSN. */
2788
2789#define MACHINE_DEPENDENT_REORG(INSN) ia64_reorg (INSN)
2790
2791/* A C expression for the maximum number of instructions to execute via
2792 conditional execution instructions instead of a branch. A value of
2793 BRANCH_COST+1 is the default if the machine does not use
2794 cc0, and 1 if it does use cc0. */
2795/* ??? Investigate. */
2796/* #define MAX_CONDITIONAL_EXECUTE */
2797
2798/* Indicate how many instructions can be issued at the same time. */
2799
2800/* ??? For now, we just schedule to fill bundles. */
2801
2802#define ISSUE_RATE 3
2803
0c96007e
AM
2804#define IA64_UNWIND_INFO 1
2805#define HANDLER_SECTION fprintf (asm_out_file, "\t.personality\t__ia64_personality_v1\n\t.handlerdata\n");
2806#define IA64_UNWIND_EMIT(f,i) process_for_unwind_directive (f,i)
2807
2808/* This function contains machine specific function data. */
2809struct machine_function
2810{
2811 /* The new stack pointer when unwinding from EH. */
2812 struct rtx_def* ia64_eh_epilogue_sp;
2813
2814 /* The new bsp value when unwinding from EH. */
2815 struct rtx_def* ia64_eh_epilogue_bsp;
97e242b0
RH
2816
2817 /* The GP value save register. */
2818 struct rtx_def* ia64_gp_save;
26a110f5
RH
2819
2820 /* The number of varargs registers to save. */
2821 int n_varargs;
0c96007e
AM
2822};
2823
2824
c65ebc55
JW
2825enum ia64_builtins
2826{
2827 IA64_BUILTIN_SYNCHRONIZE,
2828
2829 IA64_BUILTIN_FETCH_AND_ADD_SI,
2830 IA64_BUILTIN_FETCH_AND_SUB_SI,
2831 IA64_BUILTIN_FETCH_AND_OR_SI,
2832 IA64_BUILTIN_FETCH_AND_AND_SI,
2833 IA64_BUILTIN_FETCH_AND_XOR_SI,
2834 IA64_BUILTIN_FETCH_AND_NAND_SI,
2835
2836 IA64_BUILTIN_ADD_AND_FETCH_SI,
2837 IA64_BUILTIN_SUB_AND_FETCH_SI,
2838 IA64_BUILTIN_OR_AND_FETCH_SI,
2839 IA64_BUILTIN_AND_AND_FETCH_SI,
2840 IA64_BUILTIN_XOR_AND_FETCH_SI,
2841 IA64_BUILTIN_NAND_AND_FETCH_SI,
2842
2843 IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI,
2844 IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI,
2845
2846 IA64_BUILTIN_SYNCHRONIZE_SI,
2847
2848 IA64_BUILTIN_LOCK_TEST_AND_SET_SI,
2849
2850 IA64_BUILTIN_LOCK_RELEASE_SI,
2851
2852 IA64_BUILTIN_FETCH_AND_ADD_DI,
2853 IA64_BUILTIN_FETCH_AND_SUB_DI,
2854 IA64_BUILTIN_FETCH_AND_OR_DI,
2855 IA64_BUILTIN_FETCH_AND_AND_DI,
2856 IA64_BUILTIN_FETCH_AND_XOR_DI,
2857 IA64_BUILTIN_FETCH_AND_NAND_DI,
2858
2859 IA64_BUILTIN_ADD_AND_FETCH_DI,
2860 IA64_BUILTIN_SUB_AND_FETCH_DI,
2861 IA64_BUILTIN_OR_AND_FETCH_DI,
2862 IA64_BUILTIN_AND_AND_FETCH_DI,
2863 IA64_BUILTIN_XOR_AND_FETCH_DI,
2864 IA64_BUILTIN_NAND_AND_FETCH_DI,
2865
2866 IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI,
2867 IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI,
2868
2869 IA64_BUILTIN_SYNCHRONIZE_DI,
2870
2871 IA64_BUILTIN_LOCK_TEST_AND_SET_DI,
2872
ce152ef8
AM
2873 IA64_BUILTIN_LOCK_RELEASE_DI,
2874
2875 IA64_BUILTIN_BSP,
2876 IA64_BUILTIN_FLUSHRS
c65ebc55
JW
2877};
2878
2879/* Codes for expand_compare_and_swap and expand_swap_and_compare. */
2880enum fetchop_code {
2881 IA64_ADD_OP, IA64_SUB_OP, IA64_OR_OP, IA64_AND_OP, IA64_XOR_OP, IA64_NAND_OP
2882};
2883
2884#define MD_INIT_BUILTINS do { \
2885 ia64_init_builtins (); \
2886 } while (0)
2887
2888#define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \
2889 ia64_expand_builtin ((EXP), (TARGET), (SUBTARGET), (MODE), (IGNORE))
2890
2891/* End of ia64.h */
This page took 0.44307 seconds and 5 git commands to generate.