OSDN Git Service

(LIB_SPEC): Don't link in /usr/lib/bb_link.o with -a.
[pf3gnuchains/gcc-fork.git] / gcc / config / sparc / sparc.h
1 /* Definitions of target machine for GNU compiler, for Sun SPARC.
2    Copyright (C) 1987, 1988, 1989, 1992, 1994 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com).
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 /* Note that some other tm.h files include this one and then override
22    many of the definitions that relate to assembler syntax.  */
23
24 #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} %{g:-lg}"
25
26 /* Provide required defaults for linker -e and -d switches.  */
27
28 #define LINK_SPEC \
29  "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}"
30
31 /* Special flags to the Sun-4 assembler when using pipe for input.  */
32
33 #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}"
34
35 /* Define macros to distinguish architectures.  */
36 #define CPP_SPEC "%{msparclite:-D__sparclite__} %{mf930:-D__sparclite__} \
37 %{mf934:-D__sparclite__} %{mv8:-D__sparc_v8__}"
38
39 /* Prevent error on `-sun4' and `-target sun4' options.  */
40 /* This used to translate -dalign to -malign, but that is no good
41    because it can't turn off the usual meaning of making debugging dumps.  */
42
43 #define CC1_SPEC "%{sun4:} %{target:}"
44
45 #define PTRDIFF_TYPE "int"
46 /* In 2.4 it should work to delete this.
47    #define SIZE_TYPE "int"  */
48 #define WCHAR_TYPE "short unsigned int"
49 #define WCHAR_TYPE_SIZE 16
50
51 /* Show we can debug even without a frame pointer.  */
52 #define CAN_DEBUG_WITHOUT_FP
53
54 /* To make profiling work with -f{pic,PIC}, we need to emit the profiling
55    code into the rtl.  Also, if we are profiling, we cannot eliminate
56    the frame pointer (because the return address will get smashed).  */
57
58 #define OVERRIDE_OPTIONS \
59 {                                               \
60   if (profile_flag || profile_block_flag)       \
61     flag_omit_frame_pointer = 0, flag_pic = 0;  \
62   SUBTARGET_OVERRIDE_OPTIONS                    \
63   }
64
65 /* This is meant to be redefined in the host dependent files */
66 #define SUBTARGET_OVERRIDE_OPTIONS
67
68 /* These compiler options take an argument.  We ignore -target for now.  */
69
70 #define WORD_SWITCH_TAKES_ARG(STR)                              \
71  (DEFAULT_WORD_SWITCH_TAKES_ARG (STR)                           \
72   || !strcmp (STR, "target") || !strcmp (STR, "assert"))
73
74 /* Names to predefine in the preprocessor for this target machine.  */
75
76 /* ??? The GCC_NEW_VARARGS macro is now obsolete, because gcc always uses
77    the right varags.h file when bootstrapping.  */
78
79 #define CPP_PREDEFINES \
80   "-Dsparc -Dsun -Dunix -D__GCC_NEW_VARARGS__ \
81    -Asystem(unix) -Asystem(bsd) -Acpu(sparc) -Amachine(sparc)"
82
83 /* Print subsidiary information on the compiler version in use.  */
84
85 #define TARGET_VERSION fprintf (stderr, " (sparc)");
86
87 /* Generate DBX debugging information.  */
88
89 #define DBX_DEBUGGING_INFO
90
91 /* Run-time compilation parameters selecting different hardware subsets.  */
92
93 extern int target_flags;
94
95 /* Nonzero if we should generate code to use the fpu.  */
96 #define TARGET_FPU (target_flags & 1)
97
98 /* Nonzero if we should use FUNCTION_EPILOGUE.  Otherwise, we
99    use fast return insns, but lose some generality.  */
100 #define TARGET_EPILOGUE (target_flags & 2)
101
102 /* Nonzero if we should assume that double pointers might be unaligned.
103    This can happen when linking gcc compiled code with other compilers,
104    because the ABI only guarantees 4 byte alignment.  */
105 #define TARGET_UNALIGNED_DOUBLES (target_flags & 4)
106
107 /* Nonzero means that we should generate code for a v8 sparc.  */
108 #define TARGET_V8 (target_flags & 64)
109
110 /* Nonzero means that we should generate code for a sparclite.
111    This enables the sparclite specific instructions, but does not affect
112    whether FPU instructions are emitted.  */
113 #define TARGET_SPARCLITE (target_flags & 128)
114
115 /* Nonzero means that we should generate code using a flat register window
116    model, i.e. no save/restore instructions are generated, in the most
117    efficient manner.  This code is not compatible with normal sparc code.  */
118 /* This is not a user selectable option yet, because it requires changes
119    that are not yet switchable via command line arguments.  */
120 /* ??? This flag is deprecated and may disappear at some point.  */
121 #define TARGET_FRW (target_flags & 256)
122
123 /* Nonzero means that we should generate code using a flat register window
124    model, i.e. no save/restore instructions are generated, but which is
125    compatible with normal sparc code.   This is the same as above, except
126    that the frame pointer is %i7 instead of %fp.  */
127 /* ??? This use to be named TARGET_FRW_COMPAT.  At some point TARGET_FRW will
128    go away, but until that time only use this one when necessary.
129    -mflat sets both.  */
130 #define TARGET_FLAT (target_flags & 512)
131
132 /* Nonzero means use the registers that the Sparc ABI reserves for
133    application software.  This is the default.  */
134 #define TARGET_APP_REGS (target_flags & 1024)
135
136 /*  Option to select how quad word floating point is implemented.
137     When TARGET_HARD_QUAD is true, we use the hardware quad instructions.
138     Otherwise, we use the SPARC ABI quad library functions.  */
139 #define TARGET_HARD_QUAD (target_flags & 2048)
140
141 /* Macro to define tables used to set the flags.
142    This is a list in braces of pairs in braces,
143    each pair being { "NAME", VALUE }
144    where VALUE is the bits to set or minus the bits to clear.
145    An empty string NAME is used to identify the default VALUE.  */
146
147 /* The Fujitsu MB86930 is the original sparclite chip, with no fpu.
148    The Fujitsu MB86934 is the recent sparclite chip, with an fup.
149    We use -mf930 and -mf934 options to choose which.
150    ??? These should perhaps be -mcpu= options.  */
151
152 #define TARGET_SWITCHES  \
153   { {"fpu", 1},                 \
154     {"no-fpu", -1},             \
155     {"hard-float", 1},          \
156     {"soft-float", -1},         \
157     {"epilogue", 2},            \
158     {"no-epilogue", -2},        \
159     {"unaligned-doubles", 4},   \
160     {"no-unaligned-doubles", -4},\
161     {"v8", 64},                 \
162     {"no-v8", -64},             \
163     {"sparclite", 128},         \
164     {"no-sparclite", -128},     \
165     {"f930", 128},              \
166     {"f930", -1},               \
167     {"f934", 128},              \
168     {"flat", 256+512},          \
169     {"no-flat", -(256+512)},    \
170     {"app-regs", 1024},         \
171     {"no-app-regs", -1024},     \
172     {"hard-quad-float", 2048},        \
173     {"soft-quad-float", -2048},       \
174     SUBTARGET_SWITCHES          \
175     { "", TARGET_DEFAULT}}
176
177 #define TARGET_DEFAULT (1024+3)
178
179 /* This is meant to be redefined in the host dependent files */
180 #define SUBTARGET_SWITCHES
181 \f
182 /* target machine storage layout */
183
184 #if 0
185 /* ??? This does not work in SunOS 4.x, so it is not enabled here.
186    Instead, it is enabled in sol2.h, because it does work under Solaris.  */
187 /* Define for support of TFmode long double and REAL_ARITHMETIC.
188    Sparc ABI says that long double is 4 words.  */
189 #define LONG_DOUBLE_TYPE_SIZE 128
190 #endif
191
192 /* Define for cross-compilation to a sparc target with no TFmode from a host
193    with a different float format (e.g. VAX).  */
194 #define REAL_ARITHMETIC
195
196 /* Define this if most significant bit is lowest numbered
197    in instructions that operate on numbered bit-fields.  */
198 #define BITS_BIG_ENDIAN 1
199
200 /* Define this if most significant byte of a word is the lowest numbered.  */
201 /* This is true on the SPARC.  */
202 #define BYTES_BIG_ENDIAN 1
203
204 /* Define this if most significant word of a multiword number is the lowest
205    numbered.  */
206 /* Doubles are stored in memory with the high order word first.  This
207    matters when cross-compiling.  */
208 #define WORDS_BIG_ENDIAN 1
209
210 /* number of bits in an addressable storage unit */
211 #define BITS_PER_UNIT 8
212
213 /* Width in bits of a "word", which is the contents of a machine register.
214    Note that this is not necessarily the width of data type `int';
215    if using 16-bit ints on a 68000, this would still be 32.
216    But on a machine with 16-bit registers, this would be 16.  */
217 #define BITS_PER_WORD 32
218 #define MAX_BITS_PER_WORD 32
219
220 /* Width of a word, in units (bytes).  */
221 #define UNITS_PER_WORD 4
222
223 /* Width in bits of a pointer.
224    See also the macro `Pmode' defined below.  */
225 #define POINTER_SIZE 32
226
227 /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
228 #define PARM_BOUNDARY 32
229
230 /* Boundary (in *bits*) on which stack pointer should be aligned.  */
231 #define STACK_BOUNDARY 64
232
233 /* ALIGN FRAMES on double word boundaries */
234
235 #define SPARC_STACK_ALIGN(LOC) (((LOC)+7) & (~7))
236
237 /* Allocation boundary (in *bits*) for the code of a function.  */
238 #define FUNCTION_BOUNDARY 32
239
240 /* Alignment of field after `int : 0' in a structure.  */
241 #define EMPTY_FIELD_BOUNDARY 32
242
243 /* Every structure's size must be a multiple of this.  */
244 #define STRUCTURE_SIZE_BOUNDARY 8
245
246 /* A bitfield declared as `int' forces `int' alignment for the struct.  */
247 #define PCC_BITFIELD_TYPE_MATTERS 1
248
249 /* No data type wants to be aligned rounder than this.  */
250 #define BIGGEST_ALIGNMENT 64
251
252 /* The best alignment to use in cases where we have a choice.  */
253 #define FASTEST_ALIGNMENT 64
254
255 /* Make strings word-aligned so strcpy from constants will be faster.  */
256 #define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
257   ((TREE_CODE (EXP) == STRING_CST       \
258     && (ALIGN) < FASTEST_ALIGNMENT)     \
259    ? FASTEST_ALIGNMENT : (ALIGN))
260
261 /* Make arrays of chars word-aligned for the same reasons.  */
262 #define DATA_ALIGNMENT(TYPE, ALIGN)             \
263   (TREE_CODE (TYPE) == ARRAY_TYPE               \
264    && TYPE_MODE (TREE_TYPE (TYPE)) == QImode    \
265    && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
266
267 /* Set this nonzero if move instructions will actually fail to work
268    when given unaligned data.  */
269 #define STRICT_ALIGNMENT 1
270
271 /* Things that must be doubleword aligned cannot go in the text section,
272    because the linker fails to align the text section enough!
273    Put them in the data section.  */
274 #define MAX_TEXT_ALIGN 32
275
276 #define SELECT_SECTION(T,RELOC)                                         \
277 {                                                                       \
278   if (TREE_CODE (T) == VAR_DECL)                                        \
279     {                                                                   \
280       if (TREE_READONLY (T) && ! TREE_SIDE_EFFECTS (T)                  \
281           && DECL_INITIAL (T)                                           \
282           && (DECL_INITIAL (T) == error_mark_node                       \
283               || TREE_CONSTANT (DECL_INITIAL (T)))                      \
284           && DECL_ALIGN (T) <= MAX_TEXT_ALIGN                           \
285           && ! (flag_pic && (RELOC)))                                   \
286         text_section ();                                                \
287       else                                                              \
288         data_section ();                                                \
289     }                                                                   \
290   else if (TREE_CODE (T) == CONSTRUCTOR)                                \
291     {                                                                   \
292       if (flag_pic != 0 && (RELOC) != 0)                                \
293         data_section ();                                                \
294     }                                                                   \
295   else if (*tree_code_type[(int) TREE_CODE (T)] == 'c')                 \
296     {                                                                   \
297       if ((TREE_CODE (T) == STRING_CST && flag_writable_strings)        \
298           || TYPE_ALIGN (TREE_TYPE (T)) > MAX_TEXT_ALIGN)               \
299         data_section ();                                                \
300       else                                                              \
301         text_section ();                                                \
302     }                                                                   \
303 }
304
305 /* Use text section for a constant
306    unless we need more alignment than that offers.  */
307 #define SELECT_RTX_SECTION(MODE, X)             \
308 {                                               \
309   if (GET_MODE_BITSIZE (MODE) <= MAX_TEXT_ALIGN \
310       && ! (flag_pic && symbolic_operand (X)))  \
311     text_section ();                            \
312   else                                          \
313     data_section ();                            \
314 }
315 \f
316 /* Standard register usage.  */
317
318 /* Number of actual hardware registers.
319    The hardware registers are assigned numbers for the compiler
320    from 0 to just below FIRST_PSEUDO_REGISTER.
321    All registers that the compiler knows about must be given numbers,
322    even those that are not normally considered general registers.
323
324    SPARC has 32 integer registers and 32 floating point registers.  */
325
326 #define FIRST_PSEUDO_REGISTER 64
327
328 /* 1 for registers that have pervasive standard uses
329    and are not available for the register allocator.
330    g0 is used for the condition code and not to represent %g0, which is
331    hardwired to 0, so reg 0 is *not* fixed.
332    g1 is free to use as temporary.
333    g2-g4 are reserved for applications.  Gcc normally uses them as
334    temporaries, but this can be disabled via the -mno-app-regs option.
335    g5 through g7 are reserved for the operating system.  */
336 #define FIXED_REGISTERS  \
337  {0, 0, 0, 0, 0, 1, 1, 1,       \
338   0, 0, 0, 0, 0, 0, 1, 0,       \
339   0, 0, 0, 0, 0, 0, 0, 0,       \
340   0, 0, 0, 0, 0, 0, 1, 1,       \
341                                 \
342   0, 0, 0, 0, 0, 0, 0, 0,       \
343   0, 0, 0, 0, 0, 0, 0, 0,       \
344   0, 0, 0, 0, 0, 0, 0, 0,       \
345   0, 0, 0, 0, 0, 0, 0, 0}
346
347 /* 1 for registers not available across function calls.
348    These must include the FIXED_REGISTERS and also any
349    registers that can be used without being saved.
350    The latter must include the registers where values are returned
351    and the register where structure-value addresses are passed.
352    Aside from that, you can include as many other registers as you like.  */
353 #define CALL_USED_REGISTERS  \
354  {1, 1, 1, 1, 1, 1, 1, 1,       \
355   1, 1, 1, 1, 1, 1, 1, 1,       \
356   0, 0, 0, 0, 0, 0, 0, 0,       \
357   0, 0, 0, 0, 0, 0, 1, 1,       \
358                                 \
359   1, 1, 1, 1, 1, 1, 1, 1,       \
360   1, 1, 1, 1, 1, 1, 1, 1,       \
361   1, 1, 1, 1, 1, 1, 1, 1,       \
362   1, 1, 1, 1, 1, 1, 1, 1}
363
364 /* If !TARGET_FPU, then make the fp registers fixed so that they won't
365    be allocated.  */
366
367 #define CONDITIONAL_REGISTER_USAGE                              \
368 do                                                              \
369   {                                                             \
370     if (! TARGET_FPU)                                           \
371       {                                                         \
372         int regno;                                              \
373         for (regno = 32; regno < 64; regno++)                   \
374           fixed_regs[regno] = 1;                                \
375       }                                                         \
376     if (! TARGET_APP_REGS)                                      \
377       {                                                         \
378         fixed_regs[2] = 1;                                      \
379         fixed_regs[3] = 1;                                      \
380         fixed_regs[4] = 1;                                      \
381       }                                                         \
382     if (TARGET_FLAT)                                            \
383       {                                                         \
384         /* Let the compiler believe the frame pointer is still  \
385            %fp, but output it as %i7.  */                       \
386         fixed_regs[31] = 1;                                     \
387         reg_names[FRAME_POINTER_REGNUM] = "%i7";                \
388         /* ??? This is a hack to disable leaf functions.  */    \
389         global_regs[7] = 1;                                     \
390       }                                                         \
391     if (profile_block_flag)                                     \
392       {                                                         \
393         /* %g1 and %g2 must be fixed, because BLOCK_PROFILER    \
394             uses them.  */                                      \
395         fixed_regs[1] = 1;                                      \
396         fixed_regs[2] = 1;                                      \
397       }                                                         \
398   }                                                             \
399 while (0)
400
401 /* Return number of consecutive hard regs needed starting at reg REGNO
402    to hold something of mode MODE.
403    This is ordinarily the length in words of a value of mode MODE
404    but can be less for certain modes in special long registers.
405
406    On SPARC, ordinary registers hold 32 bits worth;
407    this means both integer and floating point registers.
408
409    We use vectors to keep this information about registers.  */
410
411 /* How many hard registers it takes to make a register of this mode.  */
412 extern int hard_regno_nregs[];
413
414 #define HARD_REGNO_NREGS(REGNO, MODE)   \
415   ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
416
417 /* Value is 1 if register/mode pair is acceptable on sparc.  */
418 extern int hard_regno_mode_ok[FIRST_PSEUDO_REGISTER];
419
420 /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
421    See sparc.c for how we initialize this.  */
422 #define HARD_REGNO_MODE_OK(REGNO, MODE) \
423   ((hard_regno_mode_ok[REGNO] & (1<<(int)(MODE))) != 0)
424
425 /* Value is 1 if it is a good idea to tie two pseudo registers
426    when one has mode MODE1 and one has mode MODE2.
427    If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
428    for any hard reg, then this must be 0 for correct output.  */
429 #define MODES_TIEABLE_P(MODE1, MODE2) \
430   ((MODE1) == (MODE2) || GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2))
431
432 /* Specify the registers used for certain standard purposes.
433    The values of these macros are register numbers.  */
434
435 /* SPARC pc isn't overloaded on a register that the compiler knows about.  */
436 /* #define PC_REGNUM  */
437
438 /* Register to use for pushing function arguments.  */
439 #define STACK_POINTER_REGNUM 14
440
441 /* Actual top-of-stack address is 92 greater than the contents
442    of the stack pointer register.  92 = 68 + 24.  64 bytes reserving space
443    for the ins and local registers, 4 byte for structure return address, and
444    24 bytes for the 6 register parameters.  */
445 #define STACK_POINTER_OFFSET FIRST_PARM_OFFSET(0)
446
447 /* Base register for access to local variables of the function.  */
448 #define FRAME_POINTER_REGNUM 30
449
450 #if 0
451 /* Register that is used for the return address.  */
452 #define RETURN_ADDR_REGNUM 15
453 #endif
454
455 /* Value should be nonzero if functions must have frame pointers.
456    Zero means the frame pointer need not be set up (and parms
457    may be accessed via the stack pointer) in functions that seem suitable.
458    This is computed in `reload', in reload1.c.
459
460    Used in flow.c, global.c, and reload1.c.  */
461 extern int leaf_function;
462
463 #define FRAME_POINTER_REQUIRED \
464   (TARGET_FRW ? (current_function_calls_alloca || current_function_varargs) \
465    : ! (leaf_function_p () && only_leaf_regs_used ()))
466
467 /* C statement to store the difference between the frame pointer
468    and the stack pointer values immediately after the function prologue.
469
470    Note, we always pretend that this is a leaf function because if
471    it's not, there's no point in trying to eliminate the
472    frame pointer.  If it is a leaf function, we guessed right!  */
473 #define INITIAL_FRAME_POINTER_OFFSET(VAR) \
474   ((VAR) = (TARGET_FRW ? sparc_flat_compute_frame_size (get_frame_size ()) \
475             : compute_frame_size (get_frame_size (), 1)))
476
477 /* Base register for access to arguments of the function.  */
478 #define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM
479
480 /* Register in which static-chain is passed to a function.  This must
481    not be a register used by the prologue.  */
482 #define STATIC_CHAIN_REGNUM 2
483
484 /* Register which holds offset table for position-independent
485    data references.  */
486
487 #define PIC_OFFSET_TABLE_REGNUM 23
488
489 #define INITIALIZE_PIC initialize_pic ()
490 #define FINALIZE_PIC finalize_pic ()
491
492 /* Sparc ABI says that quad-precision floats and all structures are returned
493    in memory.  */
494 #define RETURN_IN_MEMORY(TYPE)  \
495   (TYPE_MODE (TYPE) == BLKmode || TYPE_MODE (TYPE) == TFmode)
496
497 /* Functions which return large structures get the address
498    to place the wanted value at offset 64 from the frame.
499    Must reserve 64 bytes for the in and local registers.  */
500 /* Used only in other #defines in this file.  */
501 #define STRUCT_VALUE_OFFSET 64
502
503 #define STRUCT_VALUE \
504   gen_rtx (MEM, Pmode,                                  \
505            gen_rtx (PLUS, Pmode, stack_pointer_rtx,     \
506                     gen_rtx (CONST_INT, VOIDmode, STRUCT_VALUE_OFFSET)))
507 #define STRUCT_VALUE_INCOMING \
508   gen_rtx (MEM, Pmode,                                  \
509            gen_rtx (PLUS, Pmode, frame_pointer_rtx,     \
510                     gen_rtx (CONST_INT, VOIDmode, STRUCT_VALUE_OFFSET)))
511 \f
512 /* Define the classes of registers for register constraints in the
513    machine description.  Also define ranges of constants.
514
515    One of the classes must always be named ALL_REGS and include all hard regs.
516    If there is more than one class, another class must be named NO_REGS
517    and contain no registers.
518
519    The name GENERAL_REGS must be the name of a class (or an alias for
520    another name such as ALL_REGS).  This is the class of registers
521    that is allowed by "g" or "r" in a register constraint.
522    Also, registers outside this class are allocated only when
523    instructions express preferences for them.
524
525    The classes must be numbered in nondecreasing order; that is,
526    a larger-numbered class must never be contained completely
527    in a smaller-numbered class.
528
529    For any two classes, it is very desirable that there be another
530    class that represents their union.  */
531
532 /* The SPARC has two kinds of registers, general and floating point.  */
533
534 enum reg_class { NO_REGS, GENERAL_REGS, FP_REGS, ALL_REGS, LIM_REG_CLASSES };
535
536 #define N_REG_CLASSES (int) LIM_REG_CLASSES
537
538 /* Give names of register classes as strings for dump file.   */
539
540 #define REG_CLASS_NAMES \
541  {"NO_REGS", "GENERAL_REGS", "FP_REGS", "ALL_REGS" }
542
543 /* Define which registers fit in which classes.
544    This is an initializer for a vector of HARD_REG_SET
545    of length N_REG_CLASSES.  */
546
547 #if 0 && defined (__GNUC__)
548 #define REG_CLASS_CONTENTS {0LL, 0xfffffffeLL, 0xffffffff00000000LL, 0xfffffffffffffffeLL}
549 #else
550 #define REG_CLASS_CONTENTS {{0, 0}, {-2, 0}, {0, -1}, {-2, -1}}
551 #endif
552
553 /* The same information, inverted:
554    Return the class number of the smallest class containing
555    reg number REGNO.  This could be a conditional expression
556    or could index an array.  */
557
558 #define REGNO_REG_CLASS(REGNO) \
559   ((REGNO) >= 32 ? FP_REGS : (REGNO) == 0 ? NO_REGS : GENERAL_REGS)
560
561 /* This is the order in which to allocate registers
562    normally.  
563    
564    We put %f0/%f1 last among the float registers, so as to make it more
565    likely that a pseudo-register which dies in the float return register
566    will get allocated to the float return register, thus saving a move
567    instruction at the end of the function.  */
568 #define REG_ALLOC_ORDER \
569 { 8, 9, 10, 11, 12, 13, 2, 3,           \
570   15, 16, 17, 18, 19, 20, 21, 22,       \
571   23, 24, 25, 26, 27, 28, 29, 31,       \
572   34, 35, 36, 37, 38, 39,               \
573   40, 41, 42, 43, 44, 45, 46, 47,       \
574   48, 49, 50, 51, 52, 53, 54, 55,       \
575   56, 57, 58, 59, 60, 61, 62, 63,       \
576   32, 33,                               \
577   1, 4, 5, 6, 7, 0, 14, 30}
578
579 /* This is the order in which to allocate registers for
580    leaf functions.  If all registers can fit in the "i" registers,
581    then we have the possibility of having a leaf function.  */
582 #define REG_LEAF_ALLOC_ORDER \
583 { 2, 3, 24, 25, 26, 27, 28, 29,         \
584   15, 8, 9, 10, 11, 12, 13,             \
585   16, 17, 18, 19, 20, 21, 22, 23,       \
586   34, 35, 36, 37, 38, 39,               \
587   40, 41, 42, 43, 44, 45, 46, 47,       \
588   48, 49, 50, 51, 52, 53, 54, 55,       \
589   56, 57, 58, 59, 60, 61, 62, 63,       \
590   32, 33,                               \
591   1, 4, 5, 6, 7, 0, 14, 30, 31}
592
593 #define ORDER_REGS_FOR_LOCAL_ALLOC order_regs_for_local_alloc ()
594
595 /* ??? %g7 is not a leaf register to effectively #undef LEAF_REGISTERS when
596    -mflat is used.  Function only_leaf_regs_used will return 0 if a global
597    register is used and is not permitted in a leaf function.  We make %g7
598    a global reg if -mflat and voila.  Since %g7 is a system register and is
599    fixed it won't be used by gcc anyway.  */
600 #define LEAF_REGISTERS \
601 { 1, 1, 1, 1, 1, 1, 1, 0,       \
602   0, 0, 0, 0, 0, 0, 1, 0,       \
603   0, 0, 0, 0, 0, 0, 0, 0,       \
604   1, 1, 1, 1, 1, 1, 0, 1,       \
605   1, 1, 1, 1, 1, 1, 1, 1,       \
606   1, 1, 1, 1, 1, 1, 1, 1,       \
607   1, 1, 1, 1, 1, 1, 1, 1,       \
608   1, 1, 1, 1, 1, 1, 1, 1}
609
610 extern char leaf_reg_remap[];
611 #define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO])
612
613 /* The class value for index registers, and the one for base regs.  */
614 #define INDEX_REG_CLASS GENERAL_REGS
615 #define BASE_REG_CLASS GENERAL_REGS
616
617 /* Get reg_class from a letter such as appears in the machine description.  */
618
619 #define REG_CLASS_FROM_LETTER(C) \
620   ((C) == 'f' ? FP_REGS : (C) == 'r' ? GENERAL_REGS : NO_REGS)
621
622 /* The letters I, J, K, L and M in a register constraint string
623    can be used to stand for particular ranges of immediate operands.
624    This macro defines what the ranges are.
625    C is the letter, and VALUE is a constant value.
626    Return 1 if VALUE is in the range specified by C.
627
628    For SPARC, `I' is used for the range of constants an insn
629    can actually contain.
630    `J' is used for the range which is just zero (since that is R0).
631    `K' is used for constants which can be loaded with a single sethi insn.  */
632
633 #define SMALL_INT(X) ((unsigned) (INTVAL (X) + 0x1000) < 0x2000)
634
635 #define CONST_OK_FOR_LETTER_P(VALUE, C)  \
636   ((C) == 'I' ? (unsigned) ((VALUE) + 0x1000) < 0x2000  \
637    : (C) == 'J' ? (VALUE) == 0                          \
638    : (C) == 'K' ? ((VALUE) & 0x3ff) == 0                \
639    : 0)
640
641 /* Similar, but for floating constants, and defining letters G and H.
642    Here VALUE is the CONST_DOUBLE rtx itself.  */
643
644 #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C)  \
645   ((C) == 'G' ? fp_zero_operand (VALUE)                 \
646    : (C) == 'H' ? arith_double_operand (VALUE, DImode)  \
647    : 0)
648
649 /* Given an rtx X being reloaded into a reg required to be
650    in class CLASS, return the class of reg to actually use.
651    In general this is just CLASS; but on some machines
652    in some cases it is preferable to use a more restrictive class.  */
653 /* We can't load constants into FP registers.  We can't load any FP constant
654    if an 'E' constraint fails to match it.  */
655 #define PREFERRED_RELOAD_CLASS(X,CLASS)                 \
656   (CONSTANT_P (X)                                       \
657    && ((CLASS) == FP_REGS                               \
658        || (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT  \
659            && (HOST_FLOAT_FORMAT != IEEE_FLOAT_FORMAT   \
660                || HOST_BITS_PER_INT != BITS_PER_WORD))) \
661    ? NO_REGS : (CLASS))
662
663 /* Return the register class of a scratch register needed to load IN into
664    a register of class CLASS in MODE.
665
666    On the SPARC, when PIC, we need a temporary when loading some addresses
667    into a register.
668
669    Also, we need a temporary when loading/storing a HImode/QImode value
670    between memory and the FPU registers.  This can happen when combine puts
671    a paradoxical subreg in a float/fix conversion insn.  */
672
673 #define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, IN)           \
674   (((CLASS) == FP_REGS && ((MODE) == HImode || (MODE) == QImode)\
675       && (GET_CODE (IN) == MEM                                  \
676           || ((GET_CODE (IN) == REG || GET_CODE (IN) == SUBREG) \
677               && true_regnum (IN) == -1))) ? GENERAL_REGS : NO_REGS)
678
679 #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, IN)          \
680   ((CLASS) == FP_REGS && ((MODE) == HImode || (MODE) == QImode) \
681    && (GET_CODE (IN) == MEM                                     \
682        || ((GET_CODE (IN) == REG || GET_CODE (IN) == SUBREG)    \
683            && true_regnum (IN) == -1)) ? GENERAL_REGS : NO_REGS)
684
685 /* On SPARC it is not possible to directly move data between 
686    GENERAL_REGS and FP_REGS.  */
687 #define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE)  \
688   (((CLASS1) == FP_REGS && (CLASS2) == GENERAL_REGS)    \
689    || ((CLASS1) == GENERAL_REGS && (CLASS2) == FP_REGS))
690
691 /* Return the stack location to use for secondary memory needed reloads.  */
692 #define SECONDARY_MEMORY_NEEDED_RTX(MODE) \
693   gen_rtx (MEM, MODE, gen_rtx (PLUS, Pmode, frame_pointer_rtx,  \
694            GEN_INT (STARTING_FRAME_OFFSET)))
695
696 /* Return the maximum number of consecutive registers
697    needed to represent mode MODE in a register of class CLASS.  */
698 /* On SPARC, this is the size of MODE in words.  */
699 #define CLASS_MAX_NREGS(CLASS, MODE)    \
700   ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
701 \f
702 /* Stack layout; function entry, exit and calling.  */
703
704 /* Define the number of register that can hold parameters.
705    These two macros are used only in other macro definitions below.  */
706 #define NPARM_REGS 6
707
708 /* Define this if pushing a word on the stack
709    makes the stack pointer a smaller address.  */
710 #define STACK_GROWS_DOWNWARD
711
712 /* Define this if the nominal address of the stack frame
713    is at the high-address end of the local variables;
714    that is, each additional local variable allocated
715    goes at a more negative offset in the frame.  */
716 #define FRAME_GROWS_DOWNWARD
717
718 /* Offset within stack frame to start allocating local variables at.
719    If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
720    first local allocated.  Otherwise, it is the offset to the BEGINNING
721    of the first local allocated.  */
722 /* This allows space for one TFmode floating point value.  */
723 #define STARTING_FRAME_OFFSET \
724   (-SPARC_STACK_ALIGN (LONG_DOUBLE_TYPE_SIZE / BITS_PER_UNIT))
725
726 /* If we generate an insn to push BYTES bytes,
727    this says how many the stack pointer really advances by.
728    On SPARC, don't define this because there are no push insns.  */
729 /*  #define PUSH_ROUNDING(BYTES) */
730
731 /* Offset of first parameter from the argument pointer register value.
732    This is 64 for the ins and locals, plus 4 for the struct-return reg
733    even if this function isn't going to use it.  */
734 #define FIRST_PARM_OFFSET(FNDECL) (STRUCT_VALUE_OFFSET + UNITS_PER_WORD)
735
736 /* When a parameter is passed in a register, stack space is still
737    allocated for it.  */
738 #define REG_PARM_STACK_SPACE(DECL) (NPARM_REGS * UNITS_PER_WORD)
739
740 /* Keep the stack pointer constant throughout the function.
741    This is both an optimization and a necessity: longjmp
742    doesn't behave itself when the stack pointer moves within
743    the function!  */
744 #define ACCUMULATE_OUTGOING_ARGS
745
746 /* Value is the number of bytes of arguments automatically
747    popped when returning from a subroutine call.
748    FUNTYPE is the data type of the function (as a tree),
749    or for a library call it is an identifier node for the subroutine name.
750    SIZE is the number of bytes of arguments passed on the stack.  */
751
752 #define RETURN_POPS_ARGS(FUNTYPE,SIZE) 0
753
754 /* Some subroutine macros specific to this machine.
755    When !TARGET_FPU, put float return values in the general registers,
756    since we don't have any fp registers.  */
757 #define BASE_RETURN_VALUE_REG(MODE) \
758  (((MODE) == SFmode || (MODE) == DFmode) && TARGET_FPU ? 32 : 8)
759 #define BASE_OUTGOING_VALUE_REG(MODE) \
760  (((MODE) == SFmode || (MODE) == DFmode) && TARGET_FPU ? 32     \
761   : (TARGET_FRW ? 8 : 24))
762 #define BASE_PASSING_ARG_REG(MODE) (8)
763 #define BASE_INCOMING_ARG_REG(MODE) (TARGET_FRW ? 8 : 24)
764
765 /* Define this macro if the target machine has "register windows".  This
766    C expression returns the register number as seen by the called function
767    corresponding to register number OUT as seen by the calling function.
768    Return OUT if register number OUT is not an outbound register.  */
769
770 #define INCOMING_REGNO(OUT) \
771  ((TARGET_FRW || (OUT) < 8 || (OUT) > 15) ? (OUT) : (OUT) + 16)
772
773 /* Define this macro if the target machine has "register windows".  This
774    C expression returns the register number as seen by the calling function
775    corresponding to register number IN as seen by the called function.
776    Return IN if register number IN is not an inbound register.  */
777
778 #define OUTGOING_REGNO(IN) \
779  ((TARGET_FRW || (IN) < 24 || (IN) > 31) ? (IN) : (IN) - 16)
780
781 /* Define how to find the value returned by a function.
782    VALTYPE is the data type of the value (as a tree).
783    If the precise function being called is known, FUNC is its FUNCTION_DECL;
784    otherwise, FUNC is 0.  */
785
786 /* On SPARC the value is found in the first "output" register.  */
787
788 #define FUNCTION_VALUE(VALTYPE, FUNC)  \
789   gen_rtx (REG, TYPE_MODE (VALTYPE), BASE_RETURN_VALUE_REG (TYPE_MODE (VALTYPE)))
790
791 /* But the called function leaves it in the first "input" register.  */
792
793 #define FUNCTION_OUTGOING_VALUE(VALTYPE, FUNC)  \
794   gen_rtx (REG, TYPE_MODE (VALTYPE), BASE_OUTGOING_VALUE_REG (TYPE_MODE (VALTYPE)))
795
796 /* Define how to find the value returned by a library function
797    assuming the value has mode MODE.  */
798
799 #define LIBCALL_VALUE(MODE)     \
800   gen_rtx (REG, MODE, BASE_RETURN_VALUE_REG (MODE))
801
802 /* 1 if N is a possible register number for a function value
803    as seen by the caller.
804    On SPARC, the first "output" reg is used for integer values,
805    and the first floating point register is used for floating point values.  */
806
807 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 8 || (N) == 32)
808
809 /* Define the size of space to allocate for the return value of an
810    untyped_call.  */
811
812 #define APPLY_RESULT_SIZE 16
813
814 /* 1 if N is a possible register number for function argument passing.
815    On SPARC, these are the "output" registers.  */
816
817 #define FUNCTION_ARG_REGNO_P(N) ((N) < 14 && (N) > 7)
818 \f
819 /* Define a data type for recording info about an argument list
820    during the scan of that argument list.  This data type should
821    hold all necessary information about the function itself
822    and about the args processed so far, enough to enable macros
823    such as FUNCTION_ARG to determine where the next arg should go.
824
825    On SPARC, this is a single integer, which is a number of words
826    of arguments scanned so far (including the invisible argument,
827    if any, which holds the structure-value-address).
828    Thus 7 or more means all following args should go on the stack.  */
829
830 #define CUMULATIVE_ARGS int
831
832 #define ROUND_ADVANCE(SIZE)     \
833   ((SIZE + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
834
835 /* Initialize a variable CUM of type CUMULATIVE_ARGS
836    for a call to a function whose data type is FNTYPE.
837    For a library call, FNTYPE is 0.
838
839    On SPARC, the offset always starts at 0: the first parm reg is always
840    the same reg.  */
841
842 #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME) ((CUM) = 0)
843
844 /* Update the data in CUM to advance over an argument
845    of mode MODE and data type TYPE.
846    (TYPE is null for libcalls where that information may not be available.)  */
847
848 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)    \
849   ((CUM) += ((MODE) != BLKmode                          \
850              ? ROUND_ADVANCE (GET_MODE_SIZE (MODE))     \
851              : ROUND_ADVANCE (int_size_in_bytes (TYPE))))
852
853 /* Determine where to put an argument to a function.
854    Value is zero to push the argument on the stack,
855    or a hard register in which to store the argument.
856
857    MODE is the argument's machine mode.
858    TYPE is the data type of the argument (as a tree).
859     This is null for libcalls where that information may
860     not be available.
861    CUM is a variable of type CUMULATIVE_ARGS which gives info about
862     the preceding args and about the function being called.
863    NAMED is nonzero if this argument is a named parameter
864     (otherwise it is an extra parameter matching an ellipsis).  */
865
866 /* On SPARC the first six args are normally in registers
867    and the rest are pushed.  Any arg that starts within the first 6 words
868    is at least partially passed in a register unless its data type forbids.  */
869
870 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)                            \
871 ((CUM) < NPARM_REGS                                                     \
872  && ((TYPE)==0 || ! TREE_ADDRESSABLE ((tree)(TYPE)))                    \
873  && ((TYPE)==0 || (MODE) != BLKmode                                     \
874      || (TYPE_ALIGN ((TYPE)) % PARM_BOUNDARY == 0))                     \
875  ? gen_rtx (REG, (MODE), (BASE_PASSING_ARG_REG (MODE) + (CUM)))         \
876  : 0)
877
878 /* Define where a function finds its arguments.
879    This is different from FUNCTION_ARG because of register windows.  */
880
881 #define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED)                   \
882 ((CUM) < NPARM_REGS                                                     \
883  && ((TYPE)==0 || ! TREE_ADDRESSABLE ((tree)(TYPE)))                    \
884  && ((TYPE)==0 || (MODE) != BLKmode                                     \
885      || (TYPE_ALIGN ((TYPE)) % PARM_BOUNDARY == 0))                     \
886  ? gen_rtx (REG, (MODE), (BASE_INCOMING_ARG_REG (MODE) + (CUM)))        \
887  : 0)
888
889 /* For an arg passed partly in registers and partly in memory,
890    this is the number of registers used.
891    For args passed entirely in registers or entirely in memory, zero.
892    Any arg that starts in the first 6 regs but won't entirely fit in them
893    needs partial registers on the Sparc.  */
894
895 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED)              \
896   ((CUM) < NPARM_REGS                                                   \
897     && ((TYPE)==0 || ! TREE_ADDRESSABLE ((tree)(TYPE)))                 \
898     && ((TYPE)==0 || (MODE) != BLKmode                                  \
899         || (TYPE_ALIGN ((TYPE)) % PARM_BOUNDARY == 0))                  \
900     && ((CUM) + ((MODE) == BLKmode                                      \
901                  ? ROUND_ADVANCE (int_size_in_bytes (TYPE))             \
902                  : ROUND_ADVANCE (GET_MODE_SIZE (MODE))) - NPARM_REGS > 0)\
903    ? (NPARM_REGS - (CUM))                                               \
904    : 0)
905
906 /* The SPARC ABI stipulates passing struct arguments (of any size) and
907    quad-precision floats by invisible reference.
908    For Pascal, also pass arrays by reference.  */
909 #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED)          \
910   ((TYPE && (TREE_CODE (TYPE) == RECORD_TYPE                            \
911             || TREE_CODE (TYPE) == UNION_TYPE                           \
912             || TREE_CODE (TYPE) == ARRAY_TYPE))                         \
913    || (MODE == TFmode))
914
915 /* Define the information needed to generate branch and scc insns.  This is
916    stored from the compare operation.  Note that we can't use "rtx" here
917    since it hasn't been defined!  */
918
919 extern struct rtx_def *sparc_compare_op0, *sparc_compare_op1;
920
921 /* Define the function that build the compare insn for scc and bcc.  */
922
923 extern struct rtx_def *gen_compare_reg ();
924 \f
925 /* Generate the special assembly code needed to tell the assembler whatever
926    it might need to know about the return value of a function.
927
928    For Sparc assemblers, we need to output a .proc pseudo-op which conveys
929    information to the assembler relating to peephole optimization (done in
930    the assembler).  */
931
932 #define ASM_DECLARE_RESULT(FILE, RESULT) \
933   fprintf ((FILE), "\t.proc\t0%o\n", sparc_type_code (TREE_TYPE (RESULT)))
934
935 /* Output the label for a function definition.  */
936
937 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                     \
938 do {                                                                    \
939   ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));                        \
940   ASM_OUTPUT_LABEL (FILE, NAME);                                        \
941 } while (0)
942
943 /* This macro generates the assembly code for function entry.
944    FILE is a stdio stream to output the code to.
945    SIZE is an int: how many units of temporary storage to allocate.
946    Refer to the array `regs_ever_live' to determine which registers
947    to save; `regs_ever_live[I]' is nonzero if register number I
948    is ever used in the function.  This macro is responsible for
949    knowing which registers should not be saved even if used.  */
950
951 /* On SPARC, move-double insns between fpu and cpu need an 8-byte block
952    of memory.  If any fpu reg is used in the function, we allocate
953    such a block here, at the bottom of the frame, just in case it's needed.
954
955    If this function is a leaf procedure, then we may choose not
956    to do a "save" insn.  The decision about whether or not
957    to do this is made in regclass.c.  */
958
959 #define FUNCTION_PROLOGUE(FILE, SIZE)                           \
960   (TARGET_FRW ? sparc_flat_output_function_prologue (FILE, SIZE) \
961    : output_function_prologue (FILE, SIZE, leaf_function))
962
963 /* Output assembler code to FILE to increment profiler label # LABELNO
964    for profiling a function entry.  */
965
966 #define FUNCTION_PROFILER(FILE, LABELNO)                        \
967   do {                                                          \
968     fputs ("\tsethi %hi(", (FILE));                             \
969     ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);         \
970     fputs ("),%o0\n\tcall mcount\n\tor %lo(", (FILE));          \
971     ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);         \
972     fputs ("),%o0,%o0\n", (FILE));                              \
973   } while (0)
974
975 /* Output assembler code to FILE to initialize this source file's
976    basic block profiling info, if that has not already been done.  */
977 /* FIXME -- this does not parameterize how it generates labels (like the
978    above FUNCTION_PROFILER).  Broken on Solaris-2.   --gnu@cygnus.com */
979
980 #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO)  \
981   fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tld [%%lo(LPBX0)+%%o0],%%o1\n\ttst %%o1\n\tbne LPY%d\n\tadd %%o0,%%lo(LPBX0),%%o0\n\tcall ___bb_init_func\n\tnop\nLPY%d:\n",  \
982            (LABELNO), (LABELNO))
983
984 /* Output assembler code to FILE to increment the entry-count for
985    the BLOCKNO'th basic block in this source file.  */
986
987 #define BLOCK_PROFILER(FILE, BLOCKNO) \
988 {                                                               \
989   int blockn = (BLOCKNO);                                       \
990   fprintf (FILE, "\tsethi %%hi(LPBX2+%d),%%g1\n\tld [%%lo(LPBX2+%d)+%%g1],%%g2\n\
991 \tadd %%g2,1,%%g2\n\tst %%g2,[%%lo(LPBX2+%d)+%%g1]\n",          \
992            4 * blockn, 4 * blockn, 4 * blockn);                 \
993 }
994
995 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
996    the stack pointer does not matter.  The value is tested only in
997    functions that have frame pointers.
998    No definition is equivalent to always zero.  */
999
1000 extern int current_function_calls_alloca;
1001 extern int current_function_outgoing_args_size;
1002
1003 #define EXIT_IGNORE_STACK       \
1004  (get_frame_size () != 0        \
1005   || current_function_calls_alloca || current_function_outgoing_args_size)
1006
1007 /* This macro generates the assembly code for function exit,
1008    on machines that need it.  If FUNCTION_EPILOGUE is not defined
1009    then individual return instructions are generated for each
1010    return statement.  Args are same as for FUNCTION_PROLOGUE.
1011
1012    The function epilogue should not depend on the current stack pointer!
1013    It should use the frame pointer only.  This is mandatory because
1014    of alloca; we also take advantage of it to omit stack adjustments
1015    before returning.  */
1016
1017 /* This declaration is needed due to traditional/ANSI
1018    incompatibilities which cannot be #ifdefed away
1019    because they occur inside of macros.  Sigh.  */
1020 extern union tree_node *current_function_decl;
1021
1022 #define FUNCTION_EPILOGUE(FILE, SIZE)                           \
1023   (TARGET_FRW ? sparc_flat_output_function_epilogue (FILE, SIZE) \
1024    : output_function_epilogue (FILE, SIZE, leaf_function))
1025
1026 #define DELAY_SLOTS_FOR_EPILOGUE        \
1027   (TARGET_FRW ? sparc_flat_epilogue_delay_slots () : 1)
1028 #define ELIGIBLE_FOR_EPILOGUE_DELAY(trial, slots_filled)        \
1029   (TARGET_FRW ? sparc_flat_eligible_for_epilogue_delay (trial, slots_filled) \
1030    : eligible_for_epilogue_delay (trial, slots_filled))
1031 \f
1032 /* Output assembler code for a block containing the constant parts
1033    of a trampoline, leaving space for the variable parts.  */
1034
1035 /* On the sparc, the trampoline contains five instructions:
1036      sethi #TOP_OF_FUNCTION,%g1
1037      or #BOTTOM_OF_FUNCTION,%g1,%g1
1038      sethi #TOP_OF_STATIC,%g2
1039      jmp g1
1040      or #BOTTOM_OF_STATIC,%g2,%g2  */
1041 #define TRAMPOLINE_TEMPLATE(FILE)                                       \
1042 {                                                                       \
1043   ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000));     \
1044   ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000));     \
1045   ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000));     \
1046   ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x81C04000));     \
1047   ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000));     \
1048 }
1049
1050 /* Length in units of the trampoline for entering a nested function.  */
1051
1052 #define TRAMPOLINE_SIZE 20
1053
1054 /* Emit RTL insns to initialize the variable parts of a trampoline.
1055    FNADDR is an RTX for the address of the function's pure code.
1056    CXT is an RTX for the static chain value for the function.
1057
1058    This takes 16 insns: 2 shifts & 2 ands (to split up addresses), 4 sethi
1059    (to load in opcodes), 4 iors (to merge address and opcodes), and 4 writes
1060    (to store insns).  This is a bit excessive.  Perhaps a different
1061    mechanism would be better here.
1062
1063    Emit 3 FLUSH instructions (UNSPEC_VOLATILE 2) to synchonize the data
1064    and instruction caches.  */
1065
1066 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                       \
1067 {                                                                       \
1068   rtx high_cxt = expand_shift (RSHIFT_EXPR, SImode, CXT,                \
1069                               size_int (10), 0, 1);                     \
1070   rtx high_fn = expand_shift (RSHIFT_EXPR, SImode, FNADDR,              \
1071                              size_int (10), 0, 1);                      \
1072   rtx low_cxt = expand_and (CXT, gen_rtx (CONST_INT, VOIDmode, 0x3ff), 0); \
1073   rtx low_fn = expand_and (FNADDR, gen_rtx (CONST_INT, VOIDmode, 0x3ff), 0); \
1074   rtx g1_sethi = gen_rtx (HIGH, SImode,                                 \
1075                           gen_rtx (CONST_INT, VOIDmode, 0x03000000));   \
1076   rtx g2_sethi = gen_rtx (HIGH, SImode,                                 \
1077                           gen_rtx (CONST_INT, VOIDmode, 0x05000000));   \
1078   rtx g1_ori = gen_rtx (HIGH, SImode,                                   \
1079                         gen_rtx (CONST_INT, VOIDmode, 0x82106000));     \
1080   rtx g2_ori = gen_rtx (HIGH, SImode,                                   \
1081                         gen_rtx (CONST_INT, VOIDmode, 0x8410A000));     \
1082   rtx tem = gen_reg_rtx (SImode);                                       \
1083   emit_move_insn (tem, g1_sethi);                                       \
1084   emit_insn (gen_iorsi3 (high_fn, high_fn, tem));                       \
1085   emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 0)), high_fn);\
1086   emit_move_insn (tem, g1_ori);                                         \
1087   emit_insn (gen_iorsi3 (low_fn, low_fn, tem));                         \
1088   emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 4)), low_fn);\
1089   emit_move_insn (tem, g2_sethi);                                       \
1090   emit_insn (gen_iorsi3 (high_cxt, high_cxt, tem));                     \
1091   emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 8)), high_cxt);\
1092   emit_move_insn (tem, g2_ori);                                         \
1093   emit_insn (gen_iorsi3 (low_cxt, low_cxt, tem));                       \
1094   emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 16)), low_cxt);\
1095   emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode,                        \
1096                       gen_rtvec (1, plus_constant (TRAMP, 0)),          \
1097                       2));                                              \
1098   emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode,                        \
1099                       gen_rtvec (1, plus_constant (TRAMP, 8)),          \
1100                       2));                                              \
1101   emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode,                        \
1102                       gen_rtvec (1, plus_constant (TRAMP, 16)),         \
1103                       2));                                              \
1104 }
1105 \f
1106 /* Generate necessary RTL for __builtin_saveregs().
1107    ARGLIST is the argument list; see expr.c.  */
1108 extern struct rtx_def *sparc_builtin_saveregs ();
1109 #define EXPAND_BUILTIN_SAVEREGS(ARGLIST) sparc_builtin_saveregs (ARGLIST)
1110
1111 /* Generate RTL to flush the register windows so as to make arbitrary frames
1112    available.  */
1113 #define SETUP_FRAME_ADDRESSES()         \
1114   emit_insn (gen_flush_register_windows ())
1115
1116 /* Given an rtx for the address of a frame,
1117    return an rtx for the address of the word in the frame
1118    that holds the dynamic chain--the previous frame's address.  */
1119 #define DYNAMIC_CHAIN_ADDRESS(frame) \
1120   gen_rtx (PLUS, Pmode, frame, gen_rtx (CONST_INT, VOIDmode, 56))
1121
1122 /* The return address isn't on the stack, it is in a register, so we can't
1123    access it from the current frame pointer.  We can access it from the
1124    previous frame pointer though by reading a value from the register window
1125    save area.  */
1126 #define RETURN_ADDR_IN_PREVIOUS_FRAME
1127
1128 /* The current return address is in %i7.  The return address of anything
1129    farther back is in the register window save area at [%fp+60].  */
1130 /* ??? This ignores the fact that the actual return address is +8 for normal
1131    returns, and +12 for structure returns.  */
1132 #define RETURN_ADDR_RTX(count, frame)           \
1133   ((count == -1)                                \
1134    ? gen_rtx (REG, Pmode, 31)                   \
1135    : copy_to_reg (gen_rtx (MEM, Pmode,          \
1136                            memory_address (Pmode, plus_constant (frame, 60)))))
1137 \f
1138 /* Addressing modes, and classification of registers for them.  */
1139
1140 /* #define HAVE_POST_INCREMENT */
1141 /* #define HAVE_POST_DECREMENT */
1142
1143 /* #define HAVE_PRE_DECREMENT */
1144 /* #define HAVE_PRE_INCREMENT */
1145
1146 /* Macros to check register numbers against specific register classes.  */
1147
1148 /* These assume that REGNO is a hard or pseudo reg number.
1149    They give nonzero only if REGNO is a hard reg of the suitable class
1150    or a pseudo reg currently allocated to a suitable hard reg.
1151    Since they use reg_renumber, they are safe only once reg_renumber
1152    has been allocated, which happens in local-alloc.c.  */
1153
1154 #define REGNO_OK_FOR_INDEX_P(REGNO) \
1155 (((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32) && (REGNO) != 0)
1156 #define REGNO_OK_FOR_BASE_P(REGNO) \
1157 (((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32) && (REGNO) != 0)
1158 #define REGNO_OK_FOR_FP_P(REGNO) \
1159 (((REGNO) ^ 0x20) < 32  \
1160  || (((REGNO) != 0) && (unsigned) (reg_renumber[REGNO] ^ 0x20) < 32))
1161
1162 /* Now macros that check whether X is a register and also,
1163    strictly, whether it is in a specified class.
1164
1165    These macros are specific to the SPARC, and may be used only
1166    in code for printing assembler insns and in conditions for
1167    define_optimization.  */
1168
1169 /* 1 if X is an fp register.  */
1170
1171 #define FP_REG_P(X) (REG_P (X) && REGNO_OK_FOR_FP_P (REGNO (X)))
1172 \f
1173 /* Maximum number of registers that can appear in a valid memory address.  */
1174
1175 #define MAX_REGS_PER_ADDRESS 2
1176
1177 /* Recognize any constant value that is a valid address.
1178    When PIC, we do not accept an address that would require a scratch reg
1179    to load into a register.  */
1180
1181 #define CONSTANT_ADDRESS_P(X)   \
1182   (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF              \
1183    || GET_CODE (X) == CONST_INT || GET_CODE (X) == HIGH                 \
1184    || (GET_CODE (X) == CONST                                            \
1185        && ! (flag_pic && pic_address_needs_scratch (X))))
1186
1187 /* Define this, so that when PIC, reload won't try to reload invalid
1188    addresses which require two reload registers.  */
1189
1190 #define LEGITIMATE_PIC_OPERAND_P(X)  (! pic_address_needs_scratch (X))
1191
1192 /* Nonzero if the constant value X is a legitimate general operand.
1193    Anything can be made to work except floating point constants.  */
1194
1195 #define LEGITIMATE_CONSTANT_P(X) \
1196   (GET_CODE (X) != CONST_DOUBLE || GET_MODE (X) == VOIDmode)
1197
1198 /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1199    and check its validity for a certain class.
1200    We have two alternate definitions for each of them.
1201    The usual definition accepts all pseudo regs; the other rejects
1202    them unless they have been allocated suitable hard regs.
1203    The symbol REG_OK_STRICT causes the latter definition to be used.
1204
1205    Most source files want to accept pseudo regs in the hope that
1206    they will get allocated to the class that the insn wants them to be in.
1207    Source files for reload pass need to be strict.
1208    After reload, it makes no difference, since pseudo regs have
1209    been eliminated by then.  */
1210
1211 /* Optional extra constraints for this machine.  Borrowed from romp.h.
1212
1213    For the SPARC, `Q' means that this is a memory operand but not a
1214    symbolic memory operand.  Note that an unassigned pseudo register
1215    is such a memory operand.  Needed because reload will generate
1216    these things in insns and then not re-recognize the insns, causing
1217    constrain_operands to fail.
1218
1219    `S' handles constraints for calls.  */
1220
1221 #ifndef REG_OK_STRICT
1222
1223 /* Nonzero if X is a hard reg that can be used as an index
1224    or if it is a pseudo reg.  */
1225 #define REG_OK_FOR_INDEX_P(X) (((unsigned) REGNO (X)) - 32 >= 32 && REGNO (X) != 0)
1226 /* Nonzero if X is a hard reg that can be used as a base reg
1227    or if it is a pseudo reg.  */
1228 #define REG_OK_FOR_BASE_P(X) (((unsigned) REGNO (X)) - 32 >= 32 && REGNO (X) != 0)
1229
1230 #define EXTRA_CONSTRAINT(OP, C)                         \
1231   ((C) == 'Q'                                           \
1232    ? ((GET_CODE (OP) == MEM                             \
1233        && memory_address_p (GET_MODE (OP), XEXP (OP, 0))        \
1234        && ! symbolic_memory_operand (OP, VOIDmode))     \
1235       || (reload_in_progress && GET_CODE (OP) == REG    \
1236           && REGNO (OP) >= FIRST_PSEUDO_REGISTER))      \
1237    : (C) == 'T'                                         \
1238    ? (mem_aligned_8 (OP))                               \
1239    : (C) == 'U'                                         \
1240    ? (register_ok_for_ldd (OP))                         \
1241    : 0)
1242  
1243 #else
1244
1245 /* Nonzero if X is a hard reg that can be used as an index.  */
1246 #define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1247 /* Nonzero if X is a hard reg that can be used as a base reg.  */
1248 #define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1249
1250 #define EXTRA_CONSTRAINT(OP, C)                         \
1251   ((C) == 'Q'                                           \
1252    ? (GET_CODE (OP) == REG                              \
1253       ? (REGNO (OP) >= FIRST_PSEUDO_REGISTER            \
1254          && reg_renumber[REGNO (OP)] < 0)               \
1255       : GET_CODE (OP) == MEM)                           \
1256    : (C) == 'T'                                         \
1257    ? mem_aligned_8 (OP) && strict_memory_address_p (Pmode, XEXP (OP, 0)) \
1258    : (C) == 'U'                                         \
1259    ? (GET_CODE (OP) == REG                              \
1260       && (REGNO (OP) < FIRST_PSEUDO_REGISTER            \
1261           || reg_renumber[REGNO (OP)] > 0)              \
1262       && register_ok_for_ldd (OP)) : 0)
1263 #endif
1264 \f
1265 /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
1266    that is a valid memory address for an instruction.
1267    The MODE argument is the machine mode for the MEM expression
1268    that wants to use this address.
1269
1270    On SPARC, the actual legitimate addresses must be REG+REG or REG+SMALLINT
1271    ordinarily.  This changes a bit when generating PIC.
1272
1273    If you change this, execute "rm explow.o recog.o reload.o".  */
1274
1275 #define RTX_OK_FOR_BASE_P(X)                                            \
1276   ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X))                       \
1277   || (GET_CODE (X) == SUBREG                                            \
1278       && GET_CODE (SUBREG_REG (X)) == REG                               \
1279       && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
1280
1281 #define RTX_OK_FOR_INDEX_P(X)                                           \
1282   ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X))                      \
1283   || (GET_CODE (X) == SUBREG                                            \
1284       && GET_CODE (SUBREG_REG (X)) == REG                               \
1285       && REG_OK_FOR_INDEX_P (SUBREG_REG (X))))
1286
1287 #define RTX_OK_FOR_OFFSET_P(X)                                          \
1288   (GET_CODE (X) == CONST_INT && INTVAL (X) >= -0x1000 && INTVAL (X) < 0x1000)
1289
1290 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)         \
1291 { if (RTX_OK_FOR_BASE_P (X))                            \
1292     goto ADDR;                                          \
1293   else if (GET_CODE (X) == PLUS)                        \
1294     {                                                   \
1295       register rtx op0 = XEXP (X, 0);                   \
1296       register rtx op1 = XEXP (X, 1);                   \
1297       if (flag_pic && op0 == pic_offset_table_rtx)      \
1298         {                                               \
1299           if (RTX_OK_FOR_BASE_P (op1))                  \
1300             goto ADDR;                                  \
1301           else if (flag_pic == 1                        \
1302                    && GET_CODE (op1) != REG             \
1303                    && GET_CODE (op1) != LO_SUM          \
1304                    && GET_CODE (op1) != MEM             \
1305                    && (GET_CODE (op1) != CONST_INT      \
1306                        || SMALL_INT (op1)))             \
1307             goto ADDR;                                  \
1308         }                                               \
1309       else if (RTX_OK_FOR_BASE_P (op0))                 \
1310         {                                               \
1311           if (RTX_OK_FOR_INDEX_P (op1)                  \
1312               || RTX_OK_FOR_OFFSET_P (op1))             \
1313             goto ADDR;                                  \
1314         }                                               \
1315       else if (RTX_OK_FOR_BASE_P (op1))                 \
1316         {                                               \
1317           if (RTX_OK_FOR_INDEX_P (op0)                  \
1318               || RTX_OK_FOR_OFFSET_P (op0))             \
1319             goto ADDR;                                  \
1320         }                                               \
1321     }                                                   \
1322   else if (GET_CODE (X) == LO_SUM)                      \
1323     {                                                   \
1324       register rtx op0 = XEXP (X, 0);                   \
1325       register rtx op1 = XEXP (X, 1);                   \
1326       if (RTX_OK_FOR_BASE_P (op0)                       \
1327           && CONSTANT_P (op1))                          \
1328         goto ADDR;                                      \
1329     }                                                   \
1330   else if (GET_CODE (X) == CONST_INT && SMALL_INT (X))  \
1331     goto ADDR;                                          \
1332 }
1333 \f
1334 /* Try machine-dependent ways of modifying an illegitimate address
1335    to be legitimate.  If we find one, return the new, valid address.
1336    This macro is used in only one place: `memory_address' in explow.c.
1337
1338    OLDX is the address as it was before break_out_memory_refs was called.
1339    In some cases it is useful to look at this to decide what needs to be done.
1340
1341    MODE and WIN are passed so that this macro can use
1342    GO_IF_LEGITIMATE_ADDRESS.
1343
1344    It is always safe for this macro to do nothing.  It exists to recognize
1345    opportunities to optimize the output.  */
1346
1347 /* On SPARC, change REG+N into REG+REG, and REG+(X*Y) into REG+REG.  */
1348 extern struct rtx_def *legitimize_pic_address ();
1349 #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)     \
1350 { rtx sparc_x = (X);                                            \
1351   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == MULT)   \
1352     (X) = gen_rtx (PLUS, Pmode, XEXP (X, 1),                    \
1353                    force_operand (XEXP (X, 0), NULL_RTX));      \
1354   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == MULT)   \
1355     (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0),                    \
1356                    force_operand (XEXP (X, 1), NULL_RTX));      \
1357   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == PLUS)   \
1358     (X) = gen_rtx (PLUS, Pmode, force_operand (XEXP (X, 0), NULL_RTX),\
1359                    XEXP (X, 1));                                \
1360   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == PLUS)   \
1361     (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0),                    \
1362                    force_operand (XEXP (X, 1), NULL_RTX));      \
1363   if (sparc_x != (X) && memory_address_p (MODE, X))             \
1364     goto WIN;                                                   \
1365   if (flag_pic) (X) = legitimize_pic_address (X, MODE, 0);      \
1366   else if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1)))    \
1367     (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0),                    \
1368                    copy_to_mode_reg (Pmode, XEXP (X, 1)));      \
1369   else if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 0)))    \
1370     (X) = gen_rtx (PLUS, Pmode, XEXP (X, 1),                    \
1371                    copy_to_mode_reg (Pmode, XEXP (X, 0)));      \
1372   else if (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST  \
1373            || GET_CODE (X) == LABEL_REF)                        \
1374     (X) = gen_rtx (LO_SUM, Pmode,                               \
1375                    copy_to_mode_reg (Pmode, gen_rtx (HIGH, Pmode, X)), X); \
1376   if (memory_address_p (MODE, X))                               \
1377     goto WIN; }
1378
1379 /* Go to LABEL if ADDR (a legitimate address expression)
1380    has an effect that depends on the machine mode it is used for.
1381    On the SPARC this is never true.  */
1382
1383 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
1384 \f
1385 /* Specify the machine mode that this machine uses
1386    for the index in the tablejump instruction.  */
1387 #define CASE_VECTOR_MODE SImode
1388
1389 /* Define this if the tablejump instruction expects the table
1390    to contain offsets from the address of the table.
1391    Do not define this if the table should contain absolute addresses.  */
1392 /* #define CASE_VECTOR_PC_RELATIVE */
1393
1394 /* Specify the tree operation to be used to convert reals to integers.  */
1395 #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
1396
1397 /* This is the kind of divide that is easiest to do in the general case.  */
1398 #define EASY_DIV_EXPR TRUNC_DIV_EXPR
1399
1400 /* Define this as 1 if `char' should by default be signed; else as 0.  */
1401 #define DEFAULT_SIGNED_CHAR 1
1402
1403 /* Max number of bytes we can move from memory to memory
1404    in one reasonably fast instruction.  */
1405 #define MOVE_MAX 8
1406
1407 #if 0 /* Sun 4 has matherr, so this is no good.  */
1408 /* This is the value of the error code EDOM for this machine,
1409    used by the sqrt instruction.  */
1410 #define TARGET_EDOM 33
1411
1412 /* This is how to refer to the variable errno.  */
1413 #define GEN_ERRNO_RTX \
1414   gen_rtx (MEM, SImode, gen_rtx (SYMBOL_REF, Pmode, "errno"))
1415 #endif /* 0 */
1416
1417 /* Define if operations between registers always perform the operation
1418    on the full register even if a narrower mode is specified.  */
1419 #define WORD_REGISTER_OPERATIONS
1420
1421 /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
1422    will either zero-extend or sign-extend.  The value of this macro should
1423    be the code that says which one of the two operations is implicitly
1424    done, NIL if none.  */
1425 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
1426
1427 /* Nonzero if access to memory by bytes is slow and undesirable.
1428    For RISC chips, it means that access to memory by bytes is no
1429    better than access by words when possible, so grab a whole word
1430    and maybe make use of that.  */
1431 #define SLOW_BYTE_ACCESS 1
1432
1433 /* We assume that the store-condition-codes instructions store 0 for false
1434    and some other value for true.  This is the value stored for true.  */
1435
1436 #define STORE_FLAG_VALUE 1
1437
1438 /* When a prototype says `char' or `short', really pass an `int'.  */
1439 #define PROMOTE_PROTOTYPES
1440
1441 /* Define this to be nonzero if shift instructions ignore all but the low-order
1442    few bits. */
1443 #define SHIFT_COUNT_TRUNCATED 1
1444
1445 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1446    is done just by pretending it is already truncated.  */
1447 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1448
1449 /* Specify the machine mode that pointers have.
1450    After generation of rtl, the compiler makes no further distinction
1451    between pointers and any other objects of this machine mode.  */
1452 #define Pmode SImode
1453
1454 /* Generate calls to memcpy, memcmp and memset.  */
1455 #define TARGET_MEM_FUNCTIONS
1456
1457 /* Add any extra modes needed to represent the condition code.
1458
1459    On the Sparc, we have a "no-overflow" mode which is used when an add or
1460    subtract insn is used to set the condition code.  Different branches are
1461    used in this case for some operations.
1462
1463    We also have two modes to indicate that the relevant condition code is
1464    in the floating-point condition code register.  One for comparisons which
1465    will generate an exception if the result is unordered (CCFPEmode) and
1466    one for comparisons which will never trap (CCFPmode).  This really should
1467    be a separate register, but we don't want to go to 65 registers.  */
1468 #define EXTRA_CC_MODES CC_NOOVmode, CCFPmode, CCFPEmode
1469
1470 /* Define the names for the modes specified above.  */
1471 #define EXTRA_CC_NAMES "CC_NOOV", "CCFP", "CCFPE"
1472
1473 /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
1474    return the mode to be used for the comparison.  For floating-point,
1475    CCFP[E]mode is used.  CC_NOOVmode should be used when the first operand is a
1476    PLUS, MINUS, NEG, or ASHIFT.  CCmode should be used when no special
1477    processing is needed.  */
1478 #define SELECT_CC_MODE(OP,X,Y) \
1479   (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT                          \
1480    ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)                    \
1481    : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS                    \
1482        || GET_CODE (X) == NEG || GET_CODE (X) == ASHIFT)                \
1483       ? CC_NOOVmode : CCmode))
1484
1485 /* Return non-zero if SELECT_CC_MODE will never return MODE for a
1486    floating point inequality comparison.  */
1487
1488 #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode)
1489
1490 /* A function address in a call instruction
1491    is a byte address (for indexing purposes)
1492    so give the MEM rtx a byte's mode.  */
1493 #define FUNCTION_MODE SImode
1494
1495 /* Define this if addresses of constant functions
1496    shouldn't be put through pseudo regs where they can be cse'd.
1497    Desirable on machines where ordinary constants are expensive
1498    but a CALL with constant address is cheap.  */
1499 #define NO_FUNCTION_CSE
1500
1501 /* alloca should avoid clobbering the old register save area.  */
1502 #define SETJMP_VIA_SAVE_AREA
1503
1504 /* Define subroutines to call to handle multiply and divide.
1505    Use the subroutines that Sun's library provides.
1506    The `*' prevents an underscore from being prepended by the compiler.  */
1507
1508 #define DIVSI3_LIBCALL "*.div"
1509 #define UDIVSI3_LIBCALL "*.udiv"
1510 #define MODSI3_LIBCALL "*.rem"
1511 #define UMODSI3_LIBCALL "*.urem"
1512 /* .umul is a little faster than .mul.  */
1513 #define MULSI3_LIBCALL "*.umul"
1514
1515 /* Define library calls for quad FP operations.  These are all part of the
1516    SPARC ABI.  */
1517 #define ADDTF3_LIBCALL "_Q_add"
1518 #define SUBTF3_LIBCALL "_Q_sub"
1519 #define MULTF3_LIBCALL "_Q_mul"
1520 #define DIVTF3_LIBCALL "_Q_div"
1521 #define SQRTTF2_LIBCALL "_Q_sqrt"
1522 #define FLOATSITF2_LIBCALL "_Q_itoq"
1523 #define FIX_TRUNCTFSI2_LIBCALL "_Q_qtoi"
1524 #define FIXUNS_TRUNCTFSI2_LIBCALL "_Q_qtou"
1525 #define EXTENDSFTF2_LIBCALL "_Q_stoq"
1526 #define TRUNCTFSF2_LIBCALL "_Q_qtos"
1527 #define EXTENDDFTF2_LIBCALL "_Q_dtoq"
1528 #define TRUNCTFDF2_LIBCALL "_Q_qtod"
1529 #define EQTF2_LIBCALL "_Q_feq"
1530 #define NETF2_LIBCALL "_Q_fne"
1531 #define GTTF2_LIBCALL "_Q_fgt"
1532 #define GETF2_LIBCALL "_Q_fge"
1533 #define LTTF2_LIBCALL "_Q_flt"
1534 #define LETF2_LIBCALL "_Q_fle"
1535
1536 /* Compute the cost of computing a constant rtl expression RTX
1537    whose rtx-code is CODE.  The body of this macro is a portion
1538    of a switch statement.  If the code is computed here,
1539    return it with a return statement.  Otherwise, break from the switch.  */
1540
1541 #define CONST_COSTS(RTX,CODE,OUTER_CODE) \
1542   case CONST_INT:                                               \
1543     if (INTVAL (RTX) < 0x1000 && INTVAL (RTX) >= -0x1000)       \
1544       return 0;                                                 \
1545   case HIGH:                                                    \
1546     return 2;                                                   \
1547   case CONST:                                                   \
1548   case LABEL_REF:                                               \
1549   case SYMBOL_REF:                                              \
1550     return 4;                                                   \
1551   case CONST_DOUBLE:                                            \
1552     if (GET_MODE (RTX) == DImode)                               \
1553       if ((XINT (RTX, 3) == 0                                   \
1554            && (unsigned) XINT (RTX, 2) < 0x1000)                \
1555           || (XINT (RTX, 3) == -1                               \
1556               && XINT (RTX, 2) < 0                              \
1557               && XINT (RTX, 2) >= -0x1000))                     \
1558         return 0;                                               \
1559     return 8;
1560
1561 /* Compute the cost of an address.  For the sparc, all valid addresses are
1562    the same cost.  */
1563
1564 #define ADDRESS_COST(RTX)  1
1565
1566 /* Compute extra cost of moving data between one register class
1567    and another.  */
1568 #define REGISTER_MOVE_COST(CLASS1, CLASS2) \
1569   (((CLASS1 == FP_REGS && CLASS2 == GENERAL_REGS) \
1570     || (CLASS1 == GENERAL_REGS && CLASS2 == FP_REGS)) ? 6 : 2)
1571
1572 /* Provide the costs of a rtl expression.  This is in the body of a
1573    switch on CODE.  The purpose for the cost of MULT is to encourage
1574    `synth_mult' to find a synthetic multiply when reasonable.
1575
1576    If we need more than 12 insns to do a multiply, then go out-of-line,
1577    since the call overhead will be < 10% of the cost of the multiply.  */
1578
1579 #define RTX_COSTS(X,CODE,OUTER_CODE)                    \
1580   case MULT:                                            \
1581     return TARGET_V8 ? COSTS_N_INSNS (5) : COSTS_N_INSNS (25);  \
1582   case DIV:                                             \
1583   case UDIV:                                            \
1584   case MOD:                                             \
1585   case UMOD:                                            \
1586     return COSTS_N_INSNS (25);                          \
1587   /* Make FLOAT and FIX more expensive than CONST_DOUBLE,\
1588      so that cse will favor the latter.  */             \
1589   case FLOAT:                                           \
1590   case FIX:                                             \
1591     return 19;
1592
1593 /* Conditional branches with empty delay slots have a length of two.  */
1594 #define ADJUST_INSN_LENGTH(INSN, LENGTH)        \
1595   if (GET_CODE (INSN) == CALL_INSN                                      \
1596       || (GET_CODE (INSN) == JUMP_INSN && ! simplejump_p (insn)))       \
1597     LENGTH += 1;
1598 \f
1599 /* Control the assembler format that we output.  */
1600
1601 /* Output at beginning of assembler file.  */
1602
1603 #define ASM_FILE_START(file)
1604
1605 /* Output to assembler file text saying following lines
1606    may contain character constants, extra white space, comments, etc.  */
1607
1608 #define ASM_APP_ON ""
1609
1610 /* Output to assembler file text saying following lines
1611    no longer contain unusual constructs.  */
1612
1613 #define ASM_APP_OFF ""
1614
1615 #define ASM_LONG        ".word"
1616 #define ASM_SHORT       ".half"
1617 #define ASM_BYTE_OP     ".byte"
1618
1619 /* Output before read-only data.  */
1620
1621 #define TEXT_SECTION_ASM_OP ".text"
1622
1623 /* Output before writable data.  */
1624
1625 #define DATA_SECTION_ASM_OP ".data"
1626
1627 /* How to refer to registers in assembler output.
1628    This sequence is indexed by compiler's hard-register-number (see above).  */
1629
1630 #define REGISTER_NAMES \
1631 {"%g0", "%g1", "%g2", "%g3", "%g4", "%g5", "%g6", "%g7",                \
1632  "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%sp", "%o7",                \
1633  "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7",                \
1634  "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%fp", "%i7",                \
1635  "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7",                \
1636  "%f8", "%f9", "%f10", "%f11", "%f12", "%f13", "%f14", "%f15",          \
1637  "%f16", "%f17", "%f18", "%f19", "%f20", "%f21", "%f22", "%f23",        \
1638  "%f24", "%f25", "%f26", "%f27", "%f28", "%f29", "%f30", "%f31"}
1639
1640 /* Define additional names for use in asm clobbers and asm declarations.
1641
1642    We define the fake Condition Code register as an alias for reg 0 (which
1643    is our `condition code' register), so that condition codes can easily
1644    be clobbered by an asm.  No such register actually exists.  Condition
1645    codes are partly stored in the PSR and partly in the FSR.  */
1646
1647 #define ADDITIONAL_REGISTER_NAMES       {"ccr", 0, "cc", 0}
1648
1649 /* How to renumber registers for dbx and gdb.  */
1650
1651 #define DBX_REGISTER_NUMBER(REGNO) (REGNO)
1652
1653 /* On Sun 4, this limit is 2048.  We use 1500 to be safe,
1654    since the length can run past this up to a continuation point.  */
1655 #define DBX_CONTIN_LENGTH 1500
1656
1657 /* This is how to output a note to DBX telling it the line number
1658    to which the following sequence of instructions corresponds.
1659
1660    This is needed for SunOS 4.0, and should not hurt for 3.2
1661    versions either.  */
1662 #define ASM_OUTPUT_SOURCE_LINE(file, line)              \
1663   { static int sym_lineno = 1;                          \
1664     fprintf (file, ".stabn 68,0,%d,LM%d\nLM%d:\n",      \
1665              line, sym_lineno, sym_lineno);             \
1666     sym_lineno += 1; }
1667
1668 /* This is how to output the definition of a user-level label named NAME,
1669    such as the label on a static function or variable NAME.  */
1670
1671 #define ASM_OUTPUT_LABEL(FILE,NAME)     \
1672   do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
1673
1674 /* This is how to output a command to make the user-level label named NAME
1675    defined for reference from other files.  */
1676
1677 #define ASM_GLOBALIZE_LABEL(FILE,NAME)  \
1678   do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
1679
1680 /* This is how to output a reference to a user-level label named NAME.
1681    `assemble_name' uses this.  */
1682
1683 #define ASM_OUTPUT_LABELREF(FILE,NAME)  \
1684   fprintf (FILE, "_%s", NAME)
1685
1686 /* This is how to output a definition of an internal numbered label where
1687    PREFIX is the class of label and NUM is the number within the class.  */
1688
1689 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)      \
1690   fprintf (FILE, "%s%d:\n", PREFIX, NUM)
1691
1692 /* This is how to output a reference to an internal numbered label where
1693    PREFIX is the class of label and NUM is the number within the class.  */
1694 /* FIXME:  This should be used throughout gcc, and documented in the texinfo
1695    files.  There is no reason you should have to allocate a buffer and
1696    `sprintf' to reference an internal label (as opposed to defining it).  */
1697
1698 #define ASM_OUTPUT_INTERNAL_LABELREF(FILE,PREFIX,NUM)   \
1699   fprintf (FILE, "%s%d", PREFIX, NUM)
1700
1701 /* This is how to store into the string LABEL
1702    the symbol_ref name of an internal numbered label where
1703    PREFIX is the class of label and NUM is the number within the class.
1704    This is suitable for output with `assemble_name'.  */
1705
1706 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)   \
1707   sprintf (LABEL, "*%s%d", PREFIX, NUM)
1708
1709 /* This is how to output an assembler line defining a `double' constant.  */
1710
1711 #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                                   \
1712   {                                                                     \
1713     long t[2];                                                          \
1714     REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t);                           \
1715     fprintf (FILE, "\t%s\t0x%lx\n\t%s\t0x%lx\n",                        \
1716              ASM_LONG, t[0], ASM_LONG, t[1]);                           \
1717   }
1718
1719 /* This is how to output an assembler line defining a `float' constant.  */
1720
1721 #define ASM_OUTPUT_FLOAT(FILE,VALUE)                                    \
1722   {                                                                     \
1723     long t;                                                             \
1724     REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t);                           \
1725     fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t);                       \
1726   }                                                                     \
1727
1728 /* This is how to output an assembler line defining a `long double'
1729    constant.  */
1730
1731 #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE)                              \
1732   {                                                                     \
1733     long t[4];                                                          \
1734     REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t);                      \
1735     fprintf (FILE, "\t%s\t0x%lx\n\t%s\t0x%lx\n\t%s\t0x%lx\n\t%s\t0x%lx\n", \
1736       ASM_LONG, t[0], ASM_LONG, t[1], ASM_LONG, t[2], ASM_LONG, t[3]);  \
1737   }
1738
1739 /* This is how to output an assembler line defining an `int' constant.  */
1740
1741 #define ASM_OUTPUT_INT(FILE,VALUE)  \
1742 ( fprintf (FILE, "\t%s\t", ASM_LONG),           \
1743   output_addr_const (FILE, (VALUE)),            \
1744   fprintf (FILE, "\n"))
1745
1746 /* This is how to output an assembler line defining a DImode constant.  */
1747 #define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE)  \
1748   output_double_int (FILE, VALUE)
1749
1750 /* Likewise for `char' and `short' constants.  */
1751
1752 #define ASM_OUTPUT_SHORT(FILE,VALUE)  \
1753 ( fprintf (FILE, "\t%s\t", ASM_SHORT),          \
1754   output_addr_const (FILE, (VALUE)),            \
1755   fprintf (FILE, "\n"))
1756
1757 #define ASM_OUTPUT_CHAR(FILE,VALUE)  \
1758 ( fprintf (FILE, "\t%s\t", ASM_BYTE_OP),        \
1759   output_addr_const (FILE, (VALUE)),            \
1760   fprintf (FILE, "\n"))
1761
1762 /* This is how to output an assembler line for a numeric constant byte.  */
1763
1764 #define ASM_OUTPUT_BYTE(FILE,VALUE)  \
1765   fprintf (FILE, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE))
1766
1767 /* This is how to output an element of a case-vector that is absolute.  */
1768
1769 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
1770 do {                                                                    \
1771   char label[30];                                                       \
1772   ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);                      \
1773   fprintf (FILE, "\t.word\t");                                          \
1774   assemble_name (FILE, label);                                          \
1775   fprintf (FILE, "\n");                                                 \
1776 } while (0)
1777
1778 /* This is how to output an element of a case-vector that is relative.
1779    (SPARC uses such vectors only when generating PIC.)  */
1780
1781 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL)                      \
1782 do {                                                                    \
1783   char label[30];                                                       \
1784   ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);                      \
1785   fprintf (FILE, "\t.word\t");                                          \
1786   assemble_name (FILE, label);                                          \
1787   fprintf (FILE, "-1b\n");                                              \
1788 } while (0)
1789
1790 /* This is how to output an assembler line
1791    that says to advance the location counter
1792    to a multiple of 2**LOG bytes.  */
1793
1794 #define ASM_OUTPUT_ALIGN(FILE,LOG)      \
1795   if ((LOG) != 0)                       \
1796     fprintf (FILE, "\t.align %d\n", (1<<(LOG)))
1797
1798 #define ASM_OUTPUT_SKIP(FILE,SIZE)  \
1799   fprintf (FILE, "\t.skip %u\n", (SIZE))
1800
1801 /* This says how to output an assembler line
1802    to define a global common symbol.  */
1803
1804 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)  \
1805 ( fputs ("\t.common ", (FILE)),         \
1806   assemble_name ((FILE), (NAME)),               \
1807   fprintf ((FILE), ",%u,\"bss\"\n", (SIZE)))
1808
1809 /* This says how to output an assembler line to define a local common
1810    symbol.  */
1811
1812 #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGNED)             \
1813 ( fputs ("\t.reserve ", (FILE)),                                        \
1814   assemble_name ((FILE), (NAME)),                                       \
1815   fprintf ((FILE), ",%u,\"bss\",%u\n",                                  \
1816            (SIZE), ((ALIGNED) / BITS_PER_UNIT)))
1817
1818 /* Store in OUTPUT a string (made with alloca) containing
1819    an assembler-name for a local static variable named NAME.
1820    LABELNO is an integer which is different for each call.  */
1821
1822 #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO)  \
1823 ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),    \
1824   sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
1825
1826 #define IDENT_ASM_OP ".ident"
1827
1828 /* Output #ident as a .ident.  */
1829
1830 #define ASM_OUTPUT_IDENT(FILE, NAME) \
1831   fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
1832
1833 /* Define the parentheses used to group arithmetic operations
1834    in assembler code.  */
1835
1836 #define ASM_OPEN_PAREN "("
1837 #define ASM_CLOSE_PAREN ")"
1838
1839 /* Define results of standard character escape sequences.  */
1840 #define TARGET_BELL 007
1841 #define TARGET_BS 010
1842 #define TARGET_TAB 011
1843 #define TARGET_NEWLINE 012
1844 #define TARGET_VT 013
1845 #define TARGET_FF 014
1846 #define TARGET_CR 015
1847
1848 #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
1849   ((CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^' || (CHAR) == '(')
1850
1851 /* Print operand X (an rtx) in assembler syntax to file FILE.
1852    CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
1853    For `%' followed by punctuation, CODE is the punctuation and X is null.  */
1854
1855 #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
1856
1857 /* Print a memory address as an operand to reference that memory location.  */
1858
1859 #define PRINT_OPERAND_ADDRESS(FILE, ADDR)  \
1860 { register rtx base, index = 0;                                 \
1861   int offset = 0;                                               \
1862   register rtx addr = ADDR;                                     \
1863   if (GET_CODE (addr) == REG)                                   \
1864     fputs (reg_names[REGNO (addr)], FILE);                      \
1865   else if (GET_CODE (addr) == PLUS)                             \
1866     {                                                           \
1867       if (GET_CODE (XEXP (addr, 0)) == CONST_INT)               \
1868         offset = INTVAL (XEXP (addr, 0)), base = XEXP (addr, 1);\
1869       else if (GET_CODE (XEXP (addr, 1)) == CONST_INT)          \
1870         offset = INTVAL (XEXP (addr, 1)), base = XEXP (addr, 0);\
1871       else                                                      \
1872         base = XEXP (addr, 0), index = XEXP (addr, 1);          \
1873       fputs (reg_names[REGNO (base)], FILE);                    \
1874       if (index == 0)                                           \
1875         fprintf (FILE, "%+d", offset);                          \
1876       else if (GET_CODE (index) == REG)                         \
1877         fprintf (FILE, "+%s", reg_names[REGNO (index)]);        \
1878       else if (GET_CODE (index) == SYMBOL_REF)                  \
1879         fputc ('+', FILE), output_addr_const (FILE, index);     \
1880       else abort ();                                            \
1881     }                                                           \
1882   else if (GET_CODE (addr) == MINUS                             \
1883            && GET_CODE (XEXP (addr, 1)) == LABEL_REF)           \
1884     {                                                           \
1885       output_addr_const (FILE, XEXP (addr, 0));                 \
1886       fputs ("-(", FILE);                                       \
1887       output_addr_const (FILE, XEXP (addr, 1));                 \
1888       fputs ("-.)", FILE);                                      \
1889     }                                                           \
1890   else if (GET_CODE (addr) == LO_SUM)                           \
1891     {                                                           \
1892       output_operand (XEXP (addr, 0), 0);                       \
1893       fputs ("+%lo(", FILE);                                    \
1894       output_address (XEXP (addr, 1));                          \
1895       fputc (')', FILE);                                        \
1896     }                                                           \
1897   else if (flag_pic && GET_CODE (addr) == CONST                 \
1898            && GET_CODE (XEXP (addr, 0)) == MINUS                \
1899            && GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST      \
1900            && GET_CODE (XEXP (XEXP (XEXP (addr, 0), 1), 0)) == MINUS    \
1901            && XEXP (XEXP (XEXP (XEXP (addr, 0), 1), 0), 1) == pc_rtx)   \
1902     {                                                           \
1903       addr = XEXP (addr, 0);                                    \
1904       output_addr_const (FILE, XEXP (addr, 0));                 \
1905       /* Group the args of the second CONST in parenthesis.  */ \
1906       fputs ("-(", FILE);                                       \
1907       /* Skip past the second CONST--it does nothing for us.  */\
1908       output_addr_const (FILE, XEXP (XEXP (addr, 1), 0));       \
1909       /* Close the parenthesis.  */                             \
1910       fputc (')', FILE);                                        \
1911     }                                                           \
1912   else                                                          \
1913     {                                                           \
1914       output_addr_const (FILE, addr);                           \
1915     }                                                           \
1916 }
1917
1918 /* Declare functions defined in sparc.c and used in templates.  */
1919
1920 extern char *singlemove_string ();
1921 extern char *output_move_double ();
1922 extern char *output_move_quad ();
1923 extern char *output_fp_move_double ();
1924 extern char *output_fp_move_quad ();
1925 extern char *output_block_move ();
1926 extern char *output_scc_insn ();
1927 extern char *output_cbranch ();
1928 extern char *output_return ();
1929
1930 /* Defined in flags.h, but insn-emit.c does not include flags.h.  */
1931
1932 extern int flag_pic;