]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/rs6000.h
* gcc.dg/rs6000-fpint-2.c: Only compile on Darwin and Linux.
[thirdparty/gcc.git] / gcc / config / rs6000 / rs6000.h
CommitLineData
f045b2c9 1/* Definitions of target machine for GNU compiler, for IBM RS/6000.
9ebbca7d 2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
5b86a469 3 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6a7ec0a7 4 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
f045b2c9 5
5de601cf 6 This file is part of GCC.
f045b2c9 7
5de601cf
NC
8 GCC is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published
10 by the Free Software Foundation; either version 2, or (at your
11 option) any later version.
f045b2c9 12
5de601cf
NC
13 GCC is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
f045b2c9 17
5de601cf
NC
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the
20 Free Software Foundation, 59 Temple Place - Suite 330, Boston,
21 MA 02111-1307, USA. */
f045b2c9
RS
22
23/* Note that some other tm.h files include this one and then override
9ebbca7d 24 many of the definitions. */
f045b2c9 25
9ebbca7d
GK
26/* Definitions for the object file format. These are set at
27 compile-time. */
f045b2c9 28
9ebbca7d
GK
29#define OBJECT_XCOFF 1
30#define OBJECT_ELF 2
31#define OBJECT_PEF 3
ee890fe2 32#define OBJECT_MACHO 4
f045b2c9 33
9ebbca7d 34#define TARGET_ELF (TARGET_OBJECT_FORMAT == OBJECT_ELF)
2bfcf297 35#define TARGET_XCOFF (TARGET_OBJECT_FORMAT == OBJECT_XCOFF)
9ebbca7d 36#define TARGET_MACOS (TARGET_OBJECT_FORMAT == OBJECT_PEF)
ee890fe2 37#define TARGET_MACHO (TARGET_OBJECT_FORMAT == OBJECT_MACHO)
f045b2c9 38
2bfcf297
DB
39#ifndef TARGET_AIX
40#define TARGET_AIX 0
41#endif
42
85b776df
AM
43/* Control whether function entry points use a "dot" symbol when
44 ABI_AIX. */
45#define DOT_SYMBOLS 1
46
8e3f41e7
MM
47/* Default string to use for cpu if not specified. */
48#ifndef TARGET_CPU_DEFAULT
49#define TARGET_CPU_DEFAULT ((char *)0)
50#endif
51
f984d8df
DB
52/* Common ASM definitions used by ASM_SPEC among the various targets
53 for handling -mcpu=xxx switches. */
54#define ASM_CPU_SPEC \
55"%{!mcpu*: \
56 %{mpower: %{!mpower2: -mpwr}} \
57 %{mpower2: -mpwrx} \
93ae5495
AM
58 %{mpowerpc64*: -mppc64} \
59 %{!mpowerpc64*: %{mpowerpc*: -mppc}} \
f984d8df 60 %{mno-power: %{!mpowerpc*: -mcom}} \
93ae5495 61 %{!mno-power: %{!mpower*: %(asm_default)}}} \
f984d8df
DB
62%{mcpu=common: -mcom} \
63%{mcpu=power: -mpwr} \
64%{mcpu=power2: -mpwrx} \
93ae5495 65%{mcpu=power3: -mppc64} \
957e9e48 66%{mcpu=power4: -mpower4} \
93ae5495 67%{mcpu=power5: -mpower4} \
f984d8df
DB
68%{mcpu=powerpc: -mppc} \
69%{mcpu=rios: -mpwr} \
70%{mcpu=rios1: -mpwr} \
71%{mcpu=rios2: -mpwrx} \
72%{mcpu=rsc: -mpwr} \
73%{mcpu=rsc1: -mpwr} \
93ae5495 74%{mcpu=rs64a: -mppc64} \
f984d8df 75%{mcpu=401: -mppc} \
61a8515c
JS
76%{mcpu=403: -m403} \
77%{mcpu=405: -m405} \
2c9d95ef
DE
78%{mcpu=405fp: -m405} \
79%{mcpu=440: -m440} \
80%{mcpu=440fp: -m440} \
f984d8df
DB
81%{mcpu=505: -mppc} \
82%{mcpu=601: -m601} \
83%{mcpu=602: -mppc} \
84%{mcpu=603: -mppc} \
85%{mcpu=603e: -mppc} \
86%{mcpu=ec603e: -mppc} \
87%{mcpu=604: -mppc} \
88%{mcpu=604e: -mppc} \
93ae5495
AM
89%{mcpu=620: -mppc64} \
90%{mcpu=630: -mppc64} \
f984d8df
DB
91%{mcpu=740: -mppc} \
92%{mcpu=750: -mppc} \
49ffe578 93%{mcpu=G3: -mppc} \
93ae5495
AM
94%{mcpu=7400: -mppc -maltivec} \
95%{mcpu=7450: -mppc -maltivec} \
96%{mcpu=G4: -mppc -maltivec} \
f984d8df
DB
97%{mcpu=801: -mppc} \
98%{mcpu=821: -mppc} \
99%{mcpu=823: -mppc} \
775db490 100%{mcpu=860: -mppc} \
93ae5495
AM
101%{mcpu=970: -mpower4 -maltivec} \
102%{mcpu=G5: -mpower4 -maltivec} \
a3170dc6 103%{mcpu=8540: -me500} \
93ae5495
AM
104%{maltivec: -maltivec} \
105-many"
f984d8df
DB
106
107#define CPP_DEFAULT_SPEC ""
108
109#define ASM_DEFAULT_SPEC ""
110
841faeed
MM
111/* This macro defines names of additional specifications to put in the specs
112 that can be used in various specifications like CC1_SPEC. Its definition
113 is an initializer with a subgrouping for each command option.
114
115 Each subgrouping contains a string constant, that defines the
5de601cf 116 specification name, and a string constant that used by the GCC driver
841faeed
MM
117 program.
118
119 Do not define this macro if it does not need to do anything. */
120
7509c759 121#define SUBTARGET_EXTRA_SPECS
7509c759 122
c81bebd7 123#define EXTRA_SPECS \
c81bebd7 124 { "cpp_default", CPP_DEFAULT_SPEC }, \
c81bebd7
MM
125 { "asm_cpu", ASM_CPU_SPEC }, \
126 { "asm_default", ASM_DEFAULT_SPEC }, \
7509c759
MM
127 SUBTARGET_EXTRA_SPECS
128
fb623df5 129/* Architecture type. */
f045b2c9 130
bb22512c 131/* Define TARGET_MFCRF if the target assembler does not support the
78f5898b 132 optional field operand for mfcr. */
fb623df5 133
78f5898b 134#ifndef HAVE_AS_MFCRF
432218ba 135#undef TARGET_MFCRF
ffa22984
DE
136#define TARGET_MFCRF 0
137#endif
138
0fa2e4df 139/* Define TARGET_POPCNTB if the target assembler does not support the
432218ba
DE
140 popcount byte instruction. */
141
142#ifndef HAVE_AS_POPCNTB
143#undef TARGET_POPCNTB
144#define TARGET_POPCNTB 0
145#endif
146
7f970b70
AM
147#ifndef TARGET_SECURE_PLT
148#define TARGET_SECURE_PLT 0
149#endif
150
2f3e5814 151#define TARGET_32BIT (! TARGET_64BIT)
d14a6d05 152
c4501e62
JJ
153#ifndef HAVE_AS_TLS
154#define HAVE_AS_TLS 0
155#endif
156
48d72335
DE
157/* Return 1 for a symbol ref for a thread-local storage symbol. */
158#define RS6000_SYMBOL_REF_TLS_P(RTX) \
159 (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
160
996ed075
JJ
161#ifdef IN_LIBGCC2
162/* For libgcc2 we make sure this is a compile time constant */
0134bf2d 163#if defined (__64BIT__) || defined (__powerpc64__)
78f5898b 164#undef TARGET_POWERPC64
996ed075
JJ
165#define TARGET_POWERPC64 1
166#else
78f5898b 167#undef TARGET_POWERPC64
996ed075
JJ
168#define TARGET_POWERPC64 0
169#endif
b6c9286a 170#else
78f5898b 171 /* The option machinery will define this. */
b6c9286a
MM
172#endif
173
938937d8 174#define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)
9ebbca7d 175
cac8ce95 176/* Processor type. Order must match cpu attribute in MD file. */
fb623df5 177enum processor_type
bef84347
VM
178 {
179 PROCESSOR_RIOS1,
180 PROCESSOR_RIOS2,
3cb999d8 181 PROCESSOR_RS64A,
bef84347
VM
182 PROCESSOR_MPCCORE,
183 PROCESSOR_PPC403,
fe7f5677 184 PROCESSOR_PPC405,
b54cf83a 185 PROCESSOR_PPC440,
bef84347
VM
186 PROCESSOR_PPC601,
187 PROCESSOR_PPC603,
188 PROCESSOR_PPC604,
189 PROCESSOR_PPC604e,
190 PROCESSOR_PPC620,
3cb999d8 191 PROCESSOR_PPC630,
ed947a96
DJ
192 PROCESSOR_PPC750,
193 PROCESSOR_PPC7400,
309323c2 194 PROCESSOR_PPC7450,
a3170dc6 195 PROCESSOR_PPC8540,
ec507f2d
DE
196 PROCESSOR_POWER4,
197 PROCESSOR_POWER5
bef84347 198};
fb623df5
RK
199
200extern enum processor_type rs6000_cpu;
201
202/* Recast the processor type to the cpu attribute. */
203#define rs6000_cpu_attr ((enum attr_cpu)rs6000_cpu)
204
8482e358 205/* Define generic processor types based upon current deployment. */
3cb999d8
DE
206#define PROCESSOR_COMMON PROCESSOR_PPC601
207#define PROCESSOR_POWER PROCESSOR_RIOS1
208#define PROCESSOR_POWERPC PROCESSOR_PPC604
209#define PROCESSOR_POWERPC64 PROCESSOR_RS64A
6e151478 210
fb623df5 211/* Define the default processor. This is overridden by other tm.h files. */
3cb999d8
DE
212#define PROCESSOR_DEFAULT PROCESSOR_RIOS1
213#define PROCESSOR_DEFAULT64 PROCESSOR_RS64A
fb623df5 214
6febd581
RK
215/* Specify the dialect of assembler to use. New mnemonics is dialect one
216 and the old mnemonics are dialect zero. */
9ebbca7d 217#define ASSEMBLER_DIALECT (TARGET_NEW_MNEMONICS ? 1 : 0)
6febd581 218
569fa502
DN
219/* Types of costly dependences. */
220enum rs6000_dependence_cost
221 {
222 max_dep_latency = 1000,
223 no_dep_costly,
224 all_deps_costly,
225 true_store_to_load_dep_costly,
226 store_to_load_dep_costly
227 };
228
cbe26ab8
DN
229/* Types of nop insertion schemes in sched target hook sched_finish. */
230enum rs6000_nop_insertion
231 {
232 sched_finish_regroup_exact = 1000,
233 sched_finish_pad_groups,
234 sched_finish_none
235 };
236
237/* Dispatch group termination caused by an insn. */
238enum group_termination
239 {
240 current_group,
241 previous_group
242 };
243
7816bea0
DJ
244/* Support for a compile-time default CPU, et cetera. The rules are:
245 --with-cpu is ignored if -mcpu is specified.
246 --with-tune is ignored if -mtune is specified.
247 --with-float is ignored if -mhard-float or -msoft-float are
248 specified. */
249#define OPTION_DEFAULT_SPECS \
250 {"cpu", "%{!mcpu=*:-mcpu=%(VALUE)}" }, \
251 {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \
252 {"float", "%{!msoft-float:%{!mhard-float:-m%(VALUE)-float}}" }
253
ff222560 254/* rs6000_select[0] is reserved for the default cpu defined via --with-cpu */
8e3f41e7
MM
255struct rs6000_cpu_select
256{
815cdc52
MM
257 const char *string;
258 const char *name;
8e3f41e7
MM
259 int set_tune_p;
260 int set_arch_p;
261};
262
263extern struct rs6000_cpu_select rs6000_select[];
fb623df5 264
38c1f2d7 265/* Debug support */
0ac081f6 266extern const char *rs6000_debug_name; /* Name for -mdebug-xxxx option */
38c1f2d7
MM
267extern int rs6000_debug_stack; /* debug stack applications */
268extern int rs6000_debug_arg; /* debug argument handling */
269
270#define TARGET_DEBUG_STACK rs6000_debug_stack
271#define TARGET_DEBUG_ARG rs6000_debug_arg
272
57ac7be9
AM
273extern const char *rs6000_traceback_name; /* Type of traceback table. */
274
6fa3f289
ZW
275/* These are separate from target_flags because we've run out of bits
276 there. */
6fa3f289
ZW
277extern int rs6000_long_double_type_size;
278extern int rs6000_altivec_abi;
a3170dc6 279extern int rs6000_spe_abi;
5da702b1 280extern int rs6000_float_gprs;
025d9908 281extern int rs6000_alignment_flags;
cbe26ab8
DN
282extern const char *rs6000_sched_insert_nops_str;
283extern enum rs6000_nop_insertion rs6000_sched_insert_nops;
025d9908
KH
284
285/* Alignment options for fields in structures for sub-targets following
286 AIX-like ABI.
287 ALIGN_POWER word-aligns FP doubles (default AIX ABI).
288 ALIGN_NATURAL doubleword-aligns FP doubles (align to object size).
289
290 Override the macro definitions when compiling libobjc to avoid undefined
291 reference to rs6000_alignment_flags due to library's use of GCC alignment
292 macros which use the macros below. */
f676971a 293
025d9908
KH
294#ifndef IN_TARGET_LIBS
295#define MASK_ALIGN_POWER 0x00000000
296#define MASK_ALIGN_NATURAL 0x00000001
297#define TARGET_ALIGN_NATURAL (rs6000_alignment_flags & MASK_ALIGN_NATURAL)
298#else
299#define TARGET_ALIGN_NATURAL 0
300#endif
6fa3f289
ZW
301
302#define TARGET_LONG_DOUBLE_128 (rs6000_long_double_type_size == 128)
303#define TARGET_ALTIVEC_ABI rs6000_altivec_abi
304
a3170dc6
AH
305#define TARGET_SPE_ABI 0
306#define TARGET_SPE 0
993f19a8 307#define TARGET_E500 0
a3170dc6
AH
308#define TARGET_ISEL 0
309#define TARGET_FPRS 1
4d4cbc0e
AH
310#define TARGET_E500_SINGLE 0
311#define TARGET_E500_DOUBLE 0
a3170dc6 312
fb623df5
RK
313/* Sometimes certain combinations of command options do not make sense
314 on a particular target machine. You can define a macro
315 `OVERRIDE_OPTIONS' to take account of this. This macro, if
316 defined, is executed once just after all the command options have
317 been parsed.
318
ffa22984 319 Do not use this macro to turn on various extra optimizations for
5accd822
DE
320 `-O'. That is what `OPTIMIZATION_OPTIONS' is for.
321
fb623df5
RK
322 On the RS/6000 this is used to define the target cpu type. */
323
8e3f41e7 324#define OVERRIDE_OPTIONS rs6000_override_options (TARGET_CPU_DEFAULT)
f045b2c9 325
5accd822
DE
326/* Define this to change the optimizations performed by default. */
327#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) optimization_options(LEVEL,SIZE)
328
4c4eb375
GK
329/* Show we can debug even without a frame pointer. */
330#define CAN_DEBUG_WITHOUT_FP
331
a5c76ee6 332/* Target pragma. */
c58b209a
NB
333#define REGISTER_TARGET_PRAGMAS() do { \
334 c_register_pragma (0, "longcall", rs6000_pragma_longcall); \
a5c76ee6
ZW
335} while (0)
336
4c4eb375
GK
337/* Target #defines. */
338#define TARGET_CPU_CPP_BUILTINS() \
339 rs6000_cpu_cpp_builtins (pfile)
647d340d
JT
340
341/* This is used by rs6000_cpu_cpp_builtins to indicate the byte order
342 we're compiling for. Some configurations may need to override it. */
343#define RS6000_CPU_CPP_ENDIAN_BUILTINS() \
344 do \
345 { \
346 if (BYTES_BIG_ENDIAN) \
347 { \
348 builtin_define ("__BIG_ENDIAN__"); \
349 builtin_define ("_BIG_ENDIAN"); \
350 builtin_assert ("machine=bigendian"); \
351 } \
352 else \
353 { \
354 builtin_define ("__LITTLE_ENDIAN__"); \
355 builtin_define ("_LITTLE_ENDIAN"); \
356 builtin_assert ("machine=littleendian"); \
357 } \
358 } \
359 while (0)
f045b2c9 360\f
4c4eb375 361/* Target machine storage layout. */
f045b2c9 362
13d39dbc 363/* Define this macro if it is advisable to hold scalars in registers
c81bebd7 364 in a wider mode than that declared by the program. In such cases,
ef457bda
RK
365 the value is constrained to be within the bounds of the declared
366 type, but kept valid in the wider mode. The signedness of the
367 extension may differ from that of the type. */
368
39403d82
DE
369#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
370 if (GET_MODE_CLASS (MODE) == MODE_INT \
371 && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
b78d48dd 372 (MODE) = TARGET_32BIT ? SImode : DImode;
39403d82 373
f045b2c9 374/* Define this if most significant bit is lowest numbered
82e41834
KH
375 in instructions that operate on numbered bit-fields. */
376/* That is true on RS/6000. */
f045b2c9
RS
377#define BITS_BIG_ENDIAN 1
378
379/* Define this if most significant byte of a word is the lowest numbered. */
380/* That is true on RS/6000. */
381#define BYTES_BIG_ENDIAN 1
382
383/* Define this if most significant word of a multiword number is lowest
c81bebd7 384 numbered.
f045b2c9
RS
385
386 For RS/6000 we can decide arbitrarily since there are no machine
82e41834 387 instructions for them. Might as well be consistent with bits and bytes. */
f045b2c9
RS
388#define WORDS_BIG_ENDIAN 1
389
2e360ab3 390#define MAX_BITS_PER_WORD 64
f045b2c9
RS
391
392/* Width of a word, in units (bytes). */
c1aa3958 393#define UNITS_PER_WORD (! TARGET_POWERPC64 ? 4 : 8)
f34fc46e
DE
394#ifdef IN_LIBGCC2
395#define MIN_UNITS_PER_WORD UNITS_PER_WORD
396#else
ef0e53ce 397#define MIN_UNITS_PER_WORD 4
f34fc46e 398#endif
2e360ab3 399#define UNITS_PER_FP_WORD 8
0ac081f6 400#define UNITS_PER_ALTIVEC_WORD 16
a3170dc6 401#define UNITS_PER_SPE_WORD 8
f045b2c9 402
915f619f
JW
403/* Type used for ptrdiff_t, as a string used in a declaration. */
404#define PTRDIFF_TYPE "int"
405
058ef853
DE
406/* Type used for size_t, as a string used in a declaration. */
407#define SIZE_TYPE "long unsigned int"
408
f045b2c9
RS
409/* Type used for wchar_t, as a string used in a declaration. */
410#define WCHAR_TYPE "short unsigned int"
411
412/* Width of wchar_t in bits. */
413#define WCHAR_TYPE_SIZE 16
414
9e654916
RK
415/* A C expression for the size in bits of the type `short' on the
416 target machine. If you don't define this, the default is half a
417 word. (If this would be less than one storage unit, it is
418 rounded up to one unit.) */
419#define SHORT_TYPE_SIZE 16
420
421/* A C expression for the size in bits of the type `int' on the
422 target machine. If you don't define this, the default is one
423 word. */
19d2d16f 424#define INT_TYPE_SIZE 32
9e654916
RK
425
426/* A C expression for the size in bits of the type `long' on the
427 target machine. If you don't define this, the default is one
428 word. */
2f3e5814 429#define LONG_TYPE_SIZE (TARGET_32BIT ? 32 : 64)
9e654916
RK
430
431/* A C expression for the size in bits of the type `long long' on the
432 target machine. If you don't define this, the default is two
433 words. */
434#define LONG_LONG_TYPE_SIZE 64
435
9e654916
RK
436/* A C expression for the size in bits of the type `float' on the
437 target machine. If you don't define this, the default is one
438 word. */
439#define FLOAT_TYPE_SIZE 32
440
441/* A C expression for the size in bits of the type `double' on the
442 target machine. If you don't define this, the default is two
443 words. */
444#define DOUBLE_TYPE_SIZE 64
445
446/* A C expression for the size in bits of the type `long double' on
447 the target machine. If you don't define this, the default is two
448 words. */
6fa3f289 449#define LONG_DOUBLE_TYPE_SIZE rs6000_long_double_type_size
06f4e019 450
06f4e019
DE
451/* Define this to set long double type size to use in libgcc2.c, which can
452 not depend on target_flags. */
453#ifdef __LONG_DOUBLE_128__
454#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
455#else
456#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
457#endif
9e654916 458
5b8f5865
DE
459/* Work around rs6000_long_double_type_size dependency in ada/targtyps.c. */
460#define WIDEST_HARDWARE_FP_SIZE 64
461
f045b2c9
RS
462/* Width in bits of a pointer.
463 See also the macro `Pmode' defined below. */
2f3e5814 464#define POINTER_SIZE (TARGET_32BIT ? 32 : 64)
f045b2c9
RS
465
466/* Allocation boundary (in *bits*) for storing arguments in argument list. */
2f3e5814 467#define PARM_BOUNDARY (TARGET_32BIT ? 32 : 64)
f045b2c9
RS
468
469/* Boundary (in *bits*) on which stack pointer should be aligned. */
19fb36e3
AM
470#define STACK_BOUNDARY \
471 ((TARGET_32BIT && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128)
f045b2c9
RS
472
473/* Allocation boundary (in *bits*) for the code of a function. */
474#define FUNCTION_BOUNDARY 32
475
476/* No data type wants to be aligned rounder than this. */
0ac081f6
AH
477#define BIGGEST_ALIGNMENT 128
478
479/* A C expression to compute the alignment for a variables in the
480 local store. TYPE is the data type, and ALIGN is the alignment
481 that the object would ordinarily have. */
482#define LOCAL_ALIGNMENT(TYPE, ALIGN) \
a3170dc6 483 ((TARGET_ALTIVEC && TREE_CODE (TYPE) == VECTOR_TYPE) ? 128 : \
f82f556d 484 (TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 : \
a3170dc6 485 (TARGET_SPE && TREE_CODE (TYPE) == VECTOR_TYPE) ? 64 : ALIGN)
b73fd26c 486
f045b2c9
RS
487/* Alignment of field after `int : 0' in a structure. */
488#define EMPTY_FIELD_BOUNDARY 32
489
490/* Every structure's size must be a multiple of this. */
491#define STRUCTURE_SIZE_BOUNDARY 8
492
a3170dc6
AH
493/* Return 1 if a structure or array containing FIELD should be
494 accessed using `BLKMODE'.
495
496 For the SPE, simd types are V2SI, and gcc can be tempted to put the
497 entire thing in a DI and use subregs to access the internals.
498 store_bit_field() will force (subreg:DI (reg:V2SI x))'s to the
499 back-end. Because a single GPR can hold a V2SI, but not a DI, the
500 best thing to do is set structs to BLKmode and avoid Severe Tire
de334ef6
AH
501 Damage.
502
503 On e500 v2, DF and DI modes suffer from the same anomaly. DF can
504 fit into 1, whereas DI still needs two. */
a3170dc6 505#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) \
de334ef6
AH
506 ((TARGET_SPE && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \
507 || (TARGET_E500_DOUBLE && (MODE) == DFmode))
a3170dc6 508
43a88a8c 509/* A bit-field declared as `int' forces `int' alignment for the struct. */
f045b2c9
RS
510#define PCC_BITFIELD_TYPE_MATTERS 1
511
69ef87e2
AH
512/* Make strings word-aligned so strcpy from constants will be faster.
513 Make vector constants quadword aligned. */
514#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
515 (TREE_CODE (EXP) == STRING_CST \
516 && (ALIGN) < BITS_PER_WORD \
517 ? BITS_PER_WORD \
518 : (ALIGN))
f045b2c9 519
0ac081f6 520/* Make arrays of chars word-aligned for the same reasons.
f82f556d
AH
521 Align vectors to 128 bits. Align SPE vectors and E500 v2 doubles to
522 64 bits. */
f045b2c9 523#define DATA_ALIGNMENT(TYPE, ALIGN) \
a3170dc6 524 (TREE_CODE (TYPE) == VECTOR_TYPE ? (TARGET_SPE_ABI ? 64 : 128) \
f82f556d 525 : (TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 \
0ac081f6 526 : TREE_CODE (TYPE) == ARRAY_TYPE \
f045b2c9
RS
527 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
528 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
529
a0ab749a 530/* Nonzero if move instructions will actually fail to work
f045b2c9 531 when given unaligned data. */
fdaff8ba 532#define STRICT_ALIGNMENT 0
e1565e65
DE
533
534/* Define this macro to be the value 1 if unaligned accesses have a cost
535 many times greater than aligned accesses, for example if they are
536 emulated in a trap handler. */
41543739
GK
537#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) \
538 (STRICT_ALIGNMENT \
fcce224d
DE
539 || (((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode \
540 || (MODE) == DImode) \
41543739 541 && (ALIGN) < 32))
f045b2c9
RS
542\f
543/* Standard register usage. */
544
545/* Number of actual hardware registers.
546 The hardware registers are assigned numbers for the compiler
547 from 0 to just below FIRST_PSEUDO_REGISTER.
548 All registers that the compiler knows about must be given numbers,
549 even those that are not normally considered general registers.
550
551 RS/6000 has 32 fixed-point registers, 32 floating-point registers,
552 an MQ register, a count register, a link register, and 8 condition
07488f32
ZW
553 register fields, which we view here as separate registers. AltiVec
554 adds 32 vector registers and a VRsave register.
f045b2c9
RS
555
556 In addition, the difference between the frame and argument pointers is
557 a function of the number of registers saved, so we need to have a
558 register for AP that will later be eliminated in favor of SP or FP.
802a0058 559 This is a normal register, but it is fixed.
f045b2c9 560
802a0058
MM
561 We also create a pseudo register for float/int conversions, that will
562 really represent the memory location used. It is represented here as
563 a register, in order to work around problems in allocating stack storage
564 in inline functions. */
565
a3170dc6 566#define FIRST_PSEUDO_REGISTER 113
f045b2c9 567
d6a7951f 568/* This must be included for pre gcc 3.0 glibc compatibility. */
7d5f33bc 569#define PRE_GCC3_DWARF_FRAME_REGISTERS 77
62153b61 570
93c9d1ba 571/* Add 32 dwarf columns for synthetic SPE registers. */
c19de7aa
AH
572#define DWARF_FRAME_REGISTERS (FIRST_PSEUDO_REGISTER + 32)
573
93c9d1ba
AM
574/* The SPE has an additional 32 synthetic registers, with DWARF debug
575 info numbering for these registers starting at 1200. While eh_frame
576 register numbering need not be the same as the debug info numbering,
577 we choose to number these regs for eh_frame at 1200 too. This allows
578 future versions of the rs6000 backend to add hard registers and
579 continue to use the gcc hard register numbering for eh_frame. If the
580 extra SPE registers in eh_frame were numbered starting from the
581 current value of FIRST_PSEUDO_REGISTER, then if FIRST_PSEUDO_REGISTER
582 changed we'd need to introduce a mapping in DWARF_FRAME_REGNUM to
583 avoid invalidating older SPE eh_frame info.
584
585 We must map them here to avoid huge unwinder tables mostly consisting
f676971a 586 of unused space. */
93c9d1ba
AM
587#define DWARF_REG_TO_UNWIND_COLUMN(r) \
588 ((r) > 1200 ? ((r) - 1200 + FIRST_PSEUDO_REGISTER) : (r))
589
590/* Use gcc hard register numbering for eh_frame. */
591#define DWARF_FRAME_REGNUM(REGNO) (REGNO)
41f3a930 592
f045b2c9
RS
593/* 1 for registers that have pervasive standard uses
594 and are not available for the register allocator.
595
5dead3e5
DJ
596 On RS/6000, r1 is used for the stack. On Darwin, r2 is available
597 as a local register; for all other OS's r2 is the TOC pointer.
f045b2c9 598
a127c4e5
RK
599 cr5 is not supposed to be used.
600
601 On System V implementations, r13 is fixed and not available for use. */
602
f045b2c9 603#define FIXED_REGISTERS \
5dead3e5 604 {0, 1, FIXED_R2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FIXED_R13, 0, 0, \
f045b2c9
RS
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, \
0ac081f6
AH
608 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, \
609 /* AltiVec registers. */ \
610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
611 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
5f004351 612 1, 1 \
a3170dc6 613 , 1, 1 \
0ac081f6 614}
f045b2c9
RS
615
616/* 1 for registers not available across function calls.
617 These must include the FIXED_REGISTERS and also any
618 registers that can be used without being saved.
619 The latter must include the registers where values are returned
620 and the register where structure-value addresses are passed.
621 Aside from that, you can include as many other registers as you like. */
622
623#define CALL_USED_REGISTERS \
a127c4e5 624 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
f045b2c9
RS
625 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
626 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
627 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0ac081f6
AH
628 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \
629 /* AltiVec registers. */ \
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, \
5f004351 632 1, 1 \
a3170dc6 633 , 1, 1 \
0ac081f6
AH
634}
635
289e96b2
AH
636/* Like `CALL_USED_REGISTERS' except this macro doesn't require that
637 the entire set of `FIXED_REGISTERS' be included.
638 (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
639 This macro is optional. If not specified, it defaults to the value
640 of `CALL_USED_REGISTERS'. */
f676971a 641
289e96b2
AH
642#define CALL_REALLY_USED_REGISTERS \
643 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \
644 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
645 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
646 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
647 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \
648 /* AltiVec registers. */ \
649 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
650 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
5f004351 651 0, 0 \
a3170dc6 652 , 0, 0 \
289e96b2 653}
f045b2c9 654
9ebbca7d
GK
655#define MQ_REGNO 64
656#define CR0_REGNO 68
657#define CR1_REGNO 69
658#define CR2_REGNO 70
659#define CR3_REGNO 71
660#define CR4_REGNO 72
661#define MAX_CR_REGNO 75
662#define XER_REGNO 76
0ac081f6
AH
663#define FIRST_ALTIVEC_REGNO 77
664#define LAST_ALTIVEC_REGNO 108
28bcfd4d 665#define TOTAL_ALTIVEC_REGS (LAST_ALTIVEC_REGNO - FIRST_ALTIVEC_REGNO + 1)
0ac081f6 666#define VRSAVE_REGNO 109
5f004351 667#define VSCR_REGNO 110
a3170dc6
AH
668#define SPE_ACC_REGNO 111
669#define SPEFSCR_REGNO 112
9ebbca7d 670
d62294f5
FJ
671#define FIRST_SAVED_ALTIVEC_REGNO (FIRST_ALTIVEC_REGNO+20)
672#define FIRST_SAVED_FP_REGNO (14+32)
673#define FIRST_SAVED_GP_REGNO 13
674
f045b2c9
RS
675/* List the order in which to allocate registers. Each register must be
676 listed once, even those in FIXED_REGISTERS.
677
678 We allocate in the following order:
679 fp0 (not saved or used for anything)
680 fp13 - fp2 (not saved; incoming fp arg registers)
681 fp1 (not saved; return value)
9390387d 682 fp31 - fp14 (saved; order given to save least number)
5accd822
DE
683 cr7, cr6 (not saved or special)
684 cr1 (not saved, but used for FP operations)
f045b2c9 685 cr0 (not saved, but used for arithmetic operations)
5accd822 686 cr4, cr3, cr2 (saved)
9390387d 687 r0 (not saved; cannot be base reg)
f045b2c9
RS
688 r9 (not saved; best for TImode)
689 r11, r10, r8-r4 (not saved; highest used first to make less conflict)
9390387d 690 r3 (not saved; return value register)
f045b2c9
RS
691 r31 - r13 (saved; order given to save least number)
692 r12 (not saved; if used for DImode or DFmode would use r13)
693 mq (not saved; best to use it if we can)
694 ctr (not saved; when we have the choice ctr is better)
695 lr (saved)
9390387d
AM
696 cr5, r1, r2, ap, xer (fixed)
697 v0 - v1 (not saved or used for anything)
698 v13 - v3 (not saved; incoming vector arg registers)
699 v2 (not saved; incoming vector arg reg; return value)
700 v19 - v14 (not saved or used for anything)
701 v31 - v20 (saved; order given to save least number)
702 vrsave, vscr (fixed)
a3170dc6 703 spe_acc, spefscr (fixed)
0ac081f6 704*/
f676971a 705
6b13641d
DJ
706#if FIXED_R2 == 1
707#define MAYBE_R2_AVAILABLE
708#define MAYBE_R2_FIXED 2,
709#else
710#define MAYBE_R2_AVAILABLE 2,
711#define MAYBE_R2_FIXED
712#endif
f045b2c9 713
9390387d
AM
714#define REG_ALLOC_ORDER \
715 {32, \
716 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, \
717 33, \
718 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \
719 50, 49, 48, 47, 46, \
720 75, 74, 69, 68, 72, 71, 70, \
721 0, MAYBE_R2_AVAILABLE \
722 9, 11, 10, 8, 7, 6, 5, 4, \
723 3, \
724 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, \
725 18, 17, 16, 15, 14, 13, 12, \
726 64, 66, 65, \
727 73, 1, MAYBE_R2_FIXED 67, 76, \
728 /* AltiVec registers. */ \
729 77, 78, \
730 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, \
731 79, \
732 96, 95, 94, 93, 92, 91, \
733 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, \
734 109, 110, \
735 111, 112 \
0ac081f6 736}
f045b2c9
RS
737
738/* True if register is floating-point. */
739#define FP_REGNO_P(N) ((N) >= 32 && (N) <= 63)
740
741/* True if register is a condition register. */
742#define CR_REGNO_P(N) ((N) >= 68 && (N) <= 75)
743
815cdc52
MM
744/* True if register is a condition register, but not cr0. */
745#define CR_REGNO_NOT_CR0_P(N) ((N) >= 69 && (N) <= 75)
746
f045b2c9 747/* True if register is an integer register. */
9ebbca7d 748#define INT_REGNO_P(N) ((N) <= 31 || (N) == ARG_POINTER_REGNUM)
f045b2c9 749
a3170dc6
AH
750/* SPE SIMD registers are just the GPRs. */
751#define SPE_SIMD_REGNO_P(N) ((N) <= 31)
752
0d86f538 753/* True if register is the XER register. */
9ebbca7d 754#define XER_REGNO_P(N) ((N) == XER_REGNO)
802a0058 755
0ac081f6
AH
756/* True if register is an AltiVec register. */
757#define ALTIVEC_REGNO_P(N) ((N) >= FIRST_ALTIVEC_REGNO && (N) <= LAST_ALTIVEC_REGNO)
758
f045b2c9 759/* Return number of consecutive hard regs needed starting at reg REGNO
d8ecbcdb
AH
760 to hold something of mode MODE. */
761
762#define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs ((REGNO), (MODE))
0e67400a
FJ
763
764#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \
765 ((TARGET_32BIT && TARGET_POWERPC64 \
2e6c9641 766 && (GET_MODE_SIZE (MODE) > 4) \
0e67400a 767 && INT_REGNO_P (REGNO)) ? 1 : 0)
f045b2c9 768
0ac081f6 769#define ALTIVEC_VECTOR_MODE(MODE) \
cb2a532e
AH
770 ((MODE) == V16QImode \
771 || (MODE) == V8HImode \
772 || (MODE) == V4SFmode \
6e1f54e2 773 || (MODE) == V4SImode)
0ac081f6 774
a3170dc6
AH
775#define SPE_VECTOR_MODE(MODE) \
776 ((MODE) == V4HImode \
777 || (MODE) == V2SFmode \
00a892b8 778 || (MODE) == V1DImode \
a3170dc6
AH
779 || (MODE) == V2SImode)
780
c4336539
PB
781#define UNITS_PER_SIMD_WORD \
782 (TARGET_ALTIVEC ? UNITS_PER_ALTIVEC_WORD \
783 : (TARGET_SPE ? UNITS_PER_SPE_WORD : UNITS_PER_WORD))
0bf43309 784
0d1fbc8c
AH
785/* Value is TRUE if hard register REGNO can hold a value of
786 machine-mode MODE. */
787#define HARD_REGNO_MODE_OK(REGNO, MODE) \
788 rs6000_hard_regno_mode_ok_p[(int)(MODE)][REGNO]
f045b2c9
RS
789
790/* Value is 1 if it is a good idea to tie two pseudo registers
791 when one has mode MODE1 and one has mode MODE2.
792 If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
793 for any hard reg, then this must be 0 for correct output. */
794#define MODES_TIEABLE_P(MODE1, MODE2) \
795 (GET_MODE_CLASS (MODE1) == MODE_FLOAT \
796 ? GET_MODE_CLASS (MODE2) == MODE_FLOAT \
797 : GET_MODE_CLASS (MODE2) == MODE_FLOAT \
798 ? GET_MODE_CLASS (MODE1) == MODE_FLOAT \
799 : GET_MODE_CLASS (MODE1) == MODE_CC \
800 ? GET_MODE_CLASS (MODE2) == MODE_CC \
801 : GET_MODE_CLASS (MODE2) == MODE_CC \
802 ? GET_MODE_CLASS (MODE1) == MODE_CC \
4dcc01f3
AH
803 : SPE_VECTOR_MODE (MODE1) \
804 ? SPE_VECTOR_MODE (MODE2) \
805 : SPE_VECTOR_MODE (MODE2) \
806 ? SPE_VECTOR_MODE (MODE1) \
0ac081f6
AH
807 : ALTIVEC_VECTOR_MODE (MODE1) \
808 ? ALTIVEC_VECTOR_MODE (MODE2) \
809 : ALTIVEC_VECTOR_MODE (MODE2) \
810 ? ALTIVEC_VECTOR_MODE (MODE1) \
f045b2c9
RS
811 : 1)
812
c8ae788f
SB
813/* Post-reload, we can't use any new AltiVec registers, as we already
814 emitted the vrsave mask. */
815
816#define HARD_REGNO_RENAME_OK(SRC, DST) \
817 (! ALTIVEC_REGNO_P (DST) || regs_ever_live[DST])
818
f045b2c9 819/* A C expression returning the cost of moving data from a register of class
34bb030a 820 CLASS1 to one of CLASS2. */
f045b2c9 821
34bb030a 822#define REGISTER_MOVE_COST rs6000_register_move_cost
f045b2c9 823
34bb030a
DE
824/* A C expressions returning the cost of moving data of MODE from a register to
825 or from memory. */
f045b2c9 826
34bb030a 827#define MEMORY_MOVE_COST rs6000_memory_move_cost
f045b2c9
RS
828
829/* Specify the cost of a branch insn; roughly the number of extra insns that
830 should be added to avoid a branch.
831
ef457bda 832 Set this to 3 on the RS/6000 since that is roughly the average cost of an
f045b2c9
RS
833 unscheduled conditional branch. */
834
ef457bda 835#define BRANCH_COST 3
f045b2c9 836
85e50b6b 837/* Override BRANCH_COST heuristic which empirically produces worse
b8610a53 838 performance for removing short circuiting from the logical ops. */
85e50b6b 839
b8610a53 840#define LOGICAL_OP_NON_SHORT_CIRCUIT 0
a3170dc6
AH
841
842/* A fixed register used at prologue and epilogue generation to fix
843 addressing modes. The SPE needs heavy addressing fixes at the last
844 minute, and it's best to save a register for it.
845
846 AltiVec also needs fixes, but we've gotten around using r11, which
847 is actually wrong because when use_backchain_to_restore_sp is true,
848 we end up clobbering r11.
849
850 The AltiVec case needs to be fixed. Dunno if we should break ABI
b6d08ca1 851 compatibility and reserve a register for it as well.. */
a3170dc6
AH
852
853#define FIXED_SCRATCH (TARGET_SPE ? 14 : 11)
854
2aa4498c
AH
855/* Define this macro to change register usage conditional on target
856 flags. */
f85f4585 857
2aa4498c 858#define CONDITIONAL_REGISTER_USAGE rs6000_conditional_register_usage ()
6febd581 859
f045b2c9
RS
860/* Specify the registers used for certain standard purposes.
861 The values of these macros are register numbers. */
862
863/* RS/6000 pc isn't overloaded on a register that the compiler knows about. */
864/* #define PC_REGNUM */
865
866/* Register to use for pushing function arguments. */
867#define STACK_POINTER_REGNUM 1
868
869/* Base register for access to local variables of the function. */
870#define FRAME_POINTER_REGNUM 31
871
872/* Value should be nonzero if functions must have frame pointers.
873 Zero means the frame pointer need not be set up (and parms
874 may be accessed via the stack pointer) in functions that seem suitable.
875 This is computed in `reload', in reload1.c. */
876#define FRAME_POINTER_REQUIRED 0
877
878/* Base register for access to arguments of the function. */
879#define ARG_POINTER_REGNUM 67
880
881/* Place to put static chain when calling a function that requires it. */
882#define STATIC_CHAIN_REGNUM 11
883
82e41834 884/* Link register number. */
9ebbca7d 885#define LINK_REGISTER_REGNUM 65
b6c9286a 886
82e41834 887/* Count register number. */
9ebbca7d 888#define COUNT_REGISTER_REGNUM 66
f045b2c9
RS
889\f
890/* Define the classes of registers for register constraints in the
891 machine description. Also define ranges of constants.
892
893 One of the classes must always be named ALL_REGS and include all hard regs.
894 If there is more than one class, another class must be named NO_REGS
895 and contain no registers.
896
897 The name GENERAL_REGS must be the name of a class (or an alias for
898 another name such as ALL_REGS). This is the class of registers
899 that is allowed by "g" or "r" in a register constraint.
900 Also, registers outside this class are allocated only when
901 instructions express preferences for them.
902
903 The classes must be numbered in nondecreasing order; that is,
904 a larger-numbered class must never be contained completely
905 in a smaller-numbered class.
906
907 For any two classes, it is very desirable that there be another
908 class that represents their union. */
c81bebd7 909
f045b2c9
RS
910/* The RS/6000 has three types of registers, fixed-point, floating-point,
911 and condition registers, plus three special registers, MQ, CTR, and the
07488f32 912 link register. AltiVec adds a vector register class.
f045b2c9
RS
913
914 However, r0 is special in that it cannot be used as a base register.
915 So make a class for registers valid as base registers.
916
917 Also, cr0 is the only condition code register that can be used in
0d86f538 918 arithmetic insns, so make a separate class for it. */
f045b2c9 919
ebedb4dd
MM
920enum reg_class
921{
922 NO_REGS,
ebedb4dd
MM
923 BASE_REGS,
924 GENERAL_REGS,
925 FLOAT_REGS,
0ac081f6
AH
926 ALTIVEC_REGS,
927 VRSAVE_REGS,
5f004351 928 VSCR_REGS,
a3170dc6
AH
929 SPE_ACC_REGS,
930 SPEFSCR_REGS,
ebedb4dd
MM
931 NON_SPECIAL_REGS,
932 MQ_REGS,
933 LINK_REGS,
934 CTR_REGS,
935 LINK_OR_CTR_REGS,
936 SPECIAL_REGS,
937 SPEC_OR_GEN_REGS,
938 CR0_REGS,
ebedb4dd
MM
939 CR_REGS,
940 NON_FLOAT_REGS,
9ebbca7d 941 XER_REGS,
ebedb4dd
MM
942 ALL_REGS,
943 LIM_REG_CLASSES
944};
f045b2c9
RS
945
946#define N_REG_CLASSES (int) LIM_REG_CLASSES
947
82e41834 948/* Give names of register classes as strings for dump file. */
f045b2c9 949
ebedb4dd
MM
950#define REG_CLASS_NAMES \
951{ \
952 "NO_REGS", \
ebedb4dd
MM
953 "BASE_REGS", \
954 "GENERAL_REGS", \
955 "FLOAT_REGS", \
0ac081f6
AH
956 "ALTIVEC_REGS", \
957 "VRSAVE_REGS", \
5f004351 958 "VSCR_REGS", \
a3170dc6
AH
959 "SPE_ACC_REGS", \
960 "SPEFSCR_REGS", \
ebedb4dd
MM
961 "NON_SPECIAL_REGS", \
962 "MQ_REGS", \
963 "LINK_REGS", \
964 "CTR_REGS", \
965 "LINK_OR_CTR_REGS", \
966 "SPECIAL_REGS", \
967 "SPEC_OR_GEN_REGS", \
968 "CR0_REGS", \
ebedb4dd
MM
969 "CR_REGS", \
970 "NON_FLOAT_REGS", \
9ebbca7d 971 "XER_REGS", \
ebedb4dd
MM
972 "ALL_REGS" \
973}
f045b2c9
RS
974
975/* Define which registers fit in which classes.
976 This is an initializer for a vector of HARD_REG_SET
977 of length N_REG_CLASSES. */
978
0ac081f6
AH
979#define REG_CLASS_CONTENTS \
980{ \
981 { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, /* NO_REGS */ \
982 { 0xfffffffe, 0x00000000, 0x00000008, 0x00000000 }, /* BASE_REGS */ \
983 { 0xffffffff, 0x00000000, 0x00000008, 0x00000000 }, /* GENERAL_REGS */ \
984 { 0x00000000, 0xffffffff, 0x00000000, 0x00000000 }, /* FLOAT_REGS */ \
089a05b8
SS
985 { 0x00000000, 0x00000000, 0xffffe000, 0x00001fff }, /* ALTIVEC_REGS */ \
986 { 0x00000000, 0x00000000, 0x00000000, 0x00002000 }, /* VRSAVE_REGS */ \
5f004351 987 { 0x00000000, 0x00000000, 0x00000000, 0x00004000 }, /* VSCR_REGS */ \
a3170dc6
AH
988 { 0x00000000, 0x00000000, 0x00000000, 0x00008000 }, /* SPE_ACC_REGS */ \
989 { 0x00000000, 0x00000000, 0x00000000, 0x00010000 }, /* SPEFSCR_REGS */ \
0ac081f6
AH
990 { 0xffffffff, 0xffffffff, 0x00000008, 0x00000000 }, /* NON_SPECIAL_REGS */ \
991 { 0x00000000, 0x00000000, 0x00000001, 0x00000000 }, /* MQ_REGS */ \
992 { 0x00000000, 0x00000000, 0x00000002, 0x00000000 }, /* LINK_REGS */ \
993 { 0x00000000, 0x00000000, 0x00000004, 0x00000000 }, /* CTR_REGS */ \
994 { 0x00000000, 0x00000000, 0x00000006, 0x00000000 }, /* LINK_OR_CTR_REGS */ \
a004eb82 995 { 0x00000000, 0x00000000, 0x00000007, 0x00002000 }, /* SPECIAL_REGS */ \
6ceec593 996 { 0xffffffff, 0x00000000, 0x0000000f, 0x00002000 }, /* SPEC_OR_GEN_REGS */ \
0ac081f6
AH
997 { 0x00000000, 0x00000000, 0x00000010, 0x00000000 }, /* CR0_REGS */ \
998 { 0x00000000, 0x00000000, 0x00000ff0, 0x00000000 }, /* CR_REGS */ \
089a05b8
SS
999 { 0xffffffff, 0x00000000, 0x0000efff, 0x00000000 }, /* NON_FLOAT_REGS */ \
1000 { 0x00000000, 0x00000000, 0x00001000, 0x00000000 }, /* XER_REGS */ \
6ceec593 1001 { 0xffffffff, 0xffffffff, 0xffffffff, 0x0001ffff } /* ALL_REGS */ \
ebedb4dd 1002}
f045b2c9
RS
1003
1004/* The same information, inverted:
1005 Return the class number of the smallest class containing
1006 reg number REGNO. This could be a conditional expression
1007 or could index an array. */
1008
0d86f538
GK
1009#define REGNO_REG_CLASS(REGNO) \
1010 ((REGNO) == 0 ? GENERAL_REGS \
1011 : (REGNO) < 32 ? BASE_REGS \
1012 : FP_REGNO_P (REGNO) ? FLOAT_REGS \
0ac081f6 1013 : ALTIVEC_REGNO_P (REGNO) ? ALTIVEC_REGS \
0d86f538
GK
1014 : (REGNO) == CR0_REGNO ? CR0_REGS \
1015 : CR_REGNO_P (REGNO) ? CR_REGS \
1016 : (REGNO) == MQ_REGNO ? MQ_REGS \
1017 : (REGNO) == LINK_REGISTER_REGNUM ? LINK_REGS \
1018 : (REGNO) == COUNT_REGISTER_REGNUM ? CTR_REGS \
1019 : (REGNO) == ARG_POINTER_REGNUM ? BASE_REGS \
1020 : (REGNO) == XER_REGNO ? XER_REGS \
0ac081f6 1021 : (REGNO) == VRSAVE_REGNO ? VRSAVE_REGS \
5f004351 1022 : (REGNO) == VSCR_REGNO ? VRSAVE_REGS \
a3170dc6
AH
1023 : (REGNO) == SPE_ACC_REGNO ? SPE_ACC_REGS \
1024 : (REGNO) == SPEFSCR_REGNO ? SPEFSCR_REGS \
f045b2c9
RS
1025 : NO_REGS)
1026
1027/* The class value for index registers, and the one for base regs. */
1028#define INDEX_REG_CLASS GENERAL_REGS
1029#define BASE_REG_CLASS BASE_REGS
1030
1031/* Get reg_class from a letter such as appears in the machine description. */
1032
1033#define REG_CLASS_FROM_LETTER(C) \
a6645c18 1034 ((C) == 'f' ? ((TARGET_HARD_FLOAT && TARGET_FPRS) ? FLOAT_REGS : NO_REGS) \
f045b2c9
RS
1035 : (C) == 'b' ? BASE_REGS \
1036 : (C) == 'h' ? SPECIAL_REGS \
1037 : (C) == 'q' ? MQ_REGS \
1038 : (C) == 'c' ? CTR_REGS \
1039 : (C) == 'l' ? LINK_REGS \
0ac081f6 1040 : (C) == 'v' ? ALTIVEC_REGS \
f045b2c9
RS
1041 : (C) == 'x' ? CR0_REGS \
1042 : (C) == 'y' ? CR_REGS \
9ebbca7d 1043 : (C) == 'z' ? XER_REGS \
f045b2c9
RS
1044 : NO_REGS)
1045
1046/* The letters I, J, K, L, M, N, and P in a register constraint string
1047 can be used to stand for particular ranges of immediate operands.
1048 This macro defines what the ranges are.
1049 C is the letter, and VALUE is a constant value.
1050 Return 1 if VALUE is in the range specified by C.
1051
9615f239 1052 `I' is a signed 16-bit constant
a0ab749a
KH
1053 `J' is a constant with only the high-order 16 bits nonzero
1054 `K' is a constant with only the low-order 16 bits nonzero
9615f239 1055 `L' is a signed 16-bit constant shifted left 16 bits
f045b2c9 1056 `M' is a constant that is greater than 31
2bfcf297 1057 `N' is a positive constant that is an exact power of two
f045b2c9
RS
1058 `O' is the constant zero
1059 `P' is a constant whose negation is a signed 16-bit constant */
1060
5b6f7b96
RK
1061#define CONST_OK_FOR_LETTER_P(VALUE, C) \
1062 ( (C) == 'I' ? (unsigned HOST_WIDE_INT) ((VALUE) + 0x8000) < 0x10000 \
0858c623 1063 : (C) == 'J' ? ((VALUE) & (~ (unsigned HOST_WIDE_INT) 0xffff0000)) == 0 \
a260abc9 1064 : (C) == 'K' ? ((VALUE) & (~ (HOST_WIDE_INT) 0xffff)) == 0 \
9615f239
DE
1065 : (C) == 'L' ? (((VALUE) & 0xffff) == 0 \
1066 && ((VALUE) >> 31 == -1 || (VALUE) >> 31 == 0)) \
5b6f7b96 1067 : (C) == 'M' ? (VALUE) > 31 \
2bfcf297 1068 : (C) == 'N' ? (VALUE) > 0 && exact_log2 (VALUE) >= 0 \
5b6f7b96 1069 : (C) == 'O' ? (VALUE) == 0 \
9615f239 1070 : (C) == 'P' ? (unsigned HOST_WIDE_INT) ((- (VALUE)) + 0x8000) < 0x10000 \
f045b2c9
RS
1071 : 0)
1072
1073/* Similar, but for floating constants, and defining letters G and H.
1074 Here VALUE is the CONST_DOUBLE rtx itself.
1075
1076 We flag for special constants when we can copy the constant into
4e74d8ec 1077 a general register in two insns for DF/DI and one insn for SF.
f045b2c9 1078
c4c40373 1079 'H' is used for DI/DF constants that take 3 insns. */
4e74d8ec
MM
1080
1081#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
c4c40373
MM
1082 ( (C) == 'G' ? (num_insns_constant (VALUE, GET_MODE (VALUE)) \
1083 == ((GET_MODE (VALUE) == SFmode) ? 1 : 2)) \
1084 : (C) == 'H' ? (num_insns_constant (VALUE, GET_MODE (VALUE)) == 3) \
1085 : 0)
f045b2c9
RS
1086
1087/* Optional extra constraints for this machine.
1088
b6c9286a
MM
1089 'Q' means that is a memory operand that is just an offset from a reg.
1090 'R' is for AIX TOC entries.
a260abc9 1091 'S' is a constant that can be placed into a 64-bit mask operand
b1765bde 1092 'T' is a constant that can be placed into a 32-bit mask operand
0ba1b2ff 1093 'U' is for V.4 small data references.
d744e06e 1094 'W' is a vector constant that can be easily generated (no mem refs).
f676971a 1095 'Y' is a indexed or word-aligned displacement memory operand.
da4c340c 1096 'Z' is an indexed or indirect memory operand.
0ba1b2ff 1097 't' is for AND masks that can be performed by two rldic{l,r} insns. */
f045b2c9 1098
e8a8bc24
RK
1099#define EXTRA_CONSTRAINT(OP, C) \
1100 ((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == REG \
4d588c14 1101 : (C) == 'R' ? legitimate_constant_pool_address_p (OP) \
4ae234b0 1102 : (C) == 'S' ? mask_operand (OP, DImode) \
b1765bde 1103 : (C) == 'T' ? mask_operand (OP, SImode) \
f607bc57 1104 : (C) == 'U' ? (DEFAULT_ABI == ABI_V4 \
c81bebd7 1105 && small_data_operand (OP, GET_MODE (OP))) \
0ba1b2ff
AM
1106 : (C) == 't' ? (mask64_2_operand (OP, DImode) \
1107 && (fixed_regs[CR0_REGNO] \
1108 || !logical_operand (OP, DImode)) \
4ae234b0 1109 && !mask_operand (OP, DImode)) \
d744e06e 1110 : (C) == 'W' ? (easy_vector_constant (OP, GET_MODE (OP))) \
d2288d5d 1111 : (C) == 'Y' ? (word_offset_memref_operand (OP, GET_MODE (OP))) \
da4c340c 1112 : (C) == 'Z' ? (indexed_or_indirect_operand (OP, GET_MODE (OP))) \
e8a8bc24 1113 : 0)
f045b2c9 1114
59b9a953 1115/* Define which constraints are memory constraints. Tell reload
f676971a 1116 that any memory address can be reloaded by copying the
d2288d5d
HP
1117 memory address into a base register if required. */
1118
1119#define EXTRA_MEMORY_CONSTRAINT(C, STR) \
da4c340c 1120 ((C) == 'Q' || (C) == 'Y' || (C) == 'Z')
d2288d5d 1121
f045b2c9
RS
1122/* Given an rtx X being reloaded into a reg required to be
1123 in class CLASS, return the class of reg to actually use.
1124 In general this is just CLASS; but on some machines
c81bebd7 1125 in some cases it is preferable to use a more restrictive class.
f045b2c9
RS
1126
1127 On the RS/6000, we have to return NO_REGS when we want to reload a
f676971a 1128 floating-point CONST_DOUBLE to force it to be copied to memory.
1e66d555
GK
1129
1130 We also don't want to reload integer values into floating-point
1131 registers if we can at all help it. In fact, this can
37409796 1132 cause reload to die, if it tries to generate a reload of CTR
1e66d555
GK
1133 into a FP register and discovers it doesn't have the memory location
1134 required.
1135
1136 ??? Would it be a good idea to have reload do the converse, that is
1137 try to reload floating modes into FP registers if possible?
1138 */
f045b2c9 1139
802a0058 1140#define PREFERRED_RELOAD_CLASS(X,CLASS) \
343f6bbf
DE
1141 ((CONSTANT_P (X) \
1142 && reg_classes_intersect_p ((CLASS), FLOAT_REGS)) \
1143 ? NO_REGS \
1144 : (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT \
1145 && (CLASS) == NON_SPECIAL_REGS) \
1146 ? GENERAL_REGS \
1147 : (CLASS))
c81bebd7 1148
f045b2c9
RS
1149/* Return the register class of a scratch register needed to copy IN into
1150 or out of a register in CLASS in MODE. If it can be done directly,
1151 NO_REGS is returned. */
1152
1153#define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \
1154 secondary_reload_class (CLASS, MODE, IN)
1155
0ac081f6
AH
1156/* If we are copying between FP or AltiVec registers and anything
1157 else, we need a memory location. */
7ea555a4 1158
0ac081f6
AH
1159#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
1160 ((CLASS1) != (CLASS2) && ((CLASS1) == FLOAT_REGS \
1161 || (CLASS2) == FLOAT_REGS \
1162 || (CLASS1) == ALTIVEC_REGS \
1163 || (CLASS2) == ALTIVEC_REGS))
7ea555a4 1164
f045b2c9
RS
1165/* Return the maximum number of consecutive registers
1166 needed to represent mode MODE in a register of class CLASS.
1167
1168 On RS/6000, this is the size of MODE in words,
1169 except in the FP regs, where a single reg is enough for two words. */
802a0058 1170#define CLASS_MAX_NREGS(CLASS, MODE) \
9ebbca7d 1171 (((CLASS) == FLOAT_REGS) \
2e360ab3 1172 ? ((GET_MODE_SIZE (MODE) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD) \
54b695e7
AH
1173 : (TARGET_E500_DOUBLE && (CLASS) == GENERAL_REGS && (MODE) == DFmode) \
1174 ? 1 \
c1aa3958 1175 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
580d3230 1176
580d3230 1177
cff9f8d5 1178/* Return a class of registers that cannot change FROM mode to TO mode. */
02188693 1179
a9baceb1
GK
1180#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
1181 (((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) \
1182 && GET_MODE_SIZE (FROM) >= 8 && GET_MODE_SIZE (TO) >= 8) \
1183 ? 0 \
1184 : GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
1185 ? reg_classes_intersect_p (FLOAT_REGS, CLASS) \
f82f556d
AH
1186 : (TARGET_E500_DOUBLE && (((TO) == DFmode) + ((FROM) == DFmode)) == 1) \
1187 ? reg_classes_intersect_p (GENERAL_REGS, CLASS) \
54b695e7
AH
1188 : (TARGET_E500_DOUBLE && (((TO) == DImode) + ((FROM) == DImode)) == 1) \
1189 ? reg_classes_intersect_p (GENERAL_REGS, CLASS) \
28636c6e 1190 : (TARGET_SPE && (SPE_VECTOR_MODE (FROM) + SPE_VECTOR_MODE (TO)) == 1) \
a9baceb1 1191 ? reg_classes_intersect_p (GENERAL_REGS, CLASS) \
b0c42aed 1192 : 0)
02188693 1193
f045b2c9
RS
1194/* Stack layout; function entry, exit and calling. */
1195
6b67933e
RK
1196/* Enumeration to give which calling sequence to use. */
1197enum rs6000_abi {
1198 ABI_NONE,
1199 ABI_AIX, /* IBM's AIX */
b6c9286a 1200 ABI_V4, /* System V.4/eabi */
ee890fe2 1201 ABI_DARWIN /* Apple's Darwin (OS X kernel) */
6b67933e
RK
1202};
1203
b6c9286a
MM
1204extern enum rs6000_abi rs6000_current_abi; /* available for use by subtarget */
1205
f045b2c9
RS
1206/* Define this if pushing a word on the stack
1207 makes the stack pointer a smaller address. */
1208#define STACK_GROWS_DOWNWARD
1209
327e5343
FJ
1210/* Offsets recorded in opcodes are a multiple of this alignment factor. */
1211#define DWARF_CIE_DATA_ALIGNMENT (-((int) (TARGET_32BIT ? 4 : 8)))
1212
f045b2c9
RS
1213/* Define this if the nominal address of the stack frame
1214 is at the high-address end of the local variables;
1215 that is, each additional local variable allocated
1216 goes at a more negative offset in the frame.
1217
1218 On the RS/6000, we grow upwards, from the area after the outgoing
1219 arguments. */
1220/* #define FRAME_GROWS_DOWNWARD */
1221
4697a36c 1222/* Size of the outgoing register save area */
9ebbca7d 1223#define RS6000_REG_SAVE ((DEFAULT_ABI == ABI_AIX \
ee890fe2 1224 || DEFAULT_ABI == ABI_DARWIN) \
9ebbca7d
GK
1225 ? (TARGET_64BIT ? 64 : 32) \
1226 : 0)
4697a36c
MM
1227
1228/* Size of the fixed area on the stack */
9ebbca7d 1229#define RS6000_SAVE_AREA \
50d440bc 1230 (((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) ? 24 : 8) \
9ebbca7d 1231 << (TARGET_64BIT ? 1 : 0))
4697a36c 1232
97f6e72f
DE
1233/* MEM representing address to save the TOC register */
1234#define RS6000_SAVE_TOC gen_rtx_MEM (Pmode, \
1235 plus_constant (stack_pointer_rtx, \
1236 (TARGET_32BIT ? 20 : 40)))
b6c9286a 1237
4697a36c
MM
1238/* Size of the V.4 varargs area if needed */
1239#define RS6000_VARARGS_AREA 0
1240
4697a36c 1241/* Align an address */
ed33106f 1242#define RS6000_ALIGN(n,a) (((n) + (a) - 1) & ~((a) - 1))
4697a36c
MM
1243
1244/* Size of V.4 varargs area in bytes */
1245#define RS6000_VARARGS_SIZE \
2f3e5814 1246 ((GP_ARG_NUM_REG * (TARGET_32BIT ? 4 : 8)) + (FP_ARG_NUM_REG * 8) + 8)
4697a36c 1247
f045b2c9
RS
1248/* Offset within stack frame to start allocating local variables at.
1249 If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
1250 first local allocated. Otherwise, it is the offset to the BEGINNING
c81bebd7 1251 of the first local allocated.
f045b2c9
RS
1252
1253 On the RS/6000, the frame pointer is the same as the stack pointer,
1254 except for dynamic allocations. So we start after the fixed area and
1255 outgoing parameter area. */
1256
802a0058 1257#define STARTING_FRAME_OFFSET \
7b094d6e
AH
1258 (RS6000_ALIGN (current_function_outgoing_args_size, \
1259 TARGET_ALTIVEC ? 16 : 8) \
802a0058
MM
1260 + RS6000_VARARGS_AREA \
1261 + RS6000_SAVE_AREA)
1262
1263/* Offset from the stack pointer register to an item dynamically
1264 allocated on the stack, e.g., by `alloca'.
1265
1266 The default value for this macro is `STACK_POINTER_OFFSET' plus the
1267 length of the outgoing arguments. The default is correct for most
1268 machines. See `function.c' for details. */
1269#define STACK_DYNAMIC_OFFSET(FUNDECL) \
7b094d6e
AH
1270 (RS6000_ALIGN (current_function_outgoing_args_size, \
1271 TARGET_ALTIVEC ? 16 : 8) \
802a0058 1272 + (STACK_POINTER_OFFSET))
f045b2c9
RS
1273
1274/* If we generate an insn to push BYTES bytes,
1275 this says how many the stack pointer really advances by.
1276 On RS/6000, don't define this because there are no push insns. */
1277/* #define PUSH_ROUNDING(BYTES) */
1278
1279/* Offset of first parameter from the argument pointer register value.
1280 On the RS/6000, we define the argument pointer to the start of the fixed
1281 area. */
4697a36c 1282#define FIRST_PARM_OFFSET(FNDECL) RS6000_SAVE_AREA
f045b2c9 1283
62153b61
JM
1284/* Offset from the argument pointer register value to the top of
1285 stack. This is different from FIRST_PARM_OFFSET because of the
1286 register save area. */
1287#define ARG_POINTER_CFA_OFFSET(FNDECL) 0
1288
f045b2c9
RS
1289/* Define this if stack space is still allocated for a parameter passed
1290 in a register. The value is the number of bytes allocated to this
1291 area. */
4697a36c 1292#define REG_PARM_STACK_SPACE(FNDECL) RS6000_REG_SAVE
f045b2c9
RS
1293
1294/* Define this if the above stack space is to be considered part of the
1295 space allocated by the caller. */
1296#define OUTGOING_REG_PARM_STACK_SPACE
1297
1298/* This is the difference between the logical top of stack and the actual sp.
1299
82e41834 1300 For the RS/6000, sp points past the fixed area. */
4697a36c 1301#define STACK_POINTER_OFFSET RS6000_SAVE_AREA
f045b2c9
RS
1302
1303/* Define this if the maximum size of all the outgoing args is to be
1304 accumulated and pushed during the prologue. The amount can be
1305 found in the variable current_function_outgoing_args_size. */
f73ad30e 1306#define ACCUMULATE_OUTGOING_ARGS 1
f045b2c9
RS
1307
1308/* Value is the number of bytes of arguments automatically
1309 popped when returning from a subroutine call.
8b109b37 1310 FUNDECL is the declaration node of the function (as a tree),
f045b2c9
RS
1311 FUNTYPE is the data type of the function (as a tree),
1312 or for a library call it is an identifier node for the subroutine name.
1313 SIZE is the number of bytes of arguments passed on the stack. */
1314
8b109b37 1315#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
f045b2c9
RS
1316
1317/* Define how to find the value returned by a function.
1318 VALTYPE is the data type of the value (as a tree).
1319 If the precise function being called is known, FUNC is its FUNCTION_DECL;
a6ebc39a
AH
1320 otherwise, FUNC is 0. */
1321
1322#define FUNCTION_VALUE(VALTYPE, FUNC) rs6000_function_value ((VALTYPE), (FUNC))
f045b2c9
RS
1323
1324/* Define how to find the value returned by a library function
1325 assuming the value has mode MODE. */
1326
ded9bf77 1327#define LIBCALL_VALUE(MODE) rs6000_libcall_value ((MODE))
f045b2c9 1328
6fa3f289
ZW
1329/* DRAFT_V4_STRUCT_RET defaults off. */
1330#define DRAFT_V4_STRUCT_RET 0
f607bc57 1331
bd5bd7ac 1332/* Let TARGET_RETURN_IN_MEMORY control what happens. */
f607bc57 1333#define DEFAULT_PCC_STRUCT_RETURN 0
f045b2c9 1334
a260abc9 1335/* Mode of stack savearea.
dfdfa60f
DE
1336 FUNCTION is VOIDmode because calling convention maintains SP.
1337 BLOCK needs Pmode for SP.
a260abc9
DE
1338 NONLOCAL needs twice Pmode to maintain both backchain and SP. */
1339#define STACK_SAVEAREA_MODE(LEVEL) \
dfdfa60f
DE
1340 (LEVEL == SAVE_FUNCTION ? VOIDmode \
1341 : LEVEL == SAVE_NONLOCAL ? (TARGET_32BIT ? DImode : TImode) : Pmode)
a260abc9 1342
4697a36c
MM
1343/* Minimum and maximum general purpose registers used to hold arguments. */
1344#define GP_ARG_MIN_REG 3
1345#define GP_ARG_MAX_REG 10
1346#define GP_ARG_NUM_REG (GP_ARG_MAX_REG - GP_ARG_MIN_REG + 1)
1347
1348/* Minimum and maximum floating point registers used to hold arguments. */
1349#define FP_ARG_MIN_REG 33
7509c759
MM
1350#define FP_ARG_AIX_MAX_REG 45
1351#define FP_ARG_V4_MAX_REG 40
9ebbca7d 1352#define FP_ARG_MAX_REG ((DEFAULT_ABI == ABI_AIX \
ee890fe2 1353 || DEFAULT_ABI == ABI_DARWIN) \
9ebbca7d 1354 ? FP_ARG_AIX_MAX_REG : FP_ARG_V4_MAX_REG)
4697a36c
MM
1355#define FP_ARG_NUM_REG (FP_ARG_MAX_REG - FP_ARG_MIN_REG + 1)
1356
0ac081f6
AH
1357/* Minimum and maximum AltiVec registers used to hold arguments. */
1358#define ALTIVEC_ARG_MIN_REG (FIRST_ALTIVEC_REGNO + 2)
1359#define ALTIVEC_ARG_MAX_REG (ALTIVEC_ARG_MIN_REG + 11)
1360#define ALTIVEC_ARG_NUM_REG (ALTIVEC_ARG_MAX_REG - ALTIVEC_ARG_MIN_REG + 1)
1361
4697a36c
MM
1362/* Return registers */
1363#define GP_ARG_RETURN GP_ARG_MIN_REG
1364#define FP_ARG_RETURN FP_ARG_MIN_REG
0ac081f6 1365#define ALTIVEC_ARG_RETURN (FIRST_ALTIVEC_REGNO + 2)
4697a36c 1366
7509c759 1367/* Flags for the call/call_value rtl operations set up by function_arg */
6a4cee5f 1368#define CALL_NORMAL 0x00000000 /* no special processing */
9ebbca7d 1369/* Bits in 0x00000001 are unused. */
6a4cee5f
MM
1370#define CALL_V4_CLEAR_FP_ARGS 0x00000002 /* V.4, no FP args passed */
1371#define CALL_V4_SET_FP_ARGS 0x00000004 /* V.4, FP args were passed */
1372#define CALL_LONG 0x00000008 /* always call indirect */
b9599e46 1373#define CALL_LIBCALL 0x00000010 /* libcall */
7509c759 1374
f57fe068
AM
1375/* We don't have prologue and epilogue functions to save/restore
1376 everything for most ABIs. */
1377#define WORLD_SAVE_P(INFO) 0
1378
f045b2c9
RS
1379/* 1 if N is a possible register number for a function value
1380 as seen by the caller.
1381
0ac081f6 1382 On RS/6000, this is r3, fp1, and v2 (for AltiVec). */
e87a88d3
AM
1383#define FUNCTION_VALUE_REGNO_P(N) \
1384 ((N) == GP_ARG_RETURN \
b2df7d08 1385 || ((N) == FP_ARG_RETURN && TARGET_HARD_FLOAT && TARGET_FPRS) \
44688022 1386 || ((N) == ALTIVEC_ARG_RETURN && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI))
f045b2c9
RS
1387
1388/* 1 if N is a possible register number for function argument passing.
0ac081f6
AH
1389 On RS/6000, these are r3-r10 and fp1-fp13.
1390 On AltiVec, v2 - v13 are used for passing vectors. */
4697a36c 1391#define FUNCTION_ARG_REGNO_P(N) \
e87a88d3
AM
1392 ((unsigned) (N) - GP_ARG_MIN_REG < GP_ARG_NUM_REG \
1393 || ((unsigned) (N) - ALTIVEC_ARG_MIN_REG < ALTIVEC_ARG_NUM_REG \
44688022 1394 && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI) \
e87a88d3 1395 || ((unsigned) (N) - FP_ARG_MIN_REG < FP_ARG_NUM_REG \
b2df7d08 1396 && TARGET_HARD_FLOAT && TARGET_FPRS))
f045b2c9 1397\f
00dba523
NC
1398/* A C structure for machine-specific, per-function data.
1399 This is added to the cfun structure. */
e2500fed 1400typedef struct machine_function GTY(())
00dba523 1401{
71f123ca
FS
1402 /* Flags if __builtin_return_address (n) with n >= 1 was used. */
1403 int ra_needs_full_frame;
c4501e62
JJ
1404 /* Some local-dynamic symbol. */
1405 const char *some_ld_name;
9b7b447f
AH
1406 /* Whether the instruction chain has been scanned already. */
1407 int insn_chain_scanned_p;
8c29550d
JJ
1408 /* Flags if __builtin_return_address (0) was used. */
1409 int ra_need_lr;
00dba523
NC
1410} machine_function;
1411
f045b2c9
RS
1412/* Define a data type for recording info about an argument list
1413 during the scan of that argument list. This data type should
1414 hold all necessary information about the function itself
1415 and about the args processed so far, enough to enable macros
1416 such as FUNCTION_ARG to determine where the next arg should go.
1417
1418 On the RS/6000, this is a structure. The first element is the number of
1419 total argument words, the second is used to store the next
1420 floating-point register number, and the third says how many more args we
4697a36c
MM
1421 have prototype types for.
1422
4cc833b7 1423 For ABI_V4, we treat these slightly differently -- `sysv_gregno' is
07488f32 1424 the next available GP register, `fregno' is the next available FP
4cc833b7
RH
1425 register, and `words' is the number of words used on the stack.
1426
bd227acc 1427 The varargs/stdarg support requires that this structure's size
4cc833b7 1428 be a multiple of sizeof(int). */
4697a36c
MM
1429
1430typedef struct rs6000_args
1431{
4cc833b7 1432 int words; /* # words used for passing GP registers */
6a4cee5f 1433 int fregno; /* next available FP register */
0ac081f6 1434 int vregno; /* next available AltiVec register */
6a4cee5f 1435 int nargs_prototype; /* # args left in the current prototype */
6a4cee5f 1436 int prototype; /* Whether a prototype was defined */
a6c9bed4 1437 int stdarg; /* Whether function is a stdarg function. */
6a4cee5f 1438 int call_cookie; /* Do special things for this call */
4cc833b7 1439 int sysv_gregno; /* next available GP register */
0b5383eb
DJ
1440 int intoffset; /* running offset in struct (darwin64) */
1441 int use_stack; /* any part of struct on stack (darwin64) */
1442 int named; /* false for varargs params */
4697a36c 1443} CUMULATIVE_ARGS;
f045b2c9 1444
f045b2c9
RS
1445/* Initialize a variable CUM of type CUMULATIVE_ARGS
1446 for a call to a function whose data type is FNTYPE.
1447 For a library call, FNTYPE is 0. */
1448
0f6937fe
AM
1449#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
1450 init_cumulative_args (&CUM, FNTYPE, LIBNAME, FALSE, FALSE, N_NAMED_ARGS)
f045b2c9
RS
1451
1452/* Similar, but when scanning the definition of a procedure. We always
1453 set NARGS_PROTOTYPE large so we never return an EXPR_LIST. */
1454
0f6937fe
AM
1455#define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \
1456 init_cumulative_args (&CUM, FNTYPE, LIBNAME, TRUE, FALSE, 1000)
b9599e46
FS
1457
1458/* Like INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls. */
1459
1460#define INIT_CUMULATIVE_LIBCALL_ARGS(CUM, MODE, LIBNAME) \
0f6937fe 1461 init_cumulative_args (&CUM, NULL_TREE, LIBNAME, FALSE, TRUE, 0)
f045b2c9
RS
1462
1463/* Update the data in CUM to advance over an argument
1464 of mode MODE and data type TYPE.
1465 (TYPE is null for libcalls where that information may not be available.) */
1466
1467#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
594a51fe 1468 function_arg_advance (&CUM, MODE, TYPE, NAMED, 0)
f045b2c9 1469
f045b2c9
RS
1470/* Determine where to put an argument to a function.
1471 Value is zero to push the argument on the stack,
1472 or a hard register in which to store the argument.
1473
1474 MODE is the argument's machine mode.
1475 TYPE is the data type of the argument (as a tree).
1476 This is null for libcalls where that information may
1477 not be available.
1478 CUM is a variable of type CUMULATIVE_ARGS which gives info about
1479 the preceding args and about the function being called.
1480 NAMED is nonzero if this argument is a named parameter
1481 (otherwise it is an extra parameter matching an ellipsis).
1482
1483 On RS/6000 the first eight words of non-FP are normally in registers
1484 and the rest are pushed. The first 13 FP args are in registers.
1485
1486 If this is floating-point and no prototype is specified, we use
4d6697ca
RK
1487 both an FP and integer register (or possibly FP reg and stack). Library
1488 functions (when TYPE is zero) always have the proper types for args,
1489 so we can pass the FP value just in one register. emit_library_function
1490 doesn't support EXPR_LIST anyway. */
f045b2c9 1491
4697a36c
MM
1492#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
1493 function_arg (&CUM, MODE, TYPE, NAMED)
f045b2c9 1494
c229cba9
DE
1495/* If defined, a C expression which determines whether, and in which
1496 direction, to pad out an argument with extra space. The value
1497 should be of type `enum direction': either `upward' to pad above
1498 the argument, `downward' to pad below, or `none' to inhibit
1499 padding. */
1500
9ebbca7d 1501#define FUNCTION_ARG_PADDING(MODE, TYPE) function_arg_padding (MODE, TYPE)
c229cba9 1502
b6c9286a 1503/* If defined, a C expression that gives the alignment boundary, in bits,
c81bebd7 1504 of an argument with the specified mode and type. If it is not defined,
b6c9286a
MM
1505 PARM_BOUNDARY is used for all arguments. */
1506
1507#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
1508 function_arg_boundary (MODE, TYPE)
1509
dfafc897 1510/* Implement `va_start' for varargs and stdarg. */
e5faf155
ZW
1511#define EXPAND_BUILTIN_VA_START(valist, nextarg) \
1512 rs6000_va_start (valist, nextarg)
dfafc897 1513
6e985040
AM
1514#define PAD_VARARGS_DOWN \
1515 (FUNCTION_ARG_PADDING (TYPE_MODE (type), type) == downward)
2a55fd42 1516
f045b2c9 1517/* Output assembler code to FILE to increment profiler label # LABELNO
58a39e45 1518 for profiling a function entry. */
f045b2c9
RS
1519
1520#define FUNCTION_PROFILER(FILE, LABELNO) \
58a39e45 1521 output_function_profiler ((FILE), (LABELNO));
f045b2c9
RS
1522
1523/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
1524 the stack pointer does not matter. No definition is equivalent to
1525 always zero.
1526
a0ab749a 1527 On the RS/6000, this is nonzero because we can restore the stack from
f045b2c9
RS
1528 its backpointer, which we maintain. */
1529#define EXIT_IGNORE_STACK 1
1530
a701949a
FS
1531/* Define this macro as a C expression that is nonzero for registers
1532 that are used by the epilogue or the return' pattern. The stack
1533 and frame pointer registers are already be assumed to be used as
1534 needed. */
1535
83720594
RH
1536#define EPILOGUE_USES(REGNO) \
1537 ((reload_completed && (REGNO) == LINK_REGISTER_REGNUM) \
b1765bde 1538 || (TARGET_ALTIVEC && (REGNO) == VRSAVE_REGNO) \
83720594 1539 || (current_function_calls_eh_return \
3553b09d 1540 && TARGET_AIX \
ff3867ae 1541 && (REGNO) == 2))
2bfcf297 1542
f045b2c9 1543\f
eaf1bcf1 1544/* TRAMPOLINE_TEMPLATE deleted */
f045b2c9
RS
1545
1546/* Length in units of the trampoline for entering a nested function. */
1547
b6c9286a 1548#define TRAMPOLINE_SIZE rs6000_trampoline_size ()
f045b2c9
RS
1549
1550/* Emit RTL insns to initialize the variable parts of a trampoline.
1551 FNADDR is an RTX for the address of the function's pure code.
1552 CXT is an RTX for the static chain value for the function. */
1553
1554#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT) \
b6c9286a 1555 rs6000_initialize_trampoline (ADDR, FNADDR, CXT)
f045b2c9 1556\f
f33985c6
MS
1557/* Definitions for __builtin_return_address and __builtin_frame_address.
1558 __builtin_return_address (0) should give link register (65), enable
82e41834 1559 this. */
f33985c6
MS
1560/* This should be uncommented, so that the link register is used, but
1561 currently this would result in unmatched insns and spilling fixed
1562 registers so we'll leave it for another day. When these problems are
1563 taken care of one additional fetch will be necessary in RETURN_ADDR_RTX.
1564 (mrs) */
1565/* #define RETURN_ADDR_IN_PREVIOUS_FRAME */
f09d4c33 1566
b6c9286a
MM
1567/* Number of bytes into the frame return addresses can be found. See
1568 rs6000_stack_info in rs6000.c for more information on how the different
1569 abi's store the return address. */
1570#define RETURN_ADDRESS_OFFSET \
1571 ((DEFAULT_ABI == ABI_AIX \
50d440bc 1572 || DEFAULT_ABI == ABI_DARWIN) ? (TARGET_32BIT ? 8 : 16) : \
3b370352 1573 (DEFAULT_ABI == ABI_V4) ? 4 : \
c4636dd1 1574 (internal_error ("RETURN_ADDRESS_OFFSET not supported"), 0))
f09d4c33 1575
f33985c6
MS
1576/* The current return address is in link register (65). The return address
1577 of anything farther back is accessed normally at an offset of 8 from the
1578 frame pointer. */
71f123ca
FS
1579#define RETURN_ADDR_RTX(COUNT, FRAME) \
1580 (rs6000_return_addr (COUNT, FRAME))
1581
f33985c6 1582\f
f045b2c9
RS
1583/* Definitions for register eliminations.
1584
1585 We have two registers that can be eliminated on the RS/6000. First, the
1586 frame pointer register can often be eliminated in favor of the stack
1587 pointer register. Secondly, the argument pointer register can always be
642a35f1
JW
1588 eliminated; it is replaced with either the stack or frame pointer.
1589
1590 In addition, we use the elimination mechanism to see if r30 is needed
1591 Initially we assume that it isn't. If it is, we spill it. This is done
1592 by making it an eliminable register. We replace it with itself so that
1593 if it isn't needed, then existing uses won't be modified. */
f045b2c9
RS
1594
1595/* This is an array of structures. Each structure initializes one pair
1596 of eliminable registers. The "from" register number is given first,
1597 followed by "to". Eliminations of the same "from" register are listed
1598 in order of preference. */
1599#define ELIMINABLE_REGS \
1600{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
1601 { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
642a35f1 1602 { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
97b23853 1603 { RS6000_PIC_OFFSET_TABLE_REGNUM, RS6000_PIC_OFFSET_TABLE_REGNUM } }
f045b2c9
RS
1604
1605/* Given FROM and TO register numbers, say whether this elimination is allowed.
1606 Frame pointer elimination is automatically handled.
1607
1608 For the RS/6000, if frame pointer elimination is being done, we would like
642a35f1
JW
1609 to convert ap into fp, not sp.
1610
abc95ed3 1611 We need r30 if -mminimal-toc was specified, and there are constant pool
642a35f1 1612 references. */
f045b2c9 1613
97b23853
GK
1614#define CAN_ELIMINATE(FROM, TO) \
1615 ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM \
1616 ? ! frame_pointer_needed \
1617 : (FROM) == RS6000_PIC_OFFSET_TABLE_REGNUM \
1618 ? ! TARGET_MINIMAL_TOC || TARGET_NO_TOC || get_pool_size () == 0 \
f045b2c9
RS
1619 : 1)
1620
1621/* Define the offset between two registers, one to be eliminated, and the other
1622 its replacement, at the start of a routine. */
d1d0c603
JJ
1623#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
1624 ((OFFSET) = rs6000_initial_elimination_offset(FROM, TO))
f045b2c9
RS
1625\f
1626/* Addressing modes, and classification of registers for them. */
1627
940da324
JL
1628#define HAVE_PRE_DECREMENT 1
1629#define HAVE_PRE_INCREMENT 1
f045b2c9
RS
1630
1631/* Macros to check register numbers against specific register classes. */
1632
1633/* These assume that REGNO is a hard or pseudo reg number.
1634 They give nonzero only if REGNO is a hard reg of the suitable class
1635 or a pseudo reg currently allocated to a suitable hard reg.
1636 Since they use reg_renumber, they are safe only once reg_renumber
1637 has been allocated, which happens in local-alloc.c. */
1638
1639#define REGNO_OK_FOR_INDEX_P(REGNO) \
1640((REGNO) < FIRST_PSEUDO_REGISTER \
1641 ? (REGNO) <= 31 || (REGNO) == 67 \
1642 : (reg_renumber[REGNO] >= 0 \
1643 && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67)))
1644
1645#define REGNO_OK_FOR_BASE_P(REGNO) \
1646((REGNO) < FIRST_PSEUDO_REGISTER \
1647 ? ((REGNO) > 0 && (REGNO) <= 31) || (REGNO) == 67 \
1648 : (reg_renumber[REGNO] > 0 \
1649 && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67)))
1650\f
1651/* Maximum number of registers that can appear in a valid memory address. */
1652
1653#define MAX_REGS_PER_ADDRESS 2
1654
1655/* Recognize any constant value that is a valid address. */
1656
6eff269e
BK
1657#define CONSTANT_ADDRESS_P(X) \
1658 (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
1659 || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
1660 || GET_CODE (X) == HIGH)
f045b2c9
RS
1661
1662/* Nonzero if the constant value X is a legitimate general operand.
1663 It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.
1664
1665 On the RS/6000, all integer constants are acceptable, most won't be valid
1666 for particular insns, though. Only easy FP constants are
1667 acceptable. */
1668
1669#define LEGITIMATE_CONSTANT_P(X) \
49a2166f
AH
1670 (((GET_CODE (X) != CONST_DOUBLE \
1671 && GET_CODE (X) != CONST_VECTOR) \
1672 || GET_MODE (X) == VOIDmode \
c4501e62 1673 || (TARGET_POWERPC64 && GET_MODE (X) == DImode) \
49a2166f
AH
1674 || easy_fp_constant (X, GET_MODE (X)) \
1675 || easy_vector_constant (X, GET_MODE (X))) \
c4501e62 1676 && !rs6000_tls_referenced_p (X))
f045b2c9 1677
48d72335
DE
1678#define EASY_VECTOR_15(n) ((n) >= -16 && (n) <= 15)
1679#define EASY_VECTOR_15_ADD_SELF(n) ((n) >= 0x10 && (n) <= 0x1e && !((n) & 1))
1680
f045b2c9
RS
1681/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1682 and check its validity for a certain class.
1683 We have two alternate definitions for each of them.
1684 The usual definition accepts all pseudo regs; the other rejects
1685 them unless they have been allocated suitable hard regs.
1686 The symbol REG_OK_STRICT causes the latter definition to be used.
1687
1688 Most source files want to accept pseudo regs in the hope that
1689 they will get allocated to the class that the insn wants them to be in.
1690 Source files for reload pass need to be strict.
1691 After reload, it makes no difference, since pseudo regs have
1692 been eliminated by then. */
1693
258bfae2
FS
1694#ifdef REG_OK_STRICT
1695# define REG_OK_STRICT_FLAG 1
1696#else
1697# define REG_OK_STRICT_FLAG 0
1698#endif
f045b2c9
RS
1699
1700/* Nonzero if X is a hard reg that can be used as an index
258bfae2
FS
1701 or if it is a pseudo reg in the non-strict case. */
1702#define INT_REG_OK_FOR_INDEX_P(X, STRICT) \
1703 ((! (STRICT) \
1704 && (REGNO (X) <= 31 \
1705 || REGNO (X) == ARG_POINTER_REGNUM \
1706 || REGNO (X) >= FIRST_PSEUDO_REGISTER)) \
1707 || ((STRICT) && REGNO_OK_FOR_INDEX_P (REGNO (X))))
f045b2c9
RS
1708
1709/* Nonzero if X is a hard reg that can be used as a base reg
258bfae2
FS
1710 or if it is a pseudo reg in the non-strict case. */
1711#define INT_REG_OK_FOR_BASE_P(X, STRICT) \
1712 (REGNO (X) > 0 && INT_REG_OK_FOR_INDEX_P (X, (STRICT)))
f045b2c9 1713
258bfae2
FS
1714#define REG_OK_FOR_INDEX_P(X) INT_REG_OK_FOR_INDEX_P (X, REG_OK_STRICT_FLAG)
1715#define REG_OK_FOR_BASE_P(X) INT_REG_OK_FOR_BASE_P (X, REG_OK_STRICT_FLAG)
f045b2c9
RS
1716\f
1717/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
1718 that is a valid memory address for an instruction.
1719 The MODE argument is the machine mode for the MEM expression
1720 that wants to use this address.
1721
1722 On the RS/6000, there are four valid address: a SYMBOL_REF that
1723 refers to a constant pool entry of an address (or the sum of it
1724 plus a constant), a short (16-bit signed) constant plus a register,
1725 the sum of two registers, or a register indirect, possibly with an
5bdc5878 1726 auto-increment. For DFmode and DImode with a constant plus register,
2f3e5814 1727 we must ensure that both words are addressable or PowerPC64 with offset
1427100a
DE
1728 word aligned.
1729
1730 For modes spanning multiple registers (DFmode in 32-bit GPRs,
1731 32-bit DImode, TImode), indexed addressing cannot be used because
1732 adjacent memory cells are accessed by adding word-sized offsets
1733 during assembly output. */
f045b2c9 1734
258bfae2
FS
1735#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
1736{ if (rs6000_legitimate_address (MODE, X, REG_OK_STRICT_FLAG)) \
1737 goto ADDR; \
f045b2c9
RS
1738}
1739\f
1740/* Try machine-dependent ways of modifying an illegitimate address
1741 to be legitimate. If we find one, return the new, valid address.
1742 This macro is used in only one place: `memory_address' in explow.c.
1743
1744 OLDX is the address as it was before break_out_memory_refs was called.
1745 In some cases it is useful to look at this to decide what needs to be done.
1746
1747 MODE and WIN are passed so that this macro can use
1748 GO_IF_LEGITIMATE_ADDRESS.
1749
1750 It is always safe for this macro to do nothing. It exists to recognize
1751 opportunities to optimize the output.
1752
1753 On RS/6000, first check for the sum of a register with a constant
1754 integer that is out of range. If so, generate code to add the
1755 constant with the low-order 16 bits masked to the register and force
1756 this result into another register (this can be done with `cau').
c81bebd7 1757 Then generate an address of REG+(CONST&0xffff), allowing for the
f045b2c9
RS
1758 possibility of bit 16 being a one.
1759
1760 Then check for the sum of a register and something not constant, try to
1761 load the other things into a register and return the sum. */
1762
9ebbca7d
GK
1763#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
1764{ rtx result = rs6000_legitimize_address (X, OLDX, MODE); \
1765 if (result != NULL_RTX) \
1766 { \
1767 (X) = result; \
1768 goto WIN; \
1769 } \
f045b2c9
RS
1770}
1771
a260abc9
DE
1772/* Try a machine-dependent way of reloading an illegitimate address
1773 operand. If we find one, push the reload and jump to WIN. This
1774 macro is used in only one place: `find_reloads_address' in reload.c.
1775
f676971a 1776 Implemented on rs6000 by rs6000_legitimize_reload_address.
24ea750e 1777 Note that (X) is evaluated twice; this is safe in current usage. */
f676971a 1778
a9098fd0
GK
1779#define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN) \
1780do { \
24ea750e
DJ
1781 int win; \
1782 (X) = rs6000_legitimize_reload_address ((X), (MODE), (OPNUM), \
1783 (int)(TYPE), (IND_LEVELS), &win); \
1784 if ( win ) \
1785 goto WIN; \
a260abc9
DE
1786} while (0)
1787
f045b2c9 1788/* Go to LABEL if ADDR (a legitimate address expression)
4d588c14 1789 has an effect that depends on the machine mode it is used for. */
f045b2c9
RS
1790
1791#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
4d588c14
RH
1792do { \
1793 if (rs6000_mode_dependent_address (ADDR)) \
f045b2c9 1794 goto LABEL; \
4d588c14 1795} while (0)
766a866c
MM
1796\f
1797/* The register number of the register used to address a table of
1798 static data addresses in memory. In some cases this register is
1799 defined by a processor's "application binary interface" (ABI).
1800 When this macro is defined, RTL is generated for this register
1801 once, as with the stack pointer and frame pointer registers. If
1802 this macro is not defined, it is up to the machine-dependent files
1803 to allocate such a register (if necessary). */
1804
1db02437
FS
1805#define RS6000_PIC_OFFSET_TABLE_REGNUM 30
1806#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? RS6000_PIC_OFFSET_TABLE_REGNUM : INVALID_REGNUM)
766a866c 1807
97b23853 1808#define TOC_REGISTER (TARGET_MINIMAL_TOC ? RS6000_PIC_OFFSET_TABLE_REGNUM : 2)
9ebbca7d 1809
766a866c
MM
1810/* Define this macro if the register defined by
1811 `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. Do not define
089a05b8 1812 this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined. */
766a866c
MM
1813
1814/* #define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED */
1815
1816/* By generating position-independent code, when two different
1817 programs (A and B) share a common library (libC.a), the text of
1818 the library can be shared whether or not the library is linked at
1819 the same address for both programs. In some of these
1820 environments, position-independent code requires not only the use
1821 of different addressing modes, but also special code to enable the
1822 use of these addressing modes.
1823
1824 The `FINALIZE_PIC' macro serves as a hook to emit these special
1825 codes once the function is being compiled into assembly code, but
1826 not before. (It is not done before, because in the case of
1827 compiling an inline function, it would lead to multiple PIC
1828 prologues being included in functions which used inline functions
1829 and were compiled to assembly language.) */
1830
8d30c4ee 1831/* #define FINALIZE_PIC */
766a866c 1832
766a866c
MM
1833/* A C expression that is nonzero if X is a legitimate immediate
1834 operand on the target machine when generating position independent
1835 code. You can assume that X satisfies `CONSTANT_P', so you need
1836 not check this. You can also assume FLAG_PIC is true, so you need
1837 not check it either. You need not define this macro if all
1838 constants (including `SYMBOL_REF') can be immediate operands when
1839 generating position independent code. */
1840
1841/* #define LEGITIMATE_PIC_OPERAND_P (X) */
f045b2c9
RS
1842\f
1843/* Define this if some processing needs to be done immediately before
4255474b 1844 emitting code for an insn. */
f045b2c9 1845
4255474b 1846/* #define FINAL_PRESCAN_INSN(INSN,OPERANDS,NOPERANDS) */
f045b2c9
RS
1847
1848/* Specify the machine mode that this machine uses
1849 for the index in the tablejump instruction. */
e1565e65 1850#define CASE_VECTOR_MODE SImode
f045b2c9 1851
18543a22
ILT
1852/* Define as C expression which evaluates to nonzero if the tablejump
1853 instruction expects the table to contain offsets from the address of the
1854 table.
82e41834 1855 Do not define this if the table should contain absolute addresses. */
18543a22 1856#define CASE_VECTOR_PC_RELATIVE 1
f045b2c9 1857
f045b2c9
RS
1858/* Define this as 1 if `char' should by default be signed; else as 0. */
1859#define DEFAULT_SIGNED_CHAR 0
1860
1861/* This flag, if defined, says the same insns that convert to a signed fixnum
1862 also convert validly to an unsigned one. */
1863
1864/* #define FIXUNS_TRUNC_LIKE_FIX_TRUNC */
1865
c1618c0c
DE
1866/* An integer expression for the size in bits of the largest integer machine
1867 mode that should actually be used. */
1868
1869/* Allow pairs of registers to be used, which is the intent of the default. */
1870#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_POWERPC64 ? TImode : DImode)
1871
f045b2c9
RS
1872/* Max number of bytes we can move from memory to memory
1873 in one reasonably fast instruction. */
2f3e5814 1874#define MOVE_MAX (! TARGET_POWERPC64 ? 4 : 8)
7e69e155 1875#define MAX_MOVE_MAX 8
f045b2c9
RS
1876
1877/* Nonzero if access to memory by bytes is no faster than for words.
a0ab749a 1878 Also nonzero if doing byte operations (specifically shifts) in registers
f045b2c9
RS
1879 is undesirable. */
1880#define SLOW_BYTE_ACCESS 1
1881
9a63901f
RK
1882/* Define if operations between registers always perform the operation
1883 on the full register even if a narrower mode is specified. */
1884#define WORD_REGISTER_OPERATIONS
1885
1886/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
1887 will either zero-extend or sign-extend. The value of this macro should
1888 be the code that says which one of the two operations is implicitly
f822d252 1889 done, UNKNOWN if none. */
9a63901f 1890#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
225211e2
RK
1891
1892/* Define if loading short immediate values into registers sign extends. */
1893#define SHORT_IMMEDIATES_SIGN_EXTEND
fdaff8ba 1894\f
f045b2c9
RS
1895/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1896 is done just by pretending it is already truncated. */
1897#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1898
94993909 1899/* The cntlzw and cntlzd instructions return 32 and 64 for input of zero. */
d865b122
DE
1900#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
1901 ((VALUE) = ((MODE) == SImode ? 32 : 64))
1902
94993909
DE
1903/* The CTZ patterns return -1 for input of zero. */
1904#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = -1)
1905
f045b2c9
RS
1906/* Specify the machine mode that pointers have.
1907 After generation of rtl, the compiler makes no further distinction
1908 between pointers and any other objects of this machine mode. */
2f3e5814 1909#define Pmode (TARGET_32BIT ? SImode : DImode)
f045b2c9 1910
a3c9585f 1911/* Supply definition of STACK_SIZE_MODE for allocate_dynamic_stack_space. */
4c81e946
FJ
1912#define STACK_SIZE_MODE (TARGET_32BIT ? SImode : DImode)
1913
f045b2c9 1914/* Mode of a function address in a call instruction (for indexing purposes).
f045b2c9 1915 Doesn't matter on RS/6000. */
5b71a4e7 1916#define FUNCTION_MODE SImode
f045b2c9
RS
1917
1918/* Define this if addresses of constant functions
1919 shouldn't be put through pseudo regs where they can be cse'd.
1920 Desirable on machines where ordinary constants are expensive
1921 but a CALL with constant address is cheap. */
1922#define NO_FUNCTION_CSE
1923
d969caf8 1924/* Define this to be nonzero if shift instructions ignore all but the low-order
6febd581
RK
1925 few bits.
1926
1927 The sle and sre instructions which allow SHIFT_COUNT_TRUNCATED
1928 have been dropped from the PowerPC architecture. */
1929
4697a36c 1930#define SHIFT_COUNT_TRUNCATED (TARGET_POWER ? 1 : 0)
f045b2c9 1931
f045b2c9
RS
1932/* Adjust the length of an INSN. LENGTH is the currently-computed length and
1933 should be adjusted to reflect any required changes. This macro is used when
1934 there is some systematic length adjustment required that would be difficult
1935 to express in the length attribute. */
1936
1937/* #define ADJUST_INSN_LENGTH(X,LENGTH) */
1938
39a10a29
GK
1939/* Given a comparison code (EQ, NE, etc.) and the first operand of a
1940 COMPARE, return the mode to be used for the comparison. For
1941 floating-point, CCFPmode should be used. CCUNSmode should be used
1942 for unsigned comparisons. CCEQmode should be used when we are
1943 doing an inequality comparison on the result of a
1944 comparison. CCmode should be used in all other cases. */
c5defebb 1945
b565a316 1946#define SELECT_CC_MODE(OP,X,Y) \
f045b2c9 1947 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? CCFPmode \
c5defebb 1948 : (OP) == GTU || (OP) == LTU || (OP) == GEU || (OP) == LEU ? CCUNSmode \
ec8e098d 1949 : (((OP) == EQ || (OP) == NE) && COMPARISON_P (X) \
c5defebb 1950 ? CCEQmode : CCmode))
f045b2c9 1951
b39358e1
GK
1952/* Can the condition code MODE be safely reversed? This is safe in
1953 all cases on this port, because at present it doesn't use the
1954 trapping FP comparisons (fcmpo). */
1955#define REVERSIBLE_CC_MODE(MODE) 1
1956
1957/* Given a condition code and a mode, return the inverse condition. */
1958#define REVERSE_CONDITION(CODE, MODE) rs6000_reverse_condition (MODE, CODE)
1959
f045b2c9 1960/* Define the information needed to generate branch and scc insns. This is
b39358e1 1961 stored from the compare operation. */
f045b2c9 1962
e2500fed
GK
1963extern GTY(()) rtx rs6000_compare_op0;
1964extern GTY(()) rtx rs6000_compare_op1;
f045b2c9 1965extern int rs6000_compare_fp_p;
f045b2c9
RS
1966\f
1967/* Control the assembler format that we output. */
1968
1b279f39
DE
1969/* A C string constant describing how to begin a comment in the target
1970 assembler language. The compiler assumes that the comment will end at
1971 the end of the line. */
1972#define ASM_COMMENT_START " #"
6b67933e 1973
38c1f2d7
MM
1974/* Flag to say the TOC is initialized */
1975extern int toc_initialized;
1976
f045b2c9
RS
1977/* Macro to output a special constant pool entry. Go to WIN if we output
1978 it. Otherwise, it is written the usual way.
1979
1980 On the RS/6000, toc entries are handled this way. */
1981
a9098fd0
GK
1982#define ASM_OUTPUT_SPECIAL_POOL_ENTRY(FILE, X, MODE, ALIGN, LABELNO, WIN) \
1983{ if (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (X, MODE)) \
1984 { \
1985 output_toc (FILE, X, LABELNO, MODE); \
1986 goto WIN; \
1987 } \
f045b2c9
RS
1988}
1989
ebd97b96
DE
1990#ifdef HAVE_GAS_WEAK
1991#define RS6000_WEAK 1
1992#else
1993#define RS6000_WEAK 0
1994#endif
290ad355 1995
79c4e63f
AM
1996#if RS6000_WEAK
1997/* Used in lieu of ASM_WEAKEN_LABEL. */
1998#define ASM_WEAKEN_DECL(FILE, DECL, NAME, VAL) \
1999 do \
2000 { \
2001 fputs ("\t.weak\t", (FILE)); \
85b776df 2002 RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
79c4e63f 2003 if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \
85b776df 2004 && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \
79c4e63f 2005 { \
cbaaba19
DE
2006 if (TARGET_XCOFF) \
2007 fputs ("[DS]", (FILE)); \
ca734b39 2008 fputs ("\n\t.weak\t.", (FILE)); \
cbaaba19 2009 RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
79c4e63f
AM
2010 } \
2011 fputc ('\n', (FILE)); \
2012 if (VAL) \
2013 { \
2014 ASM_OUTPUT_DEF ((FILE), (NAME), (VAL)); \
2015 if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \
85b776df 2016 && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \
79c4e63f
AM
2017 { \
2018 fputs ("\t.set\t.", (FILE)); \
cbaaba19 2019 RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
79c4e63f 2020 fputs (",.", (FILE)); \
cbaaba19 2021 RS6000_OUTPUT_BASENAME ((FILE), (VAL)); \
79c4e63f
AM
2022 fputc ('\n', (FILE)); \
2023 } \
2024 } \
2025 } \
2026 while (0)
2027#endif
2028
2029/* This implements the `alias' attribute. */
2030#undef ASM_OUTPUT_DEF_FROM_DECLS
2031#define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \
2032 do \
2033 { \
2034 const char *alias = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
2035 const char *name = IDENTIFIER_POINTER (TARGET); \
2036 if (TREE_CODE (DECL) == FUNCTION_DECL \
85b776df 2037 && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \
79c4e63f
AM
2038 { \
2039 if (TREE_PUBLIC (DECL)) \
2040 { \
2041 if (!RS6000_WEAK || !DECL_WEAK (DECL)) \
2042 { \
2043 fputs ("\t.globl\t.", FILE); \
cbaaba19 2044 RS6000_OUTPUT_BASENAME (FILE, alias); \
79c4e63f
AM
2045 putc ('\n', FILE); \
2046 } \
2047 } \
2048 else if (TARGET_XCOFF) \
2049 { \
2050 fputs ("\t.lglobl\t.", FILE); \
cbaaba19 2051 RS6000_OUTPUT_BASENAME (FILE, alias); \
79c4e63f
AM
2052 putc ('\n', FILE); \
2053 } \
2054 fputs ("\t.set\t.", FILE); \
cbaaba19 2055 RS6000_OUTPUT_BASENAME (FILE, alias); \
79c4e63f 2056 fputs (",.", FILE); \
cbaaba19 2057 RS6000_OUTPUT_BASENAME (FILE, name); \
79c4e63f
AM
2058 fputc ('\n', FILE); \
2059 } \
2060 ASM_OUTPUT_DEF (FILE, alias, name); \
2061 } \
2062 while (0)
290ad355 2063
1bc7c5b6
ZW
2064#define TARGET_ASM_FILE_START rs6000_file_start
2065
f045b2c9
RS
2066/* Output to assembler file text saying following lines
2067 may contain character constants, extra white space, comments, etc. */
2068
2069#define ASM_APP_ON ""
2070
2071/* Output to assembler file text saying following lines
2072 no longer contain unusual constructs. */
2073
2074#define ASM_APP_OFF ""
2075
f045b2c9
RS
2076/* How to refer to registers in assembler output.
2077 This sequence is indexed by compiler's hard-register-number (see above). */
2078
82e41834 2079extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
c81bebd7
MM
2080
2081#define REGISTER_NAMES \
2082{ \
2083 &rs6000_reg_names[ 0][0], /* r0 */ \
2084 &rs6000_reg_names[ 1][0], /* r1 */ \
2085 &rs6000_reg_names[ 2][0], /* r2 */ \
2086 &rs6000_reg_names[ 3][0], /* r3 */ \
2087 &rs6000_reg_names[ 4][0], /* r4 */ \
2088 &rs6000_reg_names[ 5][0], /* r5 */ \
2089 &rs6000_reg_names[ 6][0], /* r6 */ \
2090 &rs6000_reg_names[ 7][0], /* r7 */ \
2091 &rs6000_reg_names[ 8][0], /* r8 */ \
2092 &rs6000_reg_names[ 9][0], /* r9 */ \
2093 &rs6000_reg_names[10][0], /* r10 */ \
2094 &rs6000_reg_names[11][0], /* r11 */ \
2095 &rs6000_reg_names[12][0], /* r12 */ \
2096 &rs6000_reg_names[13][0], /* r13 */ \
2097 &rs6000_reg_names[14][0], /* r14 */ \
2098 &rs6000_reg_names[15][0], /* r15 */ \
2099 &rs6000_reg_names[16][0], /* r16 */ \
2100 &rs6000_reg_names[17][0], /* r17 */ \
2101 &rs6000_reg_names[18][0], /* r18 */ \
2102 &rs6000_reg_names[19][0], /* r19 */ \
2103 &rs6000_reg_names[20][0], /* r20 */ \
2104 &rs6000_reg_names[21][0], /* r21 */ \
2105 &rs6000_reg_names[22][0], /* r22 */ \
2106 &rs6000_reg_names[23][0], /* r23 */ \
2107 &rs6000_reg_names[24][0], /* r24 */ \
2108 &rs6000_reg_names[25][0], /* r25 */ \
2109 &rs6000_reg_names[26][0], /* r26 */ \
2110 &rs6000_reg_names[27][0], /* r27 */ \
2111 &rs6000_reg_names[28][0], /* r28 */ \
2112 &rs6000_reg_names[29][0], /* r29 */ \
2113 &rs6000_reg_names[30][0], /* r30 */ \
2114 &rs6000_reg_names[31][0], /* r31 */ \
2115 \
2116 &rs6000_reg_names[32][0], /* fr0 */ \
2117 &rs6000_reg_names[33][0], /* fr1 */ \
2118 &rs6000_reg_names[34][0], /* fr2 */ \
2119 &rs6000_reg_names[35][0], /* fr3 */ \
2120 &rs6000_reg_names[36][0], /* fr4 */ \
2121 &rs6000_reg_names[37][0], /* fr5 */ \
2122 &rs6000_reg_names[38][0], /* fr6 */ \
2123 &rs6000_reg_names[39][0], /* fr7 */ \
2124 &rs6000_reg_names[40][0], /* fr8 */ \
2125 &rs6000_reg_names[41][0], /* fr9 */ \
2126 &rs6000_reg_names[42][0], /* fr10 */ \
2127 &rs6000_reg_names[43][0], /* fr11 */ \
2128 &rs6000_reg_names[44][0], /* fr12 */ \
2129 &rs6000_reg_names[45][0], /* fr13 */ \
2130 &rs6000_reg_names[46][0], /* fr14 */ \
2131 &rs6000_reg_names[47][0], /* fr15 */ \
2132 &rs6000_reg_names[48][0], /* fr16 */ \
2133 &rs6000_reg_names[49][0], /* fr17 */ \
2134 &rs6000_reg_names[50][0], /* fr18 */ \
2135 &rs6000_reg_names[51][0], /* fr19 */ \
2136 &rs6000_reg_names[52][0], /* fr20 */ \
2137 &rs6000_reg_names[53][0], /* fr21 */ \
2138 &rs6000_reg_names[54][0], /* fr22 */ \
2139 &rs6000_reg_names[55][0], /* fr23 */ \
2140 &rs6000_reg_names[56][0], /* fr24 */ \
2141 &rs6000_reg_names[57][0], /* fr25 */ \
2142 &rs6000_reg_names[58][0], /* fr26 */ \
2143 &rs6000_reg_names[59][0], /* fr27 */ \
2144 &rs6000_reg_names[60][0], /* fr28 */ \
2145 &rs6000_reg_names[61][0], /* fr29 */ \
2146 &rs6000_reg_names[62][0], /* fr30 */ \
2147 &rs6000_reg_names[63][0], /* fr31 */ \
2148 \
2149 &rs6000_reg_names[64][0], /* mq */ \
2150 &rs6000_reg_names[65][0], /* lr */ \
2151 &rs6000_reg_names[66][0], /* ctr */ \
2152 &rs6000_reg_names[67][0], /* ap */ \
2153 \
2154 &rs6000_reg_names[68][0], /* cr0 */ \
2155 &rs6000_reg_names[69][0], /* cr1 */ \
2156 &rs6000_reg_names[70][0], /* cr2 */ \
2157 &rs6000_reg_names[71][0], /* cr3 */ \
2158 &rs6000_reg_names[72][0], /* cr4 */ \
2159 &rs6000_reg_names[73][0], /* cr5 */ \
2160 &rs6000_reg_names[74][0], /* cr6 */ \
2161 &rs6000_reg_names[75][0], /* cr7 */ \
802a0058 2162 \
9ebbca7d 2163 &rs6000_reg_names[76][0], /* xer */ \
0ac081f6
AH
2164 \
2165 &rs6000_reg_names[77][0], /* v0 */ \
2166 &rs6000_reg_names[78][0], /* v1 */ \
2167 &rs6000_reg_names[79][0], /* v2 */ \
2168 &rs6000_reg_names[80][0], /* v3 */ \
2169 &rs6000_reg_names[81][0], /* v4 */ \
2170 &rs6000_reg_names[82][0], /* v5 */ \
2171 &rs6000_reg_names[83][0], /* v6 */ \
2172 &rs6000_reg_names[84][0], /* v7 */ \
2173 &rs6000_reg_names[85][0], /* v8 */ \
2174 &rs6000_reg_names[86][0], /* v9 */ \
2175 &rs6000_reg_names[87][0], /* v10 */ \
2176 &rs6000_reg_names[88][0], /* v11 */ \
2177 &rs6000_reg_names[89][0], /* v12 */ \
2178 &rs6000_reg_names[90][0], /* v13 */ \
2179 &rs6000_reg_names[91][0], /* v14 */ \
2180 &rs6000_reg_names[92][0], /* v15 */ \
2181 &rs6000_reg_names[93][0], /* v16 */ \
2182 &rs6000_reg_names[94][0], /* v17 */ \
2183 &rs6000_reg_names[95][0], /* v18 */ \
2184 &rs6000_reg_names[96][0], /* v19 */ \
2185 &rs6000_reg_names[97][0], /* v20 */ \
2186 &rs6000_reg_names[98][0], /* v21 */ \
2187 &rs6000_reg_names[99][0], /* v22 */ \
2188 &rs6000_reg_names[100][0], /* v23 */ \
2189 &rs6000_reg_names[101][0], /* v24 */ \
2190 &rs6000_reg_names[102][0], /* v25 */ \
2191 &rs6000_reg_names[103][0], /* v26 */ \
2192 &rs6000_reg_names[104][0], /* v27 */ \
2193 &rs6000_reg_names[105][0], /* v28 */ \
2194 &rs6000_reg_names[106][0], /* v29 */ \
2195 &rs6000_reg_names[107][0], /* v30 */ \
2196 &rs6000_reg_names[108][0], /* v31 */ \
2197 &rs6000_reg_names[109][0], /* vrsave */ \
5f004351 2198 &rs6000_reg_names[110][0], /* vscr */ \
a3170dc6
AH
2199 &rs6000_reg_names[111][0], /* spe_acc */ \
2200 &rs6000_reg_names[112][0], /* spefscr */ \
c81bebd7
MM
2201}
2202
f045b2c9
RS
2203/* Table of additional register names to use in user input. */
2204
2205#define ADDITIONAL_REGISTER_NAMES \
c4d38ccb
MM
2206 {{"r0", 0}, {"r1", 1}, {"r2", 2}, {"r3", 3}, \
2207 {"r4", 4}, {"r5", 5}, {"r6", 6}, {"r7", 7}, \
2208 {"r8", 8}, {"r9", 9}, {"r10", 10}, {"r11", 11}, \
2209 {"r12", 12}, {"r13", 13}, {"r14", 14}, {"r15", 15}, \
2210 {"r16", 16}, {"r17", 17}, {"r18", 18}, {"r19", 19}, \
2211 {"r20", 20}, {"r21", 21}, {"r22", 22}, {"r23", 23}, \
2212 {"r24", 24}, {"r25", 25}, {"r26", 26}, {"r27", 27}, \
2213 {"r28", 28}, {"r29", 29}, {"r30", 30}, {"r31", 31}, \
2214 {"fr0", 32}, {"fr1", 33}, {"fr2", 34}, {"fr3", 35}, \
2215 {"fr4", 36}, {"fr5", 37}, {"fr6", 38}, {"fr7", 39}, \
2216 {"fr8", 40}, {"fr9", 41}, {"fr10", 42}, {"fr11", 43}, \
2217 {"fr12", 44}, {"fr13", 45}, {"fr14", 46}, {"fr15", 47}, \
2218 {"fr16", 48}, {"fr17", 49}, {"fr18", 50}, {"fr19", 51}, \
2219 {"fr20", 52}, {"fr21", 53}, {"fr22", 54}, {"fr23", 55}, \
2220 {"fr24", 56}, {"fr25", 57}, {"fr26", 58}, {"fr27", 59}, \
2221 {"fr28", 60}, {"fr29", 61}, {"fr30", 62}, {"fr31", 63}, \
0ac081f6
AH
2222 {"v0", 77}, {"v1", 78}, {"v2", 79}, {"v3", 80}, \
2223 {"v4", 81}, {"v5", 82}, {"v6", 83}, {"v7", 84}, \
2224 {"v8", 85}, {"v9", 86}, {"v10", 87}, {"v11", 88}, \
2225 {"v12", 89}, {"v13", 90}, {"v14", 91}, {"v15", 92}, \
2226 {"v16", 93}, {"v17", 94}, {"v18", 95}, {"v19", 96}, \
2227 {"v20", 97}, {"v21", 98}, {"v22", 99}, {"v23", 100}, \
2228 {"v24", 101},{"v25", 102},{"v26", 103},{"v27", 104}, \
2229 {"v28", 105},{"v29", 106},{"v30", 107},{"v31", 108}, \
5f004351 2230 {"vrsave", 109}, {"vscr", 110}, \
a3170dc6 2231 {"spe_acc", 111}, {"spefscr", 112}, \
c4d38ccb
MM
2232 /* no additional names for: mq, lr, ctr, ap */ \
2233 {"cr0", 68}, {"cr1", 69}, {"cr2", 70}, {"cr3", 71}, \
2234 {"cr4", 72}, {"cr5", 73}, {"cr6", 74}, {"cr7", 75}, \
2235 {"cc", 68}, {"sp", 1}, {"toc", 2} }
f045b2c9 2236
0da40b09
RK
2237/* Text to write out after a CALL that may be replaced by glue code by
2238 the loader. This depends on the AIX version. */
2239#define RS6000_CALL_GLUE "cror 31,31,31"
11117bb9 2240
f045b2c9
RS
2241/* This is how to output an element of a case-vector that is relative. */
2242
e1565e65 2243#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
3daf36a4 2244 do { char buf[100]; \
e1565e65 2245 fputs ("\t.long ", FILE); \
3daf36a4
ILT
2246 ASM_GENERATE_INTERNAL_LABEL (buf, "L", VALUE); \
2247 assemble_name (FILE, buf); \
19d2d16f 2248 putc ('-', FILE); \
3daf36a4
ILT
2249 ASM_GENERATE_INTERNAL_LABEL (buf, "L", REL); \
2250 assemble_name (FILE, buf); \
19d2d16f 2251 putc ('\n', FILE); \
3daf36a4 2252 } while (0)
f045b2c9
RS
2253
2254/* This is how to output an assembler line
2255 that says to advance the location counter
2256 to a multiple of 2**LOG bytes. */
2257
2258#define ASM_OUTPUT_ALIGN(FILE,LOG) \
2259 if ((LOG) != 0) \
2260 fprintf (FILE, "\t.align %d\n", (LOG))
2261
9ebbca7d
GK
2262/* Pick up the return address upon entry to a procedure. Used for
2263 dwarf2 unwind information. This also enables the table driven
2264 mechanism. */
2265
2266#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
8034da37 2267#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (LINK_REGISTER_REGNUM)
9ebbca7d 2268
83720594
RH
2269/* Describe how we implement __builtin_eh_return. */
2270#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 3 : INVALID_REGNUM)
2271#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 10)
2272
f045b2c9
RS
2273/* Print operand X (an rtx) in assembler syntax to file FILE.
2274 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
2275 For `%' followed by punctuation, CODE is the punctuation and X is null. */
2276
2277#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
2278
2279/* Define which CODE values are valid. */
2280
c81bebd7 2281#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
c4501e62 2282 ((CODE) == '.' || (CODE) == '&')
f045b2c9
RS
2283
2284/* Print a memory address as an operand to reference that memory location. */
2285
2286#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
2287
b6c9286a
MM
2288/* uncomment for disabling the corresponding default options */
2289/* #define MACHINE_no_sched_interblock */
2290/* #define MACHINE_no_sched_speculative */
2291/* #define MACHINE_no_sched_speculative_load */
2292
766a866c
MM
2293/* General flags. */
2294extern int flag_pic;
354b734b
MM
2295extern int optimize;
2296extern int flag_expensive_optimizations;
a7df97e6 2297extern int frame_pointer_needed;
0ac081f6
AH
2298
2299enum rs6000_builtins
2300{
2301 /* AltiVec builtins. */
f18c054f
DB
2302 ALTIVEC_BUILTIN_ST_INTERNAL_4si,
2303 ALTIVEC_BUILTIN_LD_INTERNAL_4si,
2304 ALTIVEC_BUILTIN_ST_INTERNAL_8hi,
2305 ALTIVEC_BUILTIN_LD_INTERNAL_8hi,
2306 ALTIVEC_BUILTIN_ST_INTERNAL_16qi,
2307 ALTIVEC_BUILTIN_LD_INTERNAL_16qi,
2308 ALTIVEC_BUILTIN_ST_INTERNAL_4sf,
2309 ALTIVEC_BUILTIN_LD_INTERNAL_4sf,
0ac081f6
AH
2310 ALTIVEC_BUILTIN_VADDUBM,
2311 ALTIVEC_BUILTIN_VADDUHM,
2312 ALTIVEC_BUILTIN_VADDUWM,
2313 ALTIVEC_BUILTIN_VADDFP,
2314 ALTIVEC_BUILTIN_VADDCUW,
2315 ALTIVEC_BUILTIN_VADDUBS,
2316 ALTIVEC_BUILTIN_VADDSBS,
2317 ALTIVEC_BUILTIN_VADDUHS,
2318 ALTIVEC_BUILTIN_VADDSHS,
2319 ALTIVEC_BUILTIN_VADDUWS,
2320 ALTIVEC_BUILTIN_VADDSWS,
2321 ALTIVEC_BUILTIN_VAND,
2322 ALTIVEC_BUILTIN_VANDC,
2323 ALTIVEC_BUILTIN_VAVGUB,
2324 ALTIVEC_BUILTIN_VAVGSB,
2325 ALTIVEC_BUILTIN_VAVGUH,
2326 ALTIVEC_BUILTIN_VAVGSH,
2327 ALTIVEC_BUILTIN_VAVGUW,
2328 ALTIVEC_BUILTIN_VAVGSW,
617e0e1d
DB
2329 ALTIVEC_BUILTIN_VCFUX,
2330 ALTIVEC_BUILTIN_VCFSX,
2331 ALTIVEC_BUILTIN_VCTSXS,
2332 ALTIVEC_BUILTIN_VCTUXS,
0ac081f6
AH
2333 ALTIVEC_BUILTIN_VCMPBFP,
2334 ALTIVEC_BUILTIN_VCMPEQUB,
2335 ALTIVEC_BUILTIN_VCMPEQUH,
2336 ALTIVEC_BUILTIN_VCMPEQUW,
2337 ALTIVEC_BUILTIN_VCMPEQFP,
2338 ALTIVEC_BUILTIN_VCMPGEFP,
2339 ALTIVEC_BUILTIN_VCMPGTUB,
2340 ALTIVEC_BUILTIN_VCMPGTSB,
2341 ALTIVEC_BUILTIN_VCMPGTUH,
2342 ALTIVEC_BUILTIN_VCMPGTSH,
2343 ALTIVEC_BUILTIN_VCMPGTUW,
2344 ALTIVEC_BUILTIN_VCMPGTSW,
2345 ALTIVEC_BUILTIN_VCMPGTFP,
617e0e1d
DB
2346 ALTIVEC_BUILTIN_VEXPTEFP,
2347 ALTIVEC_BUILTIN_VLOGEFP,
2212663f 2348 ALTIVEC_BUILTIN_VMADDFP,
0ac081f6
AH
2349 ALTIVEC_BUILTIN_VMAXUB,
2350 ALTIVEC_BUILTIN_VMAXSB,
2351 ALTIVEC_BUILTIN_VMAXUH,
2352 ALTIVEC_BUILTIN_VMAXSH,
2353 ALTIVEC_BUILTIN_VMAXUW,
2354 ALTIVEC_BUILTIN_VMAXSW,
2355 ALTIVEC_BUILTIN_VMAXFP,
2212663f
DB
2356 ALTIVEC_BUILTIN_VMHADDSHS,
2357 ALTIVEC_BUILTIN_VMHRADDSHS,
2358 ALTIVEC_BUILTIN_VMLADDUHM,
0ac081f6
AH
2359 ALTIVEC_BUILTIN_VMRGHB,
2360 ALTIVEC_BUILTIN_VMRGHH,
2361 ALTIVEC_BUILTIN_VMRGHW,
2362 ALTIVEC_BUILTIN_VMRGLB,
2363 ALTIVEC_BUILTIN_VMRGLH,
2364 ALTIVEC_BUILTIN_VMRGLW,
2212663f
DB
2365 ALTIVEC_BUILTIN_VMSUMUBM,
2366 ALTIVEC_BUILTIN_VMSUMMBM,
2367 ALTIVEC_BUILTIN_VMSUMUHM,
2368 ALTIVEC_BUILTIN_VMSUMSHM,
2369 ALTIVEC_BUILTIN_VMSUMUHS,
2370 ALTIVEC_BUILTIN_VMSUMSHS,
0ac081f6
AH
2371 ALTIVEC_BUILTIN_VMINUB,
2372 ALTIVEC_BUILTIN_VMINSB,
2373 ALTIVEC_BUILTIN_VMINUH,
2374 ALTIVEC_BUILTIN_VMINSH,
2375 ALTIVEC_BUILTIN_VMINUW,
2376 ALTIVEC_BUILTIN_VMINSW,
2377 ALTIVEC_BUILTIN_VMINFP,
2378 ALTIVEC_BUILTIN_VMULEUB,
2379 ALTIVEC_BUILTIN_VMULESB,
2380 ALTIVEC_BUILTIN_VMULEUH,
2381 ALTIVEC_BUILTIN_VMULESH,
2382 ALTIVEC_BUILTIN_VMULOUB,
2383 ALTIVEC_BUILTIN_VMULOSB,
2384 ALTIVEC_BUILTIN_VMULOUH,
2385 ALTIVEC_BUILTIN_VMULOSH,
2212663f 2386 ALTIVEC_BUILTIN_VNMSUBFP,
0ac081f6
AH
2387 ALTIVEC_BUILTIN_VNOR,
2388 ALTIVEC_BUILTIN_VOR,
617e0e1d
DB
2389 ALTIVEC_BUILTIN_VSEL_4SI,
2390 ALTIVEC_BUILTIN_VSEL_4SF,
2391 ALTIVEC_BUILTIN_VSEL_8HI,
2392 ALTIVEC_BUILTIN_VSEL_16QI,
2212663f
DB
2393 ALTIVEC_BUILTIN_VPERM_4SI,
2394 ALTIVEC_BUILTIN_VPERM_4SF,
2395 ALTIVEC_BUILTIN_VPERM_8HI,
2396 ALTIVEC_BUILTIN_VPERM_16QI,
0ac081f6
AH
2397 ALTIVEC_BUILTIN_VPKUHUM,
2398 ALTIVEC_BUILTIN_VPKUWUM,
2399 ALTIVEC_BUILTIN_VPKPX,
2400 ALTIVEC_BUILTIN_VPKUHSS,
2401 ALTIVEC_BUILTIN_VPKSHSS,
2402 ALTIVEC_BUILTIN_VPKUWSS,
2403 ALTIVEC_BUILTIN_VPKSWSS,
2404 ALTIVEC_BUILTIN_VPKUHUS,
2405 ALTIVEC_BUILTIN_VPKSHUS,
2406 ALTIVEC_BUILTIN_VPKUWUS,
2407 ALTIVEC_BUILTIN_VPKSWUS,
617e0e1d
DB
2408 ALTIVEC_BUILTIN_VREFP,
2409 ALTIVEC_BUILTIN_VRFIM,
2410 ALTIVEC_BUILTIN_VRFIN,
2411 ALTIVEC_BUILTIN_VRFIP,
2412 ALTIVEC_BUILTIN_VRFIZ,
0ac081f6
AH
2413 ALTIVEC_BUILTIN_VRLB,
2414 ALTIVEC_BUILTIN_VRLH,
2415 ALTIVEC_BUILTIN_VRLW,
617e0e1d 2416 ALTIVEC_BUILTIN_VRSQRTEFP,
0ac081f6
AH
2417 ALTIVEC_BUILTIN_VSLB,
2418 ALTIVEC_BUILTIN_VSLH,
2419 ALTIVEC_BUILTIN_VSLW,
2420 ALTIVEC_BUILTIN_VSL,
2421 ALTIVEC_BUILTIN_VSLO,
2212663f
DB
2422 ALTIVEC_BUILTIN_VSPLTB,
2423 ALTIVEC_BUILTIN_VSPLTH,
2424 ALTIVEC_BUILTIN_VSPLTW,
2425 ALTIVEC_BUILTIN_VSPLTISB,
2426 ALTIVEC_BUILTIN_VSPLTISH,
2427 ALTIVEC_BUILTIN_VSPLTISW,
0ac081f6 2428 ALTIVEC_BUILTIN_VSRB,
f18c054f
DB
2429 ALTIVEC_BUILTIN_VSRH,
2430 ALTIVEC_BUILTIN_VSRW,
0ac081f6
AH
2431 ALTIVEC_BUILTIN_VSRAB,
2432 ALTIVEC_BUILTIN_VSRAH,
2433 ALTIVEC_BUILTIN_VSRAW,
2434 ALTIVEC_BUILTIN_VSR,
2435 ALTIVEC_BUILTIN_VSRO,
2436 ALTIVEC_BUILTIN_VSUBUBM,
2437 ALTIVEC_BUILTIN_VSUBUHM,
2438 ALTIVEC_BUILTIN_VSUBUWM,
2439 ALTIVEC_BUILTIN_VSUBFP,
2440 ALTIVEC_BUILTIN_VSUBCUW,
2441 ALTIVEC_BUILTIN_VSUBUBS,
2442 ALTIVEC_BUILTIN_VSUBSBS,
2443 ALTIVEC_BUILTIN_VSUBUHS,
2444 ALTIVEC_BUILTIN_VSUBSHS,
2445 ALTIVEC_BUILTIN_VSUBUWS,
2446 ALTIVEC_BUILTIN_VSUBSWS,
2447 ALTIVEC_BUILTIN_VSUM4UBS,
2448 ALTIVEC_BUILTIN_VSUM4SBS,
2449 ALTIVEC_BUILTIN_VSUM4SHS,
2450 ALTIVEC_BUILTIN_VSUM2SWS,
2451 ALTIVEC_BUILTIN_VSUMSWS,
24408032
AH
2452 ALTIVEC_BUILTIN_VXOR,
2453 ALTIVEC_BUILTIN_VSLDOI_16QI,
2454 ALTIVEC_BUILTIN_VSLDOI_8HI,
2455 ALTIVEC_BUILTIN_VSLDOI_4SI,
20e26713
AH
2456 ALTIVEC_BUILTIN_VSLDOI_4SF,
2457 ALTIVEC_BUILTIN_VUPKHSB,
2458 ALTIVEC_BUILTIN_VUPKHPX,
2459 ALTIVEC_BUILTIN_VUPKHSH,
2460 ALTIVEC_BUILTIN_VUPKLSB,
2461 ALTIVEC_BUILTIN_VUPKLPX,
fa066a23 2462 ALTIVEC_BUILTIN_VUPKLSH,
95385cbb
AH
2463 ALTIVEC_BUILTIN_MTVSCR,
2464 ALTIVEC_BUILTIN_MFVSCR,
2465 ALTIVEC_BUILTIN_DSSALL,
2466 ALTIVEC_BUILTIN_DSS,
2467 ALTIVEC_BUILTIN_LVSL,
2468 ALTIVEC_BUILTIN_LVSR,
2469 ALTIVEC_BUILTIN_DSTT,
2470 ALTIVEC_BUILTIN_DSTST,
2471 ALTIVEC_BUILTIN_DSTSTT,
6525c0e7
AH
2472 ALTIVEC_BUILTIN_DST,
2473 ALTIVEC_BUILTIN_LVEBX,
2474 ALTIVEC_BUILTIN_LVEHX,
2475 ALTIVEC_BUILTIN_LVEWX,
2476 ALTIVEC_BUILTIN_LVXL,
2477 ALTIVEC_BUILTIN_LVX,
2478 ALTIVEC_BUILTIN_STVX,
2479 ALTIVEC_BUILTIN_STVEBX,
2480 ALTIVEC_BUILTIN_STVEHX,
2481 ALTIVEC_BUILTIN_STVEWX,
ae4b4a02
AH
2482 ALTIVEC_BUILTIN_STVXL,
2483 ALTIVEC_BUILTIN_VCMPBFP_P,
2484 ALTIVEC_BUILTIN_VCMPEQFP_P,
2485 ALTIVEC_BUILTIN_VCMPEQUB_P,
2486 ALTIVEC_BUILTIN_VCMPEQUH_P,
2487 ALTIVEC_BUILTIN_VCMPEQUW_P,
2488 ALTIVEC_BUILTIN_VCMPGEFP_P,
2489 ALTIVEC_BUILTIN_VCMPGTFP_P,
2490 ALTIVEC_BUILTIN_VCMPGTSB_P,
2491 ALTIVEC_BUILTIN_VCMPGTSH_P,
2492 ALTIVEC_BUILTIN_VCMPGTSW_P,
2493 ALTIVEC_BUILTIN_VCMPGTUB_P,
2494 ALTIVEC_BUILTIN_VCMPGTUH_P,
100c4561
AH
2495 ALTIVEC_BUILTIN_VCMPGTUW_P,
2496 ALTIVEC_BUILTIN_ABSS_V4SI,
2497 ALTIVEC_BUILTIN_ABSS_V8HI,
2498 ALTIVEC_BUILTIN_ABSS_V16QI,
2499 ALTIVEC_BUILTIN_ABS_V4SI,
2500 ALTIVEC_BUILTIN_ABS_V4SF,
2501 ALTIVEC_BUILTIN_ABS_V8HI,
8bb418a3 2502 ALTIVEC_BUILTIN_ABS_V16QI,
7ccf35ed
DN
2503 ALTIVEC_BUILTIN_MASK_FOR_LOAD,
2504 ALTIVEC_BUILTIN_MASK_FOR_STORE,
8bb418a3 2505
58646b77
PB
2506 /* Altivec overloaded builtins. */
2507 ALTIVEC_BUILTIN_VCMPEQ_P,
2508 ALTIVEC_BUILTIN_OVERLOADED_FIRST = ALTIVEC_BUILTIN_VCMPEQ_P,
2509 ALTIVEC_BUILTIN_VCMPGT_P,
2510 ALTIVEC_BUILTIN_VCMPGE_P,
2511 ALTIVEC_BUILTIN_VEC_ABS,
2512 ALTIVEC_BUILTIN_VEC_ABSS,
2513 ALTIVEC_BUILTIN_VEC_ADD,
2514 ALTIVEC_BUILTIN_VEC_ADDC,
2515 ALTIVEC_BUILTIN_VEC_ADDS,
2516 ALTIVEC_BUILTIN_VEC_AND,
2517 ALTIVEC_BUILTIN_VEC_ANDC,
2518 ALTIVEC_BUILTIN_VEC_AVG,
2519 ALTIVEC_BUILTIN_VEC_CEIL,
2520 ALTIVEC_BUILTIN_VEC_CMPB,
2521 ALTIVEC_BUILTIN_VEC_CMPEQ,
2522 ALTIVEC_BUILTIN_VEC_CMPEQUB,
2523 ALTIVEC_BUILTIN_VEC_CMPEQUH,
2524 ALTIVEC_BUILTIN_VEC_CMPEQUW,
2525 ALTIVEC_BUILTIN_VEC_CMPGE,
2526 ALTIVEC_BUILTIN_VEC_CMPGT,
2527 ALTIVEC_BUILTIN_VEC_CMPLE,
2528 ALTIVEC_BUILTIN_VEC_CMPLT,
2529 ALTIVEC_BUILTIN_VEC_CTF,
2530 ALTIVEC_BUILTIN_VEC_CTS,
2531 ALTIVEC_BUILTIN_VEC_CTU,
2532 ALTIVEC_BUILTIN_VEC_DST,
2533 ALTIVEC_BUILTIN_VEC_DSTST,
2534 ALTIVEC_BUILTIN_VEC_DSTSTT,
2535 ALTIVEC_BUILTIN_VEC_DSTT,
2536 ALTIVEC_BUILTIN_VEC_EXPTE,
2537 ALTIVEC_BUILTIN_VEC_FLOOR,
2538 ALTIVEC_BUILTIN_VEC_LD,
2539 ALTIVEC_BUILTIN_VEC_LDE,
2540 ALTIVEC_BUILTIN_VEC_LDL,
2541 ALTIVEC_BUILTIN_VEC_LOGE,
2542 ALTIVEC_BUILTIN_VEC_LVEBX,
2543 ALTIVEC_BUILTIN_VEC_LVEHX,
2544 ALTIVEC_BUILTIN_VEC_LVEWX,
2545 ALTIVEC_BUILTIN_VEC_LVSL,
2546 ALTIVEC_BUILTIN_VEC_LVSR,
2547 ALTIVEC_BUILTIN_VEC_MADD,
2548 ALTIVEC_BUILTIN_VEC_MADDS,
2549 ALTIVEC_BUILTIN_VEC_MAX,
2550 ALTIVEC_BUILTIN_VEC_MERGEH,
2551 ALTIVEC_BUILTIN_VEC_MERGEL,
2552 ALTIVEC_BUILTIN_VEC_MIN,
2553 ALTIVEC_BUILTIN_VEC_MLADD,
2554 ALTIVEC_BUILTIN_VEC_MPERM,
2555 ALTIVEC_BUILTIN_VEC_MRADDS,
2556 ALTIVEC_BUILTIN_VEC_MRGHB,
2557 ALTIVEC_BUILTIN_VEC_MRGHH,
2558 ALTIVEC_BUILTIN_VEC_MRGHW,
2559 ALTIVEC_BUILTIN_VEC_MRGLB,
2560 ALTIVEC_BUILTIN_VEC_MRGLH,
2561 ALTIVEC_BUILTIN_VEC_MRGLW,
2562 ALTIVEC_BUILTIN_VEC_MSUM,
2563 ALTIVEC_BUILTIN_VEC_MSUMS,
2564 ALTIVEC_BUILTIN_VEC_MTVSCR,
2565 ALTIVEC_BUILTIN_VEC_MULE,
2566 ALTIVEC_BUILTIN_VEC_MULO,
2567 ALTIVEC_BUILTIN_VEC_NMSUB,
2568 ALTIVEC_BUILTIN_VEC_NOR,
2569 ALTIVEC_BUILTIN_VEC_OR,
2570 ALTIVEC_BUILTIN_VEC_PACK,
2571 ALTIVEC_BUILTIN_VEC_PACKPX,
2572 ALTIVEC_BUILTIN_VEC_PACKS,
2573 ALTIVEC_BUILTIN_VEC_PACKSU,
2574 ALTIVEC_BUILTIN_VEC_PERM,
2575 ALTIVEC_BUILTIN_VEC_RE,
2576 ALTIVEC_BUILTIN_VEC_RL,
2577 ALTIVEC_BUILTIN_VEC_ROUND,
2578 ALTIVEC_BUILTIN_VEC_RSQRTE,
2579 ALTIVEC_BUILTIN_VEC_SEL,
2580 ALTIVEC_BUILTIN_VEC_SL,
2581 ALTIVEC_BUILTIN_VEC_SLD,
2582 ALTIVEC_BUILTIN_VEC_SLL,
2583 ALTIVEC_BUILTIN_VEC_SLO,
2584 ALTIVEC_BUILTIN_VEC_SPLAT,
2585 ALTIVEC_BUILTIN_VEC_SPLAT_S16,
2586 ALTIVEC_BUILTIN_VEC_SPLAT_S32,
2587 ALTIVEC_BUILTIN_VEC_SPLAT_S8,
2588 ALTIVEC_BUILTIN_VEC_SPLAT_U16,
2589 ALTIVEC_BUILTIN_VEC_SPLAT_U32,
2590 ALTIVEC_BUILTIN_VEC_SPLAT_U8,
2591 ALTIVEC_BUILTIN_VEC_SPLTB,
2592 ALTIVEC_BUILTIN_VEC_SPLTH,
2593 ALTIVEC_BUILTIN_VEC_SPLTW,
2594 ALTIVEC_BUILTIN_VEC_SR,
2595 ALTIVEC_BUILTIN_VEC_SRA,
2596 ALTIVEC_BUILTIN_VEC_SRL,
2597 ALTIVEC_BUILTIN_VEC_SRO,
2598 ALTIVEC_BUILTIN_VEC_ST,
2599 ALTIVEC_BUILTIN_VEC_STE,
2600 ALTIVEC_BUILTIN_VEC_STL,
2601 ALTIVEC_BUILTIN_VEC_STVEBX,
2602 ALTIVEC_BUILTIN_VEC_STVEHX,
2603 ALTIVEC_BUILTIN_VEC_STVEWX,
2604 ALTIVEC_BUILTIN_VEC_SUB,
2605 ALTIVEC_BUILTIN_VEC_SUBC,
2606 ALTIVEC_BUILTIN_VEC_SUBS,
2607 ALTIVEC_BUILTIN_VEC_SUM2S,
2608 ALTIVEC_BUILTIN_VEC_SUM4S,
2609 ALTIVEC_BUILTIN_VEC_SUMS,
2610 ALTIVEC_BUILTIN_VEC_TRUNC,
2611 ALTIVEC_BUILTIN_VEC_UNPACKH,
2612 ALTIVEC_BUILTIN_VEC_UNPACKL,
2613 ALTIVEC_BUILTIN_VEC_VADDFP,
2614 ALTIVEC_BUILTIN_VEC_VADDSBS,
2615 ALTIVEC_BUILTIN_VEC_VADDSHS,
2616 ALTIVEC_BUILTIN_VEC_VADDSWS,
2617 ALTIVEC_BUILTIN_VEC_VADDUBM,
2618 ALTIVEC_BUILTIN_VEC_VADDUBS,
2619 ALTIVEC_BUILTIN_VEC_VADDUHM,
2620 ALTIVEC_BUILTIN_VEC_VADDUHS,
2621 ALTIVEC_BUILTIN_VEC_VADDUWM,
2622 ALTIVEC_BUILTIN_VEC_VADDUWS,
2623 ALTIVEC_BUILTIN_VEC_VAVGSB,
2624 ALTIVEC_BUILTIN_VEC_VAVGSH,
2625 ALTIVEC_BUILTIN_VEC_VAVGSW,
2626 ALTIVEC_BUILTIN_VEC_VAVGUB,
2627 ALTIVEC_BUILTIN_VEC_VAVGUH,
2628 ALTIVEC_BUILTIN_VEC_VAVGUW,
2629 ALTIVEC_BUILTIN_VEC_VCFSX,
2630 ALTIVEC_BUILTIN_VEC_VCFUX,
2631 ALTIVEC_BUILTIN_VEC_VCMPEQFP,
2632 ALTIVEC_BUILTIN_VEC_VCMPEQUB,
2633 ALTIVEC_BUILTIN_VEC_VCMPEQUH,
2634 ALTIVEC_BUILTIN_VEC_VCMPEQUW,
2635 ALTIVEC_BUILTIN_VEC_VCMPGTFP,
2636 ALTIVEC_BUILTIN_VEC_VCMPGTSB,
2637 ALTIVEC_BUILTIN_VEC_VCMPGTSH,
2638 ALTIVEC_BUILTIN_VEC_VCMPGTSW,
2639 ALTIVEC_BUILTIN_VEC_VCMPGTUB,
2640 ALTIVEC_BUILTIN_VEC_VCMPGTUH,
2641 ALTIVEC_BUILTIN_VEC_VCMPGTUW,
2642 ALTIVEC_BUILTIN_VEC_VMAXFP,
2643 ALTIVEC_BUILTIN_VEC_VMAXSB,
2644 ALTIVEC_BUILTIN_VEC_VMAXSH,
2645 ALTIVEC_BUILTIN_VEC_VMAXSW,
2646 ALTIVEC_BUILTIN_VEC_VMAXUB,
2647 ALTIVEC_BUILTIN_VEC_VMAXUH,
2648 ALTIVEC_BUILTIN_VEC_VMAXUW,
2649 ALTIVEC_BUILTIN_VEC_VMINFP,
2650 ALTIVEC_BUILTIN_VEC_VMINSB,
2651 ALTIVEC_BUILTIN_VEC_VMINSH,
2652 ALTIVEC_BUILTIN_VEC_VMINSW,
2653 ALTIVEC_BUILTIN_VEC_VMINUB,
2654 ALTIVEC_BUILTIN_VEC_VMINUH,
2655 ALTIVEC_BUILTIN_VEC_VMINUW,
2656 ALTIVEC_BUILTIN_VEC_VMRGHB,
2657 ALTIVEC_BUILTIN_VEC_VMRGHH,
2658 ALTIVEC_BUILTIN_VEC_VMRGHW,
2659 ALTIVEC_BUILTIN_VEC_VMRGLB,
2660 ALTIVEC_BUILTIN_VEC_VMRGLH,
2661 ALTIVEC_BUILTIN_VEC_VMRGLW,
2662 ALTIVEC_BUILTIN_VEC_VMSUMMBM,
2663 ALTIVEC_BUILTIN_VEC_VMSUMSHM,
2664 ALTIVEC_BUILTIN_VEC_VMSUMSHS,
2665 ALTIVEC_BUILTIN_VEC_VMSUMUBM,
2666 ALTIVEC_BUILTIN_VEC_VMSUMUHM,
2667 ALTIVEC_BUILTIN_VEC_VMSUMUHS,
2668 ALTIVEC_BUILTIN_VEC_VMULESB,
2669 ALTIVEC_BUILTIN_VEC_VMULESH,
2670 ALTIVEC_BUILTIN_VEC_VMULEUB,
2671 ALTIVEC_BUILTIN_VEC_VMULEUH,
2672 ALTIVEC_BUILTIN_VEC_VMULOSB,
2673 ALTIVEC_BUILTIN_VEC_VMULOSH,
2674 ALTIVEC_BUILTIN_VEC_VMULOUB,
2675 ALTIVEC_BUILTIN_VEC_VMULOUH,
2676 ALTIVEC_BUILTIN_VEC_VPKSHSS,
2677 ALTIVEC_BUILTIN_VEC_VPKSHUS,
2678 ALTIVEC_BUILTIN_VEC_VPKSWSS,
2679 ALTIVEC_BUILTIN_VEC_VPKSWUS,
2680 ALTIVEC_BUILTIN_VEC_VPKUHUM,
2681 ALTIVEC_BUILTIN_VEC_VPKUHUS,
2682 ALTIVEC_BUILTIN_VEC_VPKUWUM,
2683 ALTIVEC_BUILTIN_VEC_VPKUWUS,
2684 ALTIVEC_BUILTIN_VEC_VRLB,
2685 ALTIVEC_BUILTIN_VEC_VRLH,
2686 ALTIVEC_BUILTIN_VEC_VRLW,
2687 ALTIVEC_BUILTIN_VEC_VSLB,
2688 ALTIVEC_BUILTIN_VEC_VSLH,
2689 ALTIVEC_BUILTIN_VEC_VSLW,
2690 ALTIVEC_BUILTIN_VEC_VSPLTB,
2691 ALTIVEC_BUILTIN_VEC_VSPLTH,
2692 ALTIVEC_BUILTIN_VEC_VSPLTW,
2693 ALTIVEC_BUILTIN_VEC_VSRAB,
2694 ALTIVEC_BUILTIN_VEC_VSRAH,
2695 ALTIVEC_BUILTIN_VEC_VSRAW,
2696 ALTIVEC_BUILTIN_VEC_VSRB,
2697 ALTIVEC_BUILTIN_VEC_VSRH,
2698 ALTIVEC_BUILTIN_VEC_VSRW,
2699 ALTIVEC_BUILTIN_VEC_VSUBFP,
2700 ALTIVEC_BUILTIN_VEC_VSUBSBS,
2701 ALTIVEC_BUILTIN_VEC_VSUBSHS,
2702 ALTIVEC_BUILTIN_VEC_VSUBSWS,
2703 ALTIVEC_BUILTIN_VEC_VSUBUBM,
2704 ALTIVEC_BUILTIN_VEC_VSUBUBS,
2705 ALTIVEC_BUILTIN_VEC_VSUBUHM,
2706 ALTIVEC_BUILTIN_VEC_VSUBUHS,
2707 ALTIVEC_BUILTIN_VEC_VSUBUWM,
2708 ALTIVEC_BUILTIN_VEC_VSUBUWS,
2709 ALTIVEC_BUILTIN_VEC_VSUM4SBS,
2710 ALTIVEC_BUILTIN_VEC_VSUM4SHS,
2711 ALTIVEC_BUILTIN_VEC_VSUM4UBS,
2712 ALTIVEC_BUILTIN_VEC_VUPKHPX,
2713 ALTIVEC_BUILTIN_VEC_VUPKHSB,
2714 ALTIVEC_BUILTIN_VEC_VUPKHSH,
2715 ALTIVEC_BUILTIN_VEC_VUPKLPX,
2716 ALTIVEC_BUILTIN_VEC_VUPKLSB,
2717 ALTIVEC_BUILTIN_VEC_VUPKLSH,
2718 ALTIVEC_BUILTIN_VEC_XOR,
2719 ALTIVEC_BUILTIN_VEC_STEP,
2720 ALTIVEC_BUILTIN_OVERLOADED_LAST = ALTIVEC_BUILTIN_VEC_STEP,
2721
a3170dc6 2722 /* SPE builtins. */
8bb418a3 2723 SPE_BUILTIN_EVADDW,
a3170dc6
AH
2724 SPE_BUILTIN_EVAND,
2725 SPE_BUILTIN_EVANDC,
2726 SPE_BUILTIN_EVDIVWS,
2727 SPE_BUILTIN_EVDIVWU,
2728 SPE_BUILTIN_EVEQV,
2729 SPE_BUILTIN_EVFSADD,
2730 SPE_BUILTIN_EVFSDIV,
2731 SPE_BUILTIN_EVFSMUL,
2732 SPE_BUILTIN_EVFSSUB,
2733 SPE_BUILTIN_EVLDDX,
2734 SPE_BUILTIN_EVLDHX,
2735 SPE_BUILTIN_EVLDWX,
2736 SPE_BUILTIN_EVLHHESPLATX,
2737 SPE_BUILTIN_EVLHHOSSPLATX,
2738 SPE_BUILTIN_EVLHHOUSPLATX,
2739 SPE_BUILTIN_EVLWHEX,
2740 SPE_BUILTIN_EVLWHOSX,
2741 SPE_BUILTIN_EVLWHOUX,
2742 SPE_BUILTIN_EVLWHSPLATX,
2743 SPE_BUILTIN_EVLWWSPLATX,
2744 SPE_BUILTIN_EVMERGEHI,
2745 SPE_BUILTIN_EVMERGEHILO,
2746 SPE_BUILTIN_EVMERGELO,
2747 SPE_BUILTIN_EVMERGELOHI,
2748 SPE_BUILTIN_EVMHEGSMFAA,
2749 SPE_BUILTIN_EVMHEGSMFAN,
2750 SPE_BUILTIN_EVMHEGSMIAA,
2751 SPE_BUILTIN_EVMHEGSMIAN,
2752 SPE_BUILTIN_EVMHEGUMIAA,
2753 SPE_BUILTIN_EVMHEGUMIAN,
2754 SPE_BUILTIN_EVMHESMF,
2755 SPE_BUILTIN_EVMHESMFA,
2756 SPE_BUILTIN_EVMHESMFAAW,
2757 SPE_BUILTIN_EVMHESMFANW,
2758 SPE_BUILTIN_EVMHESMI,
2759 SPE_BUILTIN_EVMHESMIA,
2760 SPE_BUILTIN_EVMHESMIAAW,
2761 SPE_BUILTIN_EVMHESMIANW,
2762 SPE_BUILTIN_EVMHESSF,
2763 SPE_BUILTIN_EVMHESSFA,
2764 SPE_BUILTIN_EVMHESSFAAW,
2765 SPE_BUILTIN_EVMHESSFANW,
2766 SPE_BUILTIN_EVMHESSIAAW,
2767 SPE_BUILTIN_EVMHESSIANW,
2768 SPE_BUILTIN_EVMHEUMI,
2769 SPE_BUILTIN_EVMHEUMIA,
2770 SPE_BUILTIN_EVMHEUMIAAW,
2771 SPE_BUILTIN_EVMHEUMIANW,
2772 SPE_BUILTIN_EVMHEUSIAAW,
2773 SPE_BUILTIN_EVMHEUSIANW,
2774 SPE_BUILTIN_EVMHOGSMFAA,
2775 SPE_BUILTIN_EVMHOGSMFAN,
2776 SPE_BUILTIN_EVMHOGSMIAA,
2777 SPE_BUILTIN_EVMHOGSMIAN,
2778 SPE_BUILTIN_EVMHOGUMIAA,
2779 SPE_BUILTIN_EVMHOGUMIAN,
2780 SPE_BUILTIN_EVMHOSMF,
2781 SPE_BUILTIN_EVMHOSMFA,
2782 SPE_BUILTIN_EVMHOSMFAAW,
2783 SPE_BUILTIN_EVMHOSMFANW,
2784 SPE_BUILTIN_EVMHOSMI,
2785 SPE_BUILTIN_EVMHOSMIA,
2786 SPE_BUILTIN_EVMHOSMIAAW,
2787 SPE_BUILTIN_EVMHOSMIANW,
2788 SPE_BUILTIN_EVMHOSSF,
2789 SPE_BUILTIN_EVMHOSSFA,
2790 SPE_BUILTIN_EVMHOSSFAAW,
2791 SPE_BUILTIN_EVMHOSSFANW,
2792 SPE_BUILTIN_EVMHOSSIAAW,
2793 SPE_BUILTIN_EVMHOSSIANW,
2794 SPE_BUILTIN_EVMHOUMI,
2795 SPE_BUILTIN_EVMHOUMIA,
2796 SPE_BUILTIN_EVMHOUMIAAW,
2797 SPE_BUILTIN_EVMHOUMIANW,
2798 SPE_BUILTIN_EVMHOUSIAAW,
2799 SPE_BUILTIN_EVMHOUSIANW,
2800 SPE_BUILTIN_EVMWHSMF,
2801 SPE_BUILTIN_EVMWHSMFA,
2802 SPE_BUILTIN_EVMWHSMI,
2803 SPE_BUILTIN_EVMWHSMIA,
2804 SPE_BUILTIN_EVMWHSSF,
2805 SPE_BUILTIN_EVMWHSSFA,
2806 SPE_BUILTIN_EVMWHUMI,
2807 SPE_BUILTIN_EVMWHUMIA,
a3170dc6
AH
2808 SPE_BUILTIN_EVMWLSMIAAW,
2809 SPE_BUILTIN_EVMWLSMIANW,
a3170dc6
AH
2810 SPE_BUILTIN_EVMWLSSIAAW,
2811 SPE_BUILTIN_EVMWLSSIANW,
2812 SPE_BUILTIN_EVMWLUMI,
2813 SPE_BUILTIN_EVMWLUMIA,
2814 SPE_BUILTIN_EVMWLUMIAAW,
2815 SPE_BUILTIN_EVMWLUMIANW,
2816 SPE_BUILTIN_EVMWLUSIAAW,
2817 SPE_BUILTIN_EVMWLUSIANW,
2818 SPE_BUILTIN_EVMWSMF,
2819 SPE_BUILTIN_EVMWSMFA,
2820 SPE_BUILTIN_EVMWSMFAA,
2821 SPE_BUILTIN_EVMWSMFAN,
2822 SPE_BUILTIN_EVMWSMI,
2823 SPE_BUILTIN_EVMWSMIA,
2824 SPE_BUILTIN_EVMWSMIAA,
2825 SPE_BUILTIN_EVMWSMIAN,
2826 SPE_BUILTIN_EVMWHSSFAA,
2827 SPE_BUILTIN_EVMWSSF,
2828 SPE_BUILTIN_EVMWSSFA,
2829 SPE_BUILTIN_EVMWSSFAA,
2830 SPE_BUILTIN_EVMWSSFAN,
2831 SPE_BUILTIN_EVMWUMI,
2832 SPE_BUILTIN_EVMWUMIA,
2833 SPE_BUILTIN_EVMWUMIAA,
2834 SPE_BUILTIN_EVMWUMIAN,
2835 SPE_BUILTIN_EVNAND,
2836 SPE_BUILTIN_EVNOR,
2837 SPE_BUILTIN_EVOR,
2838 SPE_BUILTIN_EVORC,
2839 SPE_BUILTIN_EVRLW,
2840 SPE_BUILTIN_EVSLW,
2841 SPE_BUILTIN_EVSRWS,
2842 SPE_BUILTIN_EVSRWU,
2843 SPE_BUILTIN_EVSTDDX,
2844 SPE_BUILTIN_EVSTDHX,
2845 SPE_BUILTIN_EVSTDWX,
2846 SPE_BUILTIN_EVSTWHEX,
2847 SPE_BUILTIN_EVSTWHOX,
2848 SPE_BUILTIN_EVSTWWEX,
2849 SPE_BUILTIN_EVSTWWOX,
2850 SPE_BUILTIN_EVSUBFW,
2851 SPE_BUILTIN_EVXOR,
2852 SPE_BUILTIN_EVABS,
2853 SPE_BUILTIN_EVADDSMIAAW,
2854 SPE_BUILTIN_EVADDSSIAAW,
2855 SPE_BUILTIN_EVADDUMIAAW,
2856 SPE_BUILTIN_EVADDUSIAAW,
2857 SPE_BUILTIN_EVCNTLSW,
2858 SPE_BUILTIN_EVCNTLZW,
2859 SPE_BUILTIN_EVEXTSB,
2860 SPE_BUILTIN_EVEXTSH,
2861 SPE_BUILTIN_EVFSABS,
2862 SPE_BUILTIN_EVFSCFSF,
2863 SPE_BUILTIN_EVFSCFSI,
2864 SPE_BUILTIN_EVFSCFUF,
2865 SPE_BUILTIN_EVFSCFUI,
2866 SPE_BUILTIN_EVFSCTSF,
2867 SPE_BUILTIN_EVFSCTSI,
2868 SPE_BUILTIN_EVFSCTSIZ,
2869 SPE_BUILTIN_EVFSCTUF,
2870 SPE_BUILTIN_EVFSCTUI,
2871 SPE_BUILTIN_EVFSCTUIZ,
2872 SPE_BUILTIN_EVFSNABS,
2873 SPE_BUILTIN_EVFSNEG,
2874 SPE_BUILTIN_EVMRA,
2875 SPE_BUILTIN_EVNEG,
2876 SPE_BUILTIN_EVRNDW,
2877 SPE_BUILTIN_EVSUBFSMIAAW,
2878 SPE_BUILTIN_EVSUBFSSIAAW,
2879 SPE_BUILTIN_EVSUBFUMIAAW,
2880 SPE_BUILTIN_EVSUBFUSIAAW,
2881 SPE_BUILTIN_EVADDIW,
2882 SPE_BUILTIN_EVLDD,
2883 SPE_BUILTIN_EVLDH,
2884 SPE_BUILTIN_EVLDW,
2885 SPE_BUILTIN_EVLHHESPLAT,
2886 SPE_BUILTIN_EVLHHOSSPLAT,
2887 SPE_BUILTIN_EVLHHOUSPLAT,
2888 SPE_BUILTIN_EVLWHE,
2889 SPE_BUILTIN_EVLWHOS,
2890 SPE_BUILTIN_EVLWHOU,
2891 SPE_BUILTIN_EVLWHSPLAT,
2892 SPE_BUILTIN_EVLWWSPLAT,
2893 SPE_BUILTIN_EVRLWI,
2894 SPE_BUILTIN_EVSLWI,
2895 SPE_BUILTIN_EVSRWIS,
2896 SPE_BUILTIN_EVSRWIU,
2897 SPE_BUILTIN_EVSTDD,
2898 SPE_BUILTIN_EVSTDH,
2899 SPE_BUILTIN_EVSTDW,
2900 SPE_BUILTIN_EVSTWHE,
2901 SPE_BUILTIN_EVSTWHO,
2902 SPE_BUILTIN_EVSTWWE,
2903 SPE_BUILTIN_EVSTWWO,
2904 SPE_BUILTIN_EVSUBIFW,
2905
2906 /* Compares. */
2907 SPE_BUILTIN_EVCMPEQ,
2908 SPE_BUILTIN_EVCMPGTS,
2909 SPE_BUILTIN_EVCMPGTU,
2910 SPE_BUILTIN_EVCMPLTS,
2911 SPE_BUILTIN_EVCMPLTU,
2912 SPE_BUILTIN_EVFSCMPEQ,
2913 SPE_BUILTIN_EVFSCMPGT,
2914 SPE_BUILTIN_EVFSCMPLT,
2915 SPE_BUILTIN_EVFSTSTEQ,
2916 SPE_BUILTIN_EVFSTSTGT,
2917 SPE_BUILTIN_EVFSTSTLT,
2918
2919 /* EVSEL compares. */
2920 SPE_BUILTIN_EVSEL_CMPEQ,
2921 SPE_BUILTIN_EVSEL_CMPGTS,
2922 SPE_BUILTIN_EVSEL_CMPGTU,
2923 SPE_BUILTIN_EVSEL_CMPLTS,
2924 SPE_BUILTIN_EVSEL_CMPLTU,
2925 SPE_BUILTIN_EVSEL_FSCMPEQ,
2926 SPE_BUILTIN_EVSEL_FSCMPGT,
2927 SPE_BUILTIN_EVSEL_FSCMPLT,
2928 SPE_BUILTIN_EVSEL_FSTSTEQ,
2929 SPE_BUILTIN_EVSEL_FSTSTGT,
2930 SPE_BUILTIN_EVSEL_FSTSTLT,
2931
2932 SPE_BUILTIN_EVSPLATFI,
2933 SPE_BUILTIN_EVSPLATI,
2934 SPE_BUILTIN_EVMWHSSMAA,
2935 SPE_BUILTIN_EVMWHSMFAA,
2936 SPE_BUILTIN_EVMWHSMIAA,
2937 SPE_BUILTIN_EVMWHUSIAA,
2938 SPE_BUILTIN_EVMWHUMIAA,
2939 SPE_BUILTIN_EVMWHSSFAN,
2940 SPE_BUILTIN_EVMWHSSIAN,
2941 SPE_BUILTIN_EVMWHSMFAN,
2942 SPE_BUILTIN_EVMWHSMIAN,
2943 SPE_BUILTIN_EVMWHUSIAN,
2944 SPE_BUILTIN_EVMWHUMIAN,
2945 SPE_BUILTIN_EVMWHGSSFAA,
2946 SPE_BUILTIN_EVMWHGSMFAA,
2947 SPE_BUILTIN_EVMWHGSMIAA,
2948 SPE_BUILTIN_EVMWHGUMIAA,
2949 SPE_BUILTIN_EVMWHGSSFAN,
2950 SPE_BUILTIN_EVMWHGSMFAN,
2951 SPE_BUILTIN_EVMWHGSMIAN,
2952 SPE_BUILTIN_EVMWHGUMIAN,
2953 SPE_BUILTIN_MTSPEFSCR,
2954 SPE_BUILTIN_MFSPEFSCR,
58646b77
PB
2955 SPE_BUILTIN_BRINC,
2956
2957 RS6000_BUILTIN_COUNT
2958};
2959
2960enum rs6000_builtin_type_index
2961{
2962 RS6000_BTI_NOT_OPAQUE,
2963 RS6000_BTI_opaque_V2SI,
2964 RS6000_BTI_opaque_V2SF,
2965 RS6000_BTI_opaque_p_V2SI,
2966 RS6000_BTI_opaque_V4SI,
2967 RS6000_BTI_V16QI,
2968 RS6000_BTI_V2SI,
2969 RS6000_BTI_V2SF,
2970 RS6000_BTI_V4HI,
2971 RS6000_BTI_V4SI,
2972 RS6000_BTI_V4SF,
2973 RS6000_BTI_V8HI,
2974 RS6000_BTI_unsigned_V16QI,
2975 RS6000_BTI_unsigned_V8HI,
2976 RS6000_BTI_unsigned_V4SI,
2977 RS6000_BTI_bool_char, /* __bool char */
2978 RS6000_BTI_bool_short, /* __bool short */
2979 RS6000_BTI_bool_int, /* __bool int */
2980 RS6000_BTI_pixel, /* __pixel */
2981 RS6000_BTI_bool_V16QI, /* __vector __bool char */
2982 RS6000_BTI_bool_V8HI, /* __vector __bool short */
2983 RS6000_BTI_bool_V4SI, /* __vector __bool int */
2984 RS6000_BTI_pixel_V8HI, /* __vector __pixel */
2985 RS6000_BTI_long, /* long_integer_type_node */
2986 RS6000_BTI_unsigned_long, /* long_unsigned_type_node */
2987 RS6000_BTI_INTQI, /* intQI_type_node */
2988 RS6000_BTI_UINTQI, /* unsigned_intQI_type_node */
2989 RS6000_BTI_INTHI, /* intHI_type_node */
2990 RS6000_BTI_UINTHI, /* unsigned_intHI_type_node */
2991 RS6000_BTI_INTSI, /* intSI_type_node */
2992 RS6000_BTI_UINTSI, /* unsigned_intSI_type_node */
2993 RS6000_BTI_float, /* float_type_node */
2994 RS6000_BTI_void, /* void_type_node */
2995 RS6000_BTI_MAX
0ac081f6 2996};
58646b77
PB
2997
2998
2999#define opaque_V2SI_type_node (rs6000_builtin_types[RS6000_BTI_opaque_V2SI])
3000#define opaque_V2SF_type_node (rs6000_builtin_types[RS6000_BTI_opaque_V2SF])
3001#define opaque_p_V2SI_type_node (rs6000_builtin_types[RS6000_BTI_opaque_p_V2SI])
3002#define opaque_V4SI_type_node (rs6000_builtin_types[RS6000_BTI_opaque_V4SI])
3003#define V16QI_type_node (rs6000_builtin_types[RS6000_BTI_V16QI])
3004#define V2SI_type_node (rs6000_builtin_types[RS6000_BTI_V2SI])
3005#define V2SF_type_node (rs6000_builtin_types[RS6000_BTI_V2SF])
3006#define V4HI_type_node (rs6000_builtin_types[RS6000_BTI_V4HI])
3007#define V4SI_type_node (rs6000_builtin_types[RS6000_BTI_V4SI])
3008#define V4SF_type_node (rs6000_builtin_types[RS6000_BTI_V4SF])
3009#define V8HI_type_node (rs6000_builtin_types[RS6000_BTI_V8HI])
3010#define unsigned_V16QI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V16QI])
3011#define unsigned_V8HI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V8HI])
3012#define unsigned_V4SI_type_node (rs6000_builtin_types[RS6000_BTI_unsigned_V4SI])
3013#define bool_char_type_node (rs6000_builtin_types[RS6000_BTI_bool_char])
3014#define bool_short_type_node (rs6000_builtin_types[RS6000_BTI_bool_short])
3015#define bool_int_type_node (rs6000_builtin_types[RS6000_BTI_bool_int])
3016#define pixel_type_node (rs6000_builtin_types[RS6000_BTI_pixel])
3017#define bool_V16QI_type_node (rs6000_builtin_types[RS6000_BTI_bool_V16QI])
3018#define bool_V8HI_type_node (rs6000_builtin_types[RS6000_BTI_bool_V8HI])
3019#define bool_V4SI_type_node (rs6000_builtin_types[RS6000_BTI_bool_V4SI])
3020#define pixel_V8HI_type_node (rs6000_builtin_types[RS6000_BTI_pixel_V8HI])
3021
3022#define long_integer_type_internal_node (rs6000_builtin_types[RS6000_BTI_long])
3023#define long_unsigned_type_internal_node (rs6000_builtin_types[RS6000_BTI_unsigned_long])
3024#define intQI_type_internal_node (rs6000_builtin_types[RS6000_BTI_INTQI])
3025#define uintQI_type_internal_node (rs6000_builtin_types[RS6000_BTI_UINTQI])
3026#define intHI_type_internal_node (rs6000_builtin_types[RS6000_BTI_INTHI])
3027#define uintHI_type_internal_node (rs6000_builtin_types[RS6000_BTI_UINTHI])
3028#define intSI_type_internal_node (rs6000_builtin_types[RS6000_BTI_INTSI])
3029#define uintSI_type_internal_node (rs6000_builtin_types[RS6000_BTI_UINTSI])
3030#define float_type_internal_node (rs6000_builtin_types[RS6000_BTI_float])
3031#define void_type_internal_node (rs6000_builtin_types[RS6000_BTI_void])
3032
3033extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX];
3034extern GTY(()) tree rs6000_builtin_decls[RS6000_BUILTIN_COUNT];
3035