]> gcc.gnu.org Git - gcc.git/blame - gcc/config/sparc/sparc.h
Always put 1 space after the macro expansion in ANSI mode.
[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 3 Contributed by Michael Tiemann (tiemann@cygnus.com).
7a6cf439
DE
4 64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans,
5 at Cygnus Support.
1bb87f28
JW
6
7This file is part of GNU CC.
8
9GNU CC is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
14GNU CC is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with GNU CC; see the file COPYING. If not, write to
21the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
22
23/* Note that some other tm.h files include this one and then override
24 many of the definitions that relate to assembler syntax. */
25
7a6cf439
DE
26/* Sparc64 support has been added by trying to allow for a day when one
27 compiler can handle both v8 and v9. There are a few cases where this
28 isn't doable, but keep them to a minimum! Two macros are used to help out:
29 TARGET_V9 is used to select (at runtime) !v9-ness or v9-ness.
30 SPARCV9 is defined when compiling for sparc64 only.
31 In places where it is possible to choose between the two at runtime, use
32 TARGET_V9. In places where it is currently not possible to select
33 between the two at runtime use SPARCV9. Again, keep uses of SPARCV9 to a
34 minimum. No attempt is made to support both v8 and v9 in the v9 compiler.
35
36 If a combination v8/v9 compiler is too slow, it should always be possible
37 to #define TARGET_V9 as 0 (and potentially other v9-only options), and
38 #undef SPARCV9. */
39
bef8d8c7
JW
40/* What architecture we're compiling for. This must coincide with the
41 `arch_type' attribute in the .md file. The names were chosen to avoid
42 potential misunderstandings with the various 32 bit flavors (v7, v8, etc.):
43 if we used ARCH_V9 then we'd want to use something like ARCH_V8 but that
44 could be misleading and ARCH_NOTV9 sounds klunky. */
45enum arch_type { ARCH_32BIT, ARCH_64BIT };
46extern enum arch_type sparc_arch_type;
7a6cf439
DE
47
48/* Names to predefine in the preprocessor for this target machine. */
49
50/* ??? The GCC_NEW_VARARGS macro is now obsolete, because gcc always uses
51 the right varags.h file when bootstrapping. */
52
53#ifdef SPARCV9
54#define CPP_PREDEFINES \
55 "-Dsparc -Dsun -Dunix -D__sparc_v9__ \
56 -Asystem(unix) -Asystem(bsd) -Acpu(sparc64) -Amachine(sparc64)"
57#else
58#define CPP_PREDEFINES \
59 "-Dsparc -Dsun -Dunix -D__GCC_NEW_VARARGS__ \
60 -Asystem(unix) -Asystem(bsd)"
61#endif
62
9ee6230c 63#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} %{g:-lg}"
1bb87f28 64
98ccf8fe 65/* Provide required defaults for linker -e and -d switches. */
1bb87f28 66
d6f04508 67#define LINK_SPEC \
197a1140 68 "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}"
1bb87f28
JW
69
70/* Special flags to the Sun-4 assembler when using pipe for input. */
71
b877b5ab 72#define ASM_SPEC " %| %{!pg:%{!p:%{fpic:-k} %{fPIC:-k}}}"
1bb87f28 73
885d8175 74/* Define macros to distinguish architectures. */
7a6cf439
DE
75#define CPP_SPEC "\
76%{msparclite:-D__sparclite__} \
77%{mf930:-D__sparclite__} %{mf934:-D__sparclite__} \
78%{mv8:-D__sparc_v8__} \
bef8d8c7 79%{msupersparc:-D__supersparc__ -D__sparc_v8__} \
7a6cf439
DE
80%{!mv9:-Acpu(sparc) -Amachine(sparc)} \
81%{mv9:-D__sparc_v9__ -Acpu(sparc64) -Amachine(sparc64)} \
82%{mint64:-D__INT_MAX__=9223372036854775807LL -D__LONG_MAX__=9223372036854775807LL} \
83%{mlong64:-D__LONG_MAX__=9223372036854775807LL} \
84"
885d8175 85
b1fc14e5
RS
86/* Prevent error on `-sun4' and `-target sun4' options. */
87/* This used to translate -dalign to -malign, but that is no good
88 because it can't turn off the usual meaning of making debugging dumps. */
1bb87f28 89
b1fc14e5 90#define CC1_SPEC "%{sun4:} %{target:}"
1bb87f28 91
7a6cf439
DE
92#define NO_BUILTIN_PTRDIFF_TYPE
93#define PTRDIFF_TYPE \
94 (POINTER_SIZE == 64 ? "long long int" \
95 : POINTER_SIZE == 32 && LONG_TYPE_SIZE == 32 ? "long int" \
96 : 0 /*abort*/)
97
98#define NO_BUILTIN_SIZE_TYPE
99#define SIZE_TYPE \
100 (POINTER_SIZE == 64 ? "long long unsigned int" \
101 : POINTER_SIZE == 32 && LONG_TYPE_SIZE == 32 ? "long unsigned int" \
102 : 0 /*abort*/)
103
104/* ??? This should be 32 bits for v9 but what can we do? */
1bb87f28
JW
105#define WCHAR_TYPE "short unsigned int"
106#define WCHAR_TYPE_SIZE 16
7a6cf439 107#define MAX_WCHAR_TYPE_SIZE 16
1bb87f28 108
4f074454
RK
109/* Show we can debug even without a frame pointer. */
110#define CAN_DEBUG_WITHOUT_FP
1bb87f28 111
5b485d2c
JW
112/* To make profiling work with -f{pic,PIC}, we need to emit the profiling
113 code into the rtl. Also, if we are profiling, we cannot eliminate
114 the frame pointer (because the return address will get smashed). */
115
7a6cf439
DE
116void sparc_override_options ();
117
5b485d2c 118#define OVERRIDE_OPTIONS \
7a6cf439
DE
119 do { \
120 if (profile_flag || profile_block_flag) \
121 { \
122 if (flag_pic) \
123 { \
124 char *pic_string = (flag_pic == 1) ? "-fpic" : "-fPIC"; \
125 warning ("%s and profiling conflict: disabling %s", \
126 pic_string, pic_string); \
127 flag_pic = 0; \
128 } \
129 flag_omit_frame_pointer = 0; \
130 } \
131 SUBTARGET_OVERRIDE_OPTIONS \
132 sparc_override_options (); \
133 } while (0)
84ab3bfb
JW
134
135/* This is meant to be redefined in the host dependent files */
136#define SUBTARGET_OVERRIDE_OPTIONS
5b485d2c 137
1bb87f28
JW
138/* These compiler options take an argument. We ignore -target for now. */
139
140#define WORD_SWITCH_TAKES_ARG(STR) \
3b39b94f
ILT
141 (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \
142 || !strcmp (STR, "target") || !strcmp (STR, "assert"))
1bb87f28 143
1bb87f28
JW
144/* Print subsidiary information on the compiler version in use. */
145
146#define TARGET_VERSION fprintf (stderr, " (sparc)");
147
148/* Generate DBX debugging information. */
149
150#define DBX_DEBUGGING_INFO
7a6cf439 151\f
1bb87f28
JW
152/* Run-time compilation parameters selecting different hardware subsets. */
153
154extern int target_flags;
155
156/* Nonzero if we should generate code to use the fpu. */
7a6cf439
DE
157#define MASK_FPU 1
158#define TARGET_FPU (target_flags & MASK_FPU)
1bb87f28
JW
159
160/* Nonzero if we should use FUNCTION_EPILOGUE. Otherwise, we
161 use fast return insns, but lose some generality. */
7a6cf439
DE
162#define MASK_EPILOGUE 2
163#define TARGET_EPILOGUE (target_flags & MASK_EPILOGUE)
1bb87f28 164
95dea81f
JW
165/* Nonzero if we should assume that double pointers might be unaligned.
166 This can happen when linking gcc compiled code with other compilers,
167 because the ABI only guarantees 4 byte alignment. */
7a6cf439
DE
168#define MASK_UNALIGNED_DOUBLES 4
169#define TARGET_UNALIGNED_DOUBLES (target_flags & MASK_UNALIGNED_DOUBLES)
170
bef8d8c7
JW
171/* ??? Bits 0x18 are currently unused. */
172
173/* Nonzero means we should schedule code for the TMS390Z55 SuperSparc chip. */
174#define MASK_SUPERSPARC 0x20
175#define TARGET_SUPERSPARC (target_flags & MASK_SUPERSPARC)
1bb87f28 176
885d8175 177/* Nonzero means that we should generate code for a v8 sparc. */
7a6cf439
DE
178#define MASK_V8 0x40
179#define TARGET_V8 (target_flags & MASK_V8)
885d8175 180
bc9e02ae
JW
181/* Nonzero means that we should generate code for a sparclite.
182 This enables the sparclite specific instructions, but does not affect
183 whether FPU instructions are emitted. */
7a6cf439
DE
184#define MASK_SPARCLITE 0x80
185#define TARGET_SPARCLITE (target_flags & MASK_SPARCLITE)
885d8175 186
5b485d2c 187/* Nonzero means that we should generate code using a flat register window
9a1c7cd7
JW
188 model, i.e. no save/restore instructions are generated, in the most
189 efficient manner. This code is not compatible with normal sparc code. */
190/* This is not a user selectable option yet, because it requires changes
191 that are not yet switchable via command line arguments. */
5c56efde 192/* ??? This flag is deprecated and may disappear at some point. */
7a6cf439
DE
193#define MASK_FRW 0x100
194#define TARGET_FRW (target_flags & MASK_FRW)
5b485d2c 195
9a1c7cd7
JW
196/* Nonzero means that we should generate code using a flat register window
197 model, i.e. no save/restore instructions are generated, but which is
198 compatible with normal sparc code. This is the same as above, except
5c56efde
DE
199 that the frame pointer is %i7 instead of %fp. */
200/* ??? This use to be named TARGET_FRW_COMPAT. At some point TARGET_FRW will
201 go away, but until that time only use this one when necessary.
202 -mflat sets both. */
7a6cf439
DE
203#define MASK_FLAT 0x200
204#define TARGET_FLAT (target_flags & MASK_FLAT)
9a1c7cd7 205
34ad7aaf 206/* Nonzero means use the registers that the Sparc ABI reserves for
7a6cf439
DE
207 application software. This is the default for v8, but not v9. */
208#define MASK_APP_REGS 0x400
209#define TARGET_APP_REGS (target_flags & MASK_APP_REGS)
34ad7aaf 210
8248e2bc
JW
211/* Option to select how quad word floating point is implemented.
212 When TARGET_HARD_QUAD is true, we use the hardware quad instructions.
213 Otherwise, we use the SPARC ABI quad library functions. */
7a6cf439
DE
214#define MASK_HARD_QUAD 0x800
215#define TARGET_HARD_QUAD (target_flags & MASK_HARD_QUAD)
216
217/* Nonzero if we're compiling for 64 bit sparc. */
218#define MASK_V9 0x1000
219#define TARGET_V9 (target_flags & MASK_V9)
220
221/* Nonzero if ints are 64 bits.
222 This automatically implies longs are 64 bits too.
223 This option is for v9 only. */
224#define MASK_INT64 0x2000
225#define TARGET_INT64 (target_flags & MASK_INT64)
226
227/* Nonzero if longs are 64 bits.
228 This option is for v9 only. */
229#define MASK_LONG64 0x4000
230#define TARGET_LONG64 (target_flags & MASK_LONG64)
231
232/* Nonzero if pointers are 64 bits.
233 This option is for v9 only. */
234#define MASK_PTR64 0x8000
235#define TARGET_PTR64 (target_flags & MASK_PTR64)
236
237/* Nonzero if we are generating code to be tested in a 32 bit environment.
238 Hence, we assume the upper 32 bits of symbolic addresses are zero, and
239 avoid generating %uhi and %ulo terms.
240 Pointers are still 64 bits though! This option is for v9 only. */
fa653e40 241/* ??? This option is deprecated. Try to use -mcode-model=medium-low. */
7a6cf439
DE
242#define MASK_ENV32 0x10000
243#define TARGET_ENV32 (target_flags & MASK_ENV32)
244
245/* Memory models.
246 Two memory models are supported:
247 TARGET_MEDLOW: 32 bit address space, top 32 bits = 0
248 TARGET_MEDANY: 32 bit address space, data segment loaded anywhere
249 (use %g4 as offset).
250 TARGET_FULLANY: not supported yet.
251 These options are for v9 only. All mask values are nonzero so the v8
252 compiler can assume this stuff won't interfere. */
253#define MASK_MEDLOW 0x20000
254#define MASK_MEDANY 0x40000
255#define MASK_FULLANY 0x60000
256#define MASK_CODE_MODEL (MASK_MEDLOW + MASK_MEDANY)
257#define TARGET_MEDLOW ((target_flags & MASK_CODE_MODEL) == MASK_MEDLOW)
258#define TARGET_MEDANY ((target_flags & MASK_CODE_MODEL) == MASK_MEDANY)
259#define TARGET_FULLANY ((target_flags & MASK_CODE_MODEL) == MASK_FULLANY)
260
261/* ??? There are hardcoded references to this reg in the .md file. */
262#define MEDANY_BASE_REG "%g4"
263
264/* Non-zero means use a stack bias of 2047. Stack offsets are obtained by
265 adding 2047 to %sp. This option is for v9 only and is the default. */
266#define MASK_STACK_BIAS 0x80000
267#define TARGET_STACK_BIAS (target_flags & MASK_STACK_BIAS)
8248e2bc 268
1bb87f28
JW
269/* Macro to define tables used to set the flags.
270 This is a list in braces of pairs in braces,
271 each pair being { "NAME", VALUE }
272 where VALUE is the bits to set or minus the bits to clear.
273 An empty string NAME is used to identify the default VALUE. */
274
bc9e02ae 275/* The Fujitsu MB86930 is the original sparclite chip, with no fpu.
7a6cf439 276 The Fujitsu MB86934 is the recent sparclite chip, with an fpu.
bc9e02ae
JW
277 We use -mf930 and -mf934 options to choose which.
278 ??? These should perhaps be -mcpu= options. */
279
1bb87f28 280#define TARGET_SWITCHES \
7a6cf439
DE
281 { {"fpu", MASK_FPU}, \
282 {"no-fpu", -MASK_FPU}, \
283 {"hard-float", MASK_FPU}, \
284 {"soft-float", -MASK_FPU}, \
285 {"epilogue", MASK_EPILOGUE}, \
286 {"no-epilogue", -MASK_EPILOGUE}, \
287 {"unaligned-doubles", MASK_UNALIGNED_DOUBLES}, \
288 {"no-unaligned-doubles", -MASK_UNALIGNED_DOUBLES}, \
bef8d8c7
JW
289 {"supersparc", MASK_SUPERSPARC+MASK_V8}, \
290 {"cypress", -MASK_SUPERSPARC-MASK_V8}, \
7a6cf439
DE
291 {"v8", MASK_V8}, \
292 {"no-v8", -MASK_V8}, \
293 {"sparclite", MASK_SPARCLITE}, \
294 {"no-sparclite", -MASK_SPARCLITE}, \
295 {"f930", MASK_SPARCLITE}, \
296 {"f930", -MASK_FPU}, \
297 {"f934", MASK_SPARCLITE}, \
298 {"flat", MASK_FRW+MASK_FLAT}, \
299 {"no-flat", -(MASK_FRW+MASK_FLAT)}, \
300 {"app-regs", MASK_APP_REGS}, \
301 {"no-app-regs", -MASK_APP_REGS}, \
302 {"hard-quad-float", MASK_HARD_QUAD}, \
303 {"soft-quad-float", -MASK_HARD_QUAD}, \
304 SUBTARGET_SWITCHES \
305 V9_SWITCHES \
b1fc14e5 306 { "", TARGET_DEFAULT}}
1bb87f28 307
7a6cf439 308#define TARGET_DEFAULT (MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
84ab3bfb
JW
309
310/* This is meant to be redefined in the host dependent files */
311#define SUBTARGET_SWITCHES
1bb87f28 312
7a6cf439
DE
313/* ??? Until we support a combination v8/v9 compiler, the v9 specific options
314 are only defined for the v9 compiler. */
315/* ??? code models should be selected with -mcode-model=xxx. */
316#ifdef SPARCV9
317#define V9_SWITCHES \
fa653e40 318/* {"v9", MASK_V9}, */ \
7a6cf439
DE
319 {"int64", MASK_INT64+MASK_LONG64}, \
320 {"int32", -MASK_INT64}, \
fa653e40
DE
321 {"int32", MASK_LONG64}, \
322 {"long64", -MASK_INT64}, \
7a6cf439 323 {"long64", MASK_LONG64}, \
fa653e40
DE
324 {"long32", -(MASK_INT64+MASK_LONG64)}, \
325/* {"ptr64", MASK_PTR64}, */ \
326/* {"ptr32", -MASK_PTR64}, */ \
7a6cf439
DE
327 {"stack-bias", MASK_STACK_BIAS}, \
328 {"no-stack-bias", -MASK_STACK_BIAS},
329#else
330#define V9_SWITCHES
360b1451 331#endif
d667538b 332
7a6cf439
DE
333/* This macro is similar to `TARGET_SWITCHES' but defines names of
334 command options that have values. Its definition is an
335 initializer with a subgrouping for each command option.
336
337 Each subgrouping contains a string constant, that defines the
338 fixed part of the option name, and the address of a variable.
339 The variable, type `char *', is set to the variable part of the
340 given option if the fixed part matches. The actual option name
341 is made by prepending `-m' to the specified name.
342
343 Here is an example which defines `-mshort-data-NUMBER'. If the
344 given option is `-mshort-data-512', the variable `m88k_short_data'
345 will be set to the string `"512"'.
346
347 extern char *m88k_short_data;
348 #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */
349
350/* For v9, two values of "code model" are currently supported.
351
352 medium-low
353 32 bit address space starting at 0
354
355 medium-anywhere
356 32 bit text segment starting at 0
357 32 bit data segment(s) starting anywhere (determined at link time)
358 MEDANY_BASE_REG points to the start
359*/
360
361extern char *sparc_code_model;
362
363#define TARGET_OPTIONS \
364{ \
365 { "code-model=", &sparc_code_model } \
366}
367\f
368/* target machine storage layout */
369
d667538b
JW
370/* Define for cross-compilation to a sparc target with no TFmode from a host
371 with a different float format (e.g. VAX). */
372#define REAL_ARITHMETIC
373
1bb87f28
JW
374/* Define this if most significant bit is lowest numbered
375 in instructions that operate on numbered bit-fields. */
376#define BITS_BIG_ENDIAN 1
377
378/* Define this if most significant byte of a word is the lowest numbered. */
379/* This is true on the SPARC. */
380#define BYTES_BIG_ENDIAN 1
381
382/* Define this if most significant word of a multiword number is the lowest
383 numbered. */
384/* Doubles are stored in memory with the high order word first. This
385 matters when cross-compiling. */
386#define WORDS_BIG_ENDIAN 1
387
b4ac57ab 388/* number of bits in an addressable storage unit */
1bb87f28
JW
389#define BITS_PER_UNIT 8
390
391/* Width in bits of a "word", which is the contents of a machine register.
392 Note that this is not necessarily the width of data type `int';
393 if using 16-bit ints on a 68000, this would still be 32.
394 But on a machine with 16-bit registers, this would be 16. */
7a6cf439
DE
395#define BITS_PER_WORD (TARGET_V9 ? 64 : 32)
396#define MAX_BITS_PER_WORD 64
1bb87f28
JW
397
398/* Width of a word, in units (bytes). */
7a6cf439
DE
399#define UNITS_PER_WORD (TARGET_V9 ? 8 : 4)
400#define MAX_UNITS_PER_WORD 8
401
402/* Now define the sizes of the C data types. */
403
404#define SHORT_TYPE_SIZE 16
405#define INT_TYPE_SIZE (TARGET_INT64 ? 64 : 32)
406#define LONG_TYPE_SIZE (TARGET_LONG64 ? 64 : 32)
407#define LONG_LONG_TYPE_SIZE 64
408#define FLOAT_TYPE_SIZE 32
409#define DOUBLE_TYPE_SIZE 64
410
411#define MAX_INT_TYPE_SIZE 64
412#define MAX_LONG_TYPE_SIZE 64
413
414#ifdef SPARCV9
415/* ??? This does not work in SunOS 4.x, so it is not enabled here.
416 Instead, it is enabled in sol2.h, because it does work under Solaris. */
417/* Define for support of TFmode long double and REAL_ARITHMETIC.
418 Sparc ABI says that long double is 4 words. */
419#define LONG_DOUBLE_TYPE_SIZE 128
420#endif
1bb87f28
JW
421
422/* Width in bits of a pointer.
423 See also the macro `Pmode' defined below. */
7a6cf439 424#define POINTER_SIZE (TARGET_PTR64 ? 64 : 32)
1bb87f28
JW
425
426/* Allocation boundary (in *bits*) for storing arguments in argument list. */
7a6cf439 427#define PARM_BOUNDARY (TARGET_V9 ? 64 : 32)
1bb87f28
JW
428
429/* Boundary (in *bits*) on which stack pointer should be aligned. */
7a6cf439 430#define STACK_BOUNDARY (TARGET_V9 ? 128 : 64)
1bb87f28 431
10d1b70f
JW
432/* ALIGN FRAMES on double word boundaries */
433
7a6cf439
DE
434#define SPARC_STACK_ALIGN(LOC) \
435 (TARGET_V9 ? (((LOC)+15) & ~15) : (((LOC)+7) & ~7))
10d1b70f 436
1bb87f28
JW
437/* Allocation boundary (in *bits*) for the code of a function. */
438#define FUNCTION_BOUNDARY 32
439
440/* Alignment of field after `int : 0' in a structure. */
7a6cf439
DE
441/* ??? Should this be based on TARGET_INT64? */
442#define EMPTY_FIELD_BOUNDARY (TARGET_V9 ? 64 : 32)
1bb87f28
JW
443
444/* Every structure's size must be a multiple of this. */
445#define STRUCTURE_SIZE_BOUNDARY 8
446
447/* A bitfield declared as `int' forces `int' alignment for the struct. */
448#define PCC_BITFIELD_TYPE_MATTERS 1
449
450/* No data type wants to be aligned rounder than this. */
7a6cf439 451#define BIGGEST_ALIGNMENT (TARGET_V9 ? 128 : 64)
1bb87f28 452
77a02b01
JW
453/* The best alignment to use in cases where we have a choice. */
454#define FASTEST_ALIGNMENT 64
455
1bb87f28
JW
456/* Make strings word-aligned so strcpy from constants will be faster. */
457#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
d2a8e680
RS
458 ((TREE_CODE (EXP) == STRING_CST \
459 && (ALIGN) < FASTEST_ALIGNMENT) \
460 ? FASTEST_ALIGNMENT : (ALIGN))
1bb87f28
JW
461
462/* Make arrays of chars word-aligned for the same reasons. */
463#define DATA_ALIGNMENT(TYPE, ALIGN) \
464 (TREE_CODE (TYPE) == ARRAY_TYPE \
465 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
77a02b01 466 && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
1bb87f28 467
b4ac57ab 468/* Set this nonzero if move instructions will actually fail to work
1bb87f28 469 when given unaligned data. */
b4ac57ab 470#define STRICT_ALIGNMENT 1
1bb87f28
JW
471
472/* Things that must be doubleword aligned cannot go in the text section,
473 because the linker fails to align the text section enough!
7a6cf439 474 Put them in the data section. This macro is only used in this file. */
1bb87f28
JW
475#define MAX_TEXT_ALIGN 32
476
7a6cf439 477/* This is defined differently for v9 in a cover file. */
1bb87f28
JW
478#define SELECT_SECTION(T,RELOC) \
479{ \
480 if (TREE_CODE (T) == VAR_DECL) \
481 { \
482 if (TREE_READONLY (T) && ! TREE_SIDE_EFFECTS (T) \
ed8969fa
JW
483 && DECL_INITIAL (T) \
484 && (DECL_INITIAL (T) == error_mark_node \
485 || TREE_CONSTANT (DECL_INITIAL (T))) \
1bb87f28
JW
486 && DECL_ALIGN (T) <= MAX_TEXT_ALIGN \
487 && ! (flag_pic && (RELOC))) \
488 text_section (); \
489 else \
490 data_section (); \
491 } \
492 else if (TREE_CODE (T) == CONSTRUCTOR) \
493 { \
494 if (flag_pic != 0 && (RELOC) != 0) \
495 data_section (); \
496 } \
497 else if (*tree_code_type[(int) TREE_CODE (T)] == 'c') \
498 { \
499 if ((TREE_CODE (T) == STRING_CST && flag_writable_strings) \
500 || TYPE_ALIGN (TREE_TYPE (T)) > MAX_TEXT_ALIGN) \
501 data_section (); \
502 else \
503 text_section (); \
504 } \
505}
506
507/* Use text section for a constant
508 unless we need more alignment than that offers. */
7a6cf439 509/* This is defined differently for v9 in a cover file. */
1bb87f28
JW
510#define SELECT_RTX_SECTION(MODE, X) \
511{ \
512 if (GET_MODE_BITSIZE (MODE) <= MAX_TEXT_ALIGN \
513 && ! (flag_pic && symbolic_operand (X))) \
514 text_section (); \
515 else \
516 data_section (); \
517}
518\f
519/* Standard register usage. */
520
521/* Number of actual hardware registers.
522 The hardware registers are assigned numbers for the compiler
523 from 0 to just below FIRST_PSEUDO_REGISTER.
524 All registers that the compiler knows about must be given numbers,
525 even those that are not normally considered general registers.
526
7a6cf439
DE
527 SPARC has 32 integer registers and 32 floating point registers.
528 64 bit SPARC has 32 additional fp regs, but the odd numbered ones are not
529 accessible. We still account for them to simplify register computations
530 (eg: in CLASS_MAX_NREGS). There are also 4 fp condition code registers, so
531 32+32+32+4 == 100.
532 Register 0 is used as the integer condition code register. */
1bb87f28 533
7a6cf439
DE
534#ifdef SPARCV9
535#define FIRST_PSEUDO_REGISTER 100
536#else
1bb87f28 537#define FIRST_PSEUDO_REGISTER 64
7a6cf439 538#endif
1bb87f28
JW
539
540/* 1 for registers that have pervasive standard uses
541 and are not available for the register allocator.
5b485d2c 542 g0 is used for the condition code and not to represent %g0, which is
1bb87f28 543 hardwired to 0, so reg 0 is *not* fixed.
7a6cf439 544 On non-v9 systems:
34ad7aaf
JW
545 g1 is free to use as temporary.
546 g2-g4 are reserved for applications. Gcc normally uses them as
547 temporaries, but this can be disabled via the -mno-app-regs option.
7a6cf439
DE
548 g5 through g7 are reserved for the operating system.
549 On v9 systems:
550 g1 and g5 are free to use as temporaries.
551 g2-g4 are reserved for applications (the compiler will not normally use
552 them, but they can be used as temporaries with -mapp-regs).
553 g6-g7 are reserved for the operating system.
554 ??? Register 1 is used as a temporary by the 64 bit sethi pattern, so must
555 currently be a fixed register until this pattern is rewritten.
556 Register 1 is also used when restoring call-preserved registers in large
557 stack frames. */
558
559#ifdef SPARCV9
560#define FIXED_REGISTERS \
561 {0, 1, 1, 1, 1, 0, 1, 1, \
562 0, 0, 0, 0, 0, 0, 1, 0, \
563 0, 0, 0, 0, 0, 0, 0, 0, \
564 0, 0, 0, 0, 0, 0, 1, 1, \
565 \
566 0, 0, 0, 0, 0, 0, 0, 0, \
567 0, 0, 0, 0, 0, 0, 0, 0, \
568 0, 0, 0, 0, 0, 0, 0, 0, \
569 0, 0, 0, 0, 0, 0, 0, 0, \
570 \
571 0, 0, 0, 0, 0, 0, 0, 0, \
572 0, 0, 0, 0, 0, 0, 0, 0, \
573 0, 0, 0, 0, 0, 0, 0, 0, \
574 0, 0, 0, 0, 0, 0, 0, 0, \
575 \
576 0, 0, 0, 0}
577#else
1bb87f28 578#define FIXED_REGISTERS \
d9ca49d5 579 {0, 0, 0, 0, 0, 1, 1, 1, \
1bb87f28
JW
580 0, 0, 0, 0, 0, 0, 1, 0, \
581 0, 0, 0, 0, 0, 0, 0, 0, \
582 0, 0, 0, 0, 0, 0, 1, 1, \
583 \
584 0, 0, 0, 0, 0, 0, 0, 0, \
585 0, 0, 0, 0, 0, 0, 0, 0, \
586 0, 0, 0, 0, 0, 0, 0, 0, \
587 0, 0, 0, 0, 0, 0, 0, 0}
7a6cf439 588#endif
1bb87f28
JW
589
590/* 1 for registers not available across function calls.
591 These must include the FIXED_REGISTERS and also any
592 registers that can be used without being saved.
593 The latter must include the registers where values are returned
594 and the register where structure-value addresses are passed.
595 Aside from that, you can include as many other registers as you like. */
7a6cf439
DE
596
597#ifdef SPARCV9
598#define CALL_USED_REGISTERS \
599 {1, 1, 1, 1, 1, 1, 1, 1, \
600 1, 1, 1, 1, 1, 1, 1, 1, \
601 0, 0, 0, 0, 0, 0, 0, 0, \
602 0, 0, 0, 0, 0, 0, 1, 1, \
603 \
604 1, 1, 1, 1, 1, 1, 1, 1, \
605 1, 1, 1, 1, 1, 1, 1, 1, \
606 0, 0, 0, 0, 0, 0, 0, 0, \
607 0, 0, 0, 0, 0, 0, 0, 0, \
608 \
609 0, 0, 0, 0, 0, 0, 0, 0, \
610 0, 0, 0, 0, 0, 0, 0, 0, \
611 1, 1, 1, 1, 1, 1, 1, 1, \
612 1, 1, 1, 1, 1, 1, 1, 1, \
613 \
614 1, 1, 1, 1}
615#else
1bb87f28
JW
616#define CALL_USED_REGISTERS \
617 {1, 1, 1, 1, 1, 1, 1, 1, \
618 1, 1, 1, 1, 1, 1, 1, 1, \
619 0, 0, 0, 0, 0, 0, 0, 0, \
620 0, 0, 0, 0, 0, 0, 1, 1, \
621 \
622 1, 1, 1, 1, 1, 1, 1, 1, \
623 1, 1, 1, 1, 1, 1, 1, 1, \
624 1, 1, 1, 1, 1, 1, 1, 1, \
625 1, 1, 1, 1, 1, 1, 1, 1}
7a6cf439 626#endif
1bb87f28 627
26c5587d 628/* If !TARGET_FPU, then make the fp registers fixed so that they won't
7a6cf439 629 be allocated. On v9, also make the fp cc regs fixed. */
26c5587d
JW
630
631#define CONDITIONAL_REGISTER_USAGE \
632do \
633 { \
634 if (! TARGET_FPU) \
635 { \
636 int regno; \
7a6cf439 637 for (regno = 32; regno < FIRST_PSEUDO_REGISTER; regno++) \
26c5587d
JW
638 fixed_regs[regno] = 1; \
639 } \
34ad7aaf
JW
640 if (! TARGET_APP_REGS) \
641 { \
642 fixed_regs[2] = 1; \
643 fixed_regs[3] = 1; \
644 fixed_regs[4] = 1; \
645 } \
7a6cf439
DE
646 else \
647 { \
648 fixed_regs[2] = 0; \
649 fixed_regs[3] = 0; \
650 fixed_regs[4] = 0; \
651 } \
5c56efde
DE
652 if (TARGET_FLAT) \
653 { \
654 /* Let the compiler believe the frame pointer is still \
655 %fp, but output it as %i7. */ \
656 fixed_regs[31] = 1; \
657 reg_names[FRAME_POINTER_REGNUM] = "%i7"; \
658 /* ??? This is a hack to disable leaf functions. */ \
659 global_regs[7] = 1; \
660 } \
9ee6230c
JW
661 if (profile_block_flag) \
662 { \
663 /* %g1 and %g2 must be fixed, because BLOCK_PROFILER \
664 uses them. */ \
665 fixed_regs[1] = 1; \
666 fixed_regs[2] = 1; \
667 } \
26c5587d
JW
668 } \
669while (0)
670
1bb87f28
JW
671/* Return number of consecutive hard regs needed starting at reg REGNO
672 to hold something of mode MODE.
673 This is ordinarily the length in words of a value of mode MODE
674 but can be less for certain modes in special long registers.
675
676 On SPARC, ordinary registers hold 32 bits worth;
677 this means both integer and floating point registers.
7a6cf439
DE
678 On v9, integer regs hold 64 bits worth; floating point regs hold
679 32 bits worth (this includes the new fp regs as even the odd ones are
680 included in the hard register count). */
1bb87f28 681
7a6cf439
DE
682#define HARD_REGNO_NREGS(REGNO, MODE) \
683 (TARGET_V9 \
684 ? ((REGNO) < 32 \
685 ? (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD \
686 : (GET_MODE_SIZE (MODE) + 3) / 4) \
687 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
1bb87f28
JW
688
689/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
923a8d06 690 See sparc.c for how we initialize this. */
7a6cf439
DE
691extern int *hard_regno_mode_classes;
692extern int sparc_mode_class[];
1bb87f28 693#define HARD_REGNO_MODE_OK(REGNO, MODE) \
7a6cf439 694 ((hard_regno_mode_classes[REGNO] & sparc_mode_class[MODE]) != 0)
1bb87f28
JW
695
696/* Value is 1 if it is a good idea to tie two pseudo registers
697 when one has mode MODE1 and one has mode MODE2.
698 If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
7a6cf439
DE
699 for any hard reg, then this must be 0 for correct output.
700
701 For V9: SFmode can't be combined with other float modes, because they can't
702 be allocated to the %d registers. Also, DFmode won't fit in odd %f
703 registers, but SFmode will. */
1bb87f28 704#define MODES_TIEABLE_P(MODE1, MODE2) \
7a6cf439
DE
705 ((MODE1) == (MODE2) \
706 || (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2) \
707 && (! TARGET_V9 \
708 || (GET_MODE_CLASS (MODE1) != MODE_FLOAT \
709 || (MODE1 != SFmode && MODE2 != SFmode)))))
1bb87f28
JW
710
711/* Specify the registers used for certain standard purposes.
712 The values of these macros are register numbers. */
713
714/* SPARC pc isn't overloaded on a register that the compiler knows about. */
715/* #define PC_REGNUM */
716
717/* Register to use for pushing function arguments. */
718#define STACK_POINTER_REGNUM 14
719
7a6cf439
DE
720/* Actual top-of-stack address is 92/136 greater than the contents of the
721 stack pointer register for !v9/v9. That is:
722 - !v9: 64 bytes for the in and local registers, 4 bytes for structure return
723 address, and 24 bytes for the 6 register parameters.
724 - v9: 128 bytes for the in and local registers + 8 bytes reserved. */
1bb87f28
JW
725#define STACK_POINTER_OFFSET FIRST_PARM_OFFSET(0)
726
7a6cf439
DE
727/* The stack bias (amount by which the hardware register is offset by). */
728#define SPARC_STACK_BIAS (TARGET_STACK_BIAS ? 2047 : 0)
729
1bb87f28
JW
730/* Base register for access to local variables of the function. */
731#define FRAME_POINTER_REGNUM 30
732
733#if 0
734/* Register that is used for the return address. */
735#define RETURN_ADDR_REGNUM 15
736#endif
737
738/* Value should be nonzero if functions must have frame pointers.
739 Zero means the frame pointer need not be set up (and parms
740 may be accessed via the stack pointer) in functions that seem suitable.
741 This is computed in `reload', in reload1.c.
742
c0524a34 743 Used in flow.c, global.c, and reload1.c. */
1bb87f28
JW
744extern int leaf_function;
745
746#define FRAME_POINTER_REQUIRED \
5c56efde
DE
747 (TARGET_FRW ? (current_function_calls_alloca || current_function_varargs) \
748 : ! (leaf_function_p () && only_leaf_regs_used ()))
1bb87f28
JW
749
750/* C statement to store the difference between the frame pointer
751 and the stack pointer values immediately after the function prologue.
752
753 Note, we always pretend that this is a leaf function because if
754 it's not, there's no point in trying to eliminate the
755 frame pointer. If it is a leaf function, we guessed right! */
756#define INITIAL_FRAME_POINTER_OFFSET(VAR) \
5c56efde 757 ((VAR) = (TARGET_FRW ? sparc_flat_compute_frame_size (get_frame_size ()) \
5b485d2c 758 : compute_frame_size (get_frame_size (), 1)))
1bb87f28
JW
759
760/* Base register for access to arguments of the function. */
5c56efde 761#define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM
1bb87f28 762
6098b63e 763/* Register in which static-chain is passed to a function. This must
7a6cf439
DE
764 not be a register used by the prologue.
765 ??? v9: Since %g2 is reserved but %g5 is available, perhaps use %g5. */
6098b63e 766#define STATIC_CHAIN_REGNUM 2
1bb87f28
JW
767
768/* Register which holds offset table for position-independent
769 data references. */
770
771#define PIC_OFFSET_TABLE_REGNUM 23
772
773#define INITIALIZE_PIC initialize_pic ()
774#define FINALIZE_PIC finalize_pic ()
775
d9ca49d5 776/* Sparc ABI says that quad-precision floats and all structures are returned
7a6cf439
DE
777 in memory.
778 For v9, all aggregates are returned in memory. */
779#define RETURN_IN_MEMORY(TYPE) \
780 (TYPE_MODE (TYPE) == BLKmode || (! TARGET_V9 && TYPE_MODE (TYPE) == TFmode))
d9ca49d5 781
1bb87f28
JW
782/* Functions which return large structures get the address
783 to place the wanted value at offset 64 from the frame.
7a6cf439
DE
784 Must reserve 64 bytes for the in and local registers.
785 v9: Functions which return large structures get the address to place the
786 wanted value from an invisible first argument. */
1bb87f28
JW
787/* Used only in other #defines in this file. */
788#define STRUCT_VALUE_OFFSET 64
789
790#define STRUCT_VALUE \
7a6cf439
DE
791 (TARGET_V9 \
792 ? 0 \
793 : gen_rtx (MEM, Pmode, \
794 gen_rtx (PLUS, Pmode, stack_pointer_rtx, \
795 gen_rtx (CONST_INT, VOIDmode, STRUCT_VALUE_OFFSET))))
1bb87f28 796#define STRUCT_VALUE_INCOMING \
7a6cf439
DE
797 (TARGET_V9 \
798 ? 0 \
799 : gen_rtx (MEM, Pmode, \
800 gen_rtx (PLUS, Pmode, frame_pointer_rtx, \
801 gen_rtx (CONST_INT, VOIDmode, STRUCT_VALUE_OFFSET))))
1bb87f28
JW
802\f
803/* Define the classes of registers for register constraints in the
804 machine description. Also define ranges of constants.
805
806 One of the classes must always be named ALL_REGS and include all hard regs.
807 If there is more than one class, another class must be named NO_REGS
808 and contain no registers.
809
810 The name GENERAL_REGS must be the name of a class (or an alias for
811 another name such as ALL_REGS). This is the class of registers
812 that is allowed by "g" or "r" in a register constraint.
813 Also, registers outside this class are allocated only when
814 instructions express preferences for them.
815
816 The classes must be numbered in nondecreasing order; that is,
817 a larger-numbered class must never be contained completely
818 in a smaller-numbered class.
819
820 For any two classes, it is very desirable that there be another
821 class that represents their union. */
822
7a6cf439
DE
823/* The SPARC has two kinds of registers, general and floating point.
824 v9 also has 4 floating point condition code registers. Since we don't
825 have a class that is the union of FPCC_REGS with either of the others,
826 it is important that it appear first. Otherwise the compiler will die
827 trying to compile _fixunsdfsi because fix_truncdfsi2 won't match its
828 constraints. */
829 /* ??? As an experiment for v9, we treat all fp regs similarily here. */
830
831#ifdef SPARCV9
832enum reg_class { NO_REGS, FPCC_REGS, GENERAL_REGS, FP_REGS, GENERAL_OR_FP_REGS,
833 ALL_REGS, LIM_REG_CLASSES };
834#else
1bb87f28 835enum reg_class { NO_REGS, GENERAL_REGS, FP_REGS, ALL_REGS, LIM_REG_CLASSES };
7a6cf439 836#endif
1bb87f28
JW
837
838#define N_REG_CLASSES (int) LIM_REG_CLASSES
839
840/* Give names of register classes as strings for dump file. */
841
7a6cf439 842#ifdef SPARCV9
1bb87f28 843#define REG_CLASS_NAMES \
7a6cf439
DE
844 {"NO_REGS", "FPCC_REGS", "GENERAL_REGS", "FP_REGS", "GENERAL_OR_FP_REGS", \
845 "ALL_REGS" }
846#else
847#define REG_CLASS_NAMES \
848 {"NO_REGS", "GENERAL_REGS", "FP_REGS", "ALL_REGS" }
849#endif
1bb87f28
JW
850
851/* Define which registers fit in which classes.
852 This is an initializer for a vector of HARD_REG_SET
853 of length N_REG_CLASSES. */
854
7a6cf439
DE
855#ifdef SPARCV9
856#define REG_CLASS_CONTENTS \
857 {{0, 0, 0, 0}, {0, 0, 0, 0xf}, {-2, 0, 0, 0}, {0, -1, -1, 0}, \
858 {-2, -1, -1, 0}, {-2, -1, -1, 0xf}}
859#else
1bb87f28
JW
860#if 0 && defined (__GNUC__)
861#define REG_CLASS_CONTENTS {0LL, 0xfffffffeLL, 0xffffffff00000000LL, 0xfffffffffffffffeLL}
862#else
863#define REG_CLASS_CONTENTS {{0, 0}, {-2, 0}, {0, -1}, {-2, -1}}
864#endif
7a6cf439 865#endif
1bb87f28
JW
866
867/* The same information, inverted:
868 Return the class number of the smallest class containing
869 reg number REGNO. This could be a conditional expression
870 or could index an array. */
871
7a6cf439
DE
872#ifdef SPARCV9
873#define REGNO_REG_CLASS(REGNO) \
874 ((REGNO) == 0 ? NO_REGS \
875 : ((REGNO) < 32 ? GENERAL_REGS \
876 : ((REGNO) < 96 ? FP_REGS \
877 : FPCC_REGS)))
878#else
1bb87f28
JW
879#define REGNO_REG_CLASS(REGNO) \
880 ((REGNO) >= 32 ? FP_REGS : (REGNO) == 0 ? NO_REGS : GENERAL_REGS)
7a6cf439 881#endif
1bb87f28 882
7a6cf439 883/* This is the order in which to allocate registers normally.
51f0e748
JW
884
885 We put %f0/%f1 last among the float registers, so as to make it more
6a4bb1fa 886 likely that a pseudo-register which dies in the float return register
51f0e748 887 will get allocated to the float return register, thus saving a move
7a6cf439
DE
888 instruction at the end of the function.
889
890 On v9, the float registers are ordered a little "funny" because some
891 of them (%f16-%f47) are call-preserved. */
892#ifdef SPARCV9
893#define REG_ALLOC_ORDER \
894{ 8, 9, 10, 11, 12, 13, \
895 15, 16, 17, 18, 19, 20, 21, 22, \
896 23, 24, 25, 26, 27, 28, 29, 31, \
897 34, 35, 36, 37, 38, 39, /* %f2-%f7 */ \
898 40, 41, 42, 43, 44, 45, 46, 47, /* %f8-%f15 */ \
899 80, 81, 82, 83, 84, 85, 86, 87, /* %f48-%f55 */ \
900 88, 89, 90, 91, 92, 93, 94, 95, /* %f56-%f63 */ \
901 48, 49, 50, 51, 52, 53, 54, 55, /* %f16-%f23 */ \
902 56, 57, 58, 59, 60, 61, 62, 63, /* %f24-%f31 */ \
903 64, 65, 66, 67, 68, 69, 70, 71, /* %f32-%f39 */ \
904 72, 73, 74, 75, 76, 77, 78, 79, /* %f40-%f47 */ \
905 32, 33, /* %f0,%f1 */ \
906 96, 97, 98, 99, /* %fcc0-3 */ \
907 1, 5, 2, 3, 4, 6, 7, 0, 14, 30}
908#else
1bb87f28 909#define REG_ALLOC_ORDER \
b4ac57ab
RS
910{ 8, 9, 10, 11, 12, 13, 2, 3, \
911 15, 16, 17, 18, 19, 20, 21, 22, \
912 23, 24, 25, 26, 27, 28, 29, 31, \
51f0e748 913 34, 35, 36, 37, 38, 39, \
1bb87f28
JW
914 40, 41, 42, 43, 44, 45, 46, 47, \
915 48, 49, 50, 51, 52, 53, 54, 55, \
916 56, 57, 58, 59, 60, 61, 62, 63, \
51f0e748 917 32, 33, \
4b69d2a3 918 1, 4, 5, 6, 7, 0, 14, 30}
7a6cf439 919#endif
1bb87f28
JW
920
921/* This is the order in which to allocate registers for
922 leaf functions. If all registers can fit in the "i" registers,
7a6cf439
DE
923 then we have the possibility of having a leaf function.
924 v9: The floating point registers are ordered a little "funny" because some
925 of them (%f16-%f47) are call-preserved. */
926#ifdef SPARCV9
927#define REG_LEAF_ALLOC_ORDER \
928{ 24, 25, 26, 27, 28, 29, \
929 15, 8, 9, 10, 11, 12, 13, \
930 16, 17, 18, 19, 20, 21, 22, 23, \
931 34, 35, 36, 37, 38, 39, \
932 40, 41, 42, 43, 44, 45, 46, 47, \
933 80, 81, 82, 83, 84, 85, 86, 87, \
934 88, 89, 90, 91, 92, 93, 94, 95, \
935 48, 49, 50, 51, 52, 53, 54, 55, \
936 56, 57, 58, 59, 60, 61, 62, 63, \
937 64, 65, 66, 67, 68, 69, 70, 71, \
938 72, 73, 74, 75, 76, 77, 78, 79, \
939 32, 33, \
940 96, 97, 98, 99, \
941 1, 5, 2, 3, 4, 6, 7, 0, 14, 30, 31}
942#else
1bb87f28
JW
943#define REG_LEAF_ALLOC_ORDER \
944{ 2, 3, 24, 25, 26, 27, 28, 29, \
945 15, 8, 9, 10, 11, 12, 13, \
946 16, 17, 18, 19, 20, 21, 22, 23, \
51f0e748 947 34, 35, 36, 37, 38, 39, \
1bb87f28
JW
948 40, 41, 42, 43, 44, 45, 46, 47, \
949 48, 49, 50, 51, 52, 53, 54, 55, \
950 56, 57, 58, 59, 60, 61, 62, 63, \
51f0e748 951 32, 33, \
4b69d2a3 952 1, 4, 5, 6, 7, 0, 14, 30, 31}
7a6cf439 953#endif
1bb87f28
JW
954
955#define ORDER_REGS_FOR_LOCAL_ALLOC order_regs_for_local_alloc ()
956
5c56efde
DE
957/* ??? %g7 is not a leaf register to effectively #undef LEAF_REGISTERS when
958 -mflat is used. Function only_leaf_regs_used will return 0 if a global
959 register is used and is not permitted in a leaf function. We make %g7
960 a global reg if -mflat and voila. Since %g7 is a system register and is
961 fixed it won't be used by gcc anyway. */
7a6cf439
DE
962#ifdef SPARCV9
963#define LEAF_REGISTERS \
964{ 1, 1, 1, 1, 1, 1, 1, 0, \
965 0, 0, 0, 0, 0, 0, 1, 0, \
966 0, 0, 0, 0, 0, 0, 0, 0, \
967 1, 1, 1, 1, 1, 1, 0, 1, \
968 1, 1, 1, 1, 1, 1, 1, 1, \
969 1, 1, 1, 1, 1, 1, 1, 1, \
970 1, 1, 1, 1, 1, 1, 1, 1, \
971 1, 1, 1, 1, 1, 1, 1, 1, \
972 1, 1, 1, 1, 1, 1, 1, 1, \
973 1, 1, 1, 1, 1, 1, 1, 1, \
974 1, 1, 1, 1, 1, 1, 1, 1, \
975 1, 1, 1, 1, 1, 1, 1, 1, \
976 1, 1, 1, 1}
977#else
1bb87f28 978#define LEAF_REGISTERS \
5c56efde 979{ 1, 1, 1, 1, 1, 1, 1, 0, \
1bb87f28
JW
980 0, 0, 0, 0, 0, 0, 1, 0, \
981 0, 0, 0, 0, 0, 0, 0, 0, \
982 1, 1, 1, 1, 1, 1, 0, 1, \
983 1, 1, 1, 1, 1, 1, 1, 1, \
984 1, 1, 1, 1, 1, 1, 1, 1, \
985 1, 1, 1, 1, 1, 1, 1, 1, \
4b69d2a3 986 1, 1, 1, 1, 1, 1, 1, 1}
7a6cf439 987#endif
1bb87f28
JW
988
989extern char leaf_reg_remap[];
990#define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO])
1bb87f28 991
1bb87f28
JW
992/* The class value for index registers, and the one for base regs. */
993#define INDEX_REG_CLASS GENERAL_REGS
994#define BASE_REG_CLASS GENERAL_REGS
995
996/* Get reg_class from a letter such as appears in the machine description. */
997
7a6cf439
DE
998#ifdef SPARCV9
999#define REG_CLASS_FROM_LETTER(C) \
1000 ((C) == 'f' ? FP_REGS : (C) == 'c' ? FPCC_REGS : NO_REGS)
1001#else
1bb87f28 1002#define REG_CLASS_FROM_LETTER(C) \
7a6cf439
DE
1003 ((C) == 'f' ? FP_REGS : NO_REGS)
1004#endif
1bb87f28
JW
1005
1006/* The letters I, J, K, L and M in a register constraint string
1007 can be used to stand for particular ranges of immediate operands.
1008 This macro defines what the ranges are.
1009 C is the letter, and VALUE is a constant value.
1010 Return 1 if VALUE is in the range specified by C.
1011
1012 For SPARC, `I' is used for the range of constants an insn
1013 can actually contain.
1014 `J' is used for the range which is just zero (since that is R0).
9ad2c692 1015 `K' is used for constants which can be loaded with a single sethi insn. */
1bb87f28
JW
1016
1017#define SMALL_INT(X) ((unsigned) (INTVAL (X) + 0x1000) < 0x2000)
1018
1019#define CONST_OK_FOR_LETTER_P(VALUE, C) \
1020 ((C) == 'I' ? (unsigned) ((VALUE) + 0x1000) < 0x2000 \
1021 : (C) == 'J' ? (VALUE) == 0 \
1022 : (C) == 'K' ? ((VALUE) & 0x3ff) == 0 \
1023 : 0)
1024
1025/* Similar, but for floating constants, and defining letters G and H.
1026 Here VALUE is the CONST_DOUBLE rtx itself. */
1027
1028#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
96f69de5 1029 ((C) == 'G' ? fp_zero_operand (VALUE) \
1bb87f28
JW
1030 : (C) == 'H' ? arith_double_operand (VALUE, DImode) \
1031 : 0)
1032
1033/* Given an rtx X being reloaded into a reg required to be
1034 in class CLASS, return the class of reg to actually use.
1035 In general this is just CLASS; but on some machines
1036 in some cases it is preferable to use a more restrictive class. */
2b9a9aea
JW
1037/* We can't load constants into FP registers. We can't load any FP constant
1038 if an 'E' constraint fails to match it. */
1039#define PREFERRED_RELOAD_CLASS(X,CLASS) \
1040 (CONSTANT_P (X) \
1041 && ((CLASS) == FP_REGS \
1042 || (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
1043 && (HOST_FLOAT_FORMAT != IEEE_FLOAT_FORMAT \
1044 || HOST_BITS_PER_INT != BITS_PER_WORD))) \
1045 ? NO_REGS : (CLASS))
1bb87f28
JW
1046
1047/* Return the register class of a scratch register needed to load IN into
1048 a register of class CLASS in MODE.
1049
1050 On the SPARC, when PIC, we need a temporary when loading some addresses
ae51bd97 1051 into a register.
1bb87f28 1052
ae51bd97
JW
1053 Also, we need a temporary when loading/storing a HImode/QImode value
1054 between memory and the FPU registers. This can happen when combine puts
1055 a paradoxical subreg in a float/fix conversion insn. */
1056
1057#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, IN) \
7aca9b9c 1058 (((CLASS) == FP_REGS && ((MODE) == HImode || (MODE) == QImode)\
ae51bd97
JW
1059 && (GET_CODE (IN) == MEM \
1060 || ((GET_CODE (IN) == REG || GET_CODE (IN) == SUBREG) \
1061 && true_regnum (IN) == -1))) ? GENERAL_REGS : NO_REGS)
1062
1063#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, IN) \
1064 ((CLASS) == FP_REGS && ((MODE) == HImode || (MODE) == QImode) \
1065 && (GET_CODE (IN) == MEM \
1066 || ((GET_CODE (IN) == REG || GET_CODE (IN) == SUBREG) \
1067 && true_regnum (IN) == -1)) ? GENERAL_REGS : NO_REGS)
1bb87f28 1068
b924cef0
JW
1069/* On SPARC it is not possible to directly move data between
1070 GENERAL_REGS and FP_REGS. */
7a6cf439 1071#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) ((CLASS1) != (CLASS2))
b924cef0 1072
fe1f7f24
JW
1073/* Return the stack location to use for secondary memory needed reloads. */
1074#define SECONDARY_MEMORY_NEEDED_RTX(MODE) \
15f67e06
JW
1075 gen_rtx (MEM, MODE, gen_rtx (PLUS, Pmode, frame_pointer_rtx, \
1076 GEN_INT (STARTING_FRAME_OFFSET)))
fe1f7f24 1077
7a6cf439
DE
1078/* Get_secondary_mem widens it's argument to BITS_PER_WORD which loses on v9
1079 because the movsi and movsf patterns don't handle r/f moves.
1080 For v8 we copy the default definition. */
1081#define SECONDARY_MEMORY_NEEDED_MODE(MODE) \
1082 (TARGET_V9 \
1083 ? (GET_MODE_BITSIZE (mode) < 32 \
1084 ? mode_for_size (32, GET_MODE_CLASS (mode), 0) \
1085 : MODE) \
1086 : (GET_MODE_BITSIZE (mode) < BITS_PER_WORD \
1087 ? mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0) \
1088 : MODE))
1089
1bb87f28
JW
1090/* Return the maximum number of consecutive registers
1091 needed to represent mode MODE in a register of class CLASS. */
1092/* On SPARC, this is the size of MODE in words. */
1093#define CLASS_MAX_NREGS(CLASS, MODE) \
7a6cf439
DE
1094 ((CLASS) == FP_REGS ? (GET_MODE_SIZE (MODE) + 3) / 4 \
1095 : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
1bb87f28
JW
1096\f
1097/* Stack layout; function entry, exit and calling. */
1098
1099/* Define the number of register that can hold parameters.
7a6cf439
DE
1100 These two macros are used only in other macro definitions below.
1101 MODE is the mode of the argument.
1102 !v9: All args are passed in %o0-%o5.
1103 v9: Non-float args are passed in %o0-5 and float args are passed in
1104 %f0-%f15. */
1105#define NPARM_REGS(MODE) \
1106 (TARGET_V9 ? (GET_MODE_CLASS (MODE) == MODE_FLOAT ? 16 : 6) : 6)
1bb87f28
JW
1107
1108/* Define this if pushing a word on the stack
1109 makes the stack pointer a smaller address. */
1110#define STACK_GROWS_DOWNWARD
1111
1112/* Define this if the nominal address of the stack frame
1113 is at the high-address end of the local variables;
1114 that is, each additional local variable allocated
1115 goes at a more negative offset in the frame. */
1116#define FRAME_GROWS_DOWNWARD
1117
1118/* Offset within stack frame to start allocating local variables at.
1119 If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
1120 first local allocated. Otherwise, it is the offset to the BEGINNING
1121 of the first local allocated. */
7238ce3a
JW
1122/* This allows space for one TFmode floating point value. */
1123#define STARTING_FRAME_OFFSET \
7a6cf439
DE
1124 (TARGET_V9 ? (SPARC_STACK_BIAS - 16) \
1125 : (-SPARC_STACK_ALIGN (LONG_DOUBLE_TYPE_SIZE / BITS_PER_UNIT)))
1bb87f28
JW
1126
1127/* If we generate an insn to push BYTES bytes,
1128 this says how many the stack pointer really advances by.
1129 On SPARC, don't define this because there are no push insns. */
1130/* #define PUSH_ROUNDING(BYTES) */
1131
1132/* Offset of first parameter from the argument pointer register value.
7a6cf439
DE
1133 !v9: This is 64 for the ins and locals, plus 4 for the struct-return reg
1134 even if this function isn't going to use it.
1135 v9: This is 128 for the ins and locals, plus a reserved space of 8. */
1136#define FIRST_PARM_OFFSET(FNDECL) \
1137 (TARGET_V9 ? (SPARC_STACK_BIAS + 136) \
1138 : (STRUCT_VALUE_OFFSET + UNITS_PER_WORD))
1bb87f28
JW
1139
1140/* When a parameter is passed in a register, stack space is still
1141 allocated for it. */
7a6cf439
DE
1142#ifndef SPARCV9
1143#define REG_PARM_STACK_SPACE(DECL) (NPARM_REGS (SImode) * UNITS_PER_WORD)
1144#endif
1bb87f28
JW
1145
1146/* Keep the stack pointer constant throughout the function.
b4ac57ab 1147 This is both an optimization and a necessity: longjmp
1bb87f28
JW
1148 doesn't behave itself when the stack pointer moves within
1149 the function! */
1150#define ACCUMULATE_OUTGOING_ARGS
1151
1152/* Value is the number of bytes of arguments automatically
1153 popped when returning from a subroutine call.
1154 FUNTYPE is the data type of the function (as a tree),
1155 or for a library call it is an identifier node for the subroutine name.
1156 SIZE is the number of bytes of arguments passed on the stack. */
1157
1158#define RETURN_POPS_ARGS(FUNTYPE,SIZE) 0
1159
5b485d2c
JW
1160/* Some subroutine macros specific to this machine.
1161 When !TARGET_FPU, put float return values in the general registers,
1162 since we don't have any fp registers. */
1bb87f28 1163#define BASE_RETURN_VALUE_REG(MODE) \
7a6cf439
DE
1164 (TARGET_V9 ? (TARGET_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT ? 32 : 8) \
1165 : (((MODE) == SFmode || (MODE) == DFmode) && TARGET_FPU ? 32 : 8))
1bb87f28 1166#define BASE_OUTGOING_VALUE_REG(MODE) \
7a6cf439
DE
1167 (TARGET_V9 ? (TARGET_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT ? 32 \
1168 : TARGET_FRW ? 8 : 24) \
1169 : (((MODE) == SFmode || (MODE) == DFmode) && TARGET_FPU ? 32 \
1170 : (TARGET_FRW ? 8 : 24)))
1171#define BASE_PASSING_ARG_REG(MODE) \
1172 (TARGET_V9 ? (TARGET_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT ? 32 : 8) \
1173 : (8))
1174#define BASE_INCOMING_ARG_REG(MODE) \
1175 (TARGET_V9 ? (TARGET_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT ? 32 \
1176 : TARGET_FRW ? 8 : 24) \
1177 : (TARGET_FRW ? 8 : 24))
1bb87f28 1178
92ea370b
TW
1179/* Define this macro if the target machine has "register windows". This
1180 C expression returns the register number as seen by the called function
1181 corresponding to register number OUT as seen by the calling function.
1182 Return OUT if register number OUT is not an outbound register. */
1183
1184#define INCOMING_REGNO(OUT) \
1185 ((TARGET_FRW || (OUT) < 8 || (OUT) > 15) ? (OUT) : (OUT) + 16)
1186
1187/* Define this macro if the target machine has "register windows". This
1188 C expression returns the register number as seen by the calling function
1189 corresponding to register number IN as seen by the called function.
1190 Return IN if register number IN is not an inbound register. */
1191
1192#define OUTGOING_REGNO(IN) \
1193 ((TARGET_FRW || (IN) < 24 || (IN) > 31) ? (IN) : (IN) - 16)
1194
1bb87f28
JW
1195/* Define how to find the value returned by a function.
1196 VALTYPE is the data type of the value (as a tree).
1197 If the precise function being called is known, FUNC is its FUNCTION_DECL;
1198 otherwise, FUNC is 0. */
1199
1200/* On SPARC the value is found in the first "output" register. */
1201
1202#define FUNCTION_VALUE(VALTYPE, FUNC) \
1203 gen_rtx (REG, TYPE_MODE (VALTYPE), BASE_RETURN_VALUE_REG (TYPE_MODE (VALTYPE)))
1204
1205/* But the called function leaves it in the first "input" register. */
1206
1207#define FUNCTION_OUTGOING_VALUE(VALTYPE, FUNC) \
1208 gen_rtx (REG, TYPE_MODE (VALTYPE), BASE_OUTGOING_VALUE_REG (TYPE_MODE (VALTYPE)))
1209
1210/* Define how to find the value returned by a library function
1211 assuming the value has mode MODE. */
1212
1213#define LIBCALL_VALUE(MODE) \
1214 gen_rtx (REG, MODE, BASE_RETURN_VALUE_REG (MODE))
1215
1216/* 1 if N is a possible register number for a function value
1217 as seen by the caller.
1218 On SPARC, the first "output" reg is used for integer values,
1219 and the first floating point register is used for floating point values. */
1220
1221#define FUNCTION_VALUE_REGNO_P(N) ((N) == 8 || (N) == 32)
1222
34aaacec
JW
1223/* Define the size of space to allocate for the return value of an
1224 untyped_call. */
1225
1226#define APPLY_RESULT_SIZE 16
1227
1bb87f28 1228/* 1 if N is a possible register number for function argument passing.
7a6cf439 1229 On SPARC, these are the "output" registers. v9 also uses %f0-%f15. */
1bb87f28 1230
7a6cf439
DE
1231#define FUNCTION_ARG_REGNO_P(N) \
1232 (TARGET_V9 ? (((N) < 14 && (N) > 7) || (N) > 31 && (N) < 48) \
1233 : ((N) < 14 && (N) > 7))
1bb87f28
JW
1234\f
1235/* Define a data type for recording info about an argument list
1236 during the scan of that argument list. This data type should
1237 hold all necessary information about the function itself
1238 and about the args processed so far, enough to enable macros
1239 such as FUNCTION_ARG to determine where the next arg should go.
1240
7a6cf439 1241 On SPARC (!v9), this is a single integer, which is a number of words
1bb87f28
JW
1242 of arguments scanned so far (including the invisible argument,
1243 if any, which holds the structure-value-address).
7a6cf439
DE
1244 Thus 7 or more means all following args should go on the stack.
1245
1246 For v9, we record how many of each type has been passed. Different
1247 types get passed differently.
1248
1249 - Float args are passed in %f0-15, after which they go to the stack
1250 where floats and doubles are passed 8 byte aligned and long doubles
1251 are passed 16 byte aligned.
1252 - All aggregates are passed by reference. The callee copies
1253 the structure if necessary, except if stdarg/varargs and the struct
1254 matches the ellipse in which case the caller makes a copy.
1255 - Any non-float argument might be split between memory and reg %o5.
1256 ??? I don't think this can ever happen now that structs are no
1257 longer passed in regs.
1258
1259 For v9 return values:
1260
1261 - For all aggregates, the caller allocates space for the return value,
1262 and passes the pointer as an implicit first argument, which is
1263 allocated like all other arguments.
1264 - The unimp instruction stuff for structure returns is gone. */
1265
1266#ifdef SPARCV9
1267enum sparc_arg_class { SPARC_ARG_INT = 0, SPARC_ARG_FLOAT = 1 };
1268struct sparc_args {
1269 int arg_count[2]; /* must be int! (for __builtin_args_info) */
1270};
1271#define CUMULATIVE_ARGS struct sparc_args
1272
1273/* Return index into CUMULATIVE_ARGS. */
1274
1275#define GET_SPARC_ARG_CLASS(MODE) \
1276 (GET_MODE_CLASS (MODE) == MODE_FLOAT ? SPARC_ARG_FLOAT : SPARC_ARG_INT)
1bb87f28 1277
7a6cf439
DE
1278/* Round a register number up to a proper boundary for an arg of mode MODE.
1279 This macro is only used in this file.
1280
1281 The "& (0x10000 - ...)" is used to round up to the next appropriate reg. */
1282
1283#define ROUND_REG(CUM, MODE) \
1284 (GET_MODE_CLASS (MODE) != MODE_FLOAT \
1285 ? (CUM).arg_count[(int) GET_SPARC_ARG_CLASS (MODE)] \
1286 : ((CUM).arg_count[(int) GET_SPARC_ARG_CLASS (MODE)] \
1287 + GET_MODE_UNIT_SIZE (MODE) / 4 - 1) \
1288 & (0x10000 - GET_MODE_UNIT_SIZE (MODE) / 4))
1289
1290#define ROUND_ADVANCE(SIZE) \
1291 (((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
1292
1293#else /* ! SPARCV9 */
1bb87f28
JW
1294#define CUMULATIVE_ARGS int
1295
7a6cf439
DE
1296#define ROUND_REG(CUM, MODE) (CUM)
1297
1bb87f28 1298#define ROUND_ADVANCE(SIZE) \
b1fc14e5 1299 ((SIZE + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
7a6cf439 1300#endif /* ! SPARCV9 */
b1fc14e5 1301
1bb87f28
JW
1302/* Initialize a variable CUM of type CUMULATIVE_ARGS
1303 for a call to a function whose data type is FNTYPE.
1304 For a library call, FNTYPE is 0.
1305
1306 On SPARC, the offset always starts at 0: the first parm reg is always
1307 the same reg. */
1308
7a6cf439
DE
1309#ifdef SPARCV9
1310extern int sparc_arg_count,sparc_n_named_args;
1311#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME) \
1312 do { \
1313 (CUM).arg_count[(int) SPARC_ARG_INT] = 0; \
1314 (CUM).arg_count[(int) SPARC_ARG_FLOAT] = 0; \
1315 sparc_arg_count = 0; \
1316 sparc_n_named_args = \
1317 ((FNTYPE) && TYPE_ARG_TYPES (FNTYPE) \
1318 ? (list_length (TYPE_ARG_TYPES (FNTYPE)) \
1319 + (TREE_CODE (TREE_TYPE (FNTYPE)) == RECORD_TYPE \
1320 || TREE_CODE (TREE_TYPE (FNTYPE)) == UNION_TYPE)) \
1321 /* Can't tell, treat 'em all as named. */ \
1322 : 10000); \
1323 } while (0)
1324#else
1bb87f28 1325#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME) ((CUM) = 0)
7a6cf439 1326#endif
1bb87f28
JW
1327
1328/* Update the data in CUM to advance over an argument
1329 of mode MODE and data type TYPE.
1330 (TYPE is null for libcalls where that information may not be available.) */
1331
7a6cf439
DE
1332#ifdef SPARCV9
1333#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
1334 do { \
1335 (CUM).arg_count[(int) GET_SPARC_ARG_CLASS (MODE)] = \
1336 ROUND_REG ((CUM), (MODE)) \
1337 + (GET_MODE_CLASS (MODE) == MODE_FLOAT \
1338 ? GET_MODE_SIZE (MODE) / 4 \
1339 : ROUND_ADVANCE ((MODE) == BLKmode \
1340 ? GET_MODE_SIZE (Pmode) \
1341 : GET_MODE_SIZE (MODE))); \
1342 sparc_arg_count++; \
1343 } while (0)
1344#else
1bb87f28 1345#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
95dea81f
JW
1346 ((CUM) += ((MODE) != BLKmode \
1347 ? ROUND_ADVANCE (GET_MODE_SIZE (MODE)) \
1348 : ROUND_ADVANCE (int_size_in_bytes (TYPE))))
7a6cf439
DE
1349#endif
1350
1351/* Return boolean indicating arg of mode MODE will be passed in a reg.
1352 This macro is only used in this file. */
1353
1354#ifdef SPARCV9
1355#define PASS_IN_REG_P(CUM, MODE, TYPE) \
1356 (ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE) \
1357 && ((TYPE)==0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \
1358 && ((TYPE)==0 || (MODE) != BLKmode))
1359#else
1360#define PASS_IN_REG_P(CUM, MODE, TYPE) \
1361 ((CUM) < NPARM_REGS (SImode) \
1362 && ((TYPE)==0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \
1363 && ((TYPE)==0 || (MODE) != BLKmode \
1364 || (TYPE_ALIGN (TYPE) % PARM_BOUNDARY == 0)))
1365#endif
1bb87f28
JW
1366
1367/* Determine where to put an argument to a function.
1368 Value is zero to push the argument on the stack,
1369 or a hard register in which to store the argument.
1370
1371 MODE is the argument's machine mode.
1372 TYPE is the data type of the argument (as a tree).
1373 This is null for libcalls where that information may
1374 not be available.
1375 CUM is a variable of type CUMULATIVE_ARGS which gives info about
1376 the preceding args and about the function being called.
1377 NAMED is nonzero if this argument is a named parameter
1378 (otherwise it is an extra parameter matching an ellipsis). */
1379
1380/* On SPARC the first six args are normally in registers
1381 and the rest are pushed. Any arg that starts within the first 6 words
7a6cf439
DE
1382 is at least partially passed in a register unless its data type forbids.
1383 For v9, the first 6 int args are passed in regs and the first N
1384 float args are passed in regs (where N is such that %f0-15 are filled).
1385 The rest are pushed. Any arg that starts within the first 6 words
1bb87f28
JW
1386 is at least partially passed in a register unless its data type forbids. */
1387
1388#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
7a6cf439
DE
1389 (PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
1390 ? gen_rtx (REG, (MODE), \
1391 (BASE_PASSING_ARG_REG (MODE) + ROUND_REG ((CUM), (MODE))))\
1392 : 0)
1bb87f28
JW
1393
1394/* Define where a function finds its arguments.
1395 This is different from FUNCTION_ARG because of register windows. */
1396
1397#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
7a6cf439
DE
1398 (PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
1399 ? gen_rtx (REG, (MODE), \
1400 (BASE_INCOMING_ARG_REG (MODE) + ROUND_REG ((CUM), (MODE))))\
1401 : 0)
1bb87f28
JW
1402
1403/* For an arg passed partly in registers and partly in memory,
1404 this is the number of registers used.
1405 For args passed entirely in registers or entirely in memory, zero.
1406 Any arg that starts in the first 6 regs but won't entirely fit in them
7a6cf439
DE
1407 needs partial registers on the Sparc (!v9). On v9, there are no arguments
1408 that are passed partially in registers (??? complex values?). */
1bb87f28 1409
7a6cf439 1410#ifndef SPARCV9
1bb87f28 1411#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
7a6cf439
DE
1412 (PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
1413 && ((CUM) + ((MODE) == BLKmode \
1414 ? ROUND_ADVANCE (int_size_in_bytes (TYPE)) \
1415 : ROUND_ADVANCE (GET_MODE_SIZE (MODE))) - NPARM_REGS (SImode) > 0)\
1416 ? (NPARM_REGS (SImode) - (CUM)) \
1bb87f28 1417 : 0)
7a6cf439 1418#endif
1bb87f28 1419
d9ca49d5 1420/* The SPARC ABI stipulates passing struct arguments (of any size) and
7a6cf439 1421 (!v9) quad-precision floats by invisible reference.
87ac3809 1422 For Pascal, also pass arrays by reference. */
1bb87f28 1423#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
d9ca49d5 1424 ((TYPE && (TREE_CODE (TYPE) == RECORD_TYPE \
87ac3809
JW
1425 || TREE_CODE (TYPE) == UNION_TYPE \
1426 || TREE_CODE (TYPE) == ARRAY_TYPE)) \
7a6cf439
DE
1427 || (!TARGET_V9 && MODE == TFmode))
1428
1429/* A C expression that indicates when it is the called function's
1430 responsibility to make copies of arguments passed by reference.
1431 If the callee can determine that the argument won't be modified, it can
1432 avoid the copy. */
1433/* ??? We'd love to be able to use NAMED here. Unfortunately, it doesn't
1434 include the last named argument so we keep track of the args ourselves. */
1435
1436#ifdef SPARCV9
1437#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \
1438 (sparc_arg_count < sparc_n_named_args)
1439#endif
1440\f
1441/* Initialize data used by insn expanders. This is called from
1442 init_emit, once for each function, before code is generated.
1443 For v9, clear the temp slot used by float/int DImode conversions.
1444 ??? There is the 16 bytes at [%fp-16], however we'd like to delete this
1445 space at some point.
1446 ??? Use assign_stack_temp? */
1447
1448extern void sparc64_init_expanders ();
1449extern struct rtx_def *sparc64_fpconv_stack_temp ();
1450#ifdef SPARCV9
1451#define INIT_EXPANDERS sparc64_init_expanders ()
1452#endif
1bb87f28
JW
1453
1454/* Define the information needed to generate branch and scc insns. This is
1455 stored from the compare operation. Note that we can't use "rtx" here
1456 since it hasn't been defined! */
1457
1458extern struct rtx_def *sparc_compare_op0, *sparc_compare_op1;
1459
1460/* Define the function that build the compare insn for scc and bcc. */
1461
1462extern struct rtx_def *gen_compare_reg ();
7a6cf439
DE
1463
1464/* This function handles all v9 scc insns */
1465
1466extern int gen_v9_scc ();
1467
1468/* ??? This is a hack until conditional move support is complete. */
1469#define HAVE_conditional_move (TARGET_V9)
1bb87f28 1470\f
4b69d2a3
RS
1471/* Generate the special assembly code needed to tell the assembler whatever
1472 it might need to know about the return value of a function.
1473
1474 For Sparc assemblers, we need to output a .proc pseudo-op which conveys
1475 information to the assembler relating to peephole optimization (done in
1476 the assembler). */
1477
1478#define ASM_DECLARE_RESULT(FILE, RESULT) \
1479 fprintf ((FILE), "\t.proc\t0%o\n", sparc_type_code (TREE_TYPE (RESULT)))
1480
1bb87f28
JW
1481/* Output the label for a function definition. */
1482
4b69d2a3
RS
1483#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
1484do { \
1485 ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
1486 ASM_OUTPUT_LABEL (FILE, NAME); \
1487} while (0)
1bb87f28 1488
1bb87f28
JW
1489/* This macro generates the assembly code for function entry.
1490 FILE is a stdio stream to output the code to.
1491 SIZE is an int: how many units of temporary storage to allocate.
1492 Refer to the array `regs_ever_live' to determine which registers
1493 to save; `regs_ever_live[I]' is nonzero if register number I
1494 is ever used in the function. This macro is responsible for
1495 knowing which registers should not be saved even if used. */
1496
1497/* On SPARC, move-double insns between fpu and cpu need an 8-byte block
1498 of memory. If any fpu reg is used in the function, we allocate
1499 such a block here, at the bottom of the frame, just in case it's needed.
1500
1501 If this function is a leaf procedure, then we may choose not
1502 to do a "save" insn. The decision about whether or not
1503 to do this is made in regclass.c. */
1504
1505#define FUNCTION_PROLOGUE(FILE, SIZE) \
5c56efde 1506 (TARGET_FRW ? sparc_flat_output_function_prologue (FILE, SIZE) \
5b485d2c 1507 : output_function_prologue (FILE, SIZE, leaf_function))
1bb87f28
JW
1508
1509/* Output assembler code to FILE to increment profiler label # LABELNO
1510 for profiling a function entry. */
1511
d2a8e680
RS
1512#define FUNCTION_PROFILER(FILE, LABELNO) \
1513 do { \
1514 fputs ("\tsethi %hi(", (FILE)); \
1515 ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
7a6cf439
DE
1516 fputs ("),%o0\n", (FILE)); \
1517 if (TARGET_MEDANY) \
1518 fprintf (FILE, "\tadd %%o0,%s,%%o0\n", \
1519 MEDANY_BASE_REG); \
1520 fputs ("\tcall mcount\n\tadd %lo(", (FILE)); \
d2a8e680
RS
1521 ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \
1522 fputs ("),%o0,%o0\n", (FILE)); \
1523 } while (0)
1bb87f28
JW
1524
1525/* Output assembler code to FILE to initialize this source file's
1526 basic block profiling info, if that has not already been done. */
d2a8e680
RS
1527/* FIXME -- this does not parameterize how it generates labels (like the
1528 above FUNCTION_PROFILER). Broken on Solaris-2. --gnu@cygnus.com */
1bb87f28
JW
1529
1530#define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \
7a6cf439
DE
1531 do { \
1532 if (TARGET_MEDANY) \
1533 fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tor %%0,%%lo(LPBX0),%%o0\n\tld [%s+%%o0],%%o1\n\ttst %%o1\n\tbne LPY%d\n\tadd %%o0,%s,%%o0\n\tcall ___bb_init_func\n\tnop\nLPY%d:\n", \
1534 MEDANY_BASE_REG, (LABELNO), MEDANY_BASE_REG, (LABELNO)); \
1535 else \
1536 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", \
1537 (LABELNO), (LABELNO)); \
1538 } while (0)
1bb87f28
JW
1539
1540/* Output assembler code to FILE to increment the entry-count for
1541 the BLOCKNO'th basic block in this source file. */
1542
1543#define BLOCK_PROFILER(FILE, BLOCKNO) \
7a6cf439
DE
1544{ \
1545 int blockn = (BLOCKNO); \
1546 if (TARGET_MEDANY) \
1547 fprintf (FILE, "\tsethi %%hi(LPBX2+%d),%%g1\n\tor %%g1,%%lo(LPBX2+%d),%%g1\n\tld [%%g1+%s],%%g2\n\tadd %%g2,1,%%g2\n\tst %%g2,[%%g1+%s]\n", \
1548 4 * blockn, 4 * blockn, MEDANY_BASE_REG, MEDANY_BASE_REG); \
1549 else \
1550 fprintf (FILE, "\tsethi %%hi(LPBX2+%d),%%g1\n\tld [%%lo(LPBX2+%d)+%%g1],%%g2\n\
1551\tadd %%g2,1,%%g2\n\tst %%g2,[%%lo(LPBX2+%d)+%%g1]\n", \
1552 4 * blockn, 4 * blockn, 4 * blockn); \
1bb87f28
JW
1553}
1554
1bb87f28
JW
1555/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
1556 the stack pointer does not matter. The value is tested only in
1557 functions that have frame pointers.
1558 No definition is equivalent to always zero. */
1559
1560extern int current_function_calls_alloca;
1561extern int current_function_outgoing_args_size;
1562
1563#define EXIT_IGNORE_STACK \
1564 (get_frame_size () != 0 \
1565 || current_function_calls_alloca || current_function_outgoing_args_size)
1566
1567/* This macro generates the assembly code for function exit,
1568 on machines that need it. If FUNCTION_EPILOGUE is not defined
1569 then individual return instructions are generated for each
1570 return statement. Args are same as for FUNCTION_PROLOGUE.
1571
1572 The function epilogue should not depend on the current stack pointer!
1573 It should use the frame pointer only. This is mandatory because
1574 of alloca; we also take advantage of it to omit stack adjustments
1575 before returning. */
1576
1577/* This declaration is needed due to traditional/ANSI
1578 incompatibilities which cannot be #ifdefed away
1579 because they occur inside of macros. Sigh. */
1580extern union tree_node *current_function_decl;
1581
1582#define FUNCTION_EPILOGUE(FILE, SIZE) \
5c56efde 1583 (TARGET_FRW ? sparc_flat_output_function_epilogue (FILE, SIZE) \
5b485d2c 1584 : output_function_epilogue (FILE, SIZE, leaf_function))
1bb87f28 1585
5b485d2c 1586#define DELAY_SLOTS_FOR_EPILOGUE \
5c56efde 1587 (TARGET_FRW ? sparc_flat_epilogue_delay_slots () : 1)
1bb87f28 1588#define ELIGIBLE_FOR_EPILOGUE_DELAY(trial, slots_filled) \
5c56efde 1589 (TARGET_FRW ? sparc_flat_eligible_for_epilogue_delay (trial, slots_filled) \
5b485d2c 1590 : eligible_for_epilogue_delay (trial, slots_filled))
6a4bb1fa 1591\f
1bb87f28
JW
1592/* Output assembler code for a block containing the constant parts
1593 of a trampoline, leaving space for the variable parts. */
1594
1595/* On the sparc, the trampoline contains five instructions:
6098b63e
RK
1596 sethi #TOP_OF_FUNCTION,%g1
1597 or #BOTTOM_OF_FUNCTION,%g1,%g1
1598 sethi #TOP_OF_STATIC,%g2
1599 jmp g1
1600 or #BOTTOM_OF_STATIC,%g2,%g2 */
1bb87f28
JW
1601#define TRAMPOLINE_TEMPLATE(FILE) \
1602{ \
1603 ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000)); \
1604 ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000)); \
1605 ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000)); \
6098b63e 1606 ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x81C04000)); \
1bb87f28
JW
1607 ASM_OUTPUT_INT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x00000000)); \
1608}
1609
1610/* Length in units of the trampoline for entering a nested function. */
1611
1612#define TRAMPOLINE_SIZE 20
1613
1614/* Emit RTL insns to initialize the variable parts of a trampoline.
1615 FNADDR is an RTX for the address of the function's pure code.
7a6cf439 1616 CXT is an RTX for the static chain value for the function. */
1bb87f28 1617
7a6cf439
DE
1618void sparc_initialize_trampoline ();
1619void sparc64_initialize_trampoline ();
1620#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
1621 do { \
1622 if (TARGET_V9) \
1623 sparc64_initialize_trampoline (TRAMP, FNADDR, CXT); \
1624 else \
1625 sparc_initialize_trampoline (TRAMP, FNADDR, CXT); \
1626 } while (0)
6a4bb1fa 1627\f
9a1c7cd7
JW
1628/* Generate necessary RTL for __builtin_saveregs().
1629 ARGLIST is the argument list; see expr.c. */
1630extern struct rtx_def *sparc_builtin_saveregs ();
1631#define EXPAND_BUILTIN_SAVEREGS(ARGLIST) sparc_builtin_saveregs (ARGLIST)
953fe179
JW
1632
1633/* Generate RTL to flush the register windows so as to make arbitrary frames
1634 available. */
1635#define SETUP_FRAME_ADDRESSES() \
1636 emit_insn (gen_flush_register_windows ())
1637
1638/* Given an rtx for the address of a frame,
1639 return an rtx for the address of the word in the frame
7a6cf439
DE
1640 that holds the dynamic chain--the previous frame's address.
1641 ??? -mflat support? */
953fe179 1642#define DYNAMIC_CHAIN_ADDRESS(frame) \
7a6cf439 1643 gen_rtx (PLUS, Pmode, frame, gen_rtx (CONST_INT, VOIDmode, 14 * UNITS_PER_WORD))
953fe179
JW
1644
1645/* The return address isn't on the stack, it is in a register, so we can't
1646 access it from the current frame pointer. We can access it from the
1647 previous frame pointer though by reading a value from the register window
1648 save area. */
1649#define RETURN_ADDR_IN_PREVIOUS_FRAME
1650
1651/* The current return address is in %i7. The return address of anything
1652 farther back is in the register window save area at [%fp+60]. */
1653/* ??? This ignores the fact that the actual return address is +8 for normal
1654 returns, and +12 for structure returns. */
1655#define RETURN_ADDR_RTX(count, frame) \
1656 ((count == -1) \
1657 ? gen_rtx (REG, Pmode, 31) \
1658 : copy_to_reg (gen_rtx (MEM, Pmode, \
7a6cf439 1659 memory_address (Pmode, plus_constant (frame, 15 * UNITS_PER_WORD)))))
1bb87f28
JW
1660\f
1661/* Addressing modes, and classification of registers for them. */
1662
1663/* #define HAVE_POST_INCREMENT */
1664/* #define HAVE_POST_DECREMENT */
1665
1666/* #define HAVE_PRE_DECREMENT */
1667/* #define HAVE_PRE_INCREMENT */
1668
1669/* Macros to check register numbers against specific register classes. */
1670
1671/* These assume that REGNO is a hard or pseudo reg number.
1672 They give nonzero only if REGNO is a hard reg of the suitable class
1673 or a pseudo reg currently allocated to a suitable hard reg.
1674 Since they use reg_renumber, they are safe only once reg_renumber
1675 has been allocated, which happens in local-alloc.c. */
1676
1677#define REGNO_OK_FOR_INDEX_P(REGNO) \
1678(((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32) && (REGNO) != 0)
1679#define REGNO_OK_FOR_BASE_P(REGNO) \
1680(((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32) && (REGNO) != 0)
1681#define REGNO_OK_FOR_FP_P(REGNO) \
7a6cf439
DE
1682 (((unsigned) (REGNO) - 32 < (TARGET_V9 ? 64 : 32)) \
1683 || ((unsigned) reg_renumber[REGNO] - 32 < (TARGET_V9 ? 64 : 32)))
1684#define REGNO_OK_FOR_CCFP_P(REGNO) \
1685 (TARGET_V9 \
1686 && ((unsigned) (REGNO) - 96 < 4) || ((unsigned) reg_renumber[REGNO] - 96 < 4))
1bb87f28
JW
1687
1688/* Now macros that check whether X is a register and also,
1689 strictly, whether it is in a specified class.
1690
1691 These macros are specific to the SPARC, and may be used only
1692 in code for printing assembler insns and in conditions for
1693 define_optimization. */
1694
1695/* 1 if X is an fp register. */
1696
1697#define FP_REG_P(X) (REG_P (X) && REGNO_OK_FOR_FP_P (REGNO (X)))
1698\f
1699/* Maximum number of registers that can appear in a valid memory address. */
1700
1701#define MAX_REGS_PER_ADDRESS 2
1702
7aca9b9c
JW
1703/* Recognize any constant value that is a valid address.
1704 When PIC, we do not accept an address that would require a scratch reg
1705 to load into a register. */
1bb87f28 1706
6eff269e
BK
1707#define CONSTANT_ADDRESS_P(X) \
1708 (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
7aca9b9c
JW
1709 || GET_CODE (X) == CONST_INT || GET_CODE (X) == HIGH \
1710 || (GET_CODE (X) == CONST \
1711 && ! (flag_pic && pic_address_needs_scratch (X))))
1712
1713/* Define this, so that when PIC, reload won't try to reload invalid
1714 addresses which require two reload registers. */
1715
1716#define LEGITIMATE_PIC_OPERAND_P(X) (! pic_address_needs_scratch (X))
1bb87f28
JW
1717
1718/* Nonzero if the constant value X is a legitimate general operand.
1719 Anything can be made to work except floating point constants. */
1720
1721#define LEGITIMATE_CONSTANT_P(X) \
1722 (GET_CODE (X) != CONST_DOUBLE || GET_MODE (X) == VOIDmode)
1723
1724/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
1725 and check its validity for a certain class.
1726 We have two alternate definitions for each of them.
1727 The usual definition accepts all pseudo regs; the other rejects
1728 them unless they have been allocated suitable hard regs.
1729 The symbol REG_OK_STRICT causes the latter definition to be used.
1730
1731 Most source files want to accept pseudo regs in the hope that
1732 they will get allocated to the class that the insn wants them to be in.
1733 Source files for reload pass need to be strict.
1734 After reload, it makes no difference, since pseudo regs have
1735 been eliminated by then. */
1736
1737/* Optional extra constraints for this machine. Borrowed from romp.h.
1738
1739 For the SPARC, `Q' means that this is a memory operand but not a
1740 symbolic memory operand. Note that an unassigned pseudo register
1741 is such a memory operand. Needed because reload will generate
1742 these things in insns and then not re-recognize the insns, causing
1743 constrain_operands to fail.
1744
7a6cf439 1745 `S' handles constraints for calls. ??? So where is it? */
1bb87f28
JW
1746
1747#ifndef REG_OK_STRICT
1748
1749/* Nonzero if X is a hard reg that can be used as an index
1750 or if it is a pseudo reg. */
7a6cf439
DE
1751#define REG_OK_FOR_INDEX_P(X) \
1752 (((unsigned) REGNO (X)) - 32 >= (FIRST_PSEUDO_REGISTER - 32) && REGNO (X) != 0)
1bb87f28
JW
1753/* Nonzero if X is a hard reg that can be used as a base reg
1754 or if it is a pseudo reg. */
7a6cf439
DE
1755#define REG_OK_FOR_BASE_P(X) \
1756 (((unsigned) REGNO (X)) - 32 >= (FIRST_PSEUDO_REGISTER - 32) && REGNO (X) != 0)
1757
1758/* 'T', 'U' are for aligned memory loads which aren't needed for v9. */
1bb87f28
JW
1759
1760#define EXTRA_CONSTRAINT(OP, C) \
db5e449c
RS
1761 ((C) == 'Q' \
1762 ? ((GET_CODE (OP) == MEM \
7a6cf439 1763 && memory_address_p (GET_MODE (OP), XEXP (OP, 0)) \
db5e449c
RS
1764 && ! symbolic_memory_operand (OP, VOIDmode)) \
1765 || (reload_in_progress && GET_CODE (OP) == REG \
1766 && REGNO (OP) >= FIRST_PSEUDO_REGISTER)) \
7a6cf439 1767 : ! TARGET_V9 && (C) == 'T' \
19858600 1768 ? (mem_aligned_8 (OP)) \
7a6cf439 1769 : ! TARGET_V9 && (C) == 'U' \
19858600 1770 ? (register_ok_for_ldd (OP)) \
db5e449c 1771 : 0)
19858600 1772
1bb87f28
JW
1773#else
1774
1775/* Nonzero if X is a hard reg that can be used as an index. */
1776#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1777/* Nonzero if X is a hard reg that can be used as a base reg. */
1778#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1779
1780#define EXTRA_CONSTRAINT(OP, C) \
9ad2c692
JW
1781 ((C) == 'Q' \
1782 ? (GET_CODE (OP) == REG \
1783 ? (REGNO (OP) >= FIRST_PSEUDO_REGISTER \
1784 && reg_renumber[REGNO (OP)] < 0) \
1785 : GET_CODE (OP) == MEM) \
7a6cf439 1786 : ! TARGET_V9 && (C) == 'T' \
b165d471 1787 ? mem_aligned_8 (OP) && strict_memory_address_p (Pmode, XEXP (OP, 0)) \
7a6cf439 1788 : ! TARGET_V9 && (C) == 'U' \
b165d471
JW
1789 ? (GET_CODE (OP) == REG \
1790 && (REGNO (OP) < FIRST_PSEUDO_REGISTER \
1791 || reg_renumber[REGNO (OP)] > 0) \
1792 && register_ok_for_ldd (OP)) : 0)
1bb87f28
JW
1793#endif
1794\f
1795/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
1796 that is a valid memory address for an instruction.
1797 The MODE argument is the machine mode for the MEM expression
1798 that wants to use this address.
1799
1800 On SPARC, the actual legitimate addresses must be REG+REG or REG+SMALLINT
1801 ordinarily. This changes a bit when generating PIC.
1802
1803 If you change this, execute "rm explow.o recog.o reload.o". */
1804
bec2e359
JW
1805#define RTX_OK_FOR_BASE_P(X) \
1806 ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
1807 || (GET_CODE (X) == SUBREG \
1808 && GET_CODE (SUBREG_REG (X)) == REG \
1809 && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
1810
1811#define RTX_OK_FOR_INDEX_P(X) \
1812 ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X)) \
1813 || (GET_CODE (X) == SUBREG \
1814 && GET_CODE (SUBREG_REG (X)) == REG \
1815 && REG_OK_FOR_INDEX_P (SUBREG_REG (X))))
1816
1817#define RTX_OK_FOR_OFFSET_P(X) \
1818 (GET_CODE (X) == CONST_INT && INTVAL (X) >= -0x1000 && INTVAL (X) < 0x1000)
1819
1bb87f28 1820#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
bec2e359
JW
1821{ if (RTX_OK_FOR_BASE_P (X)) \
1822 goto ADDR; \
1bb87f28
JW
1823 else if (GET_CODE (X) == PLUS) \
1824 { \
bec2e359
JW
1825 register rtx op0 = XEXP (X, 0); \
1826 register rtx op1 = XEXP (X, 1); \
1827 if (flag_pic && op0 == pic_offset_table_rtx) \
1bb87f28 1828 { \
bec2e359 1829 if (RTX_OK_FOR_BASE_P (op1)) \
1bb87f28
JW
1830 goto ADDR; \
1831 else if (flag_pic == 1 \
bec2e359
JW
1832 && GET_CODE (op1) != REG \
1833 && GET_CODE (op1) != LO_SUM \
7aca9b9c
JW
1834 && GET_CODE (op1) != MEM \
1835 && (GET_CODE (op1) != CONST_INT \
1836 || SMALL_INT (op1))) \
1bb87f28
JW
1837 goto ADDR; \
1838 } \
bec2e359 1839 else if (RTX_OK_FOR_BASE_P (op0)) \
1bb87f28 1840 { \
bec2e359
JW
1841 if (RTX_OK_FOR_INDEX_P (op1) \
1842 || RTX_OK_FOR_OFFSET_P (op1)) \
1bb87f28
JW
1843 goto ADDR; \
1844 } \
bec2e359 1845 else if (RTX_OK_FOR_BASE_P (op1)) \
1bb87f28 1846 { \
bec2e359
JW
1847 if (RTX_OK_FOR_INDEX_P (op0) \
1848 || RTX_OK_FOR_OFFSET_P (op0)) \
1bb87f28
JW
1849 goto ADDR; \
1850 } \
1851 } \
bec2e359
JW
1852 else if (GET_CODE (X) == LO_SUM) \
1853 { \
1854 register rtx op0 = XEXP (X, 0); \
1855 register rtx op1 = XEXP (X, 1); \
1856 if (RTX_OK_FOR_BASE_P (op0) \
1857 && CONSTANT_P (op1)) \
1858 goto ADDR; \
1859 } \
1bb87f28
JW
1860 else if (GET_CODE (X) == CONST_INT && SMALL_INT (X)) \
1861 goto ADDR; \
1862}
1863\f
1864/* Try machine-dependent ways of modifying an illegitimate address
1865 to be legitimate. If we find one, return the new, valid address.
1866 This macro is used in only one place: `memory_address' in explow.c.
1867
1868 OLDX is the address as it was before break_out_memory_refs was called.
1869 In some cases it is useful to look at this to decide what needs to be done.
1870
1871 MODE and WIN are passed so that this macro can use
1872 GO_IF_LEGITIMATE_ADDRESS.
1873
1874 It is always safe for this macro to do nothing. It exists to recognize
1875 opportunities to optimize the output. */
1876
1877/* On SPARC, change REG+N into REG+REG, and REG+(X*Y) into REG+REG. */
1878extern struct rtx_def *legitimize_pic_address ();
1879#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
1880{ rtx sparc_x = (X); \
1881 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == MULT) \
1882 (X) = gen_rtx (PLUS, Pmode, XEXP (X, 1), \
a015279e 1883 force_operand (XEXP (X, 0), NULL_RTX)); \
1bb87f28
JW
1884 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == MULT) \
1885 (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0), \
a015279e 1886 force_operand (XEXP (X, 1), NULL_RTX)); \
1bb87f28 1887 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == PLUS) \
a015279e 1888 (X) = gen_rtx (PLUS, Pmode, force_operand (XEXP (X, 0), NULL_RTX),\
1bb87f28
JW
1889 XEXP (X, 1)); \
1890 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == PLUS) \
1891 (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0), \
a015279e 1892 force_operand (XEXP (X, 1), NULL_RTX)); \
1bb87f28
JW
1893 if (sparc_x != (X) && memory_address_p (MODE, X)) \
1894 goto WIN; \
7aca9b9c 1895 if (flag_pic) (X) = legitimize_pic_address (X, MODE, 0); \
1bb87f28
JW
1896 else if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1))) \
1897 (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0), \
1898 copy_to_mode_reg (Pmode, XEXP (X, 1))); \
1899 else if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 0))) \
1900 (X) = gen_rtx (PLUS, Pmode, XEXP (X, 1), \
1901 copy_to_mode_reg (Pmode, XEXP (X, 0))); \
1902 else if (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST \
1903 || GET_CODE (X) == LABEL_REF) \
1904 (X) = gen_rtx (LO_SUM, Pmode, \
1905 copy_to_mode_reg (Pmode, gen_rtx (HIGH, Pmode, X)), X); \
1906 if (memory_address_p (MODE, X)) \
1907 goto WIN; }
1908
1909/* Go to LABEL if ADDR (a legitimate address expression)
1910 has an effect that depends on the machine mode it is used for.
1911 On the SPARC this is never true. */
1912
1913#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
7a6cf439
DE
1914
1915/* If we are referencing a function make the SYMBOL_REF special.
1916 In the Medium/Anywhere code model, %g4 points to the data segment so we
1917 must not add it to function addresses. */
1918
1919#define ENCODE_SECTION_INFO(DECL) \
1920 do { \
1921 if (TARGET_MEDANY && TREE_CODE (DECL) == FUNCTION_DECL) \
1922 SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \
1923 } while (0)
1bb87f28
JW
1924\f
1925/* Specify the machine mode that this machine uses
1926 for the index in the tablejump instruction. */
7a6cf439 1927#define CASE_VECTOR_MODE Pmode
1bb87f28
JW
1928
1929/* Define this if the tablejump instruction expects the table
1930 to contain offsets from the address of the table.
1931 Do not define this if the table should contain absolute addresses. */
1932/* #define CASE_VECTOR_PC_RELATIVE */
1933
1934/* Specify the tree operation to be used to convert reals to integers. */
1935#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
1936
1937/* This is the kind of divide that is easiest to do in the general case. */
1938#define EASY_DIV_EXPR TRUNC_DIV_EXPR
1939
1940/* Define this as 1 if `char' should by default be signed; else as 0. */
1941#define DEFAULT_SIGNED_CHAR 1
1942
1943/* Max number of bytes we can move from memory to memory
1944 in one reasonably fast instruction. */
2eef2ef1 1945#define MOVE_MAX 8
1bb87f28 1946
0fb5a69e 1947#if 0 /* Sun 4 has matherr, so this is no good. */
24e2a2bf
RS
1948/* This is the value of the error code EDOM for this machine,
1949 used by the sqrt instruction. */
1950#define TARGET_EDOM 33
1951
1952/* This is how to refer to the variable errno. */
1953#define GEN_ERRNO_RTX \
1954 gen_rtx (MEM, SImode, gen_rtx (SYMBOL_REF, Pmode, "errno"))
0fb5a69e 1955#endif /* 0 */
24e2a2bf 1956
9a63901f
RK
1957/* Define if operations between registers always perform the operation
1958 on the full register even if a narrower mode is specified. */
1959#define WORD_REGISTER_OPERATIONS
1960
1961/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
1962 will either zero-extend or sign-extend. The value of this macro should
1963 be the code that says which one of the two operations is implicitly
1964 done, NIL if none. */
1965#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
1bb87f28
JW
1966
1967/* Nonzero if access to memory by bytes is slow and undesirable.
1968 For RISC chips, it means that access to memory by bytes is no
1969 better than access by words when possible, so grab a whole word
1970 and maybe make use of that. */
1971#define SLOW_BYTE_ACCESS 1
1972
1973/* We assume that the store-condition-codes instructions store 0 for false
1974 and some other value for true. This is the value stored for true. */
1975
1976#define STORE_FLAG_VALUE 1
1977
1978/* When a prototype says `char' or `short', really pass an `int'. */
1979#define PROMOTE_PROTOTYPES
1980
d969caf8
RK
1981/* Define this to be nonzero if shift instructions ignore all but the low-order
1982 few bits. */
1983#define SHIFT_COUNT_TRUNCATED 1
1bb87f28
JW
1984
1985/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
1986 is done just by pretending it is already truncated. */
1987#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1988
1989/* Specify the machine mode that pointers have.
1990 After generation of rtl, the compiler makes no further distinction
1991 between pointers and any other objects of this machine mode. */
7a6cf439 1992#define Pmode (TARGET_PTR64 ? DImode : SImode)
1bb87f28 1993
b4ac57ab
RS
1994/* Generate calls to memcpy, memcmp and memset. */
1995#define TARGET_MEM_FUNCTIONS
1996
1bb87f28
JW
1997/* Add any extra modes needed to represent the condition code.
1998
1999 On the Sparc, we have a "no-overflow" mode which is used when an add or
2000 subtract insn is used to set the condition code. Different branches are
2001 used in this case for some operations.
2002
4d449554
JW
2003 We also have two modes to indicate that the relevant condition code is
2004 in the floating-point condition code register. One for comparisons which
2005 will generate an exception if the result is unordered (CCFPEmode) and
2006 one for comparisons which will never trap (CCFPmode). This really should
7a6cf439
DE
2007 be a separate register, but we don't want to go to 65 registers.
2008
2009 CCXmode and CCX_NOOVmode are only used by v9. */
2010
2011#define EXTRA_CC_MODES CCXmode, CC_NOOVmode, CCX_NOOVmode, CCFPmode, CCFPEmode
1bb87f28
JW
2012
2013/* Define the names for the modes specified above. */
7a6cf439
DE
2014
2015#define EXTRA_CC_NAMES "CCX", "CC_NOOV", "CCX_NOOV", "CCFP", "CCFPE"
1bb87f28
JW
2016
2017/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
4d449554
JW
2018 return the mode to be used for the comparison. For floating-point,
2019 CCFP[E]mode is used. CC_NOOVmode should be used when the first operand is a
922bd191
JW
2020 PLUS, MINUS, NEG, or ASHIFT. CCmode should be used when no special
2021 processing is needed. */
679655e6 2022#define SELECT_CC_MODE(OP,X,Y) \
4d449554 2023 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
922bd191
JW
2024 ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \
2025 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \
2026 || GET_CODE (X) == NEG || GET_CODE (X) == ASHIFT) \
7a6cf439
DE
2027 ? (TARGET_V9 && GET_MODE (X) == DImode ? CCX_NOOVmode : CC_NOOVmode) \
2028 : (TARGET_V9 && GET_MODE (X) == DImode ? CCXmode : CCmode)))
1bb87f28 2029
b331b745
RK
2030/* Return non-zero if SELECT_CC_MODE will never return MODE for a
2031 floating point inequality comparison. */
2032
2033#define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode)
2034
1bb87f28
JW
2035/* A function address in a call instruction
2036 is a byte address (for indexing purposes)
2037 so give the MEM rtx a byte's mode. */
2038#define FUNCTION_MODE SImode
2039
2040/* Define this if addresses of constant functions
2041 shouldn't be put through pseudo regs where they can be cse'd.
2042 Desirable on machines where ordinary constants are expensive
2043 but a CALL with constant address is cheap. */
2044#define NO_FUNCTION_CSE
2045
2046/* alloca should avoid clobbering the old register save area. */
2047#define SETJMP_VIA_SAVE_AREA
2048
2049/* Define subroutines to call to handle multiply and divide.
2050 Use the subroutines that Sun's library provides.
2051 The `*' prevents an underscore from being prepended by the compiler. */
2052
2053#define DIVSI3_LIBCALL "*.div"
2054#define UDIVSI3_LIBCALL "*.udiv"
2055#define MODSI3_LIBCALL "*.rem"
2056#define UMODSI3_LIBCALL "*.urem"
2057/* .umul is a little faster than .mul. */
2058#define MULSI3_LIBCALL "*.umul"
2059
8248e2bc
JW
2060/* Define library calls for quad FP operations. These are all part of the
2061 SPARC ABI. */
b3f741ed
JW
2062#define ADDTF3_LIBCALL "_Q_add"
2063#define SUBTF3_LIBCALL "_Q_sub"
2064#define MULTF3_LIBCALL "_Q_mul"
2065#define DIVTF3_LIBCALL "_Q_div"
2066#define SQRTTF2_LIBCALL "_Q_sqrt"
2067#define FLOATSITF2_LIBCALL "_Q_itoq"
2068#define FIX_TRUNCTFSI2_LIBCALL "_Q_qtoi"
2069#define FIXUNS_TRUNCTFSI2_LIBCALL "_Q_qtou"
2070#define EXTENDSFTF2_LIBCALL "_Q_stoq"
2071#define TRUNCTFSF2_LIBCALL "_Q_qtos"
2072#define EXTENDDFTF2_LIBCALL "_Q_dtoq"
2073#define TRUNCTFDF2_LIBCALL "_Q_qtod"
2074#define EQTF2_LIBCALL "_Q_feq"
2075#define NETF2_LIBCALL "_Q_fne"
2076#define GTTF2_LIBCALL "_Q_fgt"
2077#define GETF2_LIBCALL "_Q_fge"
2078#define LTTF2_LIBCALL "_Q_flt"
2079#define LETF2_LIBCALL "_Q_fle"
8248e2bc 2080
1bb87f28
JW
2081/* Compute the cost of computing a constant rtl expression RTX
2082 whose rtx-code is CODE. The body of this macro is a portion
2083 of a switch statement. If the code is computed here,
2084 return it with a return statement. Otherwise, break from the switch. */
2085
3bb22aee 2086#define CONST_COSTS(RTX,CODE,OUTER_CODE) \
1bb87f28 2087 case CONST_INT: \
1bb87f28 2088 if (INTVAL (RTX) < 0x1000 && INTVAL (RTX) >= -0x1000) \
5b485d2c 2089 return 0; \
1bb87f28
JW
2090 case HIGH: \
2091 return 2; \
2092 case CONST: \
2093 case LABEL_REF: \
2094 case SYMBOL_REF: \
2095 return 4; \
2096 case CONST_DOUBLE: \
2097 if (GET_MODE (RTX) == DImode) \
2098 if ((XINT (RTX, 3) == 0 \
2099 && (unsigned) XINT (RTX, 2) < 0x1000) \
2100 || (XINT (RTX, 3) == -1 \
2101 && XINT (RTX, 2) < 0 \
2102 && XINT (RTX, 2) >= -0x1000)) \
5b485d2c 2103 return 0; \
1bb87f28
JW
2104 return 8;
2105
a0a74fda 2106/* Compute the cost of an address. For the sparc, all valid addresses are
7a6cf439
DE
2107 the same cost.
2108 ??? Is this true for v9? */
1bb87f28 2109
a0a74fda 2110#define ADDRESS_COST(RTX) 1
1bb87f28
JW
2111
2112/* Compute extra cost of moving data between one register class
7a6cf439
DE
2113 and another.
2114 ??? v9: We ignore FPCC_REGS on the assumption they'll never be seen. */
1bb87f28
JW
2115#define REGISTER_MOVE_COST(CLASS1, CLASS2) \
2116 (((CLASS1 == FP_REGS && CLASS2 == GENERAL_REGS) \
2117 || (CLASS1 == GENERAL_REGS && CLASS2 == FP_REGS)) ? 6 : 2)
2118
2119/* Provide the costs of a rtl expression. This is in the body of a
2120 switch on CODE. The purpose for the cost of MULT is to encourage
2121 `synth_mult' to find a synthetic multiply when reasonable.
2122
2123 If we need more than 12 insns to do a multiply, then go out-of-line,
2124 since the call overhead will be < 10% of the cost of the multiply. */
2125
3bb22aee 2126#define RTX_COSTS(X,CODE,OUTER_CODE) \
1bb87f28 2127 case MULT: \
7a6cf439 2128 return (TARGET_V8 || TARGET_V9) ? COSTS_N_INSNS (5) : COSTS_N_INSNS (25); \
1bb87f28
JW
2129 case DIV: \
2130 case UDIV: \
2131 case MOD: \
2132 case UMOD: \
5b485d2c
JW
2133 return COSTS_N_INSNS (25); \
2134 /* Make FLOAT and FIX more expensive than CONST_DOUBLE,\
1bb87f28
JW
2135 so that cse will favor the latter. */ \
2136 case FLOAT: \
5b485d2c 2137 case FIX: \
1bb87f28
JW
2138 return 19;
2139
bef8d8c7
JW
2140/* Adjust the cost of dependencies. */
2141#define ADJUST_COST(INSN,LINK,DEP,COST) \
2142 if (TARGET_SUPERSPARC) \
2143 (COST) = supersparc_adjust_cost (INSN, LINK, DEP, COST)
2144
1bb87f28
JW
2145/* Conditional branches with empty delay slots have a length of two. */
2146#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
2147 if (GET_CODE (INSN) == CALL_INSN \
2148 || (GET_CODE (INSN) == JUMP_INSN && ! simplejump_p (insn))) \
2149 LENGTH += 1;
2150\f
2151/* Control the assembler format that we output. */
2152
2153/* Output at beginning of assembler file. */
2154
2155#define ASM_FILE_START(file)
2156
2157/* Output to assembler file text saying following lines
2158 may contain character constants, extra white space, comments, etc. */
2159
2160#define ASM_APP_ON ""
2161
2162/* Output to assembler file text saying following lines
2163 no longer contain unusual constructs. */
2164
2165#define ASM_APP_OFF ""
2166
7a6cf439
DE
2167/* ??? Try to make the style consistent here (_OP?). */
2168
2169#define ASM_LONGLONG ".xword"
303d524a
JW
2170#define ASM_LONG ".word"
2171#define ASM_SHORT ".half"
2172#define ASM_BYTE_OP ".byte"
7a6cf439
DE
2173#define ASM_FLOAT ".single"
2174#define ASM_DOUBLE ".double"
2175#define ASM_LONGDOUBLE ".xxx" /* ??? Not known (or used yet). */
303d524a 2176
1bb87f28
JW
2177/* Output before read-only data. */
2178
2179#define TEXT_SECTION_ASM_OP ".text"
2180
2181/* Output before writable data. */
2182
2183#define DATA_SECTION_ASM_OP ".data"
2184
2185/* How to refer to registers in assembler output.
2186 This sequence is indexed by compiler's hard-register-number (see above). */
2187
7a6cf439
DE
2188#ifdef SPARCV9
2189#define REGISTER_NAMES \
2190{"%g0", "%g1", "%g2", "%g3", "%g4", "%g5", "%g6", "%g7", \
2191 "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%sp", "%o7", \
2192 "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7", \
2193 "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%fp", "%i7", \
2194 "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7", \
2195 "%f8", "%f9", "%f10", "%f11", "%f12", "%f13", "%f14", "%f15", \
2196 "%f16", "%f17", "%f18", "%f19", "%f20", "%f21", "%f22", "%f23", \
2197 "%f24", "%f25", "%f26", "%f27", "%f28", "%f29", "%f30", "%f31", \
2198 "%f32", "%f33", "%f34", "%f35", "%f36", "%f37", "%f38", "%f39", \
2199 "%f40", "%f41", "%f42", "%f43", "%f44", "%f45", "%f46", "%f47", \
2200 "%f48", "%f49", "%f50", "%f51", "%f52", "%f53", "%f54", "%f55", \
2201 "%f56", "%f57", "%f58", "%f59", "%f60", "%f61", "%f62", "%f63", \
2202 "%fcc0", "%fcc1", "%fcc2", "%fcc3"}
2203#else
1bb87f28
JW
2204#define REGISTER_NAMES \
2205{"%g0", "%g1", "%g2", "%g3", "%g4", "%g5", "%g6", "%g7", \
2206 "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%sp", "%o7", \
2207 "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7", \
2208 "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%fp", "%i7", \
2209 "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7", \
2210 "%f8", "%f9", "%f10", "%f11", "%f12", "%f13", "%f14", "%f15", \
2211 "%f16", "%f17", "%f18", "%f19", "%f20", "%f21", "%f22", "%f23", \
2212 "%f24", "%f25", "%f26", "%f27", "%f28", "%f29", "%f30", "%f31"}
7a6cf439 2213#endif
1bb87f28 2214
ea3fa5f7
JW
2215/* Define additional names for use in asm clobbers and asm declarations.
2216
2217 We define the fake Condition Code register as an alias for reg 0 (which
2218 is our `condition code' register), so that condition codes can easily
2219 be clobbered by an asm. No such register actually exists. Condition
2220 codes are partly stored in the PSR and partly in the FSR. */
2221
0eb9f40e 2222#define ADDITIONAL_REGISTER_NAMES {"ccr", 0, "cc", 0}
ea3fa5f7 2223
1bb87f28
JW
2224/* How to renumber registers for dbx and gdb. */
2225
2226#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
2227
2228/* On Sun 4, this limit is 2048. We use 1500 to be safe,
2229 since the length can run past this up to a continuation point. */
2230#define DBX_CONTIN_LENGTH 1500
2231
2232/* This is how to output a note to DBX telling it the line number
2233 to which the following sequence of instructions corresponds.
2234
2235 This is needed for SunOS 4.0, and should not hurt for 3.2
2236 versions either. */
2237#define ASM_OUTPUT_SOURCE_LINE(file, line) \
2238 { static int sym_lineno = 1; \
2239 fprintf (file, ".stabn 68,0,%d,LM%d\nLM%d:\n", \
2240 line, sym_lineno, sym_lineno); \
2241 sym_lineno += 1; }
2242
2243/* This is how to output the definition of a user-level label named NAME,
2244 such as the label on a static function or variable NAME. */
2245
2246#define ASM_OUTPUT_LABEL(FILE,NAME) \
2247 do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
2248
2249/* This is how to output a command to make the user-level label named NAME
2250 defined for reference from other files. */
2251
2252#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
2253 do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
2254
2255/* This is how to output a reference to a user-level label named NAME.
2256 `assemble_name' uses this. */
2257
2258#define ASM_OUTPUT_LABELREF(FILE,NAME) \
2259 fprintf (FILE, "_%s", NAME)
2260
d2a8e680 2261/* This is how to output a definition of an internal numbered label where
1bb87f28
JW
2262 PREFIX is the class of label and NUM is the number within the class. */
2263
2264#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
2265 fprintf (FILE, "%s%d:\n", PREFIX, NUM)
2266
d2a8e680
RS
2267/* This is how to output a reference to an internal numbered label where
2268 PREFIX is the class of label and NUM is the number within the class. */
2269/* FIXME: This should be used throughout gcc, and documented in the texinfo
2270 files. There is no reason you should have to allocate a buffer and
2271 `sprintf' to reference an internal label (as opposed to defining it). */
2272
2273#define ASM_OUTPUT_INTERNAL_LABELREF(FILE,PREFIX,NUM) \
2274 fprintf (FILE, "%s%d", PREFIX, NUM)
2275
1bb87f28
JW
2276/* This is how to store into the string LABEL
2277 the symbol_ref name of an internal numbered label where
2278 PREFIX is the class of label and NUM is the number within the class.
2279 This is suitable for output with `assemble_name'. */
2280
2281#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
2282 sprintf (LABEL, "*%s%d", PREFIX, NUM)
2283
2284/* This is how to output an assembler line defining a `double' constant. */
2285
2286#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
2287 { \
2e7ac77c
JW
2288 long t[2]; \
2289 REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
2290 fprintf (FILE, "\t%s\t0x%lx\n\t%s\t0x%lx\n", \
2291 ASM_LONG, t[0], ASM_LONG, t[1]); \
1bb87f28
JW
2292 }
2293
2294/* This is how to output an assembler line defining a `float' constant. */
2295
2296#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
2297 { \
2e7ac77c
JW
2298 long t; \
2299 REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
2300 fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t); \
2301 } \
1bb87f28 2302
0cd02cbb
DE
2303/* This is how to output an assembler line defining a `long double'
2304 constant. */
2305
2306#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
2307 { \
2308 long t[4]; \
2309 REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t); \
2310 fprintf (FILE, "\t%s\t0x%lx\n\t%s\t0x%lx\n\t%s\t0x%lx\n\t%s\t0x%lx\n", \
2311 ASM_LONG, t[0], ASM_LONG, t[1], ASM_LONG, t[2], ASM_LONG, t[3]); \
2312 }
2313
1bb87f28
JW
2314/* This is how to output an assembler line defining an `int' constant. */
2315
2316#define ASM_OUTPUT_INT(FILE,VALUE) \
303d524a 2317( fprintf (FILE, "\t%s\t", ASM_LONG), \
1bb87f28
JW
2318 output_addr_const (FILE, (VALUE)), \
2319 fprintf (FILE, "\n"))
2320
2321/* This is how to output an assembler line defining a DImode constant. */
2322#define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \
2323 output_double_int (FILE, VALUE)
2324
2325/* Likewise for `char' and `short' constants. */
2326
2327#define ASM_OUTPUT_SHORT(FILE,VALUE) \
303d524a 2328( fprintf (FILE, "\t%s\t", ASM_SHORT), \
1bb87f28
JW
2329 output_addr_const (FILE, (VALUE)), \
2330 fprintf (FILE, "\n"))
2331
2332#define ASM_OUTPUT_CHAR(FILE,VALUE) \
303d524a 2333( fprintf (FILE, "\t%s\t", ASM_BYTE_OP), \
1bb87f28
JW
2334 output_addr_const (FILE, (VALUE)), \
2335 fprintf (FILE, "\n"))
2336
2337/* This is how to output an assembler line for a numeric constant byte. */
2338
2339#define ASM_OUTPUT_BYTE(FILE,VALUE) \
303d524a 2340 fprintf (FILE, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE))
1bb87f28
JW
2341
2342/* This is how to output an element of a case-vector that is absolute. */
2343
2344#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
4b69d2a3
RS
2345do { \
2346 char label[30]; \
2347 ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
7a6cf439
DE
2348 if (Pmode == SImode) \
2349 fprintf (FILE, "\t.word\t"); \
2350 else if (TARGET_ENV32) \
2351 fprintf (FILE, "\t.word\t0\n\t.word\t"); \
2352 else \
2353 fprintf (FILE, "\t.xword\t"); \
4b69d2a3
RS
2354 assemble_name (FILE, label); \
2355 fprintf (FILE, "\n"); \
2356} while (0)
1bb87f28
JW
2357
2358/* This is how to output an element of a case-vector that is relative.
2359 (SPARC uses such vectors only when generating PIC.) */
2360
4b69d2a3
RS
2361#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
2362do { \
2363 char label[30]; \
2364 ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
7a6cf439
DE
2365 if (Pmode == SImode) \
2366 fprintf (FILE, "\t.word\t"); \
2367 else if (TARGET_ENV32) \
2368 fprintf (FILE, "\t.word\t0\n\t.word\t"); \
2369 else \
2370 fprintf (FILE, "\t.xword\t"); \
4b69d2a3
RS
2371 assemble_name (FILE, label); \
2372 fprintf (FILE, "-1b\n"); \
2373} while (0)
1bb87f28
JW
2374
2375/* This is how to output an assembler line
2376 that says to advance the location counter
2377 to a multiple of 2**LOG bytes. */
2378
2379#define ASM_OUTPUT_ALIGN(FILE,LOG) \
2380 if ((LOG) != 0) \
2381 fprintf (FILE, "\t.align %d\n", (1<<(LOG)))
2382
2383#define ASM_OUTPUT_SKIP(FILE,SIZE) \
2384 fprintf (FILE, "\t.skip %u\n", (SIZE))
2385
2386/* This says how to output an assembler line
2387 to define a global common symbol. */
2388
2389#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
b277ceaf 2390( fputs ("\t.common ", (FILE)), \
1bb87f28 2391 assemble_name ((FILE), (NAME)), \
b277ceaf 2392 fprintf ((FILE), ",%u,\"bss\"\n", (SIZE)))
1bb87f28 2393
b277ceaf
JW
2394/* This says how to output an assembler line to define a local common
2395 symbol. */
1bb87f28 2396
b277ceaf
JW
2397#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGNED) \
2398( fputs ("\t.reserve ", (FILE)), \
2399 assemble_name ((FILE), (NAME)), \
2400 fprintf ((FILE), ",%u,\"bss\",%u\n", \
2401 (SIZE), ((ALIGNED) / BITS_PER_UNIT)))
1bb87f28
JW
2402
2403/* Store in OUTPUT a string (made with alloca) containing
2404 an assembler-name for a local static variable named NAME.
2405 LABELNO is an integer which is different for each call. */
2406
2407#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
2408( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
2409 sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
2410
c14f2655
RS
2411#define IDENT_ASM_OP ".ident"
2412
2413/* Output #ident as a .ident. */
2414
2415#define ASM_OUTPUT_IDENT(FILE, NAME) \
2416 fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
2417
1bb87f28
JW
2418/* Define the parentheses used to group arithmetic operations
2419 in assembler code. */
2420
2421#define ASM_OPEN_PAREN "("
2422#define ASM_CLOSE_PAREN ")"
2423
2424/* Define results of standard character escape sequences. */
2425#define TARGET_BELL 007
2426#define TARGET_BS 010
2427#define TARGET_TAB 011
2428#define TARGET_NEWLINE 012
2429#define TARGET_VT 013
2430#define TARGET_FF 014
2431#define TARGET_CR 015
2432
2433#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
2ccdef65 2434 ((CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^' || (CHAR) == '(')
1bb87f28
JW
2435
2436/* Print operand X (an rtx) in assembler syntax to file FILE.
2437 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
2438 For `%' followed by punctuation, CODE is the punctuation and X is null. */
2439
2440#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
2441
2442/* Print a memory address as an operand to reference that memory location. */
2443
2444#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
2445{ register rtx base, index = 0; \
2446 int offset = 0; \
2447 register rtx addr = ADDR; \
2448 if (GET_CODE (addr) == REG) \
2449 fputs (reg_names[REGNO (addr)], FILE); \
2450 else if (GET_CODE (addr) == PLUS) \
2451 { \
2452 if (GET_CODE (XEXP (addr, 0)) == CONST_INT) \
2453 offset = INTVAL (XEXP (addr, 0)), base = XEXP (addr, 1);\
2454 else if (GET_CODE (XEXP (addr, 1)) == CONST_INT) \
2455 offset = INTVAL (XEXP (addr, 1)), base = XEXP (addr, 0);\
2456 else \
2457 base = XEXP (addr, 0), index = XEXP (addr, 1); \
2458 fputs (reg_names[REGNO (base)], FILE); \
2459 if (index == 0) \
2460 fprintf (FILE, "%+d", offset); \
2461 else if (GET_CODE (index) == REG) \
2462 fprintf (FILE, "+%s", reg_names[REGNO (index)]); \
2463 else if (GET_CODE (index) == SYMBOL_REF) \
2464 fputc ('+', FILE), output_addr_const (FILE, index); \
2465 else abort (); \
2466 } \
2467 else if (GET_CODE (addr) == MINUS \
2468 && GET_CODE (XEXP (addr, 1)) == LABEL_REF) \
2469 { \
2470 output_addr_const (FILE, XEXP (addr, 0)); \
2471 fputs ("-(", FILE); \
2472 output_addr_const (FILE, XEXP (addr, 1)); \
2473 fputs ("-.)", FILE); \
2474 } \
2475 else if (GET_CODE (addr) == LO_SUM) \
2476 { \
2477 output_operand (XEXP (addr, 0), 0); \
2478 fputs ("+%lo(", FILE); \
2479 output_address (XEXP (addr, 1)); \
2480 fputc (')', FILE); \
2481 } \
2482 else if (flag_pic && GET_CODE (addr) == CONST \
2483 && GET_CODE (XEXP (addr, 0)) == MINUS \
2484 && GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST \
2485 && GET_CODE (XEXP (XEXP (XEXP (addr, 0), 1), 0)) == MINUS \
2486 && XEXP (XEXP (XEXP (XEXP (addr, 0), 1), 0), 1) == pc_rtx) \
2487 { \
2488 addr = XEXP (addr, 0); \
2489 output_addr_const (FILE, XEXP (addr, 0)); \
2490 /* Group the args of the second CONST in parenthesis. */ \
2491 fputs ("-(", FILE); \
2492 /* Skip past the second CONST--it does nothing for us. */\
2493 output_addr_const (FILE, XEXP (XEXP (addr, 1), 0)); \
2494 /* Close the parenthesis. */ \
2495 fputc (')', FILE); \
2496 } \
2497 else \
2498 { \
2499 output_addr_const (FILE, addr); \
2500 } \
2501}
2502
2503/* Declare functions defined in sparc.c and used in templates. */
2504
2505extern char *singlemove_string ();
2506extern char *output_move_double ();
795068a4 2507extern char *output_move_quad ();
1bb87f28 2508extern char *output_fp_move_double ();
795068a4 2509extern char *output_fp_move_quad ();
1bb87f28
JW
2510extern char *output_block_move ();
2511extern char *output_scc_insn ();
2512extern char *output_cbranch ();
7a6cf439 2513extern char *output_v9branch ();
1bb87f28 2514extern char *output_return ();
1bb87f28
JW
2515
2516/* Defined in flags.h, but insn-emit.c does not include flags.h. */
2517
2518extern int flag_pic;
This page took 0.445757 seconds and 5 git commands to generate.