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