]> gcc.gnu.org Git - gcc.git/blame - gcc/config/rs6000/rs6000.h
(simplify_if_then_else): Fix typo: "|" should be "||".
[gcc.git] / gcc / config / rs6000 / rs6000.h
CommitLineData
f045b2c9 1/* Definitions of target machine for GNU compiler, for IBM RS/6000.
6a7ec0a7
RK
2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
3 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
f045b2c9
RS
4
5This file is part of GNU CC.
6
7GNU CC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU CC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU CC; see the file COPYING. If not, write to
19the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22/* Note that some other tm.h files include this one and then override
23 many of the definitions that relate to assembler syntax. */
24
25
26/* Names to predefine in the preprocessor for this target machine. */
27
84b49fa7
RK
28#define CPP_PREDEFINES "-D_IBMR2 -D_POWER -D_AIX -D_AIX32 \
29-Asystem(unix) -Asystem(aix) -Acpu(rs6000) -Amachine(rs6000)"
f045b2c9
RS
30
31/* Print subsidiary information on the compiler version in use. */
32#define TARGET_VERSION ;
33
fdaff8ba
RS
34/* Tell the assembler to assume that all undefined names are external.
35
36 Don't do this until the fixed IBM assembler is more generally available.
37 When this becomes permanently defined, the ASM_OUTPUT_EXTERNAL,
38 ASM_OUTPUT_EXTERNAL_LIBCALL, and RS6000_OUTPUT_BASENAME macros will no
b4d6689b
RK
39 longer be needed. Also, the extern declaration of mcount in ASM_FILE_START
40 will no longer be needed. */
f045b2c9
RS
41
42/* #define ASM_SPEC "-u" */
43
84b49fa7
RK
44/* Define appropriate architecture macros for preprocessor depending on
45 target switches. */
46
47#define CPP_SPEC "\
48%{!mcpu*: \
49 %{mpower: %{!mpower2: -D_ARCH_PWR}} \
50 %{mpower2: -D_ARCH_PWR2} \
51 %{mpowerpc*: -D_ARCH_PPC} \
52 %{mno-power: %{!mpowerpc*: -D_ARCH_COM}} \
53 %{!mno-power: %{!mpower2: -D_ARCH_PWR}}} \
54%{mcpu=common: -D_ARCH_COM} \
55%{mcpu=power: -D_ARCH_PWR} \
56%{mcpu=powerpc: -D_ARCH_PPC} \
57%{mcpu=rios: -D_ARCH_PWR} \
58%{mcpu=rios1: -D_ARCH_PWR} \
59%{mcpu=rios2: -D_ARCH_PWR2} \
60%{mcpu=rsc: -D_ARCH_PWR} \
61%{mcpu=rsc1: -D_ARCH_PWR} \
62%{mcpu=601: -D_ARCH_PPC -D_ARCH_PWR} \
63%{mcpu=mpc601: -D_ARCH_PPC -D_ARCH_PWR} \
64%{mcpu=ppc601: -D_ARCH_PPC -D_ARCH_PWR} \
65%{mcpu=603: -D_ARCH_PPC} \
66%{mcpu=mpc603: -D_ARCH_PPC} \
67%{mcpu=ppc603: -D_ARCH_PPC} \
68%{mcpu=604: -D_ARCH_PPC} \
69%{mcpu=mpc604: -D_ARCH_PPC} \
70%{mcpu=ppc604: -D_ARCH_PPC}"
71
f045b2c9
RS
72/* Define the options for the binder: Start text at 512, align all segments
73 to 512 bytes, and warn if there is text relocation.
74
75 The -bhalt:4 option supposedly changes the level at which ld will abort,
76 but it also suppresses warnings about multiply defined symbols and is
77 used by the AIX cc command. So we use it here.
78
79 -bnodelcsect undoes a poor choice of default relating to multiply-defined
52c0eaf8
JM
80 csects. See AIX documentation for more information about this.
81
82 -bM:SRE tells the linker that the output file is Shared REusable. Note
83 that to actually build a shared library you will also need to specify an
84 export list with the -Wl,-bE option. */
f045b2c9 85
c1950f1c 86#define LINK_SPEC "-T512 -H512 %{!r:-btextro} -bhalt:4 -bnodelcsect\
52c0eaf8
JM
87 %{static:-bnso -bI:/lib/syscalls.exp} %{g*:-bexport:/usr/lib/libg.exp}\
88 %{shared:-bM:SRE}"
f045b2c9 89
58a39e45
RS
90/* Profiled library versions are used by linking with special directories. */
91#define LIB_SPEC "%{pg:-L/lib/profiled -L/usr/lib/profiled}\
92 %{p:-L/lib/profiled -L/usr/lib/profiled} %{g*:-lg} -lc"
f045b2c9
RS
93
94/* gcc must do the search itself to find libgcc.a, not use -l. */
52c0eaf8 95#define LIBGCC_SPEC "%{!shared:libgcc.a%s}"
f045b2c9
RS
96
97/* Don't turn -B into -L if the argument specifies a relative file name. */
98#define RELATIVE_PREFIX_NOT_LINKDIR
99
fb623df5 100/* Architecture type. */
f045b2c9 101
fb623df5
RK
102extern int target_flags;
103
104/* Use POWER architecture instructions and MQ register. */
105#define MASK_POWER 0x01
106
6febd581
RK
107/* Use POWER2 extensions to POWER architecture. */
108#define MASK_POWER2 0x02
109
fb623df5 110/* Use PowerPC architecture instructions. */
6febd581
RK
111#define MASK_POWERPC 0x04
112
583cf4db
RK
113/* Use PowerPC General Purpose group optional instructions, e.g. fsqrt. */
114#define MASK_PPC_GPOPT 0x08
115
116/* Use PowerPC Graphics group optional instructions, e.g. fsel. */
117#define MASK_PPC_GFXOPT 0x10
f045b2c9 118
fb623df5 119/* Use PowerPC-64 architecture instructions. */
583cf4db 120#define MASK_POWERPC64 0x20
f045b2c9 121
fb623df5 122/* Use revised mnemonic names defined for PowerPC architecture. */
583cf4db 123#define MASK_NEW_MNEMONICS 0x40
fb623df5
RK
124
125/* Disable placing fp constants in the TOC; can be turned on when the
126 TOC overflows. */
583cf4db 127#define MASK_NO_FP_IN_TOC 0x80
fb623df5 128
0b9ccabc
RK
129/* Disable placing symbol+offset constants in the TOC; can be turned on when
130 the TOC overflows. */
583cf4db 131#define MASK_NO_SUM_IN_TOC 0x100
0b9ccabc 132
fb623df5 133/* Output only one TOC entry per module. Normally linking fails if
642a35f1
JW
134 there are more than 16K unique variables/constants in an executable. With
135 this option, linking fails only if there are more than 16K modules, or
136 if there are more than 16K unique variables/constant in a single module.
137
138 This is at the cost of having 2 extra loads and one extra store per
139 function, and one less allocatable register. */
583cf4db 140#define MASK_MINIMAL_TOC 0x200
642a35f1 141
9e654916
RK
142/* Nonzero for the 64bit model: ints, longs, and pointers are 64 bits. */
143#define MASK_64BIT 0x400
144
f85f4585
RK
145/* Disable use of FPRs. */
146#define MASK_NO_FPR 0x800
147
fb623df5 148#define TARGET_POWER (target_flags & MASK_POWER)
6febd581 149#define TARGET_POWER2 (target_flags & MASK_POWER2)
fb623df5 150#define TARGET_POWERPC (target_flags & MASK_POWERPC)
583cf4db
RK
151#define TARGET_PPC_GPOPT (target_flags & MASK_PPC_GPOPT)
152#define TARGET_PPC_GFXOPT (target_flags & MASK_PPC_GFXOPT)
fb623df5
RK
153#define TARGET_POWERPC64 (target_flags & MASK_POWERPC64)
154#define TARGET_NEW_MNEMONICS (target_flags & MASK_NEW_MNEMONICS)
155#define TARGET_NO_FP_IN_TOC (target_flags & MASK_NO_FP_IN_TOC)
0b9ccabc 156#define TARGET_NO_SUM_IN_TOC (target_flags & MASK_NO_SUM_IN_TOC)
fb623df5 157#define TARGET_MINIMAL_TOC (target_flags & MASK_MINIMAL_TOC)
9e654916 158#define TARGET_64BIT (target_flags & MASK_64BIT)
f85f4585 159#define TARGET_NO_FPR (target_flags & MASK_NO_FPR)
642a35f1 160
fb623df5 161/* Run-time compilation parameters selecting different hardware subsets.
f045b2c9 162
fb623df5 163 Macro to define tables used to set the flags.
f045b2c9
RS
164 This is a list in braces of pairs in braces,
165 each pair being { "NAME", VALUE }
166 where VALUE is the bits to set or minus the bits to clear.
167 An empty string NAME is used to identify the default VALUE. */
168
fb623df5
RK
169#define TARGET_SWITCHES \
170 {{"power", MASK_POWER}, \
6febd581
RK
171 {"power2", MASK_POWER | MASK_POWER2}, \
172 {"no-power2", - MASK_POWER2}, \
173 {"no-power", - (MASK_POWER | MASK_POWER2)}, \
fb623df5 174 {"powerpc", MASK_POWERPC}, \
583cf4db
RK
175 {"no-powerpc", - (MASK_POWERPC | MASK_PPC_GPOPT \
176 | MASK_PPC_GFXOPT | MASK_POWERPC64)}, \
177 {"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT}, \
178 {"no-powerpc-gpopt", - MASK_PPC_GPOPT}, \
179 {"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT}, \
180 {"no-powerpc-gfxopt", - MASK_PPC_GFXOPT}, \
fb623df5
RK
181 {"new-mnemonics", MASK_NEW_MNEMONICS}, \
182 {"old-mnemonics", -MASK_NEW_MNEMONICS}, \
0b9ccabc
RK
183 {"full-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC \
184 | MASK_MINIMAL_TOC)}, \
fb623df5
RK
185 {"fp-in-toc", - MASK_NO_FP_IN_TOC}, \
186 {"no-fp-in-toc", MASK_NO_FP_IN_TOC}, \
0b9ccabc
RK
187 {"sum-in-toc", - MASK_NO_SUM_IN_TOC}, \
188 {"no-sum-in-toc", MASK_NO_SUM_IN_TOC}, \
fb623df5 189 {"minimal-toc", MASK_MINIMAL_TOC}, \
0b9ccabc 190 {"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC)}, \
fb623df5 191 {"no-minimal-toc", - MASK_MINIMAL_TOC}, \
f85f4585
RK
192 {"fp-regs", - MASK_NO_FPR}, \
193 {"no-fp-regs", MASK_NO_FPR}, \
fb623df5
RK
194 {"", TARGET_DEFAULT}}
195
196#define TARGET_DEFAULT MASK_POWER
197
198/* Processor type. */
199enum processor_type
f86fe1fb 200 {PROCESSOR_RIOS1,
fb623df5
RK
201 PROCESSOR_RIOS2,
202 PROCESSOR_PPC601,
203 PROCESSOR_PPC603,
204 PROCESSOR_PPC604,
205 PROCESSOR_PPC620};
206
207extern enum processor_type rs6000_cpu;
208
209/* Recast the processor type to the cpu attribute. */
210#define rs6000_cpu_attr ((enum attr_cpu)rs6000_cpu)
211
8482e358
RK
212/* Define generic processor types based upon current deployment. */
213#define PROCESSOR_COMMON PROCESSOR_PPC601
214#define PROCESSOR_POWER PROCESSOR_RIOS1
215#define PROCESSOR_POWERPC PROCESSOR_PPC601
6e151478 216
fb623df5 217/* Define the default processor. This is overridden by other tm.h files. */
f86fe1fb 218#define PROCESSOR_DEFAULT PROCESSOR_RIOS1
fb623df5 219
6febd581
RK
220/* Specify the dialect of assembler to use. New mnemonics is dialect one
221 and the old mnemonics are dialect zero. */
222#define ASSEMBLER_DIALECT TARGET_NEW_MNEMONICS ? 1 : 0
223
fb623df5
RK
224/* This macro is similar to `TARGET_SWITCHES' but defines names of
225 command options that have values. Its definition is an
226 initializer with a subgrouping for each command option.
227
228 Each subgrouping contains a string constant, that defines the
229 fixed part of the option name, and the address of a variable.
230 The variable, type `char *', is set to the variable part of the
231 given option if the fixed part matches. The actual option name
232 is made by appending `-m' to the specified name.
233
234 Here is an example which defines `-mshort-data-NUMBER'. If the
235 given option is `-mshort-data-512', the variable `m88k_short_data'
236 will be set to the string `"512"'.
237
238 extern char *m88k_short_data;
239 #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */
240
241#define TARGET_OPTIONS \
242{ {"cpu=", &rs6000_cpu_string}}
243
244extern char *rs6000_cpu_string;
245
246/* Sometimes certain combinations of command options do not make sense
247 on a particular target machine. You can define a macro
248 `OVERRIDE_OPTIONS' to take account of this. This macro, if
249 defined, is executed once just after all the command options have
250 been parsed.
251
252 On the RS/6000 this is used to define the target cpu type. */
253
254#define OVERRIDE_OPTIONS rs6000_override_options ()
f045b2c9 255
4f074454
RK
256/* Show we can debug even without a frame pointer. */
257#define CAN_DEBUG_WITHOUT_FP
f045b2c9
RS
258\f
259/* target machine storage layout */
260
13d39dbc 261/* Define this macro if it is advisable to hold scalars in registers
ef457bda
RK
262 in a wider mode than that declared by the program. In such cases,
263 the value is constrained to be within the bounds of the declared
264 type, but kept valid in the wider mode. The signedness of the
265 extension may differ from that of the type. */
266
267#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
268 if (GET_MODE_CLASS (MODE) == MODE_INT \
269 && GET_MODE_SIZE (MODE) < 4) \
dac29d65 270 (MODE) = SImode;
ef457bda 271
f045b2c9
RS
272/* Define this if most significant bit is lowest numbered
273 in instructions that operate on numbered bit-fields. */
274/* That is true on RS/6000. */
275#define BITS_BIG_ENDIAN 1
276
277/* Define this if most significant byte of a word is the lowest numbered. */
278/* That is true on RS/6000. */
279#define BYTES_BIG_ENDIAN 1
280
281/* Define this if most significant word of a multiword number is lowest
282 numbered.
283
284 For RS/6000 we can decide arbitrarily since there are no machine
285 instructions for them. Might as well be consistent with bits and bytes. */
286#define WORDS_BIG_ENDIAN 1
287
fdaff8ba 288/* number of bits in an addressable storage unit */
f045b2c9
RS
289#define BITS_PER_UNIT 8
290
291/* Width in bits of a "word", which is the contents of a machine register.
292 Note that this is not necessarily the width of data type `int';
293 if using 16-bit ints on a 68000, this would still be 32.
294 But on a machine with 16-bit registers, this would be 16. */
2e360ab3
RK
295#define BITS_PER_WORD (TARGET_POWERPC64 ? 64 : 32)
296#define MAX_BITS_PER_WORD 64
f045b2c9
RS
297
298/* Width of a word, in units (bytes). */
2e360ab3
RK
299#define UNITS_PER_WORD (TARGET_POWERPC64 ? 8 : 4)
300#define MAX_UNITS_PER_WORD 8
301#define UNITS_PER_FP_WORD 8
f045b2c9 302
915f619f
JW
303/* Type used for ptrdiff_t, as a string used in a declaration. */
304#define PTRDIFF_TYPE "int"
305
f045b2c9
RS
306/* Type used for wchar_t, as a string used in a declaration. */
307#define WCHAR_TYPE "short unsigned int"
308
309/* Width of wchar_t in bits. */
310#define WCHAR_TYPE_SIZE 16
311
9e654916
RK
312/* A C expression for the size in bits of the type `short' on the
313 target machine. If you don't define this, the default is half a
314 word. (If this would be less than one storage unit, it is
315 rounded up to one unit.) */
316#define SHORT_TYPE_SIZE 16
317
318/* A C expression for the size in bits of the type `int' on the
319 target machine. If you don't define this, the default is one
320 word. */
321#define INT_TYPE_SIZE (TARGET_64BIT ? 64 : 32)
322#define MAX_INT_TYPE_SIZE 64
323
324/* A C expression for the size in bits of the type `long' on the
325 target machine. If you don't define this, the default is one
326 word. */
327#define LONG_TYPE_SIZE (TARGET_64BIT ? 64 : 32)
328#define MAX_LONG_TYPE_SIZE 64
329
330/* A C expression for the size in bits of the type `long long' on the
331 target machine. If you don't define this, the default is two
332 words. */
333#define LONG_LONG_TYPE_SIZE 64
334
335/* A C expression for the size in bits of the type `char' on the
336 target machine. If you don't define this, the default is one
337 quarter of a word. (If this would be less than one storage unit,
338 it is rounded up to one unit.) */
339#define CHAR_TYPE_SIZE BITS_PER_UNIT
340
341/* A C expression for the size in bits of the type `float' on the
342 target machine. If you don't define this, the default is one
343 word. */
344#define FLOAT_TYPE_SIZE 32
345
346/* A C expression for the size in bits of the type `double' on the
347 target machine. If you don't define this, the default is two
348 words. */
349#define DOUBLE_TYPE_SIZE 64
350
351/* A C expression for the size in bits of the type `long double' on
352 the target machine. If you don't define this, the default is two
353 words. */
354#define LONG_DOUBLE_TYPE_SIZE 64
355
f045b2c9
RS
356/* Width in bits of a pointer.
357 See also the macro `Pmode' defined below. */
9e654916 358#define POINTER_SIZE (TARGET_64BIT ? 64 : 32)
f045b2c9
RS
359
360/* Allocation boundary (in *bits*) for storing arguments in argument list. */
9e654916 361#define PARM_BOUNDARY (TARGET_64BIT ? 64 : 32)
f045b2c9
RS
362
363/* Boundary (in *bits*) on which stack pointer should be aligned. */
364#define STACK_BOUNDARY 64
365
366/* Allocation boundary (in *bits*) for the code of a function. */
367#define FUNCTION_BOUNDARY 32
368
369/* No data type wants to be aligned rounder than this. */
9e654916 370#define BIGGEST_ALIGNMENT (TARGET_64BIT ? 64 : 32)
f045b2c9
RS
371
372/* Alignment of field after `int : 0' in a structure. */
373#define EMPTY_FIELD_BOUNDARY 32
374
375/* Every structure's size must be a multiple of this. */
376#define STRUCTURE_SIZE_BOUNDARY 8
377
378/* A bitfield declared as `int' forces `int' alignment for the struct. */
379#define PCC_BITFIELD_TYPE_MATTERS 1
380
381/* Make strings word-aligned so strcpy from constants will be faster. */
382#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
383 (TREE_CODE (EXP) == STRING_CST \
384 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
385
386/* Make arrays of chars word-aligned for the same reasons. */
387#define DATA_ALIGNMENT(TYPE, ALIGN) \
388 (TREE_CODE (TYPE) == ARRAY_TYPE \
389 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
390 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
391
fdaff8ba 392/* Non-zero if move instructions will actually fail to work
f045b2c9 393 when given unaligned data. */
fdaff8ba 394#define STRICT_ALIGNMENT 0
f045b2c9
RS
395\f
396/* Standard register usage. */
397
398/* Number of actual hardware registers.
399 The hardware registers are assigned numbers for the compiler
400 from 0 to just below FIRST_PSEUDO_REGISTER.
401 All registers that the compiler knows about must be given numbers,
402 even those that are not normally considered general registers.
403
404 RS/6000 has 32 fixed-point registers, 32 floating-point registers,
405 an MQ register, a count register, a link register, and 8 condition
406 register fields, which we view here as separate registers.
407
408 In addition, the difference between the frame and argument pointers is
409 a function of the number of registers saved, so we need to have a
410 register for AP that will later be eliminated in favor of SP or FP.
411 This is a normal register, but it is fixed. */
412
413#define FIRST_PSEUDO_REGISTER 76
414
415/* 1 for registers that have pervasive standard uses
416 and are not available for the register allocator.
417
418 On RS/6000, r1 is used for the stack and r2 is used as the TOC pointer.
419
420 cr5 is not supposed to be used. */
421
422#define FIXED_REGISTERS \
423 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
424 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
425 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
426 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
427 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}
428
429/* 1 for registers not available across function calls.
430 These must include the FIXED_REGISTERS and also any
431 registers that can be used without being saved.
432 The latter must include the registers where values are returned
433 and the register where structure-value addresses are passed.
434 Aside from that, you can include as many other registers as you like. */
435
436#define CALL_USED_REGISTERS \
437 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, \
438 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
439 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
440 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
441 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1}
442
443/* List the order in which to allocate registers. Each register must be
444 listed once, even those in FIXED_REGISTERS.
445
446 We allocate in the following order:
447 fp0 (not saved or used for anything)
448 fp13 - fp2 (not saved; incoming fp arg registers)
449 fp1 (not saved; return value)
450 fp31 - fp14 (saved; order given to save least number)
451 cr1, cr6, cr7 (not saved or special)
452 cr0 (not saved, but used for arithmetic operations)
453 cr2, cr3, cr4 (saved)
454 r0 (not saved; cannot be base reg)
455 r9 (not saved; best for TImode)
456 r11, r10, r8-r4 (not saved; highest used first to make less conflict)
457 r3 (not saved; return value register)
458 r31 - r13 (saved; order given to save least number)
459 r12 (not saved; if used for DImode or DFmode would use r13)
460 mq (not saved; best to use it if we can)
461 ctr (not saved; when we have the choice ctr is better)
462 lr (saved)
463 cr5, r1, r2, ap (fixed) */
464
465#define REG_ALLOC_ORDER \
466 {32, \
467 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, \
468 33, \
469 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \
470 50, 49, 48, 47, 46, \
471 69, 74, 75, 68, 70, 71, 72, \
472 0, \
473 9, 11, 10, 8, 7, 6, 5, 4, \
474 3, \
475 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, \
476 18, 17, 16, 15, 14, 13, 12, \
477 64, 66, 65, \
478 73, 1, 2, 67}
479
480/* True if register is floating-point. */
481#define FP_REGNO_P(N) ((N) >= 32 && (N) <= 63)
482
483/* True if register is a condition register. */
484#define CR_REGNO_P(N) ((N) >= 68 && (N) <= 75)
485
486/* True if register is an integer register. */
487#define INT_REGNO_P(N) ((N) <= 31 || (N) == 67)
488
489/* Return number of consecutive hard regs needed starting at reg REGNO
490 to hold something of mode MODE.
491 This is ordinarily the length in words of a value of mode MODE
492 but can be less for certain modes in special long registers.
493
494 On RS/6000, ordinary registers hold 32 bits worth;
495 a single floating point register holds 64 bits worth. */
496
497#define HARD_REGNO_NREGS(REGNO, MODE) \
498 (FP_REGNO_P (REGNO) \
2e360ab3 499 ? ((GET_MODE_SIZE (MODE) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD) \
f045b2c9
RS
500 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
501
502/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
bdfd4e31
RK
503 For POWER and PowerPC, the GPRs can hold any mode, but the float
504 registers only can hold floating modes and DImode, and CR register only
505 can hold CC modes. We cannot put TImode anywhere except general
506 register and it must be able to fit within the register set. */
f045b2c9
RS
507
508#define HARD_REGNO_MODE_OK(REGNO, MODE) \
bdfd4e31
RK
509 (FP_REGNO_P (REGNO) ? \
510 (GET_MODE_CLASS (MODE) == MODE_FLOAT \
511 || (GET_MODE_CLASS (MODE) == MODE_INT \
2e360ab3 512 && GET_MODE_SIZE (MODE) == UNITS_PER_FP_WORD)) \
f045b2c9 513 : CR_REGNO_P (REGNO) ? GET_MODE_CLASS (MODE) == MODE_CC \
bdfd4e31
RK
514 : ! INT_REGNO_P (REGNO) ? (GET_MODE_CLASS (MODE) == MODE_INT \
515 && GET_MODE_SIZE (MODE) <= UNITS_PER_WORD) \
f045b2c9
RS
516 : 1)
517
518/* Value is 1 if it is a good idea to tie two pseudo registers
519 when one has mode MODE1 and one has mode MODE2.
520 If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
521 for any hard reg, then this must be 0 for correct output. */
522#define MODES_TIEABLE_P(MODE1, MODE2) \
523 (GET_MODE_CLASS (MODE1) == MODE_FLOAT \
524 ? GET_MODE_CLASS (MODE2) == MODE_FLOAT \
525 : GET_MODE_CLASS (MODE2) == MODE_FLOAT \
526 ? GET_MODE_CLASS (MODE1) == MODE_FLOAT \
527 : GET_MODE_CLASS (MODE1) == MODE_CC \
528 ? GET_MODE_CLASS (MODE2) == MODE_CC \
529 : GET_MODE_CLASS (MODE2) == MODE_CC \
530 ? GET_MODE_CLASS (MODE1) == MODE_CC \
531 : 1)
532
533/* A C expression returning the cost of moving data from a register of class
534 CLASS1 to one of CLASS2.
535
536 On the RS/6000, copying between floating-point and fixed-point
537 registers is expensive. */
538
539#define REGISTER_MOVE_COST(CLASS1, CLASS2) \
540 ((CLASS1) == FLOAT_REGS && (CLASS2) == FLOAT_REGS ? 2 \
541 : (CLASS1) == FLOAT_REGS && (CLASS2) != FLOAT_REGS ? 10 \
542 : (CLASS1) != FLOAT_REGS && (CLASS2) == FLOAT_REGS ? 10 \
a4b970a0
RK
543 : (((CLASS1) == SPECIAL_REGS || (CLASS1) == MQ_REGS \
544 || (CLASS1) == LINK_REGS || (CLASS1) == CTR_REGS) \
545 && ((CLASS2) == SPECIAL_REGS || (CLASS2) == MQ_REGS \
546 || (CLASS2) == LINK_REGS || (CLASS2) == CTR_REGS)) ? 10 \
f045b2c9
RS
547 : 2)
548
549/* A C expressions returning the cost of moving data of MODE from a register to
550 or from memory.
551
552 On the RS/6000, bump this up a bit. */
553
ab4a5fc9
RK
554#define MEMORY_MOVE_COST(MODE) \
555 ((GET_MODE_CLASS (MODE) == MODE_FLOAT \
556 && (rs6000_cpu == PROCESSOR_RIOS1 || rs6000_cpu == PROCESSOR_PPC601) \
557 ? 3 : 2) \
558 + 4)
f045b2c9
RS
559
560/* Specify the cost of a branch insn; roughly the number of extra insns that
561 should be added to avoid a branch.
562
ef457bda 563 Set this to 3 on the RS/6000 since that is roughly the average cost of an
f045b2c9
RS
564 unscheduled conditional branch. */
565
ef457bda 566#define BRANCH_COST 3
f045b2c9 567
5a5e4c2c
RK
568/* A C statement (sans semicolon) to update the integer variable COST
569 based on the relationship between INSN that is dependent on
570 DEP_INSN through the dependence LINK. The default is to make no
571 adjustment to COST. On the RS/6000, ignore the cost of anti- and
572 output-dependencies. In fact, output dependencies on the CR do have
573 a cost, but it is probably not worthwhile to track it. */
574
575#define ADJUST_COST(INSN,LINK,DEP_INSN,COST) \
b0634e74 576 (COST) = rs6000_adjust_cost (INSN,LINK,DEP_INSN,COST)
5a5e4c2c 577
6febd581
RK
578/* Define this macro to change register usage conditional on target flags.
579 Set MQ register fixed (already call_used) if not POWER architecture
f85f4585
RK
580 (RIOS1, RIOS2, RSC, and PPC601) so that it will not be allocated.
581 Conditionally disable FPRs. */
582
583#define CONDITIONAL_REGISTER_USAGE \
584{ \
585 if (! TARGET_POWER) \
586 fixed_regs[64] = 1; \
587 if (TARGET_NO_FPR) \
588 for (i = 32; i < 64; i++) \
589 fixed_regs[i] = call_used_regs[i] = 1; \
590}
6febd581 591
f045b2c9
RS
592/* Specify the registers used for certain standard purposes.
593 The values of these macros are register numbers. */
594
595/* RS/6000 pc isn't overloaded on a register that the compiler knows about. */
596/* #define PC_REGNUM */
597
598/* Register to use for pushing function arguments. */
599#define STACK_POINTER_REGNUM 1
600
601/* Base register for access to local variables of the function. */
602#define FRAME_POINTER_REGNUM 31
603
604/* Value should be nonzero if functions must have frame pointers.
605 Zero means the frame pointer need not be set up (and parms
606 may be accessed via the stack pointer) in functions that seem suitable.
607 This is computed in `reload', in reload1.c. */
608#define FRAME_POINTER_REQUIRED 0
609
610/* Base register for access to arguments of the function. */
611#define ARG_POINTER_REGNUM 67
612
613/* Place to put static chain when calling a function that requires it. */
614#define STATIC_CHAIN_REGNUM 11
615
616/* Place that structure value return address is placed.
617
618 On the RS/6000, it is passed as an extra parameter. */
619#define STRUCT_VALUE 0
620\f
621/* Define the classes of registers for register constraints in the
622 machine description. Also define ranges of constants.
623
624 One of the classes must always be named ALL_REGS and include all hard regs.
625 If there is more than one class, another class must be named NO_REGS
626 and contain no registers.
627
628 The name GENERAL_REGS must be the name of a class (or an alias for
629 another name such as ALL_REGS). This is the class of registers
630 that is allowed by "g" or "r" in a register constraint.
631 Also, registers outside this class are allocated only when
632 instructions express preferences for them.
633
634 The classes must be numbered in nondecreasing order; that is,
635 a larger-numbered class must never be contained completely
636 in a smaller-numbered class.
637
638 For any two classes, it is very desirable that there be another
639 class that represents their union. */
640
641/* The RS/6000 has three types of registers, fixed-point, floating-point,
642 and condition registers, plus three special registers, MQ, CTR, and the
643 link register.
644
645 However, r0 is special in that it cannot be used as a base register.
646 So make a class for registers valid as base registers.
647
648 Also, cr0 is the only condition code register that can be used in
649 arithmetic insns, so make a separate class for it. */
650
651enum reg_class { NO_REGS, BASE_REGS, GENERAL_REGS, FLOAT_REGS,
652 NON_SPECIAL_REGS, MQ_REGS, LINK_REGS, CTR_REGS, LINK_OR_CTR_REGS,
e8a8bc24
RK
653 SPECIAL_REGS, SPEC_OR_GEN_REGS, CR0_REGS, CR_REGS, NON_FLOAT_REGS,
654 ALL_REGS, LIM_REG_CLASSES };
f045b2c9
RS
655
656#define N_REG_CLASSES (int) LIM_REG_CLASSES
657
658/* Give names of register classes as strings for dump file. */
659
660#define REG_CLASS_NAMES \
661 { "NO_REGS", "BASE_REGS", "GENERAL_REGS", "FLOAT_REGS", \
662 "NON_SPECIAL_REGS", "MQ_REGS", "LINK_REGS", "CTR_REGS", \
e8a8bc24
RK
663 "LINK_OR_CTR_REGS", "SPECIAL_REGS", "SPEC_OR_GEN_REGS", \
664 "CR0_REGS", "CR_REGS", "NON_FLOAT_REGS", "ALL_REGS" }
f045b2c9
RS
665
666/* Define which registers fit in which classes.
667 This is an initializer for a vector of HARD_REG_SET
668 of length N_REG_CLASSES. */
669
670#define REG_CLASS_CONTENTS \
671 { {0, 0, 0}, {0xfffffffe, 0, 8}, {~0, 0, 8}, \
e8a8bc24
RK
672 {0, ~0, 0}, {~0, ~0, 8}, {0, 0, 1}, {0, 0, 2}, \
673 {0, 0, 4}, {0, 0, 6}, {0, 0, 7}, {~0, 0, 15}, \
674 {0, 0, 16}, {0, 0, 0xff0}, {~0, 0, 0xffff}, \
675 {~0, ~0, 0xffff} }
f045b2c9
RS
676
677/* The same information, inverted:
678 Return the class number of the smallest class containing
679 reg number REGNO. This could be a conditional expression
680 or could index an array. */
681
682#define REGNO_REG_CLASS(REGNO) \
683 ((REGNO) == 0 ? GENERAL_REGS \
684 : (REGNO) < 32 ? BASE_REGS \
685 : FP_REGNO_P (REGNO) ? FLOAT_REGS \
686 : (REGNO) == 68 ? CR0_REGS \
687 : CR_REGNO_P (REGNO) ? CR_REGS \
688 : (REGNO) == 64 ? MQ_REGS \
689 : (REGNO) == 65 ? LINK_REGS \
690 : (REGNO) == 66 ? CTR_REGS \
691 : (REGNO) == 67 ? BASE_REGS \
692 : NO_REGS)
693
694/* The class value for index registers, and the one for base regs. */
695#define INDEX_REG_CLASS GENERAL_REGS
696#define BASE_REG_CLASS BASE_REGS
697
698/* Get reg_class from a letter such as appears in the machine description. */
699
700#define REG_CLASS_FROM_LETTER(C) \
701 ((C) == 'f' ? FLOAT_REGS \
702 : (C) == 'b' ? BASE_REGS \
703 : (C) == 'h' ? SPECIAL_REGS \
704 : (C) == 'q' ? MQ_REGS \
705 : (C) == 'c' ? CTR_REGS \
706 : (C) == 'l' ? LINK_REGS \
707 : (C) == 'x' ? CR0_REGS \
708 : (C) == 'y' ? CR_REGS \
709 : NO_REGS)
710
711/* The letters I, J, K, L, M, N, and P in a register constraint string
712 can be used to stand for particular ranges of immediate operands.
713 This macro defines what the ranges are.
714 C is the letter, and VALUE is a constant value.
715 Return 1 if VALUE is in the range specified by C.
716
717 `I' is signed 16-bit constants
718 `J' is a constant with only the high-order 16 bits non-zero
719 `K' is a constant with only the low-order 16 bits non-zero
720 `L' is a constant that can be placed into a mask operand
721 `M' is a constant that is greater than 31
722 `N' is a constant that is an exact power of two
723 `O' is the constant zero
724 `P' is a constant whose negation is a signed 16-bit constant */
725
726#define CONST_OK_FOR_LETTER_P(VALUE, C) \
727 ( (C) == 'I' ? (unsigned) ((VALUE) + 0x8000) < 0x10000 \
728 : (C) == 'J' ? ((VALUE) & 0xffff) == 0 \
729 : (C) == 'K' ? ((VALUE) & 0xffff0000) == 0 \
730 : (C) == 'L' ? mask_constant (VALUE) \
731 : (C) == 'M' ? (VALUE) > 31 \
732 : (C) == 'N' ? exact_log2 (VALUE) >= 0 \
733 : (C) == 'O' ? (VALUE) == 0 \
734 : (C) == 'P' ? (unsigned) ((- (VALUE)) + 0x8000) < 0x1000 \
735 : 0)
736
737/* Similar, but for floating constants, and defining letters G and H.
738 Here VALUE is the CONST_DOUBLE rtx itself.
739
740 We flag for special constants when we can copy the constant into
741 a general register in two insns for DF and one insn for SF. */
742
743#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
744 ((C) == 'G' ? easy_fp_constant (VALUE, GET_MODE (VALUE)) : 0)
745
746/* Optional extra constraints for this machine.
747
748 For the RS/6000, `Q' means that this is a memory operand that is just
749 an offset from a register. */
750
e8a8bc24
RK
751#define EXTRA_CONSTRAINT(OP, C) \
752 ((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == REG \
d537c24d 753 : (C) == 'R' ? LEGITIMATE_CONSTANT_POOL_ADDRESS_P (OP) \
e8a8bc24 754 : 0)
f045b2c9
RS
755
756/* Given an rtx X being reloaded into a reg required to be
757 in class CLASS, return the class of reg to actually use.
758 In general this is just CLASS; but on some machines
759 in some cases it is preferable to use a more restrictive class.
760
761 On the RS/6000, we have to return NO_REGS when we want to reload a
762 floating-point CONST_DOUBLE to force it to be copied to memory. */
763
764#define PREFERRED_RELOAD_CLASS(X,CLASS) \
765 ((GET_CODE (X) == CONST_DOUBLE \
766 && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
767 ? NO_REGS : (CLASS))
768
769/* Return the register class of a scratch register needed to copy IN into
770 or out of a register in CLASS in MODE. If it can be done directly,
771 NO_REGS is returned. */
772
773#define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \
774 secondary_reload_class (CLASS, MODE, IN)
775
7ea555a4
RK
776/* If we are copying between FP registers and anything else, we need a memory
777 location. */
778
779#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
780 ((CLASS1) != (CLASS2) && ((CLASS1) == FLOAT_REGS || (CLASS2) == FLOAT_REGS))
781
f045b2c9
RS
782/* Return the maximum number of consecutive registers
783 needed to represent mode MODE in a register of class CLASS.
784
785 On RS/6000, this is the size of MODE in words,
786 except in the FP regs, where a single reg is enough for two words. */
787#define CLASS_MAX_NREGS(CLASS, MODE) \
788 ((CLASS) == FLOAT_REGS \
2e360ab3 789 ? ((GET_MODE_SIZE (MODE) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD) \
f045b2c9 790 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
580d3230
RK
791
792/* If defined, gives a class of registers that cannot be used as the
793 operand of a SUBREG that changes the size of the object. */
794
795#define CLASS_CANNOT_CHANGE_SIZE FLOAT_REGS
f045b2c9
RS
796\f
797/* Stack layout; function entry, exit and calling. */
798
799/* Define this if pushing a word on the stack
800 makes the stack pointer a smaller address. */
801#define STACK_GROWS_DOWNWARD
802
803/* Define this if the nominal address of the stack frame
804 is at the high-address end of the local variables;
805 that is, each additional local variable allocated
806 goes at a more negative offset in the frame.
807
808 On the RS/6000, we grow upwards, from the area after the outgoing
809 arguments. */
810/* #define FRAME_GROWS_DOWNWARD */
811
812/* Offset within stack frame to start allocating local variables at.
813 If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
814 first local allocated. Otherwise, it is the offset to the BEGINNING
815 of the first local allocated.
816
817 On the RS/6000, the frame pointer is the same as the stack pointer,
818 except for dynamic allocations. So we start after the fixed area and
819 outgoing parameter area. */
820
9e654916
RK
821#define STARTING_FRAME_OFFSET (current_function_outgoing_args_size \
822 + (TARGET_64BIT ? 48 : 24))
f045b2c9
RS
823
824/* If we generate an insn to push BYTES bytes,
825 this says how many the stack pointer really advances by.
826 On RS/6000, don't define this because there are no push insns. */
827/* #define PUSH_ROUNDING(BYTES) */
828
829/* Offset of first parameter from the argument pointer register value.
830 On the RS/6000, we define the argument pointer to the start of the fixed
831 area. */
9e654916 832#define FIRST_PARM_OFFSET(FNDECL) (TARGET_64BIT ? 48 : 24)
f045b2c9
RS
833
834/* Define this if stack space is still allocated for a parameter passed
835 in a register. The value is the number of bytes allocated to this
836 area. */
9e654916 837#define REG_PARM_STACK_SPACE(FNDECL) (TARGET_64BIT ? 64 : 32)
f045b2c9
RS
838
839/* Define this if the above stack space is to be considered part of the
840 space allocated by the caller. */
841#define OUTGOING_REG_PARM_STACK_SPACE
842
843/* This is the difference between the logical top of stack and the actual sp.
844
845 For the RS/6000, sp points past the fixed area. */
9e654916 846#define STACK_POINTER_OFFSET (TARGET_64BIT ? 48 : 24)
f045b2c9
RS
847
848/* Define this if the maximum size of all the outgoing args is to be
849 accumulated and pushed during the prologue. The amount can be
850 found in the variable current_function_outgoing_args_size. */
851#define ACCUMULATE_OUTGOING_ARGS
852
853/* Value is the number of bytes of arguments automatically
854 popped when returning from a subroutine call.
855 FUNTYPE is the data type of the function (as a tree),
856 or for a library call it is an identifier node for the subroutine name.
857 SIZE is the number of bytes of arguments passed on the stack. */
858
859#define RETURN_POPS_ARGS(FUNTYPE,SIZE) 0
860
861/* Define how to find the value returned by a function.
862 VALTYPE is the data type of the value (as a tree).
863 If the precise function being called is known, FUNC is its FUNCTION_DECL;
864 otherwise, FUNC is 0.
865
866 On RS/6000 an integer value is in r3 and a floating-point value is in
867 fp1. */
868
869#define FUNCTION_VALUE(VALTYPE, FUNC) \
870 gen_rtx (REG, TYPE_MODE (VALTYPE), \
871 TREE_CODE (VALTYPE) == REAL_TYPE ? 33 : 3)
872
873/* Define how to find the value returned by a library function
874 assuming the value has mode MODE. */
875
876#define LIBCALL_VALUE(MODE) \
877 gen_rtx (REG, MODE, GET_MODE_CLASS (MODE) == MODE_FLOAT ? 33 : 3)
878
879/* The definition of this macro implies that there are cases where
880 a scalar value cannot be returned in registers.
881
882 For the RS/6000, any structure or union type is returned in memory. */
883
884#define RETURN_IN_MEMORY(TYPE) \
e419152d 885 (TYPE_MODE (TYPE) == BLKmode)
f045b2c9
RS
886
887/* 1 if N is a possible register number for a function value
888 as seen by the caller.
889
890 On RS/6000, this is r3 and fp1. */
891
892#define FUNCTION_VALUE_REGNO_P(N) ((N) == 3 || ((N) == 33))
893
894/* 1 if N is a possible register number for function argument passing.
895 On RS/6000, these are r3-r10 and fp1-fp13. */
896
897#define FUNCTION_ARG_REGNO_P(N) \
898 (((N) <= 10 && (N) >= 3) || ((N) >= 33 && (N) <= 45))
899\f
900/* Define a data type for recording info about an argument list
901 during the scan of that argument list. This data type should
902 hold all necessary information about the function itself
903 and about the args processed so far, enough to enable macros
904 such as FUNCTION_ARG to determine where the next arg should go.
905
906 On the RS/6000, this is a structure. The first element is the number of
907 total argument words, the second is used to store the next
908 floating-point register number, and the third says how many more args we
909 have prototype types for. */
910
911struct rs6000_args {int words, fregno, nargs_prototype; };
912#define CUMULATIVE_ARGS struct rs6000_args
913
914/* Define intermediate macro to compute the size (in registers) of an argument
915 for the RS/6000. */
916
917#define RS6000_ARG_SIZE(MODE, TYPE, NAMED) \
918(! (NAMED) ? 0 \
919 : (MODE) != BLKmode \
920 ? (GET_MODE_SIZE (MODE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD \
921 : (int_size_in_bytes (TYPE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
922
923/* Initialize a variable CUM of type CUMULATIVE_ARGS
924 for a call to a function whose data type is FNTYPE.
925 For a library call, FNTYPE is 0. */
926
927#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME) \
928 (CUM).words = 0, \
929 (CUM).fregno = 33, \
930 (CUM).nargs_prototype = (FNTYPE && TYPE_ARG_TYPES (FNTYPE) \
931 ? (list_length (TYPE_ARG_TYPES (FNTYPE)) - 1 \
932 + (TYPE_MODE (TREE_TYPE (FNTYPE)) == BLKmode \
933 || RETURN_IN_MEMORY (TREE_TYPE (FNTYPE)))) \
934 : 0)
935
936/* Similar, but when scanning the definition of a procedure. We always
937 set NARGS_PROTOTYPE large so we never return an EXPR_LIST. */
938
939#define INIT_CUMULATIVE_INCOMING_ARGS(CUM,FNTYPE,IGNORE) \
940 (CUM).words = 0, \
941 (CUM).fregno = 33, \
942 (CUM).nargs_prototype = 1000
943
944/* Update the data in CUM to advance over an argument
945 of mode MODE and data type TYPE.
946 (TYPE is null for libcalls where that information may not be available.) */
947
948#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
949{ (CUM).nargs_prototype--; \
950 if (NAMED) \
951 { \
952 (CUM).words += RS6000_ARG_SIZE (MODE, TYPE, NAMED); \
953 if (GET_MODE_CLASS (MODE) == MODE_FLOAT) \
954 (CUM).fregno++; \
955 } \
956}
957
958/* Non-zero if we can use a floating-point register to pass this arg. */
959#define USE_FP_FOR_ARG_P(CUM,MODE,TYPE) \
960 (GET_MODE_CLASS (MODE) == MODE_FLOAT && (CUM).fregno < 46)
961
962/* Determine where to put an argument to a function.
963 Value is zero to push the argument on the stack,
964 or a hard register in which to store the argument.
965
966 MODE is the argument's machine mode.
967 TYPE is the data type of the argument (as a tree).
968 This is null for libcalls where that information may
969 not be available.
970 CUM is a variable of type CUMULATIVE_ARGS which gives info about
971 the preceding args and about the function being called.
972 NAMED is nonzero if this argument is a named parameter
973 (otherwise it is an extra parameter matching an ellipsis).
974
975 On RS/6000 the first eight words of non-FP are normally in registers
976 and the rest are pushed. The first 13 FP args are in registers.
977
978 If this is floating-point and no prototype is specified, we use
4d6697ca
RK
979 both an FP and integer register (or possibly FP reg and stack). Library
980 functions (when TYPE is zero) always have the proper types for args,
981 so we can pass the FP value just in one register. emit_library_function
982 doesn't support EXPR_LIST anyway. */
f045b2c9
RS
983
984#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
985 (! (NAMED) ? 0 \
38bd31fc 986 : ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST) ? 0 \
d072107f 987 : USE_FP_FOR_ARG_P (CUM, MODE, TYPE) \
4d6697ca 988 ? ((CUM).nargs_prototype > 0 || (TYPE) == 0 \
f045b2c9
RS
989 ? gen_rtx (REG, MODE, (CUM).fregno) \
990 : ((CUM).words < 8 \
991 ? gen_rtx (EXPR_LIST, VOIDmode, \
992 gen_rtx (REG, (MODE), 3 + (CUM).words), \
993 gen_rtx (REG, (MODE), (CUM).fregno)) \
994 : gen_rtx (EXPR_LIST, VOIDmode, 0, \
995 gen_rtx (REG, (MODE), (CUM).fregno)))) \
996 : (CUM).words < 8 ? gen_rtx(REG, (MODE), 3 + (CUM).words) : 0)
997
998/* For an arg passed partly in registers and partly in memory,
999 this is the number of registers used.
1000 For args passed entirely in registers or entirely in memory, zero. */
1001
1002#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
1003 (! (NAMED) ? 0 \
1004 : USE_FP_FOR_ARG_P (CUM, MODE, TYPE) && (CUM).nargs_prototype >= 0 ? 0 \
1005 : (((CUM).words < 8 \
1006 && 8 < ((CUM).words + RS6000_ARG_SIZE (MODE, TYPE, NAMED))) \
1007 ? 8 - (CUM).words : 0))
1008
1009/* Perform any needed actions needed for a function that is receiving a
1010 variable number of arguments.
1011
1012 CUM is as above.
1013
1014 MODE and TYPE are the mode and type of the current parameter.
1015
1016 PRETEND_SIZE is a variable that should be set to the amount of stack
1017 that must be pushed by the prolog to pretend that our caller pushed
1018 it.
1019
1020 Normally, this macro will push all remaining incoming registers on the
1021 stack and set PRETEND_SIZE to the length of the registers pushed. */
1022
1023#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
1024{ if ((CUM).words < 8) \
1025 { \
1026 int first_reg_offset = (CUM).words; \
1027 \
1028 if (MUST_PASS_IN_STACK (MODE, TYPE)) \
1029 first_reg_offset += RS6000_ARG_SIZE (TYPE_MODE (TYPE), TYPE, 1); \
1030 \
1031 if (first_reg_offset > 8) \
1032 first_reg_offset = 8; \
1033 \
1034 if (! (NO_RTL) && first_reg_offset != 8) \
1035 move_block_from_reg \
1036 (3 + first_reg_offset, \
1037 gen_rtx (MEM, BLKmode, \
1038 plus_constant (virtual_incoming_args_rtx, \
1039 first_reg_offset * 4)), \
02892e06 1040 8 - first_reg_offset, (8 - first_reg_offset) * UNITS_PER_WORD); \
f045b2c9
RS
1041 PRETEND_SIZE = (8 - first_reg_offset) * UNITS_PER_WORD; \
1042 } \
1043}
1044
1045/* This macro generates the assembly code for function entry.
1046 FILE is a stdio stream to output the code to.
1047 SIZE is an int: how many units of temporary storage to allocate.
1048 Refer to the array `regs_ever_live' to determine which registers
1049 to save; `regs_ever_live[I]' is nonzero if register number I
1050 is ever used in the function. This macro is responsible for
1051 knowing which registers should not be saved even if used. */
1052
1053#define FUNCTION_PROLOGUE(FILE, SIZE) output_prolog (FILE, SIZE)
1054
1055/* Output assembler code to FILE to increment profiler label # LABELNO
58a39e45 1056 for profiling a function entry. */
f045b2c9
RS
1057
1058#define FUNCTION_PROFILER(FILE, LABELNO) \
58a39e45 1059 output_function_profiler ((FILE), (LABELNO));
f045b2c9
RS
1060
1061/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
1062 the stack pointer does not matter. No definition is equivalent to
1063 always zero.
1064
1065 On the RS/6000, this is non-zero because we can restore the stack from
1066 its backpointer, which we maintain. */
1067#define EXIT_IGNORE_STACK 1
1068
1069/* This macro generates the assembly code for function exit,
1070 on machines that need it. If FUNCTION_EPILOGUE is not defined
1071 then individual return instructions are generated for each
1072 return statement. Args are same as for FUNCTION_PROLOGUE.
1073
1074 The function epilogue should not depend on the current stack pointer!
1075 It should use the frame pointer only. This is mandatory because
1076 of alloca; we also take advantage of it to omit stack adjustments
1077 before returning. */
1078
1079#define FUNCTION_EPILOGUE(FILE, SIZE) output_epilog (FILE, SIZE)
1080\f
1081/* Output assembler code for a block containing the constant parts
1082 of a trampoline, leaving space for the variable parts.
1083
1084 The trampoline should set the static chain pointer to value placed
1085 into the trampoline and should branch to the specified routine.
1086
1087 On the RS/6000, this is not code at all, but merely a data area,
1088 since that is the way all functions are called. The first word is
1089 the address of the function, the second word is the TOC pointer (r2),
1090 and the third word is the static chain value. */
1091
1092#define TRAMPOLINE_TEMPLATE(FILE) { fprintf (FILE, "\t.long 0, 0, 0\n"); }
1093
1094/* Length in units of the trampoline for entering a nested function. */
1095
1096#define TRAMPOLINE_SIZE 12
1097
1098/* Emit RTL insns to initialize the variable parts of a trampoline.
1099 FNADDR is an RTX for the address of the function's pure code.
1100 CXT is an RTX for the static chain value for the function. */
1101
1102#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT) \
1103{ \
f045b2c9 1104 emit_move_insn (gen_rtx (MEM, SImode, \
858b728c
RK
1105 memory_address (SImode, (ADDR))), \
1106 gen_rtx (MEM, SImode, \
1107 memory_address (SImode, (FNADDR)))); \
f045b2c9 1108 emit_move_insn (gen_rtx (MEM, SImode, \
858b728c
RK
1109 memory_address (SImode, \
1110 plus_constant ((ADDR), 4))), \
1111 gen_rtx (MEM, SImode, \
1112 memory_address (SImode, \
1113 plus_constant ((FNADDR), 4)))); \
1114 emit_move_insn (gen_rtx (MEM, SImode, \
1115 memory_address (SImode, \
1116 plus_constant ((ADDR), 8))), \
1117 force_reg (SImode, (CXT))); \
f045b2c9
RS
1118}
1119\f
1120/* Definitions for register eliminations.
1121
1122 We have two registers that can be eliminated on the RS/6000. First, the
1123 frame pointer register can often be eliminated in favor of the stack
1124 pointer register. Secondly, the argument pointer register can always be
642a35f1
JW
1125 eliminated; it is replaced with either the stack or frame pointer.
1126
1127 In addition, we use the elimination mechanism to see if r30 is needed
1128 Initially we assume that it isn't. If it is, we spill it. This is done
1129 by making it an eliminable register. We replace it with itself so that
1130 if it isn't needed, then existing uses won't be modified. */
f045b2c9
RS
1131
1132/* This is an array of structures. Each structure initializes one pair
1133 of eliminable registers. The "from" register number is given first,
1134 followed by "to". Eliminations of the same "from" register are listed
1135 in order of preference. */
1136#define ELIMINABLE_REGS \
1137{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
1138 { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
642a35f1
JW
1139 { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
1140 { 30, 30} }
f045b2c9
RS
1141
1142/* Given FROM and TO register numbers, say whether this elimination is allowed.
1143 Frame pointer elimination is automatically handled.
1144
1145 For the RS/6000, if frame pointer elimination is being done, we would like
642a35f1
JW
1146 to convert ap into fp, not sp.
1147
1148 We need r30 if -mmininal-toc was specified, and there are constant pool
1149 references. */
f045b2c9
RS
1150
1151#define CAN_ELIMINATE(FROM, TO) \
1152 ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM \
1153 ? ! frame_pointer_needed \
642a35f1 1154 : (FROM) == 30 ? ! TARGET_MINIMAL_TOC || get_pool_size () == 0 \
f045b2c9
RS
1155 : 1)
1156
1157/* Define the offset between two registers, one to be eliminated, and the other
1158 its replacement, at the start of a routine. */
1159#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
1160{ \
1161 int total_stack_size = (rs6000_sa_size () + get_frame_size () \
1162 + current_function_outgoing_args_size); \
1163 \
1164 total_stack_size = (total_stack_size + 7) & ~7; \
1165 \
1166 if ((FROM) == FRAME_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM) \
1167 { \
1168 if (rs6000_pushes_stack ()) \
1169 (OFFSET) = 0; \
1170 else \
1171 (OFFSET) = - total_stack_size; \
1172 } \
1173 else if ((FROM) == ARG_POINTER_REGNUM && (TO) == FRAME_POINTER_REGNUM) \
1174 (OFFSET) = total_stack_size; \
1175 else if ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM) \
1176 { \
1177 if (rs6000_pushes_stack ()) \
1178 (OFFSET) = total_stack_size; \
1179 else \
1180 (OFFSET) = 0; \
1181 } \
642a35f1
JW
1182 else if ((FROM) == 30) \
1183 (OFFSET) = 0; \
f045b2c9
RS
1184 else \
1185 abort (); \
1186}
1187\f
1188/* Addressing modes, and classification of registers for them. */
1189
1190/* #define HAVE_POST_INCREMENT */
1191/* #define HAVE_POST_DECREMENT */
1192
1193#define HAVE_PRE_DECREMENT
1194#define HAVE_PRE_INCREMENT
1195
1196/* Macros to check register numbers against specific register classes. */
1197
1198/* These assume that REGNO is a hard or pseudo reg number.
1199 They give nonzero only if REGNO is a hard reg of the suitable class
1200 or a pseudo reg currently allocated to a suitable hard reg.
1201 Since they use reg_renumber, they are safe only once reg_renumber
1202 has been allocated, which happens in local-alloc.c. */
1203
1204#define REGNO_OK_FOR_INDEX_P(REGNO) \
1205((REGNO) < FIRST_PSEUDO_REGISTER \
1206 ? (REGNO) <= 31 || (REGNO) == 67 \
1207 : (reg_renumber[REGNO] >= 0 \
1208 && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67)))
1209
1210#define REGNO_OK_FOR_BASE_P(REGNO) \
1211((REGNO) < FIRST_PSEUDO_REGISTER \
1212 ? ((REGNO) > 0 && (REGNO) <= 31) || (REGNO) == 67 \
1213 : (reg_renumber[REGNO] > 0 \
1214 && (reg_renumber[REGNO] <= 31 || reg_renumber[REGNO] == 67)))
1215\f
1216/* Maximum number of registers that can appear in a valid memory address. */
1217
1218#define MAX_REGS_PER_ADDRESS 2
1219
1220/* Recognize any constant value that is a valid address. */
1221
6eff269e
BK
1222#define CONSTANT_ADDRESS_P(X) \
1223 (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
1224 || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
1225 || GET_CODE (X) == HIGH)
f045b2c9
RS
1226
1227/* Nonzero if the constant value X is a legitimate general operand.
1228 It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.
1229
1230 On the RS/6000, all integer constants are acceptable, most won't be valid
1231 for particular insns, though. Only easy FP constants are
1232 acceptable. */
1233
1234#define LEGITIMATE_CONSTANT_P(X) \
1235 (GET_CODE (X) != CONST_DOUBLE || GET_MODE (X) == VOIDmode \
1236 || easy_fp_constant (X, GET_MODE (X)))
1237
1238/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1239 and check its validity for a certain class.
1240 We have two alternate definitions for each of them.
1241 The usual definition accepts all pseudo regs; the other rejects
1242 them unless they have been allocated suitable hard regs.
1243 The symbol REG_OK_STRICT causes the latter definition to be used.
1244
1245 Most source files want to accept pseudo regs in the hope that
1246 they will get allocated to the class that the insn wants them to be in.
1247 Source files for reload pass need to be strict.
1248 After reload, it makes no difference, since pseudo regs have
1249 been eliminated by then. */
1250
1251#ifndef REG_OK_STRICT
1252
1253/* Nonzero if X is a hard reg that can be used as an index
1254 or if it is a pseudo reg. */
1255#define REG_OK_FOR_INDEX_P(X) \
1256 (REGNO (X) <= 31 || REGNO (X) == 67 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1257
1258/* Nonzero if X is a hard reg that can be used as a base reg
1259 or if it is a pseudo reg. */
1260#define REG_OK_FOR_BASE_P(X) \
1261 (REGNO (X) > 0 && REG_OK_FOR_INDEX_P (X))
1262
1263#else
1264
1265/* Nonzero if X is a hard reg that can be used as an index. */
1266#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1267/* Nonzero if X is a hard reg that can be used as a base reg. */
1268#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1269
1270#endif
1271\f
1272/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
1273 that is a valid memory address for an instruction.
1274 The MODE argument is the machine mode for the MEM expression
1275 that wants to use this address.
1276
1277 On the RS/6000, there are four valid address: a SYMBOL_REF that
1278 refers to a constant pool entry of an address (or the sum of it
1279 plus a constant), a short (16-bit signed) constant plus a register,
1280 the sum of two registers, or a register indirect, possibly with an
1281 auto-increment. For DFmode and DImode with an constant plus register,
1282 we must ensure that both words are addressable. */
1283
1284#define LEGITIMATE_CONSTANT_POOL_BASE_P(X) \
1285 (GET_CODE (X) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (X) \
1286 && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (X)))
1287
1288#define LEGITIMATE_CONSTANT_POOL_ADDRESS_P(X) \
1289 (LEGITIMATE_CONSTANT_POOL_BASE_P (X) \
1290 || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \
1291 && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT \
1292 && LEGITIMATE_CONSTANT_POOL_BASE_P (XEXP (XEXP (X, 0), 0))))
1293
1294#define LEGITIMATE_ADDRESS_INTEGER_P(X,OFFSET) \
1295 (GET_CODE (X) == CONST_INT \
1296 && (unsigned) (INTVAL (X) + (OFFSET) + 0x8000) < 0x10000)
1297
1298#define LEGITIMATE_OFFSET_ADDRESS_P(MODE,X) \
1299 (GET_CODE (X) == PLUS \
1300 && GET_CODE (XEXP (X, 0)) == REG \
1301 && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
1302 && LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 0) \
1303 && (((MODE) != DFmode && (MODE) != DImode) \
1304 || LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 4)))
1305
1306#define LEGITIMATE_INDEXED_ADDRESS_P(X) \
1307 (GET_CODE (X) == PLUS \
1308 && GET_CODE (XEXP (X, 0)) == REG \
1309 && GET_CODE (XEXP (X, 1)) == REG \
1310 && ((REG_OK_FOR_BASE_P (XEXP (X, 0)) \
1311 && REG_OK_FOR_INDEX_P (XEXP (X, 1))) \
1312 || (REG_OK_FOR_BASE_P (XEXP (X, 1)) \
1313 && REG_OK_FOR_INDEX_P (XEXP (X, 0)))))
1314
1315#define LEGITIMATE_INDIRECT_ADDRESS_P(X) \
1316 (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X))
1317
1318#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
1319{ if (LEGITIMATE_INDIRECT_ADDRESS_P (X)) \
1320 goto ADDR; \
1321 if (GET_CODE (X) == PRE_INC \
1322 && LEGITIMATE_INDIRECT_ADDRESS_P (XEXP (X, 0))) \
1323 goto ADDR; \
1324 if (GET_CODE (X) == PRE_DEC \
1325 && LEGITIMATE_INDIRECT_ADDRESS_P (XEXP (X, 0))) \
1326 goto ADDR; \
1327 if (LEGITIMATE_CONSTANT_POOL_ADDRESS_P (X)) \
1328 goto ADDR; \
1329 if (LEGITIMATE_OFFSET_ADDRESS_P (MODE, X)) \
1330 goto ADDR; \
1331 if ((MODE) != DImode && (MODE) != TImode \
1332 && LEGITIMATE_INDEXED_ADDRESS_P (X)) \
1333 goto ADDR; \
1334}
1335\f
1336/* Try machine-dependent ways of modifying an illegitimate address
1337 to be legitimate. If we find one, return the new, valid address.
1338 This macro is used in only one place: `memory_address' in explow.c.
1339
1340 OLDX is the address as it was before break_out_memory_refs was called.
1341 In some cases it is useful to look at this to decide what needs to be done.
1342
1343 MODE and WIN are passed so that this macro can use
1344 GO_IF_LEGITIMATE_ADDRESS.
1345
1346 It is always safe for this macro to do nothing. It exists to recognize
1347 opportunities to optimize the output.
1348
1349 On RS/6000, first check for the sum of a register with a constant
1350 integer that is out of range. If so, generate code to add the
1351 constant with the low-order 16 bits masked to the register and force
1352 this result into another register (this can be done with `cau').
1353 Then generate an address of REG+(CONST&0xffff), allowing for the
1354 possibility of bit 16 being a one.
1355
1356 Then check for the sum of a register and something not constant, try to
1357 load the other things into a register and return the sum. */
1358
1359#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
1360{ if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == REG \
1361 && GET_CODE (XEXP (X, 1)) == CONST_INT \
1362 && (unsigned) (INTVAL (XEXP (X, 1)) + 0x8000) >= 0x10000) \
1363 { int high_int, low_int; \
1364 high_int = INTVAL (XEXP (X, 1)) >> 16; \
1365 low_int = INTVAL (XEXP (X, 1)) & 0xffff; \
1366 if (low_int & 0x8000) \
1367 high_int += 1, low_int |= 0xffff0000; \
1368 (X) = gen_rtx (PLUS, SImode, \
1369 force_operand \
1370 (gen_rtx (PLUS, SImode, XEXP (X, 0), \
1371 gen_rtx (CONST_INT, VOIDmode, \
1372 high_int << 16)), 0),\
1373 gen_rtx (CONST_INT, VOIDmode, low_int)); \
f357808b 1374 goto WIN; \
f045b2c9
RS
1375 } \
1376 else if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == REG \
27a2a2f1
RK
1377 && GET_CODE (XEXP (X, 1)) != CONST_INT \
1378 && (MODE) != DImode && (MODE) != TImode) \
f357808b
RK
1379 { \
1380 (X) = gen_rtx (PLUS, SImode, XEXP (X, 0), \
1381 force_reg (SImode, force_operand (XEXP (X, 1), 0))); \
1382 goto WIN; \
1383 } \
f045b2c9
RS
1384}
1385
1386/* Go to LABEL if ADDR (a legitimate address expression)
1387 has an effect that depends on the machine mode it is used for.
1388
1389 On the RS/6000 this is true if the address is valid with a zero offset
1390 but not with an offset of four (this means it cannot be used as an
1391 address for DImode or DFmode) or is a pre-increment or decrement. Since
1392 we know it is valid, we just check for an address that is not valid with
1393 an offset of four. */
1394
1395#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
1396{ if (GET_CODE (ADDR) == PLUS \
1397 && LEGITIMATE_ADDRESS_INTEGER_P (XEXP (ADDR, 1), 0) \
1398 && ! LEGITIMATE_ADDRESS_INTEGER_P (XEXP (ADDR, 1), 4)) \
1399 goto LABEL; \
1400 if (GET_CODE (ADDR) == PRE_INC) \
1401 goto LABEL; \
1402 if (GET_CODE (ADDR) == PRE_DEC) \
1403 goto LABEL; \
1404}
1405\f
1406/* Define this if some processing needs to be done immediately before
4255474b 1407 emitting code for an insn. */
f045b2c9 1408
4255474b 1409/* #define FINAL_PRESCAN_INSN(INSN,OPERANDS,NOPERANDS) */
f045b2c9
RS
1410
1411/* Specify the machine mode that this machine uses
1412 for the index in the tablejump instruction. */
1413#define CASE_VECTOR_MODE SImode
1414
1415/* Define this if the tablejump instruction expects the table
1416 to contain offsets from the address of the table.
1417 Do not define this if the table should contain absolute addresses. */
1418#define CASE_VECTOR_PC_RELATIVE
1419
1420/* Specify the tree operation to be used to convert reals to integers. */
1421#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
1422
1423/* This is the kind of divide that is easiest to do in the general case. */
1424#define EASY_DIV_EXPR TRUNC_DIV_EXPR
1425
1426/* Define this as 1 if `char' should by default be signed; else as 0. */
1427#define DEFAULT_SIGNED_CHAR 0
1428
1429/* This flag, if defined, says the same insns that convert to a signed fixnum
1430 also convert validly to an unsigned one. */
1431
1432/* #define FIXUNS_TRUNC_LIKE_FIX_TRUNC */
1433
1434/* Max number of bytes we can move from memory to memory
1435 in one reasonably fast instruction. */
2e360ab3
RK
1436#define MOVE_MAX (TARGET_POWER ? 16 : (TARGET_POWERPC64 ? 8 : 4))
1437#define MAX_MOVE_MAX 16
f045b2c9
RS
1438
1439/* Nonzero if access to memory by bytes is no faster than for words.
1440 Also non-zero if doing byte operations (specifically shifts) in registers
1441 is undesirable. */
1442#define SLOW_BYTE_ACCESS 1
1443
9a63901f
RK
1444/* Define if operations between registers always perform the operation
1445 on the full register even if a narrower mode is specified. */
1446#define WORD_REGISTER_OPERATIONS
1447
1448/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
1449 will either zero-extend or sign-extend. The value of this macro should
1450 be the code that says which one of the two operations is implicitly
1451 done, NIL if none. */
1452#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
225211e2
RK
1453
1454/* Define if loading short immediate values into registers sign extends. */
1455#define SHORT_IMMEDIATES_SIGN_EXTEND
fdaff8ba
RS
1456\f
1457/* The RS/6000 uses the XCOFF format. */
f045b2c9 1458
fdaff8ba 1459#define XCOFF_DEBUGGING_INFO
f045b2c9 1460
c5abcf1d
CH
1461/* Define if the object format being used is COFF or a superset. */
1462#define OBJECT_FORMAT_COFF
1463
2c440f06
RK
1464/* Define the magic numbers that we recognize as COFF. */
1465
1466#define MY_ISCOFF(magic) \
1467 ((magic) == U802WRMAGIC || (magic) == U802ROMAGIC || (magic) == U802TOCMAGIC)
1468
115e69a9
RK
1469/* This is the only version of nm that collect2 can work with. */
1470#define REAL_NM_FILE_NAME "/usr/ucb/nm"
1471
f045b2c9
RS
1472/* We don't have GAS for the RS/6000 yet, so don't write out special
1473 .stabs in cc1plus. */
1474
1475#define FASCIST_ASSEMBLER
1476
f045b2c9
RS
1477/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1478 is done just by pretending it is already truncated. */
1479#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1480
1481/* Specify the machine mode that pointers have.
1482 After generation of rtl, the compiler makes no further distinction
1483 between pointers and any other objects of this machine mode. */
9e654916 1484#define Pmode (TARGET_64BIT ? DImode : SImode)
f045b2c9
RS
1485
1486/* Mode of a function address in a call instruction (for indexing purposes).
1487
1488 Doesn't matter on RS/6000. */
9e654916 1489#define FUNCTION_MODE (TARGET_64BIT ? DImode : SImode)
f045b2c9
RS
1490
1491/* Define this if addresses of constant functions
1492 shouldn't be put through pseudo regs where they can be cse'd.
1493 Desirable on machines where ordinary constants are expensive
1494 but a CALL with constant address is cheap. */
1495#define NO_FUNCTION_CSE
1496
d969caf8 1497/* Define this to be nonzero if shift instructions ignore all but the low-order
6febd581
RK
1498 few bits.
1499
1500 The sle and sre instructions which allow SHIFT_COUNT_TRUNCATED
1501 have been dropped from the PowerPC architecture. */
1502
1503#define SHIFT_COUNT_TRUNCATED TARGET_POWER ? 1 : 0
f045b2c9
RS
1504
1505/* Use atexit for static constructors/destructors, instead of defining
1506 our own exit function. */
1507#define HAVE_ATEXIT
1508
1509/* Compute the cost of computing a constant rtl expression RTX
1510 whose rtx-code is CODE. The body of this macro is a portion
1511 of a switch statement. If the code is computed here,
1512 return it with a return statement. Otherwise, break from the switch.
1513
1514 On the RS/6000, if it is legal in the insn, it is free. So this
1515 always returns 0. */
1516
3bb22aee 1517#define CONST_COSTS(RTX,CODE,OUTER_CODE) \
f045b2c9
RS
1518 case CONST_INT: \
1519 case CONST: \
1520 case LABEL_REF: \
1521 case SYMBOL_REF: \
1522 case CONST_DOUBLE: \
1523 return 0;
1524
1525/* Provide the costs of a rtl expression. This is in the body of a
1526 switch on CODE. */
1527
3bb22aee 1528#define RTX_COSTS(X,CODE,OUTER_CODE) \
f045b2c9 1529 case MULT: \
bdfd4e31
RK
1530 switch (rs6000_cpu) \
1531 { \
1532 case PROCESSOR_RIOS1: \
1533 return (GET_CODE (XEXP (X, 1)) != CONST_INT \
1534 ? COSTS_N_INSNS (5) \
1535 : INTVAL (XEXP (X, 1)) >= -256 && INTVAL (XEXP (X, 1)) <= 255 \
1536 ? COSTS_N_INSNS (3) : COSTS_N_INSNS (4)); \
1537 case PROCESSOR_RIOS2: \
1538 return COSTS_N_INSNS (2); \
1539 case PROCESSOR_PPC601: \
1540 case PROCESSOR_PPC603: \
869c489d 1541 return COSTS_N_INSNS (5); \
bdfd4e31
RK
1542 case PROCESSOR_PPC604: \
1543 case PROCESSOR_PPC620: \
869c489d 1544 return COSTS_N_INSNS (4); \
bdfd4e31 1545 } \
f045b2c9
RS
1546 case DIV: \
1547 case MOD: \
1548 if (GET_CODE (XEXP (X, 1)) == CONST_INT \
1549 && exact_log2 (INTVAL (XEXP (X, 1))) >= 0) \
1550 return COSTS_N_INSNS (2); \
1551 /* otherwise fall through to normal divide. */ \
1552 case UDIV: \
1553 case UMOD: \
bdfd4e31
RK
1554 switch (rs6000_cpu) \
1555 { \
1556 case PROCESSOR_RIOS1: \
1557 return COSTS_N_INSNS (19); \
1558 case PROCESSOR_RIOS2: \
1559 return COSTS_N_INSNS (13); \
1560 case PROCESSOR_PPC601: \
869c489d 1561 return COSTS_N_INSNS (36); \
bdfd4e31 1562 case PROCESSOR_PPC603: \
869c489d 1563 return COSTS_N_INSNS (37); \
bdfd4e31
RK
1564 case PROCESSOR_PPC604: \
1565 case PROCESSOR_PPC620: \
869c489d 1566 return COSTS_N_INSNS (20); \
bdfd4e31 1567 } \
f045b2c9
RS
1568 case MEM: \
1569 /* MEM should be slightly more expensive than (plus (reg) (const)) */ \
1570 return 5;
1571
1572/* Compute the cost of an address. This is meant to approximate the size
1573 and/or execution delay of an insn using that address. If the cost is
1574 approximated by the RTL complexity, including CONST_COSTS above, as
1575 is usually the case for CISC machines, this macro should not be defined.
1576 For aggressively RISCy machines, only one insn format is allowed, so
1577 this macro should be a constant. The value of this macro only matters
1578 for valid addresses.
1579
1580 For the RS/6000, everything is cost 0. */
1581
1582#define ADDRESS_COST(RTX) 0
1583
1584/* Adjust the length of an INSN. LENGTH is the currently-computed length and
1585 should be adjusted to reflect any required changes. This macro is used when
1586 there is some systematic length adjustment required that would be difficult
1587 to express in the length attribute. */
1588
1589/* #define ADJUST_INSN_LENGTH(X,LENGTH) */
1590
1591/* Add any extra modes needed to represent the condition code.
1592
1593 For the RS/6000, we need separate modes when unsigned (logical) comparisons
c5defebb
RK
1594 are being done and we need a separate mode for floating-point. We also
1595 use a mode for the case when we are comparing the results of two
1596 comparisons. */
f045b2c9 1597
c5defebb 1598#define EXTRA_CC_MODES CCUNSmode, CCFPmode, CCEQmode
f045b2c9
RS
1599
1600/* Define the names for the modes specified above. */
c5defebb 1601#define EXTRA_CC_NAMES "CCUNS", "CCFP", "CCEQ"
f045b2c9
RS
1602
1603/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
1604 return the mode to be used for the comparison. For floating-point, CCFPmode
c5defebb
RK
1605 should be used. CCUNSmode should be used for unsigned comparisons.
1606 CCEQmode should be used when we are doing an inequality comparison on
1607 the result of a comparison. CCmode should be used in all other cases. */
1608
b565a316 1609#define SELECT_CC_MODE(OP,X,Y) \
f045b2c9 1610 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? CCFPmode \
c5defebb
RK
1611 : (OP) == GTU || (OP) == LTU || (OP) == GEU || (OP) == LEU ? CCUNSmode \
1612 : (((OP) == EQ || (OP) == NE) && GET_RTX_CLASS (GET_CODE (X)) == '<' \
1613 ? CCEQmode : CCmode))
f045b2c9
RS
1614
1615/* Define the information needed to generate branch and scc insns. This is
1616 stored from the compare operation. Note that we can't use "rtx" here
1617 since it hasn't been defined! */
1618
1619extern struct rtx_def *rs6000_compare_op0, *rs6000_compare_op1;
1620extern int rs6000_compare_fp_p;
1621
1622/* Set to non-zero by "fix" operation to indicate that itrunc and
1623 uitrunc must be defined. */
1624
1625extern int rs6000_trunc_used;
9929b575
ILT
1626
1627/* Function names to call to do floating point truncation. */
1628
1629#define RS6000_ITRUNC "itrunc"
1630#define RS6000_UITRUNC "uitrunc"
f045b2c9
RS
1631\f
1632/* Control the assembler format that we output. */
1633
1634/* Output at beginning of assembler file.
1635
b4d6689b 1636 Initialize the section names for the RS/6000 at this point.
fdaff8ba 1637
6355b140 1638 Specify filename to assembler.
3fc2151d 1639
b4d6689b 1640 We want to go into the TOC section so at least one .toc will be emitted.
fdaff8ba 1641 Also, in order to output proper .bs/.es pairs, we need at least one static
b4d6689b
RK
1642 [RW] section emitted.
1643
1644 We then switch back to text to force the gcc2_compiled. label and the space
1645 allocated after it (when profiling) into the text section.
1646
1647 Finally, declare mcount when profiling to make the assembler happy. */
f045b2c9
RS
1648
1649#define ASM_FILE_START(FILE) \
1650{ \
fdaff8ba 1651 rs6000_gen_section_name (&xcoff_bss_section_name, \
f045b2c9 1652 main_input_filename, ".bss_"); \
fdaff8ba 1653 rs6000_gen_section_name (&xcoff_private_data_section_name, \
f045b2c9 1654 main_input_filename, ".rw_"); \
fdaff8ba 1655 rs6000_gen_section_name (&xcoff_read_only_section_name, \
f045b2c9
RS
1656 main_input_filename, ".ro_"); \
1657 \
6355b140 1658 output_file_directive (FILE, main_input_filename); \
f045b2c9 1659 toc_section (); \
fdaff8ba
RS
1660 if (write_symbols != NO_DEBUG) \
1661 private_data_section (); \
b4d6689b
RK
1662 text_section (); \
1663 if (profile_flag) \
1664 fprintf (FILE, "\t.extern .mcount\n"); \
f045b2c9
RS
1665}
1666
1667/* Output at end of assembler file.
1668
1669 On the RS/6000, referencing data should automatically pull in text. */
1670
1671#define ASM_FILE_END(FILE) \
1672{ \
1673 text_section (); \
1674 fprintf (FILE, "_section_.text:\n"); \
1675 data_section (); \
1676 fprintf (FILE, "\t.long _section_.text\n"); \
1677}
1678
f045b2c9
RS
1679/* We define this to prevent the name mangler from putting dollar signs into
1680 function names. */
1681
1682#define NO_DOLLAR_IN_LABEL
1683
1684/* We define this to 0 so that gcc will never accept a dollar sign in a
1685 variable name. This is needed because the AIX assembler will not accept
1686 dollar signs. */
1687
1688#define DOLLARS_IN_IDENTIFIERS 0
1689
fdaff8ba
RS
1690/* Implicit library calls should use memcpy, not bcopy, etc. */
1691
1692#define TARGET_MEM_FUNCTIONS
1693
f045b2c9
RS
1694/* Define the extra sections we need. We define three: one is the read-only
1695 data section which is used for constants. This is a csect whose name is
1696 derived from the name of the input file. The second is for initialized
1697 global variables. This is a csect whose name is that of the variable.
1698 The third is the TOC. */
1699
1700#define EXTRA_SECTIONS \
1701 read_only_data, private_data, read_only_private_data, toc, bss
1702
1703/* Define the name of our readonly data section. */
1704
1705#define READONLY_DATA_SECTION read_only_data_section
1706
b4f892eb
RK
1707/* If we are referencing a function that is static or is known to be
1708 in this file, make the SYMBOL_REF special. We can use this to indicate
1709 that we can branch to this function without emitting a no-op after the
1710 call. */
1711
1712#define ENCODE_SECTION_INFO(DECL) \
1713 if (TREE_CODE (DECL) == FUNCTION_DECL \
1714 && (TREE_ASM_WRITTEN (DECL) || ! TREE_PUBLIC (DECL))) \
1715 SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;
1716
f045b2c9
RS
1717/* Indicate that jump tables go in the text section. */
1718
1719#define JUMP_TABLES_IN_TEXT_SECTION
1720
1721/* Define the routines to implement these extra sections. */
1722
1723#define EXTRA_SECTION_FUNCTIONS \
1724 \
1725void \
1726read_only_data_section () \
1727{ \
1728 if (in_section != read_only_data) \
1729 { \
469adec3 1730 fprintf (asm_out_file, ".csect %s[RO]\n", \
fdaff8ba 1731 xcoff_read_only_section_name); \
f045b2c9
RS
1732 in_section = read_only_data; \
1733 } \
1734} \
1735 \
1736void \
1737private_data_section () \
1738{ \
1739 if (in_section != private_data) \
1740 { \
469adec3 1741 fprintf (asm_out_file, ".csect %s[RW]\n", \
fdaff8ba 1742 xcoff_private_data_section_name); \
f045b2c9
RS
1743 \
1744 in_section = private_data; \
1745 } \
1746} \
1747 \
1748void \
1749read_only_private_data_section () \
1750{ \
1751 if (in_section != read_only_private_data) \
1752 { \
f25359b5 1753 fprintf (asm_out_file, ".csect %s[RO]\n", \
fdaff8ba 1754 xcoff_private_data_section_name); \
f045b2c9
RS
1755 in_section = read_only_private_data; \
1756 } \
1757} \
1758 \
1759void \
1760toc_section () \
1761{ \
642a35f1
JW
1762 if (TARGET_MINIMAL_TOC) \
1763 { \
1764 static int toc_initialized = 0; \
1765 \
1766 /* toc_section is always called at least once from ASM_FILE_START, \
1767 so this is guaranteed to always be defined once and only once \
1768 in each file. */ \
1769 if (! toc_initialized) \
1770 { \
1771 fprintf (asm_out_file, ".toc\nLCTOC..0:\n"); \
1772 fprintf (asm_out_file, "\t.tc toc_table[TC],toc_table[RW]\n"); \
1773 toc_initialized = 1; \
1774 } \
f045b2c9 1775 \
642a35f1
JW
1776 if (in_section != toc) \
1777 fprintf (asm_out_file, ".csect toc_table[RW]\n"); \
1778 } \
1779 else \
1780 { \
1781 if (in_section != toc) \
1782 fprintf (asm_out_file, ".toc\n"); \
1783 } \
f045b2c9 1784 in_section = toc; \
fc3ffe83 1785}
f045b2c9
RS
1786
1787/* This macro produces the initial definition of a function name.
1788 On the RS/6000, we need to place an extra '.' in the function name and
1789 output the function descriptor.
1790
1791 The csect for the function will have already been created by the
1792 `text_section' call previously done. We do have to go back to that
1793 csect, however. */
1794
fdaff8ba
RS
1795/* ??? What do the 16 and 044 in the .function line really mean? */
1796
f045b2c9
RS
1797#define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
1798{ if (TREE_PUBLIC (DECL)) \
1799 { \
1800 fprintf (FILE, "\t.globl ."); \
1801 RS6000_OUTPUT_BASENAME (FILE, NAME); \
fdaff8ba
RS
1802 fprintf (FILE, "\n"); \
1803 } \
3ce428da 1804 else \
fdaff8ba
RS
1805 { \
1806 fprintf (FILE, "\t.lglobl ."); \
1807 RS6000_OUTPUT_BASENAME (FILE, NAME); \
1808 fprintf (FILE, "\n"); \
f045b2c9 1809 } \
f25359b5 1810 fprintf (FILE, ".csect "); \
f045b2c9
RS
1811 RS6000_OUTPUT_BASENAME (FILE, NAME); \
1812 fprintf (FILE, "[DS]\n"); \
1813 RS6000_OUTPUT_BASENAME (FILE, NAME); \
1814 fprintf (FILE, ":\n"); \
1815 fprintf (FILE, "\t.long ."); \
1816 RS6000_OUTPUT_BASENAME (FILE, NAME); \
fdaff8ba 1817 fprintf (FILE, ", TOC[tc0], 0\n"); \
11117bb9 1818 fprintf (FILE, ".csect .text[PR]\n."); \
f045b2c9
RS
1819 RS6000_OUTPUT_BASENAME (FILE, NAME); \
1820 fprintf (FILE, ":\n"); \
fdaff8ba 1821 if (write_symbols == XCOFF_DEBUG) \
c2a47e48 1822 xcoffout_declare_function (FILE, DECL, NAME); \
f045b2c9
RS
1823}
1824
1825/* Return non-zero if this entry is to be written into the constant pool
1826 in a special way. We do so if this is a SYMBOL_REF, LABEL_REF or a CONST
1827 containing one of them. If -mfp-in-toc (the default), we also do
1828 this for floating-point constants. We actually can only do this
1829 if the FP formats of the target and host machines are the same, but
1830 we can't check that since not every file that uses
1831 GO_IF_LEGITIMATE_ADDRESS_P includes real.h. */
1832
1833#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X) \
1834 (GET_CODE (X) == SYMBOL_REF \
1835 || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \
1836 && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \
1837 || GET_CODE (X) == LABEL_REF \
72847b95
RK
1838 || (! (TARGET_NO_FP_IN_TOC && ! TARGET_MINIMAL_TOC) \
1839 && GET_CODE (X) == CONST_DOUBLE \
f045b2c9
RS
1840 && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
1841 && BITS_PER_WORD == HOST_BITS_PER_INT))
1842
1843/* Select section for constant in constant pool.
1844
1845 On RS/6000, all constants are in the private read-only data area.
1846 However, if this is being placed in the TOC it must be output as a
1847 toc entry. */
1848
1849#define SELECT_RTX_SECTION(MODE, X) \
1850{ if (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (X)) \
1851 toc_section (); \
1852 else \
1853 read_only_private_data_section (); \
1854}
1855
1856/* Macro to output a special constant pool entry. Go to WIN if we output
1857 it. Otherwise, it is written the usual way.
1858
1859 On the RS/6000, toc entries are handled this way. */
1860
1861#define ASM_OUTPUT_SPECIAL_POOL_ENTRY(FILE, X, MODE, ALIGN, LABELNO, WIN) \
1862{ if (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (X)) \
1863 { \
1864 output_toc (FILE, X, LABELNO); \
1865 goto WIN; \
1866 } \
1867}
1868
1869/* Select the section for an initialized data object.
1870
1871 On the RS/6000, we have a special section for all variables except those
1872 that are static. */
1873
1874#define SELECT_SECTION(EXP,RELOC) \
1875{ \
ed8969fa
JW
1876 if ((TREE_CODE (EXP) == STRING_CST \
1877 && !flag_writable_strings) \
1878 || (TREE_READONLY (EXP) && ! TREE_THIS_VOLATILE (EXP) \
1879 && DECL_INITIAL (EXP) \
1880 && (DECL_INITIAL (EXP) == error_mark_node \
1881 || TREE_CONSTANT (DECL_INITIAL (EXP))) \
1882 && ! (RELOC))) \
f045b2c9
RS
1883 { \
1884 if (TREE_PUBLIC (EXP)) \
1885 read_only_data_section (); \
1886 else \
1887 read_only_private_data_section (); \
1888 } \
1889 else \
1890 { \
1891 if (TREE_PUBLIC (EXP)) \
1892 data_section (); \
1893 else \
1894 private_data_section (); \
1895 } \
1896}
1897
1898/* This outputs NAME to FILE up to the first null or '['. */
1899
1900#define RS6000_OUTPUT_BASENAME(FILE, NAME) \
99d3d26e 1901 if ((NAME)[0] == '*' || (NAME)[strlen (NAME) - 1] != ']') \
f045b2c9
RS
1902 assemble_name (FILE, NAME); \
1903 else \
1904 { \
99d3d26e
RK
1905 int _len = strlen (NAME); \
1906 char *_p = alloca (_len + 1); \
1907 \
1908 strcpy (_p, NAME); \
1909 _p[_len - 4] = '\0'; \
1910 assemble_name (FILE, _p); \
f045b2c9
RS
1911 }
1912
1913/* Output something to declare an external symbol to the assembler. Most
1914 assemblers don't need this.
1915
1916 If we haven't already, add "[RW]" (or "[DS]" for a function) to the
1917 name. Normally we write this out along with the name. In the few cases
1918 where we can't, it gets stripped off. */
1919
1920#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
1921{ rtx _symref = XEXP (DECL_RTL (DECL), 0); \
1922 if ((TREE_CODE (DECL) == VAR_DECL \
1923 || TREE_CODE (DECL) == FUNCTION_DECL) \
1924 && (NAME)[0] != '*' \
1925 && (NAME)[strlen (NAME) - 1] != ']') \
1926 { \
1927 char *_name = (char *) permalloc (strlen (XSTR (_symref, 0)) + 5); \
1928 strcpy (_name, XSTR (_symref, 0)); \
1929 strcat (_name, TREE_CODE (DECL) == FUNCTION_DECL ? "[DS]" : "[RW]"); \
1930 XSTR (_symref, 0) = _name; \
1931 } \
1932 fprintf (FILE, "\t.extern "); \
1933 assemble_name (FILE, XSTR (_symref, 0)); \
1934 if (TREE_CODE (DECL) == FUNCTION_DECL) \
1935 { \
1936 fprintf (FILE, "\n\t.extern ."); \
1937 RS6000_OUTPUT_BASENAME (FILE, XSTR (_symref, 0)); \
1938 } \
1939 fprintf (FILE, "\n"); \
1940}
1941
1942/* Similar, but for libcall. We only have to worry about the function name,
1943 not that of the descriptor. */
1944
1945#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
1946{ fprintf (FILE, "\t.extern ."); \
1947 assemble_name (FILE, XSTR (FUN, 0)); \
1948 fprintf (FILE, "\n"); \
1949}
1950
1951/* Output to assembler file text saying following lines
1952 may contain character constants, extra white space, comments, etc. */
1953
1954#define ASM_APP_ON ""
1955
1956/* Output to assembler file text saying following lines
1957 no longer contain unusual constructs. */
1958
1959#define ASM_APP_OFF ""
1960
1961/* Output before instructions. */
1962
11117bb9 1963#define TEXT_SECTION_ASM_OP ".csect .text[PR]"
f045b2c9
RS
1964
1965/* Output before writable data. */
1966
fdaff8ba 1967#define DATA_SECTION_ASM_OP ".csect .data[RW]"
f045b2c9
RS
1968
1969/* How to refer to registers in assembler output.
1970 This sequence is indexed by compiler's hard-register-number (see above). */
1971
1972#define REGISTER_NAMES \
1973 {"0", "1", "2", "3", "4", "5", "6", "7", \
1974 "8", "9", "10", "11", "12", "13", "14", "15", \
1975 "16", "17", "18", "19", "20", "21", "22", "23", \
1976 "24", "25", "26", "27", "28", "29", "30", "31", \
1977 "0", "1", "2", "3", "4", "5", "6", "7", \
1978 "8", "9", "10", "11", "12", "13", "14", "15", \
1979 "16", "17", "18", "19", "20", "21", "22", "23", \
1980 "24", "25", "26", "27", "28", "29", "30", "31", \
1981 "mq", "lr", "ctr", "ap", \
1982 "0", "1", "2", "3", "4", "5", "6", "7" }
1983
1984/* Table of additional register names to use in user input. */
1985
1986#define ADDITIONAL_REGISTER_NAMES \
1987 {"r0", 0, "r1", 1, "r2", 2, "r3", 3, \
1988 "r4", 4, "r5", 5, "r6", 6, "r7", 7, \
1989 "r8", 8, "r9", 9, "r10", 10, "r11", 11, \
1990 "r12", 12, "r13", 13, "r14", 14, "r15", 15, \
1991 "r16", 16, "r17", 17, "r18", 18, "r19", 19, \
1992 "r20", 20, "r21", 21, "r22", 22, "r23", 23, \
1993 "r24", 24, "r25", 25, "r26", 26, "r27", 27, \
1994 "r28", 28, "r29", 29, "r30", 30, "r31", 31, \
1995 "fr0", 32, "fr1", 33, "fr2", 34, "fr3", 35, \
1996 "fr4", 36, "fr5", 37, "fr6", 38, "fr7", 39, \
1997 "fr8", 40, "fr9", 41, "fr10", 42, "fr11", 43, \
1998 "fr12", 44, "fr13", 45, "fr14", 46, "fr15", 47, \
1999 "fr16", 48, "fr17", 49, "fr18", 50, "fr19", 51, \
2000 "fr20", 52, "fr21", 53, "fr22", 54, "fr23", 55, \
2001 "fr24", 56, "fr25", 57, "fr26", 58, "fr27", 59, \
2002 "fr28", 60, "fr29", 61, "fr30", 62, "fr31", 63, \
2003 /* no additional names for: mq, lr, ctr, ap */ \
2004 "cr0", 68, "cr1", 69, "cr2", 70, "cr3", 71, \
fc3ffe83
RK
2005 "cr4", 72, "cr5", 73, "cr6", 74, "cr7", 75, \
2006 "cc", 68 }
f045b2c9
RS
2007
2008/* How to renumber registers for dbx and gdb. */
2009
2010#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
2011
0da40b09
RK
2012/* Text to write out after a CALL that may be replaced by glue code by
2013 the loader. This depends on the AIX version. */
2014#define RS6000_CALL_GLUE "cror 31,31,31"
11117bb9 2015
f045b2c9
RS
2016/* This is how to output the definition of a user-level label named NAME,
2017 such as the label on a static function or variable NAME. */
2018
2019#define ASM_OUTPUT_LABEL(FILE,NAME) \
2020 do { RS6000_OUTPUT_BASENAME (FILE, NAME); fputs (":\n", FILE); } while (0)
2021
2022/* This is how to output a command to make the user-level label named NAME
2023 defined for reference from other files. */
2024
2025#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
2026 do { fputs ("\t.globl ", FILE); \
2027 RS6000_OUTPUT_BASENAME (FILE, NAME); fputs ("\n", FILE);} while (0)
2028
2029/* This is how to output a reference to a user-level label named NAME.
2030 `assemble_name' uses this. */
2031
2032#define ASM_OUTPUT_LABELREF(FILE,NAME) \
2033 fprintf (FILE, NAME)
2034
2035/* This is how to output an internal numbered label where
2036 PREFIX is the class of label and NUM is the number within the class. */
2037
2038#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
2039 fprintf (FILE, "%s..%d:\n", PREFIX, NUM)
2040
3daf36a4
ILT
2041/* This is how to output an internal label prefix. rs6000.c uses this
2042 when generating traceback tables. */
2043
2044#define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \
2045 fprintf (FILE, "%s..", PREFIX)
2046
f045b2c9
RS
2047/* This is how to output a label for a jump table. Arguments are the same as
2048 for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is
2049 passed. */
2050
2051#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \
2052{ ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); }
2053
2054/* This is how to store into the string LABEL
2055 the symbol_ref name of an internal numbered label where
2056 PREFIX is the class of label and NUM is the number within the class.
2057 This is suitable for output with `assemble_name'. */
2058
2059#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
2060 sprintf (LABEL, "%s..%d", PREFIX, NUM)
2061
2062/* This is how to output an assembler line defining a `double' constant. */
2063
a5b1eb34
RS
2064#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \
2065 { \
2066 if (REAL_VALUE_ISINF (VALUE) \
2067 || REAL_VALUE_ISNAN (VALUE) \
2068 || REAL_VALUE_MINUS_ZERO (VALUE)) \
2069 { \
2070 long t[2]; \
2071 REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
2072 fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", \
2073 t[0] & 0xffffffff, t[1] & 0xffffffff); \
2074 } \
2075 else \
2076 { \
2077 char str[30]; \
2078 REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", str); \
2079 fprintf (FILE, "\t.double 0d%s\n", str); \
2080 } \
2081 }
f045b2c9
RS
2082
2083/* This is how to output an assembler line defining a `float' constant. */
2084
a5b1eb34
RS
2085#define ASM_OUTPUT_FLOAT(FILE, VALUE) \
2086 { \
2087 if (REAL_VALUE_ISINF (VALUE) \
2088 || REAL_VALUE_ISNAN (VALUE) \
2089 || REAL_VALUE_MINUS_ZERO (VALUE)) \
2090 { \
2091 long t; \
2092 REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
2093 fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \
2094 } \
2095 else \
2096 { \
2097 char str[30]; \
2098 REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
2099 fprintf (FILE, "\t.float 0d%s\n", str); \
2100 } \
2101 }
f045b2c9
RS
2102
2103/* This is how to output an assembler line defining an `int' constant. */
2104
2105#define ASM_OUTPUT_INT(FILE,VALUE) \
2106( fprintf (FILE, "\t.long "), \
2107 output_addr_const (FILE, (VALUE)), \
2108 fprintf (FILE, "\n"))
2109
2110/* Likewise for `char' and `short' constants. */
2111
2112#define ASM_OUTPUT_SHORT(FILE,VALUE) \
2113( fprintf (FILE, "\t.short "), \
2114 output_addr_const (FILE, (VALUE)), \
2115 fprintf (FILE, "\n"))
2116
2117#define ASM_OUTPUT_CHAR(FILE,VALUE) \
2118( fprintf (FILE, "\t.byte "), \
2119 output_addr_const (FILE, (VALUE)), \
2120 fprintf (FILE, "\n"))
2121
2122/* This is how to output an assembler line for a numeric constant byte. */
2123
2124#define ASM_OUTPUT_BYTE(FILE,VALUE) \
2125 fprintf (FILE, "\t.byte 0x%x\n", (VALUE))
2126
2127/* This is how to output an assembler line to define N characters starting
2128 at P to FILE. */
2129
2130#define ASM_OUTPUT_ASCII(FILE, P, N) output_ascii ((FILE), (P), (N))
2131
2132/* This is how to output code to push a register on the stack.
2133 It need not be very fast code. */
2134
2135#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
6febd581 2136 asm_fprintf (FILE, "\{tstu|stwu} %s,-4(r1)\n", reg_names[REGNO]);
f045b2c9
RS
2137
2138/* This is how to output an insn to pop a register from the stack.
2139 It need not be very fast code. */
2140
2141#define ASM_OUTPUT_REG_POP(FILE,REGNO) \
6febd581
RK
2142 asm_fprintf (FILE, "\t{l|lwz} %s,0(r1)\n\t{ai|addic} r1,r1,4\n", \
2143 reg_names[REGNO])
f045b2c9
RS
2144
2145/* This is how to output an element of a case-vector that is absolute.
2146 (RS/6000 does not use such vectors, but we must define this macro
2147 anyway.) */
2148
3daf36a4
ILT
2149#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
2150 do { char buf[100]; \
2151 fprintf (FILE, "\t.long "); \
2152 ASM_GENERATE_INTERNAL_LABEL (buf, "L", VALUE); \
2153 assemble_name (FILE, buf); \
2154 fprintf (FILE, "\n"); \
2155 } while (0)
f045b2c9
RS
2156
2157/* This is how to output an element of a case-vector that is relative. */
2158
2159#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
3daf36a4
ILT
2160 do { char buf[100]; \
2161 fprintf (FILE, "\t.long "); \
2162 ASM_GENERATE_INTERNAL_LABEL (buf, "L", VALUE); \
2163 assemble_name (FILE, buf); \
2164 fprintf (FILE, "-"); \
2165 ASM_GENERATE_INTERNAL_LABEL (buf, "L", REL); \
2166 assemble_name (FILE, buf); \
2167 fprintf (FILE, "\n"); \
2168 } while (0)
f045b2c9
RS
2169
2170/* This is how to output an assembler line
2171 that says to advance the location counter
2172 to a multiple of 2**LOG bytes. */
2173
2174#define ASM_OUTPUT_ALIGN(FILE,LOG) \
2175 if ((LOG) != 0) \
2176 fprintf (FILE, "\t.align %d\n", (LOG))
2177
2178#define ASM_OUTPUT_SKIP(FILE,SIZE) \
2179 fprintf (FILE, "\t.space %d\n", (SIZE))
2180
2181/* This says how to output an assembler line
2182 to define a global common symbol. */
2183
2184#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
fc3ffe83 2185 do { fputs (".comm ", (FILE)); \
f045b2c9
RS
2186 RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
2187 fprintf ((FILE), ",%d\n", (SIZE)); } while (0)
2188
2189/* This says how to output an assembler line
2190 to define a local common symbol. */
2191
2192#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \
fc3ffe83 2193 do { fputs (".lcomm ", (FILE)); \
f045b2c9 2194 RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
fdaff8ba 2195 fprintf ((FILE), ",%d,%s\n", (SIZE), xcoff_bss_section_name); \
f045b2c9
RS
2196 } while (0)
2197
2198/* Store in OUTPUT a string (made with alloca) containing
2199 an assembler-name for a local static variable named NAME.
2200 LABELNO is an integer which is different for each call. */
2201
2202#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
2203( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
2204 sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
2205
2206/* Define the parentheses used to group arithmetic operations
2207 in assembler code. */
2208
2209#define ASM_OPEN_PAREN "("
2210#define ASM_CLOSE_PAREN ")"
2211
2212/* Define results of standard character escape sequences. */
2213#define TARGET_BELL 007
2214#define TARGET_BS 010
2215#define TARGET_TAB 011
2216#define TARGET_NEWLINE 012
2217#define TARGET_VT 013
2218#define TARGET_FF 014
2219#define TARGET_CR 015
2220
2221/* Print operand X (an rtx) in assembler syntax to file FILE.
2222 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
2223 For `%' followed by punctuation, CODE is the punctuation and X is null. */
2224
2225#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
2226
2227/* Define which CODE values are valid. */
2228
38250554 2229#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '.' || (CODE) == '*')
f045b2c9
RS
2230
2231/* Print a memory address as an operand to reference that memory location. */
2232
2233#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
2234
2235/* Define the codes that are matched by predicates in rs6000.c. */
2236
2237#define PREDICATE_CODES \
2238 {"short_cint_operand", {CONST_INT}}, \
2239 {"u_short_cint_operand", {CONST_INT}}, \
f357808b 2240 {"non_short_cint_operand", {CONST_INT}}, \
cd2b37d9 2241 {"gpc_reg_operand", {SUBREG, REG}}, \
f045b2c9
RS
2242 {"cc_reg_operand", {SUBREG, REG}}, \
2243 {"reg_or_short_operand", {SUBREG, REG, CONST_INT}}, \
2244 {"reg_or_neg_short_operand", {SUBREG, REG, CONST_INT}}, \
2245 {"reg_or_u_short_operand", {SUBREG, REG, CONST_INT}}, \
2246 {"reg_or_cint_operand", {SUBREG, REG, CONST_INT}}, \
2247 {"easy_fp_constant", {CONST_DOUBLE}}, \
2248 {"reg_or_mem_operand", {SUBREG, MEM, REG}}, \
414d3ee4 2249 {"lwa_operand", {SUBREG, MEM, REG}}, \
f045b2c9
RS
2250 {"fp_reg_or_mem_operand", {SUBREG, MEM, REG}}, \
2251 {"mem_or_easy_const_operand", {SUBREG, MEM, CONST_DOUBLE}}, \
2252 {"add_operand", {SUBREG, REG, CONST_INT}}, \
f357808b 2253 {"non_add_cint_operand", {CONST_INT}}, \
f045b2c9 2254 {"and_operand", {SUBREG, REG, CONST_INT}}, \
f357808b 2255 {"non_and_cint_operand", {CONST_INT}}, \
f045b2c9 2256 {"logical_operand", {SUBREG, REG, CONST_INT}}, \
f357808b 2257 {"non_logical_cint_operand", {CONST_INT}}, \
f045b2c9
RS
2258 {"mask_operand", {CONST_INT}}, \
2259 {"call_operand", {SYMBOL_REF, REG}}, \
f8634644 2260 {"current_file_function_operand", {SYMBOL_REF}}, \
38250554 2261 {"input_operand", {SUBREG, MEM, REG, CONST_INT, SYMBOL_REF}}, \
f8634644
RK
2262 {"load_multiple_operation", {PARALLEL}}, \
2263 {"store_multiple_operation", {PARALLEL}}, \
2264 {"branch_comparison_operator", {EQ, NE, LE, LT, GE, \
e477bbc7 2265 GT, LEU, LTU, GEU, GTU}}, \
f8634644 2266 {"scc_comparison_operator", {EQ, NE, LE, LT, GE, \
e477bbc7 2267 GT, LEU, LTU, GEU, GTU}},
This page took 0.428661 seconds and 5 git commands to generate.