OSDN Git Service

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