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