]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/sparc/sparc.h
builtins.def: New file.
[thirdparty/gcc.git] / gcc / config / sparc / sparc.h
CommitLineData
1bb87f28 1/* Definitions of target machine for GNU compiler, for Sun SPARC.
4592bdcb
JL
2 Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997, 1998, 1999
3 Free Software Foundation, Inc.
1bb87f28 4 Contributed by Michael Tiemann (tiemann@cygnus.com).
7a6cf439
DE
5 64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans,
6 at Cygnus Support.
1bb87f28
JW
7
8This file is part of GNU CC.
9
10GNU CC is free software; you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation; either version 2, or (at your option)
13any later version.
14
15GNU CC is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with GNU CC; see the file COPYING. If not, write to
c15c9075
RK
22the Free Software Foundation, 59 Temple Place - Suite 330,
23Boston, MA 02111-1307, USA. */
1bb87f28
JW
24
25/* Note that some other tm.h files include this one and then override
a0a301fc
DE
26 whatever definitions are necessary. */
27
28/* Specify this in a cover file to provide bi-architecture (32/64) support. */
29/* #define SPARC_BI_ARCH */
30
31/* Macro used later in this file to determine default architecture. */
32#define DEFAULT_ARCH32_P ((TARGET_DEFAULT & MASK_64BIT) == 0)
7a6cf439 33
a0a301fc
DE
34/* TARGET_ARCH{32,64} are the main macros to decide which of the two
35 architectures to compile for. We allow targets to choose compile time or
36 runtime selection. */
959eb758 37#ifdef IN_LIBGCC2
afdac905 38#if defined(__sparcv9) || defined(__arch64__)
959eb758
DM
39#define TARGET_ARCH32 0
40#else
41#define TARGET_ARCH32 1
afdac905 42#endif /* sparc64 */
959eb758 43#else
53f4a9f6 44#ifdef SPARC_BI_ARCH
a0a301fc
DE
45#define TARGET_ARCH32 (! TARGET_64BIT)
46#else
47#define TARGET_ARCH32 (DEFAULT_ARCH32_P)
959eb758 48#endif /* SPARC_BI_ARCH */
53f4a9f6 49#endif /* IN_LIBGCC2 */
a0a301fc
DE
50#define TARGET_ARCH64 (! TARGET_ARCH32)
51
52/* Code model selection.
53 -mcmodel is used to select the v9 code model.
5cb01b65 54 Different code models aren't supported for v7/8 code.
a0a301fc
DE
55
56 TARGET_CM_32: 32 bit address space, top 32 bits = 0,
57 pointers are 32 bits. Note that this isn't intended
5cb01b65 58 to imply a v7/8 abi.
a0a301fc
DE
59
60 TARGET_CM_MEDLOW: 32 bit address space, top 32 bits = 0,
61 avoid generating %uhi and %ulo terms,
62 pointers are 64 bits.
63
64 TARGET_CM_MEDMID: 64 bit address space.
65 The executable must be in the low 16 TB of memory.
66 This corresponds to the low 44 bits, and the %[hml]44
67cb8900
JJ
67 relocs are used. The text segment has a maximum size
68 of 31 bits.
a0a301fc
DE
69
70 TARGET_CM_MEDANY: 64 bit address space.
71 The text and data segments have a maximum size of 31
72 bits and may be located anywhere. The maximum offset
73 from any instruction to the label _GLOBAL_OFFSET_TABLE_
74 is 31 bits.
75
76 TARGET_CM_EMBMEDANY: 64 bit address space.
77 The text and data segments have a maximum size of 31 bits
78 and may be located anywhere. Register %g4 contains
79 the start address of the data segment.
80*/
81
82enum cmodel {
83 CM_32,
84 CM_MEDLOW,
85 CM_MEDMID,
86 CM_MEDANY,
87 CM_EMBMEDANY
88};
89
90/* Value of -mcmodel specified by user. */
3bb5de61 91extern const char *sparc_cmodel_string;
a0a301fc
DE
92/* One of CM_FOO. */
93extern enum cmodel sparc_cmodel;
94
95/* V9 code model selection. */
96#define TARGET_CM_MEDLOW (sparc_cmodel == CM_MEDLOW)
97#define TARGET_CM_MEDMID (sparc_cmodel == CM_MEDMID)
98#define TARGET_CM_MEDANY (sparc_cmodel == CM_MEDANY)
99#define TARGET_CM_EMBMEDANY (sparc_cmodel == CM_EMBMEDANY)
100
a330e73b 101#define SPARC_DEFAULT_CMODEL CM_32
6f64bf5f 102
a0a301fc
DE
103/* This is call-clobbered in the normal ABI, but is reserved in the
104 home grown (aka upward compatible) embedded ABI. */
105#define EMBMEDANY_BASE_REG "%g4"
106\f
107/* Values of TARGET_CPU_DEFAULT, set via -D in the Makefile,
108 and specified by the user via --with-cpu=foo.
109 This specifies the cpu implementation, not the architecture size. */
8947065c
RH
110/* Note that TARGET_CPU_v9 is assumed to start the list of 64-bit
111 capable cpu's. */
2163f11b
RK
112#define TARGET_CPU_sparc 0
113#define TARGET_CPU_v7 0 /* alias for previous */
114#define TARGET_CPU_sparclet 1
115#define TARGET_CPU_sparclite 2
a0a301fc 116#define TARGET_CPU_v8 3 /* generic v8 implementation */
2163f11b 117#define TARGET_CPU_supersparc 4
8947065c 118#define TARGET_CPU_hypersparc 5
809934df 119#define TARGET_CPU_sparc86x 6
8947065c
RH
120#define TARGET_CPU_sparclite86x 6
121#define TARGET_CPU_v9 7 /* generic v9 implementation */
122#define TARGET_CPU_sparcv9 7 /* alias */
123#define TARGET_CPU_sparc64 7 /* alias */
124#define TARGET_CPU_ultrasparc 8
bafb031b 125
8947065c
RH
126#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
127 || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
345a6161
DM
128
129#define CPP_CPU32_DEFAULT_SPEC ""
130#define ASM_CPU32_DEFAULT_SPEC ""
131
a0a301fc 132#if TARGET_CPU_DEFAULT == TARGET_CPU_v9
bafb031b 133/* ??? What does Sun's CC pass? */
345a6161 134#define CPP_CPU64_DEFAULT_SPEC "-D__sparc_v9__"
bafb031b
DE
135/* ??? It's not clear how other assemblers will handle this, so by default
136 use GAS. Sun's Solaris assembler recognizes -xarch=v8plus, but this case
137 is handled in sol2.h. */
345a6161 138#define ASM_CPU64_DEFAULT_SPEC "-Av9"
bafb031b 139#endif
a0a301fc 140#if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
345a6161
DM
141#define CPP_CPU64_DEFAULT_SPEC "-D__sparc_v9__"
142#define ASM_CPU64_DEFAULT_SPEC "-Av9a"
143#endif
144
145#else
146
147#define CPP_CPU64_DEFAULT_SPEC ""
148#define ASM_CPU64_DEFAULT_SPEC ""
149
8947065c
RH
150#if TARGET_CPU_DEFAULT == TARGET_CPU_sparc \
151 || TARGET_CPU_DEFAULT == TARGET_CPU_v8
345a6161
DM
152#define CPP_CPU32_DEFAULT_SPEC ""
153#define ASM_CPU32_DEFAULT_SPEC ""
154#endif
8947065c 155
345a6161
DM
156#if TARGET_CPU_DEFAULT == TARGET_CPU_sparclet
157#define CPP_CPU32_DEFAULT_SPEC "-D__sparclet__"
158#define ASM_CPU32_DEFAULT_SPEC "-Asparclet"
bafb031b 159#endif
8947065c 160
345a6161
DM
161#if TARGET_CPU_DEFAULT == TARGET_CPU_sparclite
162#define CPP_CPU32_DEFAULT_SPEC "-D__sparclite__"
163#define ASM_CPU32_DEFAULT_SPEC "-Asparclite"
164#endif
165
8947065c
RH
166#if TARGET_CPU_DEFAULT == TARGET_CPU_supersparc
167#define CPP_CPU32_DEFAULT_SPEC "-D__supersparc__ -D__sparc_v8__"
168#define ASM_CPU32_DEFAULT_SPEC ""
169#endif
170
171#if TARGET_CPU_DEFAULT == TARGET_CPU_hypersparc
172#define CPP_CPU32_DEFAULT_SPEC "-D__hypersparc__ -D__sparc_v8__"
173#define ASM_CPU32_DEFAULT_SPEC ""
174#endif
175
176#if TARGET_CPU_DEFAULT == TARGET_CPU_sparclite86x
8d72ec32
VM
177#define CPP_CPU32_DEFAULT_SPEC "-D__sparclite86x__"
178#define ASM_CPU32_DEFAULT_SPEC "-Asparclite"
8947065c
RH
179#endif
180
345a6161
DM
181#endif
182
183#if !defined(CPP_CPU32_DEFAULT_SPEC) || !defined(CPP_CPU64_DEFAULT_SPEC)
a0a301fc 184Unrecognized value in TARGET_CPU_DEFAULT.
bafb031b
DE
185#endif
186
345a6161
DM
187#ifdef SPARC_BI_ARCH
188
189#define CPP_CPU_DEFAULT_SPEC \
190(DEFAULT_ARCH32_P ? "\
191%{m64:" CPP_CPU64_DEFAULT_SPEC "} \
192%{!m64:" CPP_CPU32_DEFAULT_SPEC "} \
193" : "\
194%{m32:" CPP_CPU32_DEFAULT_SPEC "} \
195%{!m32:" CPP_CPU64_DEFAULT_SPEC "} \
196")
197#define ASM_CPU_DEFAULT_SPEC \
198(DEFAULT_ARCH32_P ? "\
199%{m64:" ASM_CPU64_DEFAULT_SPEC "} \
200%{!m64:" ASM_CPU32_DEFAULT_SPEC "} \
201" : "\
202%{m32:" ASM_CPU32_DEFAULT_SPEC "} \
203%{!m32:" ASM_CPU64_DEFAULT_SPEC "} \
204")
205
206#else /* !SPARC_BI_ARCH */
207
208#define CPP_CPU_DEFAULT_SPEC (DEFAULT_ARCH32_P ? CPP_CPU32_DEFAULT_SPEC : CPP_CPU64_DEFAULT_SPEC)
209#define ASM_CPU_DEFAULT_SPEC (DEFAULT_ARCH32_P ? ASM_CPU32_DEFAULT_SPEC : ASM_CPU64_DEFAULT_SPEC)
210
211#endif /* !SPARC_BI_ARCH */
212
a0a301fc
DE
213/* Names to predefine in the preprocessor for this target machine.
214 ??? It would be nice to not include any subtarget specific values here,
215 however there's no way to portably provide subtarget values to
216 CPP_PREFINES. Also, -D values in CPP_SUBTARGET_SPEC don't get turned into
38e01259 217 foo, __foo and __foo__. */
7a6cf439 218
a0a301fc 219#define CPP_PREDEFINES "-Dsparc -Dsun -Dunix -Asystem(unix) -Asystem(bsd)"
7a6cf439 220
885d8175 221/* Define macros to distinguish architectures. */
857458c4 222
bafb031b
DE
223/* Common CPP definitions used by CPP_SPEC amongst the various targets
224 for handling -mcpu=xxx switches. */
225#define CPP_CPU_SPEC "\
226%{mcypress:} \
7a6cf439
DE
227%{msparclite:-D__sparclite__} \
228%{mf930:-D__sparclite__} %{mf934:-D__sparclite__} \
229%{mv8:-D__sparc_v8__} \
bafb031b 230%{msupersparc:-D__supersparc__ -D__sparc_v8__} \
9b7c06d2 231%{mcpu=sparclet:-D__sparclet__} %{mcpu=tsc701:-D__sparclet__} \
bafb031b
DE
232%{mcpu=sparclite:-D__sparclite__} \
233%{mcpu=f930:-D__sparclite__} %{mcpu=f934:-D__sparclite__} \
234%{mcpu=v8:-D__sparc_v8__} \
235%{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
8947065c 236%{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
8d72ec32 237%{mcpu=sparclite86x:-D__sparclite86x__} \
bafb031b
DE
238%{mcpu=v9:-D__sparc_v9__} \
239%{mcpu=ultrasparc:-D__sparc_v9__} \
a0a301fc 240%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
7a6cf439 241"
885d8175 242
a0a301fc
DE
243/* ??? The GCC_NEW_VARARGS macro is now obsolete, because gcc always uses
244 the right varags.h file when bootstrapping. */
245/* ??? It's not clear what value we want to use for -Acpu/machine for
246 sparc64 in 32 bit environments, so for now we only use `sparc64' in
247 64 bit environments. */
248
345a6161
DM
249#ifdef SPARC_BI_ARCH
250
251#define CPP_ARCH32_SPEC "-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int \
252-D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc)"
253#define CPP_ARCH64_SPEC "-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int \
254-D__arch64__ -Acpu(sparc64) -Amachine(sparc64)"
255
256#else
257
a0a301fc
DE
258#define CPP_ARCH32_SPEC "-D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc)"
259#define CPP_ARCH64_SPEC "-D__arch64__ -Acpu(sparc64) -Amachine(sparc64)"
345a6161
DM
260
261#endif
262
a0a301fc
DE
263#define CPP_ARCH_DEFAULT_SPEC \
264(DEFAULT_ARCH32_P ? CPP_ARCH32_SPEC : CPP_ARCH64_SPEC)
265
266#define CPP_ARCH_SPEC "\
267%{m32:%(cpp_arch32)} \
268%{m64:%(cpp_arch64)} \
269%{!m32:%{!m64:%(cpp_arch_default)}} \
270"
271
272/* Macros to distinguish endianness. */
8947065c
RH
273#define CPP_ENDIAN_SPEC "\
274%{mlittle-endian:-D__LITTLE_ENDIAN__} \
275%{mlittle-endian-data:-D__LITTLE_ENDIAN_DATA__}"
a0a301fc
DE
276
277/* Macros to distinguish the particular subtarget. */
278#define CPP_SUBTARGET_SPEC ""
279
280#define CPP_SPEC "%(cpp_cpu) %(cpp_arch) %(cpp_endian) %(cpp_subtarget)"
281
b1fc14e5
RS
282/* Prevent error on `-sun4' and `-target sun4' options. */
283/* This used to translate -dalign to -malign, but that is no good
284 because it can't turn off the usual meaning of making debugging dumps. */
bafb031b 285/* Translate old style -m<cpu> into new style -mcpu=<cpu>.
1cdbf242 286 ??? Delete support for -m<cpu> for 2.9. */
bafb031b
DE
287
288#define CC1_SPEC "\
289%{sun4:} %{target:} \
290%{mcypress:-mcpu=cypress} \
291%{msparclite:-mcpu=sparclite} %{mf930:-mcpu=f930} %{mf934:-mcpu=f934} \
292%{mv8:-mcpu=v8} %{msupersparc:-mcpu=supersparc} \
293"
294
bafb031b
DE
295/* Override in target specific files. */
296#define ASM_CPU_SPEC "\
9b7c06d2 297%{mcpu=sparclet:-Asparclet} %{mcpu=tsc701:-Asparclet} \
bafb031b
DE
298%{msparclite:-Asparclite} \
299%{mf930:-Asparclite} %{mf934:-Asparclite} \
300%{mcpu=sparclite:-Asparclite} \
8d72ec32 301%{mcpu=sparclite86x:-Asparclite} \
bafb031b 302%{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
284d86e9 303%{mv8plus:-Av8plus} \
bafb031b 304%{mcpu=v9:-Av9} \
284d86e9 305%{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
a0a301fc 306%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(asm_cpu_default)}}}}}}} \
bafb031b
DE
307"
308
e632a26c
DE
309/* Word size selection, among other things.
310 This is what GAS uses. Add %(asm_arch) to ASM_SPEC to enable. */
311
a0a301fc 312#define ASM_ARCH32_SPEC "-32"
6149cebb
JJ
313#ifdef HAVE_AS_REGISTER_PSEUDO_OP
314#define ASM_ARCH64_SPEC "-64 -no-undeclared-regs"
315#else
a0a301fc 316#define ASM_ARCH64_SPEC "-64"
6149cebb 317#endif
a0a301fc 318#define ASM_ARCH_DEFAULT_SPEC \
e632a26c 319(DEFAULT_ARCH32_P ? ASM_ARCH32_SPEC : ASM_ARCH64_SPEC)
a0a301fc
DE
320
321#define ASM_ARCH_SPEC "\
322%{m32:%(asm_arch32)} \
323%{m64:%(asm_arch64)} \
324%{!m32:%{!m64:%(asm_arch_default)}} \
325"
326
327/* Special flags to the Sun-4 assembler when using pipe for input. */
328
329#define ASM_SPEC "\
330%| %{R} %{!pg:%{!p:%{fpic:-k} %{fPIC:-k}}} %{keep-local-as-symbols:-L} \
e632a26c 331%(asm_cpu) \
a0a301fc
DE
332"
333
334#define LIB_SPEC "%{!shared:%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} %{g:-lg}}"
335
336/* Provide required defaults for linker -e and -d switches. */
337
338#define LINK_SPEC \
339 "%{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp} %{static:-Bstatic} \
340 %{assert*} %{shared:%{!mimpure-text:-assert pure-text}}"
341
bafb031b
DE
342/* This macro defines names of additional specifications to put in the specs
343 that can be used in various specifications like CC1_SPEC. Its definition
344 is an initializer with a subgrouping for each command option.
345
346 Each subgrouping contains a string constant, that defines the
347 specification name, and a string constant that used by the GNU CC driver
348 program.
349
350 Do not define this macro if it does not need to do anything. */
1bb87f28 351
a0a301fc 352#define EXTRA_SPECS \
829245be
KG
353 { "cpp_cpu", CPP_CPU_SPEC }, \
354 { "cpp_cpu_default", CPP_CPU_DEFAULT_SPEC }, \
355 { "cpp_arch32", CPP_ARCH32_SPEC }, \
356 { "cpp_arch64", CPP_ARCH64_SPEC }, \
357 { "cpp_arch_default", CPP_ARCH_DEFAULT_SPEC },\
358 { "cpp_arch", CPP_ARCH_SPEC }, \
359 { "cpp_endian", CPP_ENDIAN_SPEC }, \
360 { "cpp_subtarget", CPP_SUBTARGET_SPEC }, \
361 { "asm_cpu", ASM_CPU_SPEC }, \
362 { "asm_cpu_default", ASM_CPU_DEFAULT_SPEC }, \
363 { "asm_arch32", ASM_ARCH32_SPEC }, \
364 { "asm_arch64", ASM_ARCH64_SPEC }, \
365 { "asm_arch_default", ASM_ARCH_DEFAULT_SPEC },\
366 { "asm_arch", ASM_ARCH_SPEC }, \
bafb031b 367 SUBTARGET_EXTRA_SPECS
1bb87f28 368
bafb031b
DE
369#define SUBTARGET_EXTRA_SPECS
370\f
a0a301fc
DE
371#ifdef SPARC_BI_ARCH
372#define NO_BUILTIN_PTRDIFF_TYPE
373#define NO_BUILTIN_SIZE_TYPE
857458c4 374#endif
82d6b402
RH
375#define PTRDIFF_TYPE (TARGET_ARCH64 ? "long int" : "int")
376#define SIZE_TYPE (TARGET_ARCH64 ? "long unsigned int" : "unsigned int")
7a6cf439
DE
377
378/* ??? This should be 32 bits for v9 but what can we do? */
1bb87f28
JW
379#define WCHAR_TYPE "short unsigned int"
380#define WCHAR_TYPE_SIZE 16
7a6cf439 381#define MAX_WCHAR_TYPE_SIZE 16
1bb87f28 382
4f074454
RK
383/* Show we can debug even without a frame pointer. */
384#define CAN_DEBUG_WITHOUT_FP
1bb87f28 385
5b485d2c
JW
386/* To make profiling work with -f{pic,PIC}, we need to emit the profiling
387 code into the rtl. Also, if we are profiling, we cannot eliminate
388 the frame pointer (because the return address will get smashed). */
389
390#define OVERRIDE_OPTIONS \
7a6cf439 391 do { \
3a95cde8 392 if (profile_flag || profile_block_flag || profile_arc_flag) \
7a6cf439
DE
393 { \
394 if (flag_pic) \
395 { \
3bb5de61 396 const char *pic_string = (flag_pic == 1) ? "-fpic" : "-fPIC";\
7a6cf439
DE
397 warning ("%s and profiling conflict: disabling %s", \
398 pic_string, pic_string); \
399 flag_pic = 0; \
400 } \
401 flag_omit_frame_pointer = 0; \
402 } \
7a6cf439 403 sparc_override_options (); \
bafb031b 404 SUBTARGET_OVERRIDE_OPTIONS; \
7a6cf439 405 } while (0)
84ab3bfb 406
cf9be6f0 407/* This is meant to be redefined in the host dependent files. */
84ab3bfb 408#define SUBTARGET_OVERRIDE_OPTIONS
5b485d2c 409
1bb87f28
JW
410/* These compiler options take an argument. We ignore -target for now. */
411
412#define WORD_SWITCH_TAKES_ARG(STR) \
3b39b94f
ILT
413 (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \
414 || !strcmp (STR, "target") || !strcmp (STR, "assert"))
1bb87f28 415
1bb87f28
JW
416/* Print subsidiary information on the compiler version in use. */
417
418#define TARGET_VERSION fprintf (stderr, " (sparc)");
419
420/* Generate DBX debugging information. */
421
422#define DBX_DEBUGGING_INFO
7a6cf439 423\f
1bb87f28
JW
424/* Run-time compilation parameters selecting different hardware subsets. */
425
426extern int target_flags;
427
428/* Nonzero if we should generate code to use the fpu. */
7a6cf439
DE
429#define MASK_FPU 1
430#define TARGET_FPU (target_flags & MASK_FPU)
1bb87f28
JW
431
432/* Nonzero if we should use FUNCTION_EPILOGUE. Otherwise, we
433 use fast return insns, but lose some generality. */
7a6cf439
DE
434#define MASK_EPILOGUE 2
435#define TARGET_EPILOGUE (target_flags & MASK_EPILOGUE)
1bb87f28 436
95dea81f
JW
437/* Nonzero if we should assume that double pointers might be unaligned.
438 This can happen when linking gcc compiled code with other compilers,
439 because the ABI only guarantees 4 byte alignment. */
7a6cf439
DE
440#define MASK_UNALIGNED_DOUBLES 4
441#define TARGET_UNALIGNED_DOUBLES (target_flags & MASK_UNALIGNED_DOUBLES)
442
885d8175 443/* Nonzero means that we should generate code for a v8 sparc. */
6f64bf5f 444#define MASK_V8 0x8
7a6cf439 445#define TARGET_V8 (target_flags & MASK_V8)
885d8175 446
bc9e02ae
JW
447/* Nonzero means that we should generate code for a sparclite.
448 This enables the sparclite specific instructions, but does not affect
449 whether FPU instructions are emitted. */
6f64bf5f 450#define MASK_SPARCLITE 0x10
7a6cf439 451#define TARGET_SPARCLITE (target_flags & MASK_SPARCLITE)
885d8175 452
bafb031b
DE
453/* Nonzero if we're compiling for the sparclet. */
454#define MASK_SPARCLET 0x20
455#define TARGET_SPARCLET (target_flags & MASK_SPARCLET)
6f64bf5f
DE
456
457/* Nonzero if we're compiling for v9 sparc.
458 Note that v9's can run in 32 bit mode so this doesn't necessarily mean
bafb031b 459 the word size is 64. */
6f64bf5f
DE
460#define MASK_V9 0x40
461#define TARGET_V9 (target_flags & MASK_V9)
462
bafb031b
DE
463/* Non-zero to generate code that uses the instructions deprecated in
464 the v9 architecture. This option only applies to v9 systems. */
465/* ??? This isn't user selectable yet. It's used to enable such insns
466 on 32 bit v9 systems and for the moment they're permanently disabled
467 on 64 bit v9 systems. */
468#define MASK_DEPRECATED_V8_INSNS 0x80
469#define TARGET_DEPRECATED_V8_INSNS (target_flags & MASK_DEPRECATED_V8_INSNS)
6f64bf5f 470
bafb031b
DE
471/* Mask of all CPU selection flags. */
472#define MASK_ISA \
473(MASK_V8 + MASK_SPARCLITE + MASK_SPARCLET + MASK_V9 + MASK_DEPRECATED_V8_INSNS)
6f64bf5f 474
bafb031b
DE
475/* Non-zero means don't pass `-assert pure-text' to the linker. */
476#define MASK_IMPURE_TEXT 0x100
477#define TARGET_IMPURE_TEXT (target_flags & MASK_IMPURE_TEXT)
5b485d2c 478
9a1c7cd7 479/* Nonzero means that we should generate code using a flat register window
bafb031b
DE
480 model, i.e. no save/restore instructions are generated, which is
481 compatible with normal sparc code.
482 The frame pointer is %i7 instead of %fp. */
7a6cf439
DE
483#define MASK_FLAT 0x200
484#define TARGET_FLAT (target_flags & MASK_FLAT)
9a1c7cd7 485
34ad7aaf 486/* Nonzero means use the registers that the Sparc ABI reserves for
bafb031b
DE
487 application software. This must be the default to coincide with the
488 setting in FIXED_REGISTERS. */
7a6cf439
DE
489#define MASK_APP_REGS 0x400
490#define TARGET_APP_REGS (target_flags & MASK_APP_REGS)
34ad7aaf 491
eb582c5d
DE
492/* Option to select how quad word floating point is implemented.
493 When TARGET_HARD_QUAD is true, we use the hardware quad instructions.
494 Otherwise, we use the SPARC ABI quad library functions. */
7a6cf439
DE
495#define MASK_HARD_QUAD 0x800
496#define TARGET_HARD_QUAD (target_flags & MASK_HARD_QUAD)
497
62f1c649
DE
498/* Non-zero on little-endian machines. */
499/* ??? Little endian support currently only exists for sparclet-aout and
500 sparc64-elf configurations. May eventually want to expand the support
501 to all targets, but for now it's kept local to only those two. */
502#define MASK_LITTLE_ENDIAN 0x1000
503#define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN)
7a6cf439 504
a0a301fc 505/* 0x2000, 0x4000 are unused */
7a6cf439
DE
506
507/* Nonzero if pointers are 64 bits.
345a6161 508 At the moment it must follow architecture size flag. */
7a6cf439
DE
509#define MASK_PTR64 0x8000
510#define TARGET_PTR64 (target_flags & MASK_PTR64)
511
a0a301fc
DE
512/* Nonzero if generating code to run in a 64 bit environment.
513 This is intended to only be used by TARGET_ARCH{32,64} as they are the
514 mechanism used to control compile time or run time selection. */
515#define MASK_64BIT 0x10000
516#define TARGET_64BIT (target_flags & MASK_64BIT)
517
518/* 0x20000,0x40000 unused */
7a6cf439
DE
519
520/* Non-zero means use a stack bias of 2047. Stack offsets are obtained by
521 adding 2047 to %sp. This option is for v9 only and is the default. */
522#define MASK_STACK_BIAS 0x80000
523#define TARGET_STACK_BIAS (target_flags & MASK_STACK_BIAS)
8248e2bc 524
e6c1be7e 525/* 0x100000,0x200000 unused */
9b7c06d2 526
1f1406b4
DE
527/* Non-zero means -m{,no-}fpu was passed on the command line. */
528#define MASK_FPU_SET 0x400000
529#define TARGET_FPU_SET (target_flags & MASK_FPU_SET)
530
bfd6bc60
JC
531/* Use the UltraSPARC Visual Instruction Set extensions. */
532#define MASK_VIS 0x1000000
533#define TARGET_VIS (target_flags & MASK_VIS)
534
284d86e9 535/* Compile for Solaris V8+. 32 bit Solaris preserves the high bits of
5cb01b65
JJ
536 the current out and global registers and Linux 2.2+ as well. */
537#define MASK_V8PLUS 0x2000000
bfd6bc60
JC
538#define TARGET_V8PLUS (target_flags & MASK_V8PLUS)
539
c219ddf7
BK
540/* Force a the fastest alignment on structures to take advantage of
541 faster copies. */
542#define MASK_FASTER_STRUCTS 0x4000000
543#define TARGET_FASTER_STRUCTS (target_flags & MASK_FASTER_STRUCTS)
544
4710d3eb
JJ
545/* Use IEEE quad long double. */
546#define MASK_LONG_DOUBLE_128 0x8000000
547#define TARGET_LONG_DOUBLE_128 (target_flags & MASK_LONG_DOUBLE_128)
548
284d86e9
JC
549/* TARGET_HARD_MUL: Use hardware multiply instructions but not %y.
550 TARGET_HARD_MUL32: Use hardware multiply instructions with rd %y
551 to get high 32 bits. False in V8+ or V9 because multiply stores
552 a 64 bit result in a register. */
553
bfd6bc60
JC
554#define TARGET_HARD_MUL32 \
555 ((TARGET_V8 || TARGET_SPARCLITE \
556 || TARGET_SPARCLET || TARGET_DEPRECATED_V8_INSNS) \
5cb01b65 557 && ! TARGET_V8PLUS && TARGET_ARCH32)
bfd6bc60
JC
558
559#define TARGET_HARD_MUL \
560 (TARGET_V8 || TARGET_SPARCLITE || TARGET_SPARCLET \
561 || TARGET_DEPRECATED_V8_INSNS || TARGET_V8PLUS)
562
563
1bb87f28
JW
564/* Macro to define tables used to set the flags.
565 This is a list in braces of pairs in braces,
566 each pair being { "NAME", VALUE }
567 where VALUE is the bits to set or minus the bits to clear.
568 An empty string NAME is used to identify the default VALUE. */
569
570#define TARGET_SWITCHES \
14f45d6b
DM
571 { {"fpu", MASK_FPU | MASK_FPU_SET, "Use hardware fp" }, \
572 {"no-fpu", -MASK_FPU, "Do not use hardware fp" }, \
46cc13b3 573 {"no-fpu", MASK_FPU_SET, NULL, }, \
14f45d6b
DM
574 {"hard-float", MASK_FPU | MASK_FPU_SET, "Use hardware fp" }, \
575 {"soft-float", -MASK_FPU, "Do not use hardware fp" }, \
46cc13b3 576 {"soft-float", MASK_FPU_SET, NULL }, \
14f45d6b
DM
577 {"epilogue", MASK_EPILOGUE, "Use FUNCTION_EPILOGUE" }, \
578 {"no-epilogue", -MASK_EPILOGUE, "Do not use FUNCTION_EPILOGUE" }, \
579 {"unaligned-doubles", MASK_UNALIGNED_DOUBLES, "Assume possible double misalignment" },\
580 {"no-unaligned-doubles", -MASK_UNALIGNED_DOUBLES, "Assume all doubles are aligned" }, \
581 {"impure-text", MASK_IMPURE_TEXT, "Pass -assert pure-text to linker" }, \
582 {"no-impure-text", -MASK_IMPURE_TEXT, "Do not pass -assert pure-text to linker" }, \
583 {"flat", MASK_FLAT, "Use flat register window model" }, \
584 {"no-flat", -MASK_FLAT, "Do not use flat register window model" }, \
585 {"app-regs", MASK_APP_REGS, "Use ABI reserved registers" }, \
586 {"no-app-regs", -MASK_APP_REGS, "Do not use ABI reserved registers" }, \
587 {"hard-quad-float", MASK_HARD_QUAD, "Use hardware quad fp instructions" }, \
588 {"soft-quad-float", -MASK_HARD_QUAD, "Do not use hardware quad fp instructions" }, \
589 {"v8plus", MASK_V8PLUS, "Compile for v8plus ABI" }, \
590 {"no-v8plus", -MASK_V8PLUS, "Do not compile for v8plus ABI" }, \
591 {"vis", MASK_VIS, "Utilize Visual Instruction Set" }, \
592 {"no-vis", -MASK_VIS, "Do not utilize Visual Instruction Set" }, \
a0a301fc 593 /* ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. */ \
14f45d6b
DM
594 {"cypress", 0, "Optimize for Cypress processors" }, \
595 {"sparclite", 0, "Optimize for SparcLite processors" }, \
596 {"f930", 0, "Optimize for F930 processors" }, \
597 {"f934", 0, "Optimize for F934 processors" }, \
598 {"v8", 0, "Use V8 Sparc ISA" }, \
599 {"supersparc", 0, "Optimize for SuperSparc processors" }, \
a0a301fc 600 /* End of deprecated options. */ \
14f45d6b
DM
601 {"ptr64", MASK_PTR64, "Pointers are 64-bit" }, \
602 {"ptr32", -MASK_PTR64, "Pointers are 32-bit" }, \
603 {"32", -MASK_64BIT, "Use 32-bit ABI" }, \
604 {"64", MASK_64BIT, "Use 64-bit ABI" }, \
605 {"stack-bias", MASK_STACK_BIAS, "Use stack bias" }, \
606 {"no-stack-bias", -MASK_STACK_BIAS, "Do not use stack bias" }, \
c219ddf7
BK
607 {"faster-structs", MASK_FASTER_STRUCTS, "Use structs on stronger alignment for double-word copies" }, \
608 {"no-faster-structs", -MASK_FASTER_STRUCTS, "Do not use structs on stronger alignment for double-word copies" }, \
7a6cf439 609 SUBTARGET_SWITCHES \
ee76cf2a 610 { "", TARGET_DEFAULT, ""}}
1bb87f28 611
bafb031b
DE
612/* MASK_APP_REGS must always be the default because that's what
613 FIXED_REGISTERS is set to and -ffixed- is processed before
614 CONDITIONAL_REGISTER_USAGE is called (where we process -mno-app-regs). */
7a6cf439 615#define TARGET_DEFAULT (MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
84ab3bfb 616
bafb031b 617/* This is meant to be redefined in target specific files. */
84ab3bfb 618#define SUBTARGET_SWITCHES
1bb87f28 619
6afca97d
DE
620/* Processor type.
621 These must match the values for the cpu attribute in sparc.md. */
622enum processor_type {
623 PROCESSOR_V7,
624 PROCESSOR_CYPRESS,
625 PROCESSOR_V8,
626 PROCESSOR_SUPERSPARC,
627 PROCESSOR_SPARCLITE,
628 PROCESSOR_F930,
629 PROCESSOR_F934,
8947065c
RH
630 PROCESSOR_HYPERSPARC,
631 PROCESSOR_SPARCLITE86X,
6afca97d 632 PROCESSOR_SPARCLET,
9b7c06d2 633 PROCESSOR_TSC701,
6afca97d
DE
634 PROCESSOR_V9,
635 PROCESSOR_ULTRASPARC
636};
637
638/* This is set from -m{cpu,tune}=xxx. */
639extern enum processor_type sparc_cpu;
640
641/* Recast the cpu class to be the cpu attribute.
642 Every file includes us, but not every file includes insn-attr.h. */
643#define sparc_cpu_attr ((enum attr_cpu) sparc_cpu)
bafb031b
DE
644
645/* This macro is similar to `TARGET_SWITCHES' but defines names of
646 command options that have values. Its definition is an
647 initializer with a subgrouping for each command option.
648
649 Each subgrouping contains a string constant, that defines the
650 fixed part of the option name, and the address of a variable.
651 The variable, type `char *', is set to the variable part of the
652 given option if the fixed part matches. The actual option name
653 is made by appending `-m' to the specified name.
654
655 Here is an example which defines `-mshort-data-NUMBER'. If the
656 given option is `-mshort-data-512', the variable `m88k_short_data'
657 will be set to the string `"512"'.
658
659 extern char *m88k_short_data;
660 #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */
661
bafb031b 662#define TARGET_OPTIONS \
1ccfa253 663{ \
14f45d6b
DM
664 { "cpu=", &sparc_select[1].string, "Use features of and schedule code for given CPU" }, \
665 { "tune=", &sparc_select[2].string, "Schedule code for given CPU" }, \
666 { "cmodel=", &sparc_cmodel_string, "Use given Sparc code model" }, \
1ccfa253 667 SUBTARGET_OPTIONS \
bafb031b
DE
668}
669
670/* This is meant to be redefined in target specific files. */
671#define SUBTARGET_OPTIONS
6afca97d
DE
672
673/* sparc_select[0] is reserved for the default cpu. */
674struct sparc_cpu_select
675{
3bb5de61
KG
676 const char *string;
677 const char *name;
6afca97d
DE
678 int set_tune_p;
679 int set_arch_p;
680};
681
682extern struct sparc_cpu_select sparc_select[];
7a6cf439
DE
683\f
684/* target machine storage layout */
685
d667538b
JW
686/* Define for cross-compilation to a sparc target with no TFmode from a host
687 with a different float format (e.g. VAX). */
688#define REAL_ARITHMETIC
689
1bb87f28
JW
690/* Define this if most significant bit is lowest numbered
691 in instructions that operate on numbered bit-fields. */
692#define BITS_BIG_ENDIAN 1
693
694/* Define this if most significant byte of a word is the lowest numbered. */
1bb87f28
JW
695#define BYTES_BIG_ENDIAN 1
696
697/* Define this if most significant word of a multiword number is the lowest
698 numbered. */
1bb87f28
JW
699#define WORDS_BIG_ENDIAN 1
700
62f1c649
DE
701/* Define this to set the endianness to use in libgcc2.c, which can
702 not depend on target_flags. */
8947065c 703#if defined (__LITTLE_ENDIAN__) || defined(__LITTLE_ENDIAN_DATA__)
62f1c649
DE
704#define LIBGCC2_WORDS_BIG_ENDIAN 0
705#else
706#define LIBGCC2_WORDS_BIG_ENDIAN 1
707#endif
708
b4ac57ab 709/* number of bits in an addressable storage unit */
1bb87f28
JW
710#define BITS_PER_UNIT 8
711
712/* Width in bits of a "word", which is the contents of a machine register.
713 Note that this is not necessarily the width of data type `int';
714 if using 16-bit ints on a 68000, this would still be 32.
715 But on a machine with 16-bit registers, this would be 16. */
6f64bf5f 716#define BITS_PER_WORD (TARGET_ARCH64 ? 64 : 32)
7a6cf439 717#define MAX_BITS_PER_WORD 64
1bb87f28
JW
718
719/* Width of a word, in units (bytes). */
6f64bf5f 720#define UNITS_PER_WORD (TARGET_ARCH64 ? 8 : 4)
ef0e53ce 721#define MIN_UNITS_PER_WORD 4
7a6cf439
DE
722
723/* Now define the sizes of the C data types. */
724
725#define SHORT_TYPE_SIZE 16
a0a301fc
DE
726#define INT_TYPE_SIZE 32
727#define LONG_TYPE_SIZE (TARGET_ARCH64 ? 64 : 32)
7a6cf439
DE
728#define LONG_LONG_TYPE_SIZE 64
729#define FLOAT_TYPE_SIZE 32
730#define DOUBLE_TYPE_SIZE 64
731
a0a301fc 732#if defined (SPARC_BI_ARCH)
7a6cf439 733#define MAX_LONG_TYPE_SIZE 64
a0a301fc 734#endif
7a6cf439 735
a0a301fc 736#if 0
7a6cf439
DE
737/* ??? This does not work in SunOS 4.x, so it is not enabled here.
738 Instead, it is enabled in sol2.h, because it does work under Solaris. */
739/* Define for support of TFmode long double and REAL_ARITHMETIC.
740 Sparc ABI says that long double is 4 words. */
741#define LONG_DOUBLE_TYPE_SIZE 128
742#endif
1bb87f28
JW
743
744/* Width in bits of a pointer.
745 See also the macro `Pmode' defined below. */
7a6cf439 746#define POINTER_SIZE (TARGET_PTR64 ? 64 : 32)
1bb87f28 747
4fb4e4b8
DE
748/* A macro to update MODE and UNSIGNEDP when an object whose type
749 is TYPE and which has the specified mode and signedness is to be
750 stored in a register. This macro is only called when TYPE is a
751 scalar type. */
752#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
753if (TARGET_ARCH64 \
754 && GET_MODE_CLASS (MODE) == MODE_INT \
755 && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
756{ \
757 (MODE) = DImode; \
758}
759
760/* Define this macro if the promotion described by PROMOTE_MODE
761 should also be done for outgoing function arguments. */
762/* This is only needed for TARGET_ARCH64, but since PROMOTE_MODE is a no-op
763 for TARGET_ARCH32 this is ok. Otherwise we'd need to add a runtime test
764 for this value. */
765#define PROMOTE_FUNCTION_ARGS
766
767/* Define this macro if the promotion described by PROMOTE_MODE
768 should also be done for the return value of functions.
769 If this macro is defined, FUNCTION_VALUE must perform the same
770 promotions done by PROMOTE_MODE. */
771/* This is only needed for TARGET_ARCH64, but since PROMOTE_MODE is a no-op
772 for TARGET_ARCH32 this is ok. Otherwise we'd need to add a runtime test
773 for this value. */
774#define PROMOTE_FUNCTION_RETURN
775
47841d1b
JJ
776/* Define this macro if the promotion described by PROMOTE_MODE
777 should _only_ be performed for outgoing function arguments or
778 function return values, as specified by PROMOTE_FUNCTION_ARGS
779 and PROMOTE_FUNCTION_RETURN, respectively. */
780/* This is only needed for TARGET_ARCH64, but since PROMOTE_MODE is a no-op
781 for TARGET_ARCH32 this is ok. Otherwise we'd need to add a runtime test
782 for this value. For TARGET_ARCH64 we need it, as we don't have instructions
783 for arithmetic operations which do zero/sign extension at the same time,
784 so without this we end up with a srl/sra after every assignment to an
785 user variable, which means very very bad code. */
786#define PROMOTE_FOR_CALL_ONLY
787
1bb87f28 788/* Allocation boundary (in *bits*) for storing arguments in argument list. */
6f64bf5f 789#define PARM_BOUNDARY (TARGET_ARCH64 ? 64 : 32)
1bb87f28
JW
790
791/* Boundary (in *bits*) on which stack pointer should be aligned. */
6f64bf5f 792#define STACK_BOUNDARY (TARGET_ARCH64 ? 128 : 64)
1bb87f28 793
10d1b70f
JW
794/* ALIGN FRAMES on double word boundaries */
795
7a6cf439 796#define SPARC_STACK_ALIGN(LOC) \
6f64bf5f 797 (TARGET_ARCH64 ? (((LOC)+15) & ~15) : (((LOC)+7) & ~7))
10d1b70f 798
1bb87f28 799/* Allocation boundary (in *bits*) for the code of a function. */
efa3896a 800#define FUNCTION_BOUNDARY 32
1bb87f28
JW
801
802/* Alignment of field after `int : 0' in a structure. */
6f64bf5f 803#define EMPTY_FIELD_BOUNDARY (TARGET_ARCH64 ? 64 : 32)
1bb87f28
JW
804
805/* Every structure's size must be a multiple of this. */
806#define STRUCTURE_SIZE_BOUNDARY 8
807
808/* A bitfield declared as `int' forces `int' alignment for the struct. */
809#define PCC_BITFIELD_TYPE_MATTERS 1
810
811/* No data type wants to be aligned rounder than this. */
6f64bf5f 812#define BIGGEST_ALIGNMENT (TARGET_ARCH64 ? 128 : 64)
1bb87f28 813
77a02b01
JW
814/* The best alignment to use in cases where we have a choice. */
815#define FASTEST_ALIGNMENT 64
816
c219ddf7
BK
817/* Define this macro as an expression for the alignment of a structure
818 (given by STRUCT as a tree node) if the alignment computed in the
819 usual way is COMPUTED and the alignment explicitly specified was
820 SPECIFIED.
821
822 The default is to use SPECIFIED if it is larger; otherwise, use
823 the smaller of COMPUTED and `BIGGEST_ALIGNMENT' */
824#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
825 (TARGET_FASTER_STRUCTS ? \
826 ((TREE_CODE (STRUCT) == RECORD_TYPE \
827 || TREE_CODE (STRUCT) == UNION_TYPE \
828 || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
829 && TYPE_FIELDS (STRUCT) != 0 \
830 ? MAX (MAX ((COMPUTED), (SPECIFIED)), BIGGEST_ALIGNMENT) \
831 : MAX ((COMPUTED), (SPECIFIED))) \
832 : MAX ((COMPUTED), (SPECIFIED)))
833
1bb87f28
JW
834/* Make strings word-aligned so strcpy from constants will be faster. */
835#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
d2a8e680
RS
836 ((TREE_CODE (EXP) == STRING_CST \
837 && (ALIGN) < FASTEST_ALIGNMENT) \
838 ? FASTEST_ALIGNMENT : (ALIGN))
1bb87f28
JW
839
840/* Make arrays of chars word-aligned for the same reasons. */
841#define DATA_ALIGNMENT(TYPE, ALIGN) \
842 (TREE_CODE (TYPE) == ARRAY_TYPE \
843 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
77a02b01 844 && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
1bb87f28 845
b4ac57ab 846/* Set this nonzero if move instructions will actually fail to work
1bb87f28 847 when given unaligned data. */
b4ac57ab 848#define STRICT_ALIGNMENT 1
1bb87f28
JW
849
850/* Things that must be doubleword aligned cannot go in the text section,
851 because the linker fails to align the text section enough!
7a6cf439 852 Put them in the data section. This macro is only used in this file. */
1bb87f28
JW
853#define MAX_TEXT_ALIGN 32
854
68d69835
JM
855/* This forces all variables and constants to the data section when PIC.
856 This is because the SunOS 4 shared library scheme thinks everything in
857 text is a function, and patches the address to point to a loader stub. */
858/* This is defined to zero for every system which doesn't use the a.out object
859 file format. */
860#ifndef SUNOS4_SHARED_LIBRARIES
861#define SUNOS4_SHARED_LIBRARIES 0
862#endif
863
7a6cf439 864/* This is defined differently for v9 in a cover file. */
1bb87f28
JW
865#define SELECT_SECTION(T,RELOC) \
866{ \
867 if (TREE_CODE (T) == VAR_DECL) \
868 { \
869 if (TREE_READONLY (T) && ! TREE_SIDE_EFFECTS (T) \
ed8969fa
JW
870 && DECL_INITIAL (T) \
871 && (DECL_INITIAL (T) == error_mark_node \
872 || TREE_CONSTANT (DECL_INITIAL (T))) \
1bb87f28 873 && DECL_ALIGN (T) <= MAX_TEXT_ALIGN \
68d69835 874 && ! (flag_pic && ((RELOC) || SUNOS4_SHARED_LIBRARIES))) \
1bb87f28
JW
875 text_section (); \
876 else \
877 data_section (); \
878 } \
879 else if (TREE_CODE (T) == CONSTRUCTOR) \
880 { \
68d69835 881 if (flag_pic && ((RELOC) || SUNOS4_SHARED_LIBRARIES)) \
1bb87f28
JW
882 data_section (); \
883 } \
07516036 884 else if (TREE_CODE_CLASS (TREE_CODE (T)) == 'c') \
1bb87f28
JW
885 { \
886 if ((TREE_CODE (T) == STRING_CST && flag_writable_strings) \
68d69835
JM
887 || TYPE_ALIGN (TREE_TYPE (T)) > MAX_TEXT_ALIGN \
888 || (flag_pic && ((RELOC) || SUNOS4_SHARED_LIBRARIES))) \
1bb87f28
JW
889 data_section (); \
890 else \
891 text_section (); \
892 } \
893}
894
895/* Use text section for a constant
896 unless we need more alignment than that offers. */
7a6cf439 897/* This is defined differently for v9 in a cover file. */
1bb87f28
JW
898#define SELECT_RTX_SECTION(MODE, X) \
899{ \
900 if (GET_MODE_BITSIZE (MODE) <= MAX_TEXT_ALIGN \
b1474bb7 901 && ! (flag_pic && (symbolic_operand ((X), (MODE)) || SUNOS4_SHARED_LIBRARIES))) \
1bb87f28
JW
902 text_section (); \
903 else \
904 data_section (); \
905}
906\f
907/* Standard register usage. */
908
909/* Number of actual hardware registers.
910 The hardware registers are assigned numbers for the compiler
911 from 0 to just below FIRST_PSEUDO_REGISTER.
912 All registers that the compiler knows about must be given numbers,
913 even those that are not normally considered general registers.
914
7a6cf439
DE
915 SPARC has 32 integer registers and 32 floating point registers.
916 64 bit SPARC has 32 additional fp regs, but the odd numbered ones are not
917 accessible. We still account for them to simplify register computations
918 (eg: in CLASS_MAX_NREGS). There are also 4 fp condition code registers, so
919 32+32+32+4 == 100.
c4ce6853 920 Register 100 is used as the integer condition code register. */
1bb87f28 921
c4ce6853 922#define FIRST_PSEUDO_REGISTER 101
6afca97d 923
4fb4e4b8 924#define SPARC_FIRST_FP_REG 32
6afca97d 925/* Additional V9 fp regs. */
4fb4e4b8
DE
926#define SPARC_FIRST_V9_FP_REG 64
927#define SPARC_LAST_V9_FP_REG 95
c4ce6853
DE
928/* V9 %fcc[0123]. V8 uses (figuratively) %fcc0. */
929#define SPARC_FIRST_V9_FCC_REG 96
930#define SPARC_LAST_V9_FCC_REG 99
931/* V8 fcc reg. */
932#define SPARC_FCC_REG 96
933/* Integer CC reg. We don't distinguish %icc from %xcc. */
934#define SPARC_ICC_REG 100
1bb87f28 935
4fb4e4b8
DE
936/* Nonzero if REGNO is an fp reg. */
937#define SPARC_FP_REG_P(REGNO) \
938((REGNO) >= SPARC_FIRST_FP_REG && (REGNO) <= SPARC_LAST_V9_FP_REG)
939
940/* Argument passing regs. */
941#define SPARC_OUTGOING_INT_ARG_FIRST 8
a9e95099 942#define SPARC_INCOMING_INT_ARG_FIRST (TARGET_FLAT ? 8 : 24)
4fb4e4b8
DE
943#define SPARC_FP_ARG_FIRST 32
944
1bb87f28
JW
945/* 1 for registers that have pervasive standard uses
946 and are not available for the register allocator.
4fb4e4b8 947
7a6cf439 948 On non-v9 systems:
34ad7aaf
JW
949 g1 is free to use as temporary.
950 g2-g4 are reserved for applications. Gcc normally uses them as
951 temporaries, but this can be disabled via the -mno-app-regs option.
7a6cf439 952 g5 through g7 are reserved for the operating system.
4fb4e4b8 953
7a6cf439 954 On v9 systems:
a0a301fc
DE
955 g1,g5 are free to use as temporaries, and are free to use between calls
956 if the call is to an external function via the PLT.
957 g4 is free to use as a temporary in the non-embedded case.
958 g4 is reserved in the embedded case.
4fb4e4b8 959 g2-g3 are reserved for applications. Gcc normally uses them as
bafb031b 960 temporaries, but this can be disabled via the -mno-app-regs option.
a0a301fc
DE
961 g6-g7 are reserved for the operating system (or application in
962 embedded case).
7a6cf439
DE
963 ??? Register 1 is used as a temporary by the 64 bit sethi pattern, so must
964 currently be a fixed register until this pattern is rewritten.
965 Register 1 is also used when restoring call-preserved registers in large
6afca97d
DE
966 stack frames.
967
968 Registers fixed in arch32 and not arch64 (or vice-versa) are marked in
969 CONDITIONAL_REGISTER_USAGE in order to properly handle -ffixed-.
970*/
7a6cf439 971
7a6cf439 972#define FIXED_REGISTERS \
e48addee 973 {1, 0, 2, 2, 2, 2, 1, 1, \
7a6cf439
DE
974 0, 0, 0, 0, 0, 0, 1, 0, \
975 0, 0, 0, 0, 0, 0, 0, 0, \
976 0, 0, 0, 0, 0, 0, 1, 1, \
977 \
978 0, 0, 0, 0, 0, 0, 0, 0, \
979 0, 0, 0, 0, 0, 0, 0, 0, \
980 0, 0, 0, 0, 0, 0, 0, 0, \
981 0, 0, 0, 0, 0, 0, 0, 0, \
982 \
983 0, 0, 0, 0, 0, 0, 0, 0, \
984 0, 0, 0, 0, 0, 0, 0, 0, \
985 0, 0, 0, 0, 0, 0, 0, 0, \
986 0, 0, 0, 0, 0, 0, 0, 0, \
987 \
c4ce6853 988 0, 0, 0, 0, 0}
1bb87f28
JW
989
990/* 1 for registers not available across function calls.
991 These must include the FIXED_REGISTERS and also any
992 registers that can be used without being saved.
993 The latter must include the registers where values are returned
994 and the register where structure-value addresses are passed.
995 Aside from that, you can include as many other registers as you like. */
7a6cf439 996
bafb031b
DE
997#define CALL_USED_REGISTERS \
998 {1, 1, 1, 1, 1, 1, 1, 1, \
999 1, 1, 1, 1, 1, 1, 1, 1, \
1000 0, 0, 0, 0, 0, 0, 0, 0, \
1001 0, 0, 0, 0, 0, 0, 1, 1, \
1002 \
1003 1, 1, 1, 1, 1, 1, 1, 1, \
1004 1, 1, 1, 1, 1, 1, 1, 1, \
1005 1, 1, 1, 1, 1, 1, 1, 1, \
1006 1, 1, 1, 1, 1, 1, 1, 1, \
1007 \
1008 1, 1, 1, 1, 1, 1, 1, 1, \
1009 1, 1, 1, 1, 1, 1, 1, 1, \
1010 1, 1, 1, 1, 1, 1, 1, 1, \
1011 1, 1, 1, 1, 1, 1, 1, 1, \
1012 \
c4ce6853 1013 1, 1, 1, 1, 1}
1bb87f28 1014
c4ce6853
DE
1015/* If !TARGET_FPU, then make the fp registers and fp cc regs fixed so that
1016 they won't be allocated. */
26c5587d
JW
1017
1018#define CONDITIONAL_REGISTER_USAGE \
1019do \
1020 { \
c7b2eb81
VM
1021 if (flag_pic) \
1022 { \
1023 fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
1024 call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
1025 } \
e48addee
JJ
1026 /* If the user has passed -f{fixed,call-{used,saved}}-g5 */ \
1027 /* then honour it. */ \
1028 if (TARGET_ARCH32 && fixed_regs[5]) \
1029 fixed_regs[5] = 1; \
1030 else if (TARGET_ARCH64 && fixed_regs[5] == 2) \
1031 fixed_regs[5] = 0; \
6afca97d
DE
1032 if (! TARGET_V9) \
1033 { \
1034 int regno; \
1035 for (regno = SPARC_FIRST_V9_FP_REG; \
1036 regno <= SPARC_LAST_V9_FP_REG; \
1037 regno++) \
1038 fixed_regs[regno] = 1; \
c4ce6853
DE
1039 /* %fcc0 is used by v8 and v9. */ \
1040 for (regno = SPARC_FIRST_V9_FCC_REG + 1; \
1041 regno <= SPARC_LAST_V9_FCC_REG; \
1042 regno++) \
1043 fixed_regs[regno] = 1; \
6afca97d 1044 } \
26c5587d
JW
1045 if (! TARGET_FPU) \
1046 { \
1047 int regno; \
c4ce6853 1048 for (regno = 32; regno < SPARC_LAST_V9_FCC_REG; regno++) \
26c5587d
JW
1049 fixed_regs[regno] = 1; \
1050 } \
e48addee
JJ
1051 /* If the user has passed -f{fixed,call-{used,saved}}-g2 */ \
1052 /* then honour it. Likewise with g3 and g4. */ \
1053 if (fixed_regs[2] == 2) \
1054 fixed_regs[2] = ! TARGET_APP_REGS; \
1055 if (fixed_regs[3] == 2) \
1056 fixed_regs[3] = ! TARGET_APP_REGS; \
1057 if (TARGET_ARCH32 && fixed_regs[4] == 2) \
1058 fixed_regs[4] = ! TARGET_APP_REGS; \
1059 else if (TARGET_CM_EMBMEDANY) \
1060 fixed_regs[4] = 1; \
1061 else if (fixed_regs[4] == 2) \
1062 fixed_regs[4] = 0; \
5c56efde
DE
1063 if (TARGET_FLAT) \
1064 { \
1065 /* Let the compiler believe the frame pointer is still \
1066 %fp, but output it as %i7. */ \
1067 fixed_regs[31] = 1; \
1068 reg_names[FRAME_POINTER_REGNUM] = "%i7"; \
1069 /* ??? This is a hack to disable leaf functions. */ \
1070 global_regs[7] = 1; \
1071 } \
9ee6230c
JW
1072 if (profile_block_flag) \
1073 { \
a330e73b
JJ
1074 /* %g1 and %g2 (sparc32) resp. %g4 (sparc64) must be \
1075 fixed, because BLOCK_PROFILER uses them. */ \
9ee6230c 1076 fixed_regs[1] = 1; \
a330e73b 1077 fixed_regs[TARGET_ARCH64 ? 4 : 2] = 1; \
9ee6230c 1078 } \
26c5587d
JW
1079 } \
1080while (0)
1081
1bb87f28
JW
1082/* Return number of consecutive hard regs needed starting at reg REGNO
1083 to hold something of mode MODE.
1084 This is ordinarily the length in words of a value of mode MODE
1085 but can be less for certain modes in special long registers.
1086
1087 On SPARC, ordinary registers hold 32 bits worth;
1088 this means both integer and floating point registers.
7a6cf439
DE
1089 On v9, integer regs hold 64 bits worth; floating point regs hold
1090 32 bits worth (this includes the new fp regs as even the odd ones are
1091 included in the hard register count). */
1bb87f28 1092
7a6cf439 1093#define HARD_REGNO_NREGS(REGNO, MODE) \
6f64bf5f 1094 (TARGET_ARCH64 \
7a6cf439
DE
1095 ? ((REGNO) < 32 \
1096 ? (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD \
1097 : (GET_MODE_SIZE (MODE) + 3) / 4) \
1098 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
1bb87f28 1099
284d86e9
JC
1100/* A subreg in 64 bit mode will have the wrong offset for a floating point
1101 register. The least significant part is at offset 1, compared to 0 for
03ad6f4d
DM
1102 integer registers. This only applies when FMODE is a larger mode.
1103 We also need to handle a special case of TF-->DF conversions. */
284d86e9 1104#define ALTER_HARD_SUBREG(TMODE, WORD, FMODE, REGNO) \
e0d80184
DM
1105 (TARGET_ARCH64 \
1106 && (REGNO) >= SPARC_FIRST_FP_REG \
1107 && (REGNO) <= SPARC_LAST_V9_FP_REG \
1108 && (TMODE) == SImode \
1109 && !((FMODE) == QImode || (FMODE) == HImode) \
1110 ? ((REGNO) + 1) \
03ad6f4d
DM
1111 : ((TMODE) == DFmode && (FMODE) == TFmode) \
1112 ? ((REGNO) + ((WORD) * 2)) \
1113 : ((REGNO) + (WORD)))
284d86e9 1114
1bb87f28 1115/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
923a8d06 1116 See sparc.c for how we initialize this. */
7a6cf439
DE
1117extern int *hard_regno_mode_classes;
1118extern int sparc_mode_class[];
1bb87f28 1119#define HARD_REGNO_MODE_OK(REGNO, MODE) \
7a6cf439 1120 ((hard_regno_mode_classes[REGNO] & sparc_mode_class[MODE]) != 0)
1bb87f28
JW
1121
1122/* Value is 1 if it is a good idea to tie two pseudo registers
1123 when one has mode MODE1 and one has mode MODE2.
1124 If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
7a6cf439
DE
1125 for any hard reg, then this must be 0 for correct output.
1126
1127 For V9: SFmode can't be combined with other float modes, because they can't
1128 be allocated to the %d registers. Also, DFmode won't fit in odd %f
1129 registers, but SFmode will. */
1bb87f28 1130#define MODES_TIEABLE_P(MODE1, MODE2) \
7a6cf439
DE
1131 ((MODE1) == (MODE2) \
1132 || (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2) \
1133 && (! TARGET_V9 \
1134 || (GET_MODE_CLASS (MODE1) != MODE_FLOAT \
1135 || (MODE1 != SFmode && MODE2 != SFmode)))))
1bb87f28
JW
1136
1137/* Specify the registers used for certain standard purposes.
1138 The values of these macros are register numbers. */
1139
1140/* SPARC pc isn't overloaded on a register that the compiler knows about. */
1141/* #define PC_REGNUM */
1142
1143/* Register to use for pushing function arguments. */
1144#define STACK_POINTER_REGNUM 14
1145
4fb4e4b8 1146/* Actual top-of-stack address is 92/176 greater than the contents of the
7a6cf439
DE
1147 stack pointer register for !v9/v9. That is:
1148 - !v9: 64 bytes for the in and local registers, 4 bytes for structure return
4fb4e4b8
DE
1149 address, and 6*4 bytes for the 6 register parameters.
1150 - v9: 128 bytes for the in and local registers + 6*8 bytes for the integer
1151 parameter regs. */
1bb87f28
JW
1152#define STACK_POINTER_OFFSET FIRST_PARM_OFFSET(0)
1153
7a6cf439 1154/* The stack bias (amount by which the hardware register is offset by). */
a0a301fc 1155#define SPARC_STACK_BIAS ((TARGET_ARCH64 && TARGET_STACK_BIAS) ? 2047 : 0)
7a6cf439 1156
1ccfa253
DE
1157/* Is stack biased? */
1158#define STACK_BIAS SPARC_STACK_BIAS
1159
1bb87f28
JW
1160/* Base register for access to local variables of the function. */
1161#define FRAME_POINTER_REGNUM 30
1162
1163#if 0
9704efe6 1164/* Register that is used for the return address for the flat model. */
1bb87f28
JW
1165#define RETURN_ADDR_REGNUM 15
1166#endif
1167
1168/* Value should be nonzero if functions must have frame pointers.
1169 Zero means the frame pointer need not be set up (and parms
1170 may be accessed via the stack pointer) in functions that seem suitable.
1171 This is computed in `reload', in reload1.c.
a061b9fa 1172 Used in flow.c, global.c, and reload1.c.
1bb87f28 1173
a061b9fa
DE
1174 Being a non-leaf function does not mean a frame pointer is needed in the
1175 flat window model. However, the debugger won't be able to backtrace through
1176 us with out it. */
1bb87f28 1177#define FRAME_POINTER_REQUIRED \
bafb031b
DE
1178 (TARGET_FLAT ? (current_function_calls_alloca || current_function_varargs \
1179 || !leaf_function_p ()) \
5c56efde 1180 : ! (leaf_function_p () && only_leaf_regs_used ()))
1bb87f28
JW
1181
1182/* C statement to store the difference between the frame pointer
1183 and the stack pointer values immediately after the function prologue.
1184
1185 Note, we always pretend that this is a leaf function because if
1186 it's not, there's no point in trying to eliminate the
1187 frame pointer. If it is a leaf function, we guessed right! */
1188#define INITIAL_FRAME_POINTER_OFFSET(VAR) \
bafb031b 1189 ((VAR) = (TARGET_FLAT ? sparc_flat_compute_frame_size (get_frame_size ()) \
5b485d2c 1190 : compute_frame_size (get_frame_size (), 1)))
1bb87f28
JW
1191
1192/* Base register for access to arguments of the function. */
5c56efde 1193#define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM
1bb87f28 1194
6098b63e 1195/* Register in which static-chain is passed to a function. This must
c8392688 1196 not be a register used by the prologue. */
6f64bf5f 1197#define STATIC_CHAIN_REGNUM (TARGET_ARCH64 ? 5 : 2)
1bb87f28
JW
1198
1199/* Register which holds offset table for position-independent
1200 data references. */
1201
1202#define PIC_OFFSET_TABLE_REGNUM 23
1203
1bb87f28
JW
1204#define FINALIZE_PIC finalize_pic ()
1205
82d6b402
RH
1206/* Pick a default value we can notice from override_options:
1207 !v9: Default is on.
1208 v9: Default is off. */
1209
1210#define DEFAULT_PCC_STRUCT_RETURN -1
1211
d9ca49d5 1212/* Sparc ABI says that quad-precision floats and all structures are returned
7a6cf439 1213 in memory.
4fb4e4b8 1214 For v9: unions <= 32 bytes in size are returned in int regs,
82d6b402 1215 structures up to 32 bytes are returned in int and fp regs. */
4fb4e4b8 1216
686667bf 1217#define RETURN_IN_MEMORY(TYPE) \
4fb4e4b8
DE
1218(TARGET_ARCH32 \
1219 ? (TYPE_MODE (TYPE) == BLKmode \
1220 || TYPE_MODE (TYPE) == TFmode \
1221 || TYPE_MODE (TYPE) == TCmode) \
82d6b402
RH
1222 : (TYPE_MODE (TYPE) == BLKmode \
1223 && int_size_in_bytes (TYPE) > 32))
d9ca49d5 1224
1bb87f28
JW
1225/* Functions which return large structures get the address
1226 to place the wanted value at offset 64 from the frame.
7a6cf439
DE
1227 Must reserve 64 bytes for the in and local registers.
1228 v9: Functions which return large structures get the address to place the
1229 wanted value from an invisible first argument. */
1bb87f28
JW
1230/* Used only in other #defines in this file. */
1231#define STRUCT_VALUE_OFFSET 64
1232
1233#define STRUCT_VALUE \
6f64bf5f 1234 (TARGET_ARCH64 \
7a6cf439 1235 ? 0 \
c5c76735
JL
1236 : gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx, \
1237 STRUCT_VALUE_OFFSET)))
1238
1bb87f28 1239#define STRUCT_VALUE_INCOMING \
c5c76735
JL
1240 (TARGET_ARCH64 \
1241 ? 0 \
1242 : gen_rtx_MEM (Pmode, plus_constant (frame_pointer_rtx, \
1243 STRUCT_VALUE_OFFSET)))
1bb87f28
JW
1244\f
1245/* Define the classes of registers for register constraints in the
1246 machine description. Also define ranges of constants.
1247
1248 One of the classes must always be named ALL_REGS and include all hard regs.
1249 If there is more than one class, another class must be named NO_REGS
1250 and contain no registers.
1251
1252 The name GENERAL_REGS must be the name of a class (or an alias for
1253 another name such as ALL_REGS). This is the class of registers
1254 that is allowed by "g" or "r" in a register constraint.
1255 Also, registers outside this class are allocated only when
1256 instructions express preferences for them.
1257
1258 The classes must be numbered in nondecreasing order; that is,
1259 a larger-numbered class must never be contained completely
1260 in a smaller-numbered class.
1261
1262 For any two classes, it is very desirable that there be another
1263 class that represents their union. */
1264
4fb4e4b8
DE
1265/* The SPARC has various kinds of registers: general, floating point,
1266 and condition codes [well, it has others as well, but none that we
1267 care directly about].
24b63396
JW
1268
1269 For v9 we must distinguish between the upper and lower floating point
1270 registers because the upper ones can't hold SFmode values.
1271 HARD_REGNO_MODE_OK won't help here because reload assumes that register(s)
1272 satisfying a group need for a class will also satisfy a single need for
1273 that class. EXTRA_FP_REGS is a bit of a misnomer as it covers all 64 fp
1274 regs.
1275
1276 It is important that one class contains all the general and all the standard
1277 fp regs. Otherwise find_reg() won't properly allocate int regs for moves,
1278 because reg_class_record() will bias the selection in favor of fp regs,
1279 because reg_class_subunion[GENERAL_REGS][FP_REGS] will yield FP_REGS,
1280 because FP_REGS > GENERAL_REGS.
1281
1282 It is also important that one class contain all the general and all the
1283 fp regs. Otherwise when spilling a DFmode reg, it may be from EXTRA_FP_REGS
1284 but find_reloads() may use class GENERAL_OR_FP_REGS. This will cause
1285 allocate_reload_reg() to bypass it causing an abort because the compiler
1286 thinks it doesn't have a spill reg when in fact it does.
1287
7a6cf439
DE
1288 v9 also has 4 floating point condition code registers. Since we don't
1289 have a class that is the union of FPCC_REGS with either of the others,
1290 it is important that it appear first. Otherwise the compiler will die
1291 trying to compile _fixunsdfsi because fix_truncdfsi2 won't match its
c4ce6853
DE
1292 constraints.
1293
1294 It is important that SPARC_ICC_REG have class NO_REGS. Otherwise combine
1295 may try to use it to hold an SImode value. See register_operand.
956d6950 1296 ??? Should %fcc[0123] be handled similarly?
c4ce6853 1297*/
7a6cf439 1298
284d86e9
JC
1299enum reg_class { NO_REGS, FPCC_REGS, I64_REGS, GENERAL_REGS, FP_REGS,
1300 EXTRA_FP_REGS, GENERAL_OR_FP_REGS, GENERAL_OR_EXTRA_FP_REGS,
7a6cf439 1301 ALL_REGS, LIM_REG_CLASSES };
1bb87f28
JW
1302
1303#define N_REG_CLASSES (int) LIM_REG_CLASSES
1304
1305/* Give names of register classes as strings for dump file. */
1306
1307#define REG_CLASS_NAMES \
284d86e9
JC
1308 { "NO_REGS", "FPCC_REGS", "I64_REGS", "GENERAL_REGS", "FP_REGS", \
1309 "EXTRA_FP_REGS", "GENERAL_OR_FP_REGS", "GENERAL_OR_EXTRA_FP_REGS", \
1310 "ALL_REGS" }
1bb87f28
JW
1311
1312/* Define which registers fit in which classes.
1313 This is an initializer for a vector of HARD_REG_SET
1314 of length N_REG_CLASSES. */
1315
7a6cf439 1316#define REG_CLASS_CONTENTS \
284d86e9 1317 {{0, 0, 0, 0}, {0, 0, 0, 0xf}, {0xffff, 0, 0, 0}, \
c4ce6853
DE
1318 {-1, 0, 0, 0}, {0, -1, 0, 0}, {0, -1, -1, 0}, \
1319 {-1, -1, 0, 0}, {-1, -1, -1, 0}, {-1, -1, -1, 0x1f}}
1bb87f28
JW
1320
1321/* The same information, inverted:
1322 Return the class number of the smallest class containing
1323 reg number REGNO. This could be a conditional expression
1324 or could index an array. */
1325
c4ce6853
DE
1326extern enum reg_class sparc_regno_reg_class[];
1327
1328#define REGNO_REG_CLASS(REGNO) sparc_regno_reg_class[(REGNO)]
1bb87f28 1329
7a6cf439 1330/* This is the order in which to allocate registers normally.
51f0e748
JW
1331
1332 We put %f0/%f1 last among the float registers, so as to make it more
6a4bb1fa 1333 likely that a pseudo-register which dies in the float return register
51f0e748 1334 will get allocated to the float return register, thus saving a move
4fb4e4b8 1335 instruction at the end of the function. */
6afca97d 1336
7a6cf439 1337#define REG_ALLOC_ORDER \
6afca97d 1338{ 8, 9, 10, 11, 12, 13, 2, 3, \
7a6cf439
DE
1339 15, 16, 17, 18, 19, 20, 21, 22, \
1340 23, 24, 25, 26, 27, 28, 29, 31, \
1341 34, 35, 36, 37, 38, 39, /* %f2-%f7 */ \
1342 40, 41, 42, 43, 44, 45, 46, 47, /* %f8-%f15 */ \
7a6cf439
DE
1343 48, 49, 50, 51, 52, 53, 54, 55, /* %f16-%f23 */ \
1344 56, 57, 58, 59, 60, 61, 62, 63, /* %f24-%f31 */ \
1345 64, 65, 66, 67, 68, 69, 70, 71, /* %f32-%f39 */ \
1346 72, 73, 74, 75, 76, 77, 78, 79, /* %f40-%f47 */ \
4fb4e4b8
DE
1347 80, 81, 82, 83, 84, 85, 86, 87, /* %f48-%f55 */ \
1348 88, 89, 90, 91, 92, 93, 94, 95, /* %f56-%f63 */ \
7a6cf439 1349 32, 33, /* %f0,%f1 */ \
c4ce6853 1350 96, 97, 98, 99, 100, /* %fcc0-3, %icc */ \
4b69d2a3 1351 1, 4, 5, 6, 7, 0, 14, 30}
1bb87f28
JW
1352
1353/* This is the order in which to allocate registers for
e48addee 1354 leaf functions. If all registers can fit in the "gi" registers,
4fb4e4b8 1355 then we have the possibility of having a leaf function. */
6afca97d 1356
7a6cf439 1357#define REG_LEAF_ALLOC_ORDER \
6afca97d 1358{ 2, 3, 24, 25, 26, 27, 28, 29, \
e48addee 1359 4, 5, 6, 7, 1, \
7a6cf439
DE
1360 15, 8, 9, 10, 11, 12, 13, \
1361 16, 17, 18, 19, 20, 21, 22, 23, \
1362 34, 35, 36, 37, 38, 39, \
1363 40, 41, 42, 43, 44, 45, 46, 47, \
7a6cf439
DE
1364 48, 49, 50, 51, 52, 53, 54, 55, \
1365 56, 57, 58, 59, 60, 61, 62, 63, \
1366 64, 65, 66, 67, 68, 69, 70, 71, \
1367 72, 73, 74, 75, 76, 77, 78, 79, \
4fb4e4b8
DE
1368 80, 81, 82, 83, 84, 85, 86, 87, \
1369 88, 89, 90, 91, 92, 93, 94, 95, \
7a6cf439 1370 32, 33, \
c4ce6853 1371 96, 97, 98, 99, 100, \
e48addee
JJ
1372 0, 14, 30, 31}
1373
1bb87f28
JW
1374#define ORDER_REGS_FOR_LOCAL_ALLOC order_regs_for_local_alloc ()
1375
5c56efde
DE
1376/* ??? %g7 is not a leaf register to effectively #undef LEAF_REGISTERS when
1377 -mflat is used. Function only_leaf_regs_used will return 0 if a global
1378 register is used and is not permitted in a leaf function. We make %g7
1379 a global reg if -mflat and voila. Since %g7 is a system register and is
1380 fixed it won't be used by gcc anyway. */
6afca97d 1381
7a6cf439
DE
1382#define LEAF_REGISTERS \
1383{ 1, 1, 1, 1, 1, 1, 1, 0, \
1384 0, 0, 0, 0, 0, 0, 1, 0, \
1385 0, 0, 0, 0, 0, 0, 0, 0, \
1386 1, 1, 1, 1, 1, 1, 0, 1, \
1387 1, 1, 1, 1, 1, 1, 1, 1, \
1388 1, 1, 1, 1, 1, 1, 1, 1, \
1389 1, 1, 1, 1, 1, 1, 1, 1, \
1390 1, 1, 1, 1, 1, 1, 1, 1, \
1391 1, 1, 1, 1, 1, 1, 1, 1, \
1392 1, 1, 1, 1, 1, 1, 1, 1, \
1393 1, 1, 1, 1, 1, 1, 1, 1, \
1394 1, 1, 1, 1, 1, 1, 1, 1, \
c4ce6853 1395 1, 1, 1, 1, 1}
1bb87f28
JW
1396
1397extern char leaf_reg_remap[];
1398#define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO])
1bb87f28 1399
1bb87f28
JW
1400/* The class value for index registers, and the one for base regs. */
1401#define INDEX_REG_CLASS GENERAL_REGS
1402#define BASE_REG_CLASS GENERAL_REGS
1403
24b63396 1404/* Local macro to handle the two v9 classes of FP regs. */
24b63396 1405#define FP_REG_CLASS_P(CLASS) ((CLASS) == FP_REGS || (CLASS) == EXTRA_FP_REGS)
24b63396 1406
6afca97d
DE
1407/* Get reg_class from a letter such as appears in the machine description.
1408 In the not-v9 case, coerce v9's 'e' class to 'f', so we can use 'e' in the
bfd6bc60 1409 .md file for v8 and v9.
284d86e9
JC
1410 'd' and 'b' are used for single and double precision VIS operations,
1411 if TARGET_VIS.
1412 'h' is used for V8+ 64 bit global and out registers. */
bfd6bc60
JC
1413
1414#define REG_CLASS_FROM_LETTER(C) \
1415(TARGET_V9 \
1416 ? ((C) == 'f' ? FP_REGS \
1417 : (C) == 'e' ? EXTRA_FP_REGS \
1418 : (C) == 'c' ? FPCC_REGS \
284d86e9
JC
1419 : ((C) == 'd' && TARGET_VIS) ? FP_REGS\
1420 : ((C) == 'b' && TARGET_VIS) ? EXTRA_FP_REGS\
1421 : ((C) == 'h' && TARGET_V8PLUS) ? I64_REGS\
bfd6bc60
JC
1422 : NO_REGS) \
1423 : ((C) == 'f' ? FP_REGS \
1424 : (C) == 'e' ? FP_REGS \
1425 : (C) == 'c' ? FPCC_REGS \
6afca97d 1426 : NO_REGS))
1bb87f28
JW
1427
1428/* The letters I, J, K, L and M in a register constraint string
1429 can be used to stand for particular ranges of immediate operands.
1430 This macro defines what the ranges are.
1431 C is the letter, and VALUE is a constant value.
1432 Return 1 if VALUE is in the range specified by C.
1433
18c5947f 1434 `I' is used for the range of constants an insn can actually contain.
1bb87f28 1435 `J' is used for the range which is just zero (since that is R0).
18c5947f
DE
1436 `K' is used for constants which can be loaded with a single sethi insn.
1437 `L' is used for the range of constants supported by the movcc insns.
1438 `M' is used for the range of constants supported by the movrcc insns. */
1bb87f28 1439
1ccfa253
DE
1440#define SPARC_SIMM10_P(X) ((unsigned HOST_WIDE_INT) (X) + 0x200 < 0x400)
1441#define SPARC_SIMM11_P(X) ((unsigned HOST_WIDE_INT) (X) + 0x400 < 0x800)
1442#define SPARC_SIMM13_P(X) ((unsigned HOST_WIDE_INT) (X) + 0x1000 < 0x2000)
18c5947f
DE
1443/* 10 and 11 bit immediates are only used for a few specific insns.
1444 SMALL_INT is used throughout the port so we continue to use it. */
1445#define SMALL_INT(X) (SPARC_SIMM13_P (INTVAL (X)))
284d86e9
JC
1446/* 13 bit immediate, considering only the low 32 bits */
1447#define SMALL_INT32(X) (SPARC_SIMM13_P ((int)INTVAL (X) & 0xffffffff))
1ccfa253 1448#define SPARC_SETHI_P(X) \
dd4be5a1
JJ
1449(((unsigned HOST_WIDE_INT) (X) & \
1450 (TARGET_ARCH64 ? ~(unsigned HOST_WIDE_INT) 0xfffffc00 : 0x3ff)) == 0)
1bb87f28
JW
1451
1452#define CONST_OK_FOR_LETTER_P(VALUE, C) \
18c5947f 1453 ((C) == 'I' ? SPARC_SIMM13_P (VALUE) \
1bb87f28 1454 : (C) == 'J' ? (VALUE) == 0 \
1ccfa253 1455 : (C) == 'K' ? SPARC_SETHI_P (VALUE) \
18c5947f
DE
1456 : (C) == 'L' ? SPARC_SIMM11_P (VALUE) \
1457 : (C) == 'M' ? SPARC_SIMM10_P (VALUE) \
1bb87f28
JW
1458 : 0)
1459
1460/* Similar, but for floating constants, and defining letters G and H.
1461 Here VALUE is the CONST_DOUBLE rtx itself. */
1462
1463#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
7ce86678
RH
1464 ((C) == 'G' ? fp_zero_operand (VALUE, GET_MODE (VALUE)) \
1465 : (C) == 'H' ? arith_double_operand (VALUE, DImode) \
1bb87f28
JW
1466 : 0)
1467
1468/* Given an rtx X being reloaded into a reg required to be
1469 in class CLASS, return the class of reg to actually use.
1470 In general this is just CLASS; but on some machines
1471 in some cases it is preferable to use a more restrictive class. */
3e7cd49f
JW
1472/* - We can't load constants into FP registers.
1473 - We can't load FP constants into integer registers when soft-float,
1474 because there is no soft-float pattern with a r/F constraint.
8947065c
RH
1475 - Try and reload integer constants (symbolic or otherwise) back into
1476 registers directly, rather than having them dumped to memory. */
1477
2b9a9aea
JW
1478#define PREFERRED_RELOAD_CLASS(X,CLASS) \
1479 (CONSTANT_P (X) \
8947065c 1480 ? ((FP_REG_CLASS_P (CLASS) \
2b9a9aea 1481 || (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
3e7cd49f 1482 && ! TARGET_FPU)) \
8947065c
RH
1483 ? NO_REGS \
1484 : (!FP_REG_CLASS_P (CLASS) \
1485 && GET_MODE_CLASS (GET_MODE (X)) == MODE_INT) \
1486 ? GENERAL_REGS \
1487 : (CLASS)) \
1488 : (CLASS))
1bb87f28
JW
1489
1490/* Return the register class of a scratch register needed to load IN into
1491 a register of class CLASS in MODE.
1492
e0d80184 1493 We need a temporary when loading/storing a HImode/QImode value
ae51bd97
JW
1494 between memory and the FPU registers. This can happen when combine puts
1495 a paradoxical subreg in a float/fix conversion insn. */
1496
1497#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, IN) \
e0d80184
DM
1498 ((FP_REG_CLASS_P (CLASS) \
1499 && ((MODE) == HImode || (MODE) == QImode) \
24b63396 1500 && (GET_CODE (IN) == MEM \
e0d80184
DM
1501 || ((GET_CODE (IN) == REG || GET_CODE (IN) == SUBREG) \
1502 && true_regnum (IN) == -1))) \
1503 ? GENERAL_REGS \
1504 : (((TARGET_CM_MEDANY \
1505 && symbolic_operand ((IN), (MODE))) \
1506 || (TARGET_CM_EMBMEDANY \
1507 && text_segment_operand ((IN), (MODE)))) \
1508 && !flag_pic) \
1509 ? GENERAL_REGS \
1510 : NO_REGS)
ae51bd97
JW
1511
1512#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, IN) \
e0d80184
DM
1513 ((FP_REG_CLASS_P (CLASS) \
1514 && ((MODE) == HImode || (MODE) == QImode) \
1515 && (GET_CODE (IN) == MEM \
1516 || ((GET_CODE (IN) == REG || GET_CODE (IN) == SUBREG) \
1517 && true_regnum (IN) == -1))) \
1518 ? GENERAL_REGS \
1519 : (((TARGET_CM_MEDANY \
1520 && symbolic_operand ((IN), (MODE))) \
1521 || (TARGET_CM_EMBMEDANY \
1522 && text_segment_operand ((IN), (MODE)))) \
1523 && !flag_pic) \
1524 ? GENERAL_REGS \
1525 : NO_REGS)
1bb87f28 1526
b924cef0
JW
1527/* On SPARC it is not possible to directly move data between
1528 GENERAL_REGS and FP_REGS. */
24b63396
JW
1529#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
1530 (FP_REG_CLASS_P (CLASS1) != FP_REG_CLASS_P (CLASS2))
b924cef0 1531
55be783d
JW
1532/* Return the stack location to use for secondary memory needed reloads.
1533 We want to use the reserved location just below the frame pointer.
1534 However, we must ensure that there is a frame, so use assign_stack_local
1535 if the frame size is zero. */
fe1f7f24 1536#define SECONDARY_MEMORY_NEEDED_RTX(MODE) \
55be783d 1537 (get_frame_size () == 0 \
fb3eb6f6 1538 ? assign_stack_local (MODE, GET_MODE_SIZE (MODE), 0) \
c5c76735
JL
1539 : gen_rtx_MEM (MODE, plus_constant (frame_pointer_rtx, \
1540 STARTING_FRAME_OFFSET)))
fe1f7f24 1541
9ec36da5 1542/* Get_secondary_mem widens its argument to BITS_PER_WORD which loses on v9
7a6cf439
DE
1543 because the movsi and movsf patterns don't handle r/f moves.
1544 For v8 we copy the default definition. */
1545#define SECONDARY_MEMORY_NEEDED_MODE(MODE) \
6f64bf5f 1546 (TARGET_ARCH64 \
fb3eb6f6
JW
1547 ? (GET_MODE_BITSIZE (MODE) < 32 \
1548 ? mode_for_size (32, GET_MODE_CLASS (MODE), 0) \
7a6cf439 1549 : MODE) \
fb3eb6f6
JW
1550 : (GET_MODE_BITSIZE (MODE) < BITS_PER_WORD \
1551 ? mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (MODE), 0) \
7a6cf439
DE
1552 : MODE))
1553
1bb87f28
JW
1554/* Return the maximum number of consecutive registers
1555 needed to represent mode MODE in a register of class CLASS. */
1556/* On SPARC, this is the size of MODE in words. */
1557#define CLASS_MAX_NREGS(CLASS, MODE) \
24b63396 1558 (FP_REG_CLASS_P (CLASS) ? (GET_MODE_SIZE (MODE) + 3) / 4 \
7a6cf439 1559 : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
1bb87f28
JW
1560\f
1561/* Stack layout; function entry, exit and calling. */
1562
1563/* Define the number of register that can hold parameters.
4fb4e4b8 1564 This macro is only used in other macro definitions below and in sparc.c.
7a6cf439
DE
1565 MODE is the mode of the argument.
1566 !v9: All args are passed in %o0-%o5.
4fb4e4b8
DE
1567 v9: %o0-%o5 and %f0-%f31 are cumulatively used to pass values.
1568 See the description in sparc.c. */
7a6cf439 1569#define NPARM_REGS(MODE) \
4fb4e4b8
DE
1570(TARGET_ARCH64 \
1571 ? (GET_MODE_CLASS (MODE) == MODE_FLOAT ? 32 : 6) \
1572 : 6)
1bb87f28
JW
1573
1574/* Define this if pushing a word on the stack
1575 makes the stack pointer a smaller address. */
1576#define STACK_GROWS_DOWNWARD
1577
1578/* Define this if the nominal address of the stack frame
1579 is at the high-address end of the local variables;
1580 that is, each additional local variable allocated
1581 goes at a more negative offset in the frame. */
1582#define FRAME_GROWS_DOWNWARD
1583
1584/* Offset within stack frame to start allocating local variables at.
1585 If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
1586 first local allocated. Otherwise, it is the offset to the BEGINNING
1587 of the first local allocated. */
7238ce3a
JW
1588/* This allows space for one TFmode floating point value. */
1589#define STARTING_FRAME_OFFSET \
6f64bf5f 1590 (TARGET_ARCH64 ? (SPARC_STACK_BIAS - 16) \
7a6cf439 1591 : (-SPARC_STACK_ALIGN (LONG_DOUBLE_TYPE_SIZE / BITS_PER_UNIT)))
1bb87f28
JW
1592
1593/* If we generate an insn to push BYTES bytes,
1594 this says how many the stack pointer really advances by.
1595 On SPARC, don't define this because there are no push insns. */
1596/* #define PUSH_ROUNDING(BYTES) */
1597
1598/* Offset of first parameter from the argument pointer register value.
7a6cf439
DE
1599 !v9: This is 64 for the ins and locals, plus 4 for the struct-return reg
1600 even if this function isn't going to use it.
4fb4e4b8 1601 v9: This is 128 for the ins and locals. */
7a6cf439 1602#define FIRST_PARM_OFFSET(FNDECL) \
4fb4e4b8 1603 (TARGET_ARCH64 ? (SPARC_STACK_BIAS + 16 * UNITS_PER_WORD) \
7a6cf439 1604 : (STRUCT_VALUE_OFFSET + UNITS_PER_WORD))
1bb87f28 1605
71038426
RH
1606/* Offset from the argument pointer register value to the CFA. */
1607
1608#define ARG_POINTER_CFA_OFFSET SPARC_STACK_BIAS
1609
1bb87f28 1610/* When a parameter is passed in a register, stack space is still
82d6b402
RH
1611 allocated for it.
1612 !v9: All 6 possible integer registers have backing store allocated.
1613 v9: Only space for the arguments passed is allocated. */
1614/* ??? Ideally, we'd use zero here (as the minimum), but zero has special
1615 meaning to the backend. Further, we need to be able to detect if a
1616 varargs/unprototyped function is called, as they may want to spill more
1617 registers than we've provided space. Ugly, ugly. So for now we retain
1618 all 6 slots even for v9. */
4fb4e4b8 1619#define REG_PARM_STACK_SPACE(DECL) (6 * UNITS_PER_WORD)
1bb87f28
JW
1620
1621/* Keep the stack pointer constant throughout the function.
b4ac57ab 1622 This is both an optimization and a necessity: longjmp
1bb87f28
JW
1623 doesn't behave itself when the stack pointer moves within
1624 the function! */
1625#define ACCUMULATE_OUTGOING_ARGS
1626
1627/* Value is the number of bytes of arguments automatically
1628 popped when returning from a subroutine call.
8b109b37 1629 FUNDECL is the declaration node of the function (as a tree),
1bb87f28
JW
1630 FUNTYPE is the data type of the function (as a tree),
1631 or for a library call it is an identifier node for the subroutine name.
1632 SIZE is the number of bytes of arguments passed on the stack. */
1633
8b109b37 1634#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
1bb87f28 1635
5b485d2c
JW
1636/* Some subroutine macros specific to this machine.
1637 When !TARGET_FPU, put float return values in the general registers,
1638 since we don't have any fp registers. */
82d6b402
RH
1639#define BASE_RETURN_VALUE_REG(MODE) \
1640 (TARGET_ARCH64 \
1641 ? (TARGET_FPU && FLOAT_MODE_P (MODE) ? 32 : 8) \
7a6cf439 1642 : (((MODE) == SFmode || (MODE) == DFmode) && TARGET_FPU ? 32 : 8))
82d6b402
RH
1643
1644#define BASE_OUTGOING_VALUE_REG(MODE) \
1645 (TARGET_ARCH64 \
1646 ? (TARGET_FPU && FLOAT_MODE_P (MODE) ? 32 \
1647 : TARGET_FLAT ? 8 : 24) \
7a6cf439 1648 : (((MODE) == SFmode || (MODE) == DFmode) && TARGET_FPU ? 32 \
bafb031b 1649 : (TARGET_FLAT ? 8 : 24)))
82d6b402
RH
1650
1651#define BASE_PASSING_ARG_REG(MODE) \
1652 (TARGET_ARCH64 \
1653 ? (TARGET_FPU && FLOAT_MODE_P (MODE) ? 32 : 8) \
6f64bf5f 1654 : 8)
82d6b402
RH
1655
1656/* ??? FIXME -- seems wrong for v9 structure passing... */
1657#define BASE_INCOMING_ARG_REG(MODE) \
1658 (TARGET_ARCH64 \
1659 ? (TARGET_FPU && FLOAT_MODE_P (MODE) ? 32 \
1660 : TARGET_FLAT ? 8 : 24) \
bafb031b 1661 : (TARGET_FLAT ? 8 : 24))
1bb87f28 1662
92ea370b
TW
1663/* Define this macro if the target machine has "register windows". This
1664 C expression returns the register number as seen by the called function
1665 corresponding to register number OUT as seen by the calling function.
1666 Return OUT if register number OUT is not an outbound register. */
1667
1668#define INCOMING_REGNO(OUT) \
bafb031b 1669 ((TARGET_FLAT || (OUT) < 8 || (OUT) > 15) ? (OUT) : (OUT) + 16)
92ea370b
TW
1670
1671/* Define this macro if the target machine has "register windows". This
1672 C expression returns the register number as seen by the calling function
1673 corresponding to register number IN as seen by the called function.
1674 Return IN if register number IN is not an inbound register. */
1675
1676#define OUTGOING_REGNO(IN) \
bafb031b 1677 ((TARGET_FLAT || (IN) < 24 || (IN) > 31) ? (IN) : (IN) - 16)
92ea370b 1678
1bb87f28
JW
1679/* Define how to find the value returned by a function.
1680 VALTYPE is the data type of the value (as a tree).
1681 If the precise function being called is known, FUNC is its FUNCTION_DECL;
1682 otherwise, FUNC is 0. */
1683
1684/* On SPARC the value is found in the first "output" register. */
1685
82d6b402
RH
1686#define FUNCTION_VALUE(VALTYPE, FUNC) \
1687 function_value ((VALTYPE), TYPE_MODE (VALTYPE), 1)
1bb87f28
JW
1688
1689/* But the called function leaves it in the first "input" register. */
1690
82d6b402
RH
1691#define FUNCTION_OUTGOING_VALUE(VALTYPE, FUNC) \
1692 function_value ((VALTYPE), TYPE_MODE (VALTYPE), 0)
1bb87f28
JW
1693
1694/* Define how to find the value returned by a library function
1695 assuming the value has mode MODE. */
1696
82d6b402
RH
1697#define LIBCALL_VALUE(MODE) \
1698 function_value (NULL_TREE, (MODE), 1)
1bb87f28
JW
1699
1700/* 1 if N is a possible register number for a function value
1701 as seen by the caller.
1702 On SPARC, the first "output" reg is used for integer values,
1703 and the first floating point register is used for floating point values. */
1704
1705#define FUNCTION_VALUE_REGNO_P(N) ((N) == 8 || (N) == 32)
1706
34aaacec
JW
1707/* Define the size of space to allocate for the return value of an
1708 untyped_call. */
1709
1710#define APPLY_RESULT_SIZE 16
1711
1bb87f28 1712/* 1 if N is a possible register number for function argument passing.
4fb4e4b8 1713 On SPARC, these are the "output" registers. v9 also uses %f0-%f31. */
1bb87f28 1714
7a6cf439 1715#define FUNCTION_ARG_REGNO_P(N) \
4fb4e4b8
DE
1716(TARGET_ARCH64 \
1717 ? (((N) >= 8 && (N) <= 13) || ((N) >= 32 && (N) <= 63)) \
1718 : ((N) >= 8 && (N) <= 13))
1bb87f28
JW
1719\f
1720/* Define a data type for recording info about an argument list
1721 during the scan of that argument list. This data type should
1722 hold all necessary information about the function itself
1723 and about the args processed so far, enough to enable macros
1724 such as FUNCTION_ARG to determine where the next arg should go.
1725
7a6cf439 1726 On SPARC (!v9), this is a single integer, which is a number of words
1bb87f28
JW
1727 of arguments scanned so far (including the invisible argument,
1728 if any, which holds the structure-value-address).
7a6cf439
DE
1729 Thus 7 or more means all following args should go on the stack.
1730
4fb4e4b8 1731 For v9, we also need to know whether a prototype is present. */
7a6cf439 1732
7a6cf439 1733struct sparc_args {
4fb4e4b8
DE
1734 int words; /* number of words passed so far */
1735 int prototype_p; /* non-zero if a prototype is present */
1736 int libcall_p; /* non-zero if a library call */
7a6cf439
DE
1737};
1738#define CUMULATIVE_ARGS struct sparc_args
1739
1bb87f28
JW
1740/* Initialize a variable CUM of type CUMULATIVE_ARGS
1741 for a call to a function whose data type is FNTYPE.
4fb4e4b8 1742 For a library call, FNTYPE is 0. */
1bb87f28 1743
4fb4e4b8
DE
1744#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
1745init_cumulative_args (& (CUM), (FNTYPE), (LIBNAME), (INDIRECT));
1bb87f28
JW
1746
1747/* Update the data in CUM to advance over an argument
1748 of mode MODE and data type TYPE.
4fb4e4b8 1749 TYPE is null for libcalls where that information may not be available. */
7a6cf439 1750
4fb4e4b8
DE
1751#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
1752function_arg_advance (& (CUM), (MODE), (TYPE), (NAMED))
1bb87f28 1753
7b0c7e62
JJ
1754/* Nonzero if we do not know how to pass TYPE solely in registers. */
1755
1756#define MUST_PASS_IN_STACK(MODE,TYPE) \
1757 ((TYPE) != 0 \
1758 && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \
1759 || TREE_ADDRESSABLE (TYPE)))
1760
1bb87f28
JW
1761/* Determine where to put an argument to a function.
1762 Value is zero to push the argument on the stack,
1763 or a hard register in which to store the argument.
1764
1765 MODE is the argument's machine mode.
1766 TYPE is the data type of the argument (as a tree).
1767 This is null for libcalls where that information may
1768 not be available.
1769 CUM is a variable of type CUMULATIVE_ARGS which gives info about
1770 the preceding args and about the function being called.
1771 NAMED is nonzero if this argument is a named parameter
1772 (otherwise it is an extra parameter matching an ellipsis). */
1773
4fb4e4b8
DE
1774#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
1775function_arg (& (CUM), (MODE), (TYPE), (NAMED), 0)
1bb87f28
JW
1776
1777/* Define where a function finds its arguments.
1778 This is different from FUNCTION_ARG because of register windows. */
1779
4fb4e4b8
DE
1780#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
1781function_arg (& (CUM), (MODE), (TYPE), (NAMED), 1)
1bb87f28
JW
1782
1783/* For an arg passed partly in registers and partly in memory,
1784 this is the number of registers used.
4fb4e4b8
DE
1785 For args passed entirely in registers or entirely in memory, zero. */
1786
4fb4e4b8
DE
1787#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
1788function_arg_partial_nregs (& (CUM), (MODE), (TYPE), (NAMED))
1789
1790/* A C expression that indicates when an argument must be passed by reference.
1791 If nonzero for an argument, a copy of that argument is made in memory and a
1792 pointer to the argument is passed instead of the argument itself.
1793 The pointer is passed in whatever way is appropriate for passing a pointer
1794 to that type. */
1795
4fb4e4b8
DE
1796#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
1797function_arg_pass_by_reference (& (CUM), (MODE), (TYPE), (NAMED))
1798
1799/* If defined, a C expression which determines whether, and in which direction,
1800 to pad out an argument with extra space. The value should be of type
1801 `enum direction': either `upward' to pad above the argument,
1802 `downward' to pad below, or `none' to inhibit padding. */
284d86e9 1803
4fb4e4b8
DE
1804#define FUNCTION_ARG_PADDING(MODE, TYPE) \
1805function_arg_padding ((MODE), (TYPE))
1806
1807/* If defined, a C expression that gives the alignment boundary, in bits,
1808 of an argument with the specified mode and type. If it is not defined,
1809 PARM_BOUNDARY is used for all arguments.
1810 For sparc64, objects requiring 16 byte alignment are passed that way. */
1811
1812#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
1813((TARGET_ARCH64 \
1814 && (GET_MODE_ALIGNMENT (MODE) == 128 \
1815 || ((TYPE) && TYPE_ALIGN (TYPE) == 128))) \
1816 ? 128 : PARM_BOUNDARY)
7a6cf439 1817\f
1bb87f28
JW
1818/* Define the information needed to generate branch and scc insns. This is
1819 stored from the compare operation. Note that we can't use "rtx" here
1820 since it hasn't been defined! */
1821
1822extern struct rtx_def *sparc_compare_op0, *sparc_compare_op1;
1823
1bb87f28 1824\f
4b69d2a3
RS
1825/* Generate the special assembly code needed to tell the assembler whatever
1826 it might need to know about the return value of a function.
1827
1828 For Sparc assemblers, we need to output a .proc pseudo-op which conveys
1829 information to the assembler relating to peephole optimization (done in
1830 the assembler). */
1831
1832#define ASM_DECLARE_RESULT(FILE, RESULT) \
4f70758f 1833 fprintf ((FILE), "\t.proc\t0%lo\n", sparc_type_code (TREE_TYPE (RESULT)))
4b69d2a3 1834
1bb87f28
JW
1835/* Output the label for a function definition. */
1836
4b69d2a3
RS
1837#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
1838do { \
1839 ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
1840 ASM_OUTPUT_LABEL (FILE, NAME); \
1841} while (0)
1bb87f28 1842
1cb36a98 1843/* Output the special assembly code needed to tell the assembler some
730f0207
JJ
1844 register is used as global register variable.
1845
1846 SPARC 64bit psABI declares registers %g2 and %g3 as application
1847 registers and %g6 and %g7 as OS registers. Any object using them
1848 should declare (for %g2/%g3 has to, for %g6/%g7 can) that it uses them
1849 and how they are used (scratch or some global variable).
1850 Linker will then refuse to link together objects which use those
1851 registers incompatibly.
1852
1853 Unless the registers are used for scratch, two different global
1854 registers cannot be declared to the same name, so in the unlikely
1855 case of a global register variable occupying more than one register
1856 we prefix the second and following registers with .gnu.part1. etc. */
1857
1858extern char sparc_hard_reg_printed[8];
1cb36a98
RH
1859
1860#ifdef HAVE_AS_REGISTER_PSEUDO_OP
1861#define ASM_DECLARE_REGISTER_GLOBAL(FILE, DECL, REGNO, NAME) \
1862do { \
1863 if (TARGET_ARCH64) \
1864 { \
730f0207
JJ
1865 int end = HARD_REGNO_NREGS ((REGNO), DECL_MODE (decl)) + (REGNO); \
1866 int reg; \
1867 for (reg = (REGNO); reg < 8 && reg < end; reg++) \
1868 if ((reg & ~1) == 2 || (reg & ~1) == 6) \
1cb36a98 1869 { \
730f0207
JJ
1870 if (reg == (REGNO)) \
1871 fprintf ((FILE), "\t.register\t%%g%d, %s\n", reg, (NAME)); \
1cb36a98
RH
1872 else \
1873 fprintf ((FILE), "\t.register\t%%g%d, .gnu.part%d.%s\n", \
730f0207
JJ
1874 reg, reg - (REGNO), (NAME)); \
1875 sparc_hard_reg_printed[reg] = 1; \
1cb36a98
RH
1876 } \
1877 } \
1878} while (0)
1879#endif
1880
1bb87f28
JW
1881/* This macro generates the assembly code for function entry.
1882 FILE is a stdio stream to output the code to.
1883 SIZE is an int: how many units of temporary storage to allocate.
1884 Refer to the array `regs_ever_live' to determine which registers
1885 to save; `regs_ever_live[I]' is nonzero if register number I
1886 is ever used in the function. This macro is responsible for
1887 knowing which registers should not be saved even if used. */
1888
1889/* On SPARC, move-double insns between fpu and cpu need an 8-byte block
1890 of memory. If any fpu reg is used in the function, we allocate
1891 such a block here, at the bottom of the frame, just in case it's needed.
1892
1893 If this function is a leaf procedure, then we may choose not
1894 to do a "save" insn. The decision about whether or not
1895 to do this is made in regclass.c. */
1896
bafb031b 1897#define FUNCTION_PROLOGUE(FILE, SIZE) \
284d86e9 1898 (TARGET_FLAT ? sparc_flat_output_function_prologue (FILE, (int)SIZE) \
54ff41b7
JW
1899 : output_function_prologue (FILE, (int)SIZE, \
1900 current_function_uses_only_leaf_regs))
c4ce6853 1901\f
1bb87f28 1902/* Output assembler code to FILE to increment profiler label # LABELNO
2be15d0f 1903 for profiling a function entry. */
6f334f44 1904
2be15d0f
RH
1905#define FUNCTION_PROFILER(FILE, LABELNO) \
1906 sparc_function_profiler(FILE, LABELNO)
1bb87f28 1907
2be15d0f 1908/* Set the name of the mcount function for the system. */
88c956eb 1909
2be15d0f 1910#define MCOUNT_FUNCTION "*mcount"
88c956eb
RK
1911
1912/* The following macro shall output assembler code to FILE
2be15d0f 1913 to initialize basic-block profiling. */
88c956eb 1914
2be15d0f
RH
1915#define FUNCTION_BLOCK_PROFILER(FILE, BLOCK_OR_LABEL) \
1916 sparc_function_block_profiler(FILE, BLOCK_OR_LABEL)
88c956eb
RK
1917
1918/* The following macro shall output assembler code to FILE
2be15d0f 1919 to increment a counter associated with basic block number BLOCKNO. */
88c956eb 1920
2be15d0f
RH
1921#define BLOCK_PROFILER(FILE, BLOCKNO) \
1922 sparc_block_profiler (FILE, BLOCKNO)
88c956eb
RK
1923
1924/* The following macro shall output assembler code to FILE
2be15d0f 1925 to indicate a return from function during basic-block profiling. */
88c956eb
RK
1926
1927#define FUNCTION_BLOCK_PROFILER_EXIT(FILE) \
2be15d0f 1928 sparc_function_block_profiler_exit(FILE)
88c956eb 1929
e48addee
JJ
1930#ifdef IN_LIBGCC2
1931
88c956eb
RK
1932/* The function `__bb_trace_func' is called in every basic block
1933 and is not allowed to change the machine state. Saving (restoring)
1934 the state can either be done in the BLOCK_PROFILER macro,
1935 before calling function (rsp. after returning from function)
1936 `__bb_trace_func', or it can be done inside the function by
1937 defining the macros:
1938
1939 MACHINE_STATE_SAVE(ID)
1940 MACHINE_STATE_RESTORE(ID)
1941
1942 In the latter case care must be taken, that the prologue code
1943 of function `__bb_trace_func' does not already change the
1944 state prior to saving it with MACHINE_STATE_SAVE.
1945
1946 The parameter `ID' is a string identifying a unique macro use.
1947
1948 On sparc it is sufficient to save the psw register to memory.
1949 Unfortunately the psw register can be read in supervisor mode only,
1950 so we read only the condition codes by using branch instructions
e48addee
JJ
1951 and hope that this is enough.
1952
1953 On V9, life is much sweater: there is a user accessible %ccr
1954 register, but we use it for 64bit libraries only. */
1955
1956#if TARGET_ARCH32
88c956eb 1957
cb85a2f3
RH
1958#define MACHINE_STATE_SAVE(ID) \
1959 int ms_flags, ms_saveret; \
1960 asm volatile( \
e48addee
JJ
1961 "mov %%g2,%1\n\
1962 mov %%g0,%0\n\
cb85a2f3
RH
1963 be,a LFLGNZ"ID"\n\
1964 or %0,4,%0\n\
1965LFLGNZ"ID":\n\
1966 bcs,a LFLGNC"ID"\n\
1967 or %0,1,%0\n\
1968LFLGNC"ID":\n\
1969 bvs,a LFLGNV"ID"\n\
1970 or %0,2,%0\n\
1971LFLGNV"ID":\n\
1972 bneg,a LFLGNN"ID"\n\
1973 or %0,8,%0\n\
e48addee
JJ
1974LFLGNN"ID":" \
1975 : "=r"(ms_flags), "=r"(ms_saveret));
1976
1977#else
1978
1979#define MACHINE_STATE_SAVE(ID) \
1980 unsigned long ms_flags, ms_saveret; \
1981 asm volatile( \
a330e73b 1982 "mov %%g4,%1\n\
e48addee 1983 rd %%ccr,%0" \
cb85a2f3 1984 : "=r"(ms_flags), "=r"(ms_saveret));
88c956eb 1985
e48addee
JJ
1986#endif
1987
88c956eb
RK
1988/* On sparc MACHINE_STATE_RESTORE restores the psw register from memory.
1989 The psw register can be written in supervisor mode only,
1990 which is true even for simple condition codes.
1991 We use some combination of instructions to produce the
1992 proper condition codes, but some flag combinations can not
1993 be generated in this way. If this happens an unimplemented
1994 instruction will be executed to abort the program. */
1995
e48addee
JJ
1996#if TARGET_ARCH32
1997
cb85a2f3
RH
1998#define MACHINE_STATE_RESTORE(ID) \
1999{ extern char flgtab[] __asm__("LFLGTAB"ID); \
2000 int scratch; \
2001 asm volatile ( \
2002 "jmpl %2+%1,%%g0\n\
2003 ! Do part of VC in the delay slot here, as it needs 3 insns.\n\
2004 addcc 2,%3,%%g0\n\
2005LFLGTAB" ID ":\n\
2006 ! 0\n\
2007 ba LFLGRET"ID"\n\
2008 orcc 1,%%g0,%%g0\n\
2009 ! C\n\
2010 ba LFLGRET"ID"\n\
2011 addcc 2,%3,%%g0\n\
2012 ! V\n\
2013 unimp\n\
2014 nop\n\
2015 ! VC\n\
2016 ba LFLGRET"ID"\n\
2017 addxcc %4,%4,%0\n\
2018 ! Z\n\
2019 ba LFLGRET"ID"\n\
2020 subcc %%g0,%%g0,%%g0\n\
2021 ! ZC\n\
2022 ba LFLGRET"ID"\n\
2023 addcc 1,%3,%0\n\
2024 ! ZVC\n\
2025 ba LFLGRET"ID"\n\
2026 addcc %4,%4,%0\n\
2027 ! N\n\
2028 ba LFLGRET"ID"\n\
2029 orcc %%g0,-1,%%g0\n\
2030 ! NC\n\
2031 ba LFLGRET"ID"\n\
2032 addcc %%g0,%3,%%g0\n\
2033 ! NV\n\
2034 unimp\n\
2035 nop\n\
2036 ! NVC\n\
2037 unimp\n\
2038 nop\n\
2039 ! NZ\n\
2040 unimp\n\
2041 nop\n\
2042 ! NZC\n\
2043 unimp\n\
2044 nop\n\
2045 ! NZV\n\
2046 unimp\n\
2047 nop\n\
2048 ! NZVC\n\
2049 unimp\n\
2050 nop\n\
2051LFLGRET"ID":\n\
2052 mov %5,%%g2" \
2053 : "=r"(scratch) \
2054 : "r"(ms_flags*8), "r"(flgtab), "r"(-1), \
2055 "r"(0x80000000), "r"(ms_saveret) \
e48addee
JJ
2056 : "cc", "g2"); }
2057
2058#else
2059
2060#define MACHINE_STATE_RESTORE(ID) \
2061 asm volatile ( \
2062 "wr %0,0,%%ccr\n\
a330e73b 2063 mov %1,%%g4" \
e48addee 2064 : : "r"(ms_flags), "r"(ms_saveret) \
a330e73b 2065 : "cc", "g4");
e48addee
JJ
2066
2067#endif
2068
2069#endif /* IN_LIBGCC2 */
c4ce6853 2070\f
1bb87f28
JW
2071/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
2072 the stack pointer does not matter. The value is tested only in
2073 functions that have frame pointers.
2074 No definition is equivalent to always zero. */
2075
1bb87f28
JW
2076#define EXIT_IGNORE_STACK \
2077 (get_frame_size () != 0 \
2078 || current_function_calls_alloca || current_function_outgoing_args_size)
2079
2080/* This macro generates the assembly code for function exit,
2081 on machines that need it. If FUNCTION_EPILOGUE is not defined
2082 then individual return instructions are generated for each
2083 return statement. Args are same as for FUNCTION_PROLOGUE.
2084
2085 The function epilogue should not depend on the current stack pointer!
2086 It should use the frame pointer only. This is mandatory because
2087 of alloca; we also take advantage of it to omit stack adjustments
2088 before returning. */
2089
bafb031b 2090#define FUNCTION_EPILOGUE(FILE, SIZE) \
284d86e9 2091 (TARGET_FLAT ? sparc_flat_output_function_epilogue (FILE, (int)SIZE) \
54ff41b7
JW
2092 : output_function_epilogue (FILE, (int)SIZE, \
2093 current_function_uses_only_leaf_regs))
1bb87f28 2094
bafb031b
DE
2095#define DELAY_SLOTS_FOR_EPILOGUE \
2096 (TARGET_FLAT ? sparc_flat_epilogue_delay_slots () : 1)
2097#define ELIGIBLE_FOR_EPILOGUE_DELAY(trial, slots_filled) \
2098 (TARGET_FLAT ? sparc_flat_eligible_for_epilogue_delay (trial, slots_filled) \
5b485d2c 2099 : eligible_for_epilogue_delay (trial, slots_filled))
deeeee8c
MS
2100
2101/* Define registers used by the epilogue and return instruction. */
2102#define EPILOGUE_USES(REGNO) \
2103 (!TARGET_FLAT && REGNO == 31)
6a4bb1fa 2104\f
1bb87f28
JW
2105/* Length in units of the trampoline for entering a nested function. */
2106
c6b0465b
JC
2107#define TRAMPOLINE_SIZE (TARGET_ARCH64 ? 32 : 16)
2108
2109#define TRAMPOLINE_ALIGNMENT 128 /* 16 bytes */
1bb87f28
JW
2110
2111/* Emit RTL insns to initialize the variable parts of a trampoline.
2112 FNADDR is an RTX for the address of the function's pure code.
7a6cf439 2113 CXT is an RTX for the static chain value for the function. */
1bb87f28 2114
7a6cf439 2115#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
6f64bf5f 2116 if (TARGET_ARCH64) \
7a6cf439
DE
2117 sparc64_initialize_trampoline (TRAMP, FNADDR, CXT); \
2118 else \
c6b0465b 2119 sparc_initialize_trampoline (TRAMP, FNADDR, CXT)
6a4bb1fa 2120\f
648d2ffc 2121/* Generate necessary RTL for __builtin_saveregs(). */
4fb4e4b8 2122
648d2ffc 2123#define EXPAND_BUILTIN_SAVEREGS() sparc_builtin_saveregs ()
953fe179 2124
a8b2c8a1
RH
2125/* Implement `va_start' for varargs and stdarg. */
2126#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
2127 sparc_va_start (stdarg, valist, nextarg)
2128
2129/* Implement `va_arg'. */
2130#define EXPAND_BUILTIN_VA_ARG(valist, type) \
2131 sparc_va_arg (valist, type)
2132
4fb4e4b8
DE
2133/* Define this macro if the location where a function argument is passed
2134 depends on whether or not it is a named argument.
2135
2136 This macro controls how the NAMED argument to FUNCTION_ARG
2137 is set for varargs and stdarg functions. With this macro defined,
2138 the NAMED argument is always true for named arguments, and false for
2139 unnamed arguments. If this is not defined, but SETUP_INCOMING_VARARGS
2140 is defined, then all arguments are treated as named. Otherwise, all named
2141 arguments except the last are treated as named.
2142 For the v9 we want NAMED to mean what it says it means. */
e5e809f4
JL
2143
2144#define STRICT_ARGUMENT_NAMING TARGET_V9
4fb4e4b8 2145
953fe179
JW
2146/* Generate RTL to flush the register windows so as to make arbitrary frames
2147 available. */
2148#define SETUP_FRAME_ADDRESSES() \
2149 emit_insn (gen_flush_register_windows ())
2150
2151/* Given an rtx for the address of a frame,
2152 return an rtx for the address of the word in the frame
7a6cf439
DE
2153 that holds the dynamic chain--the previous frame's address.
2154 ??? -mflat support? */
c5c76735 2155#define DYNAMIC_CHAIN_ADDRESS(frame) plus_constant (frame, 14 * UNITS_PER_WORD)
953fe179
JW
2156
2157/* The return address isn't on the stack, it is in a register, so we can't
2158 access it from the current frame pointer. We can access it from the
2159 previous frame pointer though by reading a value from the register window
2160 save area. */
2161#define RETURN_ADDR_IN_PREVIOUS_FRAME
2162
5b6faa70 2163/* This is the offset of the return address to the true next instruction to be
9ad61776 2164 executed for the current function. */
6f64bf5f
DE
2165#define RETURN_ADDR_OFFSET \
2166 (8 + 4 * (! TARGET_ARCH64 && current_function_returns_struct))
5b6faa70 2167
953fe179
JW
2168/* The current return address is in %i7. The return address of anything
2169 farther back is in the register window save area at [%fp+60]. */
2170/* ??? This ignores the fact that the actual return address is +8 for normal
2171 returns, and +12 for structure returns. */
2172#define RETURN_ADDR_RTX(count, frame) \
2173 ((count == -1) \
284d86e9
JC
2174 ? gen_rtx_REG (Pmode, 31) \
2175 : gen_rtx_MEM (Pmode, \
c5c76735
JL
2176 memory_address (Pmode, plus_constant (frame, \
2177 15 * UNITS_PER_WORD))))
9704efe6 2178
d60bee3a
DE
2179/* Before the prologue, the return address is %o7 + 8. OK, sometimes it's
2180 +12, but always using +8 is close enough for frame unwind purposes.
2181 Actually, just using %o7 is close enough for unwinding, but %o7+8
2182 is something you can return to. */
2183#define INCOMING_RETURN_ADDR_RTX \
c5c76735 2184 plus_constant (gen_rtx_REG (word_mode, 15), 8)
d60bee3a
DE
2185
2186/* The offset from the incoming value of %sp to the top of the stack frame
2187 for the current function. On sparc64, we have to account for the stack
2188 bias if present. */
2189#define INCOMING_FRAME_SP_OFFSET SPARC_STACK_BIAS
2190
9704efe6 2191#define DOESNT_NEED_UNWINDER (! TARGET_FLAT)
1bb87f28
JW
2192\f
2193/* Addressing modes, and classification of registers for them. */
2194
940da324
JL
2195/* #define HAVE_POST_INCREMENT 0 */
2196/* #define HAVE_POST_DECREMENT 0 */
1bb87f28 2197
940da324
JL
2198/* #define HAVE_PRE_DECREMENT 0 */
2199/* #define HAVE_PRE_INCREMENT 0 */
1bb87f28
JW
2200
2201/* Macros to check register numbers against specific register classes. */
2202
2203/* These assume that REGNO is a hard or pseudo reg number.
2204 They give nonzero only if REGNO is a hard reg of the suitable class
2205 or a pseudo reg currently allocated to a suitable hard reg.
2206 Since they use reg_renumber, they are safe only once reg_renumber
2207 has been allocated, which happens in local-alloc.c. */
2208
2209#define REGNO_OK_FOR_INDEX_P(REGNO) \
4f70758f 2210((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < (unsigned)32)
1bb87f28 2211#define REGNO_OK_FOR_BASE_P(REGNO) \
4f70758f 2212((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < (unsigned)32)
1bb87f28 2213#define REGNO_OK_FOR_FP_P(REGNO) \
4f70758f
KG
2214 (((unsigned) (REGNO) - 32 < (TARGET_V9 ? (unsigned)64 : (unsigned)32)) \
2215 || ((unsigned) reg_renumber[REGNO] - 32 < (TARGET_V9 ? (unsigned)64 : (unsigned)32)))
7a6cf439
DE
2216#define REGNO_OK_FOR_CCFP_P(REGNO) \
2217 (TARGET_V9 \
4f70758f
KG
2218 && (((unsigned) (REGNO) - 96 < (unsigned)4) \
2219 || ((unsigned) reg_renumber[REGNO] - 96 < (unsigned)4)))
1bb87f28
JW
2220
2221/* Now macros that check whether X is a register and also,
2222 strictly, whether it is in a specified class.
2223
2224 These macros are specific to the SPARC, and may be used only
2225 in code for printing assembler insns and in conditions for
2226 define_optimization. */
2227
2228/* 1 if X is an fp register. */
2229
2230#define FP_REG_P(X) (REG_P (X) && REGNO_OK_FOR_FP_P (REGNO (X)))
284d86e9
JC
2231
2232/* Is X, a REG, an in or global register? i.e. is regno 0..7 or 24..31 */
2233#define IN_OR_GLOBAL_P(X) (REGNO (X) < 8 || (REGNO (X) >= 24 && REGNO (X) <= 31))
1bb87f28
JW
2234\f
2235/* Maximum number of registers that can appear in a valid memory address. */
2236
2237#define MAX_REGS_PER_ADDRESS 2
2238
7aca9b9c
JW
2239/* Recognize any constant value that is a valid address.
2240 When PIC, we do not accept an address that would require a scratch reg
2241 to load into a register. */
1bb87f28 2242
6eff269e
BK
2243#define CONSTANT_ADDRESS_P(X) \
2244 (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
7aca9b9c
JW
2245 || GET_CODE (X) == CONST_INT || GET_CODE (X) == HIGH \
2246 || (GET_CODE (X) == CONST \
2247 && ! (flag_pic && pic_address_needs_scratch (X))))
2248
2249/* Define this, so that when PIC, reload won't try to reload invalid
2250 addresses which require two reload registers. */
2251
2252#define LEGITIMATE_PIC_OPERAND_P(X) (! pic_address_needs_scratch (X))
1bb87f28
JW
2253
2254/* Nonzero if the constant value X is a legitimate general operand.
f952a238
JJ
2255 Anything can be made to work except floating point constants.
2256 If TARGET_VIS, 0.0 can be made to work as well. */
1bb87f28 2257
f952a238
JJ
2258#define LEGITIMATE_CONSTANT_P(X) \
2259 (GET_CODE (X) != CONST_DOUBLE || GET_MODE (X) == VOIDmode || \
0f63333c
JJ
2260 (TARGET_VIS && \
2261 (GET_MODE (X) == SFmode || GET_MODE (X) == DFmode || \
2262 GET_MODE (X) == TFmode) && \
7ce86678 2263 fp_zero_operand (X, GET_MODE (X))))
1bb87f28
JW
2264
2265/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
2266 and check its validity for a certain class.
2267 We have two alternate definitions for each of them.
2268 The usual definition accepts all pseudo regs; the other rejects
2269 them unless they have been allocated suitable hard regs.
2270 The symbol REG_OK_STRICT causes the latter definition to be used.
2271
2272 Most source files want to accept pseudo regs in the hope that
2273 they will get allocated to the class that the insn wants them to be in.
2274 Source files for reload pass need to be strict.
2275 After reload, it makes no difference, since pseudo regs have
2276 been eliminated by then. */
2277
e0d80184 2278/* Optional extra constraints for this machine.
1bb87f28 2279
62190128
DM
2280 'Q' handles floating point constants which can be moved into
2281 an integer register with a single sethi instruction.
2282
2283 'R' handles floating point constants which can be moved into
2284 an integer register with a single mov instruction.
2285
2286 'S' handles floating point constants which can be moved into
2287 an integer register using a high/lo_sum sequence.
2288
e0d80184
DM
2289 'T' handles memory addresses where the alignment is known to
2290 be at least 8 bytes.
1bb87f28 2291
e0d80184
DM
2292 `U' handles all pseudo registers or a hard even numbered
2293 integer register, needed for ldd/std instructions. */
1bb87f28 2294
62190128
DM
2295#define EXTRA_CONSTRAINT_BASE(OP, C) \
2296 ((C) == 'Q' ? fp_sethi_p(OP) \
2297 : (C) == 'R' ? fp_mov_p(OP) \
2298 : (C) == 'S' ? fp_high_losum_p(OP) \
2299 : 0)
2300
1bb87f28
JW
2301#ifndef REG_OK_STRICT
2302
2303/* Nonzero if X is a hard reg that can be used as an index
2304 or if it is a pseudo reg. */
7a6cf439 2305#define REG_OK_FOR_INDEX_P(X) \
c4ce6853 2306 (((unsigned) REGNO (X)) - 32 >= (FIRST_PSEUDO_REGISTER - 32))
1bb87f28
JW
2307/* Nonzero if X is a hard reg that can be used as a base reg
2308 or if it is a pseudo reg. */
7a6cf439 2309#define REG_OK_FOR_BASE_P(X) \
c4ce6853 2310 (((unsigned) REGNO (X)) - 32 >= (FIRST_PSEUDO_REGISTER - 32))
7a6cf439
DE
2311
2312/* 'T', 'U' are for aligned memory loads which aren't needed for v9. */
1bb87f28
JW
2313
2314#define EXTRA_CONSTRAINT(OP, C) \
62190128
DM
2315 (EXTRA_CONSTRAINT_BASE(OP, C) \
2316 || ((! TARGET_ARCH64 && (C) == 'T') \
2317 ? (mem_min_alignment (OP, 8)) \
2318 : ((! TARGET_ARCH64 && (C) == 'U') \
2319 ? (register_ok_for_ldd (OP)) \
2320 : 0)))
2321
1bb87f28
JW
2322#else
2323
2324/* Nonzero if X is a hard reg that can be used as an index. */
2325#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
2326/* Nonzero if X is a hard reg that can be used as a base reg. */
2327#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
2328
2329#define EXTRA_CONSTRAINT(OP, C) \
62190128
DM
2330 (EXTRA_CONSTRAINT_BASE(OP, C) \
2331 || ((! TARGET_ARCH64 && (C) == 'T') \
2332 ? mem_min_alignment (OP, 8) && strict_memory_address_p (Pmode, XEXP (OP, 0)) \
2333 : ((! TARGET_ARCH64 && (C) == 'U') \
2334 ? (GET_CODE (OP) == REG \
2335 && (REGNO (OP) < FIRST_PSEUDO_REGISTER \
2336 || reg_renumber[REGNO (OP)] >= 0) \
2337 && register_ok_for_ldd (OP)) \
2338 : 0)))
2339
1bb87f28
JW
2340#endif
2341\f
1cb36a98
RH
2342/* Should gcc use [%reg+%lo(xx)+offset] addresses? */
2343
2344#ifdef HAVE_AS_OFFSETABLE_LO10
2345#define USE_AS_OFFSETABLE_LO10 1
2346#else
2347#define USE_AS_OFFSETABLE_LO10 0
2348#endif
2349\f
1bb87f28
JW
2350/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
2351 that is a valid memory address for an instruction.
2352 The MODE argument is the machine mode for the MEM expression
2353 that wants to use this address.
2354
2355 On SPARC, the actual legitimate addresses must be REG+REG or REG+SMALLINT
2356 ordinarily. This changes a bit when generating PIC.
2357
2358 If you change this, execute "rm explow.o recog.o reload.o". */
2359
bec2e359
JW
2360#define RTX_OK_FOR_BASE_P(X) \
2361 ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
2362 || (GET_CODE (X) == SUBREG \
2363 && GET_CODE (SUBREG_REG (X)) == REG \
2364 && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
2365
2366#define RTX_OK_FOR_INDEX_P(X) \
2367 ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X)) \
2368 || (GET_CODE (X) == SUBREG \
2369 && GET_CODE (SUBREG_REG (X)) == REG \
2370 && REG_OK_FOR_INDEX_P (SUBREG_REG (X))))
2371
2372#define RTX_OK_FOR_OFFSET_P(X) \
2373 (GET_CODE (X) == CONST_INT && INTVAL (X) >= -0x1000 && INTVAL (X) < 0x1000)
1cb36a98
RH
2374
2375#define RTX_OK_FOR_OLO10_P(X) \
2376 (GET_CODE (X) == CONST_INT && INTVAL (X) >= -0x1000 && INTVAL (X) < 0xc00 - 8)
bec2e359 2377
1bb87f28 2378#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
bec2e359
JW
2379{ if (RTX_OK_FOR_BASE_P (X)) \
2380 goto ADDR; \
1bb87f28
JW
2381 else if (GET_CODE (X) == PLUS) \
2382 { \
bec2e359
JW
2383 register rtx op0 = XEXP (X, 0); \
2384 register rtx op1 = XEXP (X, 1); \
2385 if (flag_pic && op0 == pic_offset_table_rtx) \
1bb87f28 2386 { \
bec2e359 2387 if (RTX_OK_FOR_BASE_P (op1)) \
1bb87f28
JW
2388 goto ADDR; \
2389 else if (flag_pic == 1 \
bec2e359
JW
2390 && GET_CODE (op1) != REG \
2391 && GET_CODE (op1) != LO_SUM \
7aca9b9c
JW
2392 && GET_CODE (op1) != MEM \
2393 && (GET_CODE (op1) != CONST_INT \
2394 || SMALL_INT (op1))) \
1bb87f28
JW
2395 goto ADDR; \
2396 } \
bec2e359 2397 else if (RTX_OK_FOR_BASE_P (op0)) \
1bb87f28 2398 { \
54e7fb26 2399 if ((RTX_OK_FOR_INDEX_P (op1) \
d0ae1ce3
VM
2400 /* We prohibit REG + REG for TFmode when \
2401 there are no instructions which accept \
2402 REG+REG instructions. We do this \
2403 because REG+REG is not an offsetable \
2404 address. If we get the situation \
2405 in reload where source and destination \
2406 of a movtf pattern are both MEMs with \
2407 REG+REG address, then only one of them \
2408 gets converted to an offsetable \
2409 address. */ \
2410 && (MODE != TFmode \
2411 || (TARGET_FPU && TARGET_ARCH64 \
54e7fb26
VM
2412 && TARGET_V9 \
2413 && TARGET_HARD_QUAD))) \
bec2e359 2414 || RTX_OK_FOR_OFFSET_P (op1)) \
1bb87f28
JW
2415 goto ADDR; \
2416 } \
bec2e359 2417 else if (RTX_OK_FOR_BASE_P (op1)) \
1bb87f28 2418 { \
54e7fb26 2419 if ((RTX_OK_FOR_INDEX_P (op0) \
d0ae1ce3
VM
2420 /* See the previous comment. */ \
2421 && (MODE != TFmode \
2422 || (TARGET_FPU && TARGET_ARCH64 \
54e7fb26
VM
2423 && TARGET_V9 \
2424 && TARGET_HARD_QUAD))) \
bec2e359 2425 || RTX_OK_FOR_OFFSET_P (op0)) \
1bb87f28
JW
2426 goto ADDR; \
2427 } \
1cb36a98
RH
2428 else if (USE_AS_OFFSETABLE_LO10 \
2429 && GET_CODE (op0) == LO_SUM \
2430 && TARGET_ARCH64 \
2431 && ! TARGET_CM_MEDMID \
2432 && RTX_OK_FOR_OLO10_P (op1)) \
2433 { \
2434 register rtx op00 = XEXP (op0, 0); \
2435 register rtx op01 = XEXP (op0, 1); \
2436 if (RTX_OK_FOR_BASE_P (op00) \
2437 && CONSTANT_P (op01)) \
2438 goto ADDR; \
2439 } \
2440 else if (USE_AS_OFFSETABLE_LO10 \
2441 && GET_CODE (op1) == LO_SUM \
2442 && TARGET_ARCH64 \
2443 && ! TARGET_CM_MEDMID \
2444 && RTX_OK_FOR_OLO10_P (op0)) \
2445 { \
2446 register rtx op10 = XEXP (op1, 0); \
2447 register rtx op11 = XEXP (op1, 1); \
2448 if (RTX_OK_FOR_BASE_P (op10) \
2449 && CONSTANT_P (op11)) \
2450 goto ADDR; \
2451 } \
1bb87f28 2452 } \
bec2e359
JW
2453 else if (GET_CODE (X) == LO_SUM) \
2454 { \
2455 register rtx op0 = XEXP (X, 0); \
2456 register rtx op1 = XEXP (X, 1); \
2457 if (RTX_OK_FOR_BASE_P (op0) \
2f0da906
JW
2458 && CONSTANT_P (op1) \
2459 /* We can't allow TFmode, because an offset \
2460 greater than or equal to the alignment (8) \
e0d80184
DM
2461 may cause the LO_SUM to overflow if !v9. */\
2462 && (MODE != TFmode || TARGET_V9)) \
bec2e359
JW
2463 goto ADDR; \
2464 } \
1bb87f28
JW
2465 else if (GET_CODE (X) == CONST_INT && SMALL_INT (X)) \
2466 goto ADDR; \
2467}
2468\f
2469/* Try machine-dependent ways of modifying an illegitimate address
2470 to be legitimate. If we find one, return the new, valid address.
2471 This macro is used in only one place: `memory_address' in explow.c.
2472
2473 OLDX is the address as it was before break_out_memory_refs was called.
2474 In some cases it is useful to look at this to decide what needs to be done.
2475
2476 MODE and WIN are passed so that this macro can use
2477 GO_IF_LEGITIMATE_ADDRESS.
2478
2479 It is always safe for this macro to do nothing. It exists to recognize
2480 opportunities to optimize the output. */
2481
2482/* On SPARC, change REG+N into REG+REG, and REG+(X*Y) into REG+REG. */
1bb87f28
JW
2483#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
2484{ rtx sparc_x = (X); \
2485 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == MULT) \
284d86e9 2486 (X) = gen_rtx_PLUS (Pmode, XEXP (X, 1), \
c5c76735 2487 force_operand (XEXP (X, 0), NULL_RTX)); \
1bb87f28 2488 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == MULT) \
284d86e9 2489 (X) = gen_rtx_PLUS (Pmode, XEXP (X, 0), \
c5c76735 2490 force_operand (XEXP (X, 1), NULL_RTX)); \
1bb87f28 2491 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == PLUS) \
284d86e9 2492 (X) = gen_rtx_PLUS (Pmode, force_operand (XEXP (X, 0), NULL_RTX),\
c5c76735 2493 XEXP (X, 1)); \
1bb87f28 2494 if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == PLUS) \
284d86e9 2495 (X) = gen_rtx_PLUS (Pmode, XEXP (X, 0), \
c5c76735 2496 force_operand (XEXP (X, 1), NULL_RTX)); \
1bb87f28
JW
2497 if (sparc_x != (X) && memory_address_p (MODE, X)) \
2498 goto WIN; \
7aca9b9c 2499 if (flag_pic) (X) = legitimize_pic_address (X, MODE, 0); \
1bb87f28 2500 else if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1))) \
284d86e9 2501 (X) = gen_rtx_PLUS (Pmode, XEXP (X, 0), \
c5c76735 2502 copy_to_mode_reg (Pmode, XEXP (X, 1))); \
1bb87f28 2503 else if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 0))) \
284d86e9 2504 (X) = gen_rtx_PLUS (Pmode, XEXP (X, 1), \
c5c76735 2505 copy_to_mode_reg (Pmode, XEXP (X, 0))); \
1bb87f28
JW
2506 else if (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST \
2507 || GET_CODE (X) == LABEL_REF) \
e0d80184 2508 (X) = copy_to_suggested_reg (X, NULL_RTX, Pmode); \
1bb87f28
JW
2509 if (memory_address_p (MODE, X)) \
2510 goto WIN; }
2511
8947065c
RH
2512/* Try a machine-dependent way of reloading an illegitimate address
2513 operand. If we find one, push the reload and jump to WIN. This
2514 macro is used in only one place: `find_reloads_address' in reload.c.
2515
2516 For Sparc 32, we wish to handle addresses by splitting them into
2517 HIGH+LO_SUM pairs, retaining the LO_SUM in the memory reference.
1256ed02
JL
2518 This cuts the number of extra insns by one.
2519
2520 Do nothing when generating PIC code and the address is a
2521 symbolic operand or requires a scratch register. */
2522
8947065c
RH
2523#define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN) \
2524do { \
2525 /* Decompose SImode constants into hi+lo_sum. We do have to \
2526 rerecognize what we produce, so be careful. */ \
2527 if (CONSTANT_P (X) \
1e75bc34 2528 && (MODE != TFmode || TARGET_V9) \
8947065c 2529 && GET_MODE (X) == SImode \
1256ed02
JL
2530 && GET_CODE (X) != LO_SUM && GET_CODE (X) != HIGH \
2531 && ! (flag_pic \
78eca9f2
JL
2532 && (symbolic_operand (X, Pmode) \
2533 || pic_address_needs_scratch (X)))) \
8947065c
RH
2534 { \
2535 X = gen_rtx_LO_SUM (GET_MODE (X), \
2536 gen_rtx_HIGH (GET_MODE (X), X), X); \
2537 push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL_PTR, \
2538 BASE_REG_CLASS, GET_MODE (X), VOIDmode, 0, 0, \
2539 OPNUM, TYPE); \
2540 goto WIN; \
2541 } \
2542 /* ??? 64-bit reloads. */ \
2543} while (0)
2544
1bb87f28
JW
2545/* Go to LABEL if ADDR (a legitimate address expression)
2546 has an effect that depends on the machine mode it is used for.
2547 On the SPARC this is never true. */
2548
2549#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
7a6cf439
DE
2550
2551/* If we are referencing a function make the SYMBOL_REF special.
a0a301fc
DE
2552 In the Embedded Medium/Anywhere code model, %g4 points to the data segment
2553 so we must not add it to function addresses. */
7a6cf439
DE
2554
2555#define ENCODE_SECTION_INFO(DECL) \
2556 do { \
a0a301fc 2557 if (TARGET_CM_EMBMEDANY && TREE_CODE (DECL) == FUNCTION_DECL) \
7a6cf439
DE
2558 SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \
2559 } while (0)
1bb87f28
JW
2560\f
2561/* Specify the machine mode that this machine uses
2562 for the index in the tablejump instruction. */
67cb8900
JJ
2563/* If we ever implement any of the full models (such as CM_FULLANY),
2564 this has to be DImode in that case */
d1accaa3 2565#ifdef HAVE_GAS_SUBSECTION_ORDERING
67cb8900
JJ
2566#define CASE_VECTOR_MODE \
2567(! TARGET_PTR64 ? SImode : flag_pic ? SImode : TARGET_CM_MEDLOW ? SImode : DImode)
d1accaa3
JJ
2568#else
2569/* If assembler does not have working .subsection -1, we use DImode for pic, as otherwise
2570 we have to sign extend which slows things down. */
2571#define CASE_VECTOR_MODE \
2572(! TARGET_PTR64 ? SImode : flag_pic ? DImode : TARGET_CM_MEDLOW ? SImode : DImode)
2573#endif
1bb87f28 2574
18543a22
ILT
2575/* Define as C expression which evaluates to nonzero if the tablejump
2576 instruction expects the table to contain offsets from the address of the
2577 table.
2578 Do not define this if the table should contain absolute addresses. */
2579/* #define CASE_VECTOR_PC_RELATIVE 1 */
1bb87f28
JW
2580
2581/* Specify the tree operation to be used to convert reals to integers. */
2582#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
2583
2584/* This is the kind of divide that is easiest to do in the general case. */
2585#define EASY_DIV_EXPR TRUNC_DIV_EXPR
2586
2587/* Define this as 1 if `char' should by default be signed; else as 0. */
2588#define DEFAULT_SIGNED_CHAR 1
2589
2590/* Max number of bytes we can move from memory to memory
2591 in one reasonably fast instruction. */
2eef2ef1 2592#define MOVE_MAX 8
1bb87f28 2593
0fb5a69e 2594#if 0 /* Sun 4 has matherr, so this is no good. */
24e2a2bf
RS
2595/* This is the value of the error code EDOM for this machine,
2596 used by the sqrt instruction. */
2597#define TARGET_EDOM 33
2598
2599/* This is how to refer to the variable errno. */
2600#define GEN_ERRNO_RTX \
284d86e9 2601 gen_rtx_MEM (SImode, gen_rtx_SYMBOL_REF (Pmode, "errno"))
0fb5a69e 2602#endif /* 0 */
24e2a2bf 2603
9a63901f
RK
2604/* Define if operations between registers always perform the operation
2605 on the full register even if a narrower mode is specified. */
2606#define WORD_REGISTER_OPERATIONS
2607
2608/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
2609 will either zero-extend or sign-extend. The value of this macro should
2610 be the code that says which one of the two operations is implicitly
2611 done, NIL if none. */
2612#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
1bb87f28
JW
2613
2614/* Nonzero if access to memory by bytes is slow and undesirable.
2615 For RISC chips, it means that access to memory by bytes is no
2616 better than access by words when possible, so grab a whole word
2617 and maybe make use of that. */
2618#define SLOW_BYTE_ACCESS 1
2619
2620/* We assume that the store-condition-codes instructions store 0 for false
2621 and some other value for true. This is the value stored for true. */
2622
2623#define STORE_FLAG_VALUE 1
2624
2625/* When a prototype says `char' or `short', really pass an `int'. */
cb560352 2626#define PROMOTE_PROTOTYPES (TARGET_ARCH32)
1bb87f28 2627
d969caf8
RK
2628/* Define this to be nonzero if shift instructions ignore all but the low-order
2629 few bits. */
2630#define SHIFT_COUNT_TRUNCATED 1
1bb87f28
JW
2631
2632/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
2633 is done just by pretending it is already truncated. */
2634#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
2635
2636/* Specify the machine mode that pointers have.
2637 After generation of rtl, the compiler makes no further distinction
2638 between pointers and any other objects of this machine mode. */
7a6cf439 2639#define Pmode (TARGET_PTR64 ? DImode : SImode)
1bb87f28 2640
b4ac57ab
RS
2641/* Generate calls to memcpy, memcmp and memset. */
2642#define TARGET_MEM_FUNCTIONS
2643
1bb87f28
JW
2644/* Add any extra modes needed to represent the condition code.
2645
2646 On the Sparc, we have a "no-overflow" mode which is used when an add or
2647 subtract insn is used to set the condition code. Different branches are
2648 used in this case for some operations.
2649
4d449554
JW
2650 We also have two modes to indicate that the relevant condition code is
2651 in the floating-point condition code register. One for comparisons which
2652 will generate an exception if the result is unordered (CCFPEmode) and
c4ce6853 2653 one for comparisons which will never trap (CCFPmode).
7a6cf439
DE
2654
2655 CCXmode and CCX_NOOVmode are only used by v9. */
2656
aa0b4465
ZW
2657#define EXTRA_CC_MODES \
2658 CC(CCXmode, "CCX") \
2659 CC(CC_NOOVmode, "CC_NOOV") \
2660 CC(CCX_NOOVmode, "CCX_NOOV") \
2661 CC(CCFPmode, "CCFP") \
2662 CC(CCFPEmode, "CCFPE")
1bb87f28
JW
2663
2664/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
4d449554 2665 return the mode to be used for the comparison. For floating-point,
7913f3d0
RH
2666 CCFP[E]mode is used. CC_NOOVmode should be used when the first operand
2667 is a PLUS, MINUS, NEG, or ASHIFT. CCmode should be used when no special
922bd191 2668 processing is needed. */
e267e177 2669#define SELECT_CC_MODE(OP,X,Y) select_cc_mode ((OP), (X), (Y))
1bb87f28 2670
7913f3d0
RH
2671/* Return non-zero if MODE implies a floating point inequality can be
2672 reversed. For Sparc this is always true because we have a full
2673 compliment of ordered and unordered comparisons. */
2674#define REVERSIBLE_CC_MODE(MODE) 1
b331b745 2675
1bb87f28
JW
2676/* A function address in a call instruction
2677 is a byte address (for indexing purposes)
2678 so give the MEM rtx a byte's mode. */
2679#define FUNCTION_MODE SImode
2680
2681/* Define this if addresses of constant functions
2682 shouldn't be put through pseudo regs where they can be cse'd.
2683 Desirable on machines where ordinary constants are expensive
2684 but a CALL with constant address is cheap. */
2685#define NO_FUNCTION_CSE
2686
2687/* alloca should avoid clobbering the old register save area. */
2688#define SETJMP_VIA_SAVE_AREA
2689
2690/* Define subroutines to call to handle multiply and divide.
2691 Use the subroutines that Sun's library provides.
2692 The `*' prevents an underscore from being prepended by the compiler. */
2693
2694#define DIVSI3_LIBCALL "*.div"
2695#define UDIVSI3_LIBCALL "*.udiv"
2696#define MODSI3_LIBCALL "*.rem"
2697#define UMODSI3_LIBCALL "*.urem"
2698/* .umul is a little faster than .mul. */
2699#define MULSI3_LIBCALL "*.umul"
2700
8248e2bc 2701/* Define library calls for quad FP operations. These are all part of the
47ac041c
JJ
2702 SPARC 32bit ABI. */
2703#define ADDTF3_LIBCALL "_Q_add"
2704#define SUBTF3_LIBCALL "_Q_sub"
2705#define NEGTF2_LIBCALL "_Q_neg"
2706#define MULTF3_LIBCALL "_Q_mul"
2707#define DIVTF3_LIBCALL "_Q_div"
2708#define FLOATSITF2_LIBCALL "_Q_itoq"
2709#define FIX_TRUNCTFSI2_LIBCALL "_Q_qtoi"
2710#define FIXUNS_TRUNCTFSI2_LIBCALL "_Q_qtou"
2711#define EXTENDSFTF2_LIBCALL "_Q_stoq"
2712#define TRUNCTFSF2_LIBCALL "_Q_qtos"
2713#define EXTENDDFTF2_LIBCALL "_Q_dtoq"
2714#define TRUNCTFDF2_LIBCALL "_Q_qtod"
2715#define EQTF2_LIBCALL "_Q_feq"
2716#define NETF2_LIBCALL "_Q_fne"
2717#define GTTF2_LIBCALL "_Q_fgt"
2718#define GETF2_LIBCALL "_Q_fge"
2719#define LTTF2_LIBCALL "_Q_flt"
2720#define LETF2_LIBCALL "_Q_fle"
8248e2bc 2721
78e9b5df
JW
2722/* We can define the TFmode sqrt optab only if TARGET_FPU. This is because
2723 with soft-float, the SFmode and DFmode sqrt instructions will be absent,
2724 and the compiler will notice and try to use the TFmode sqrt instruction
2725 for calls to the builtin function sqrt, but this fails. */
27da6752
JW
2726#define INIT_TARGET_OPTABS \
2727 do { \
47ac041c
JJ
2728 if (TARGET_ARCH32) \
2729 { \
2730 add_optab->handlers[(int) TFmode].libfunc \
2731 = init_one_libfunc (ADDTF3_LIBCALL); \
2732 sub_optab->handlers[(int) TFmode].libfunc \
2733 = init_one_libfunc (SUBTF3_LIBCALL); \
2734 neg_optab->handlers[(int) TFmode].libfunc \
2735 = init_one_libfunc (NEGTF2_LIBCALL); \
2736 smul_optab->handlers[(int) TFmode].libfunc \
2737 = init_one_libfunc (MULTF3_LIBCALL); \
2738 flodiv_optab->handlers[(int) TFmode].libfunc \
2739 = init_one_libfunc (DIVTF3_LIBCALL); \
2740 eqtf2_libfunc = init_one_libfunc (EQTF2_LIBCALL); \
2741 netf2_libfunc = init_one_libfunc (NETF2_LIBCALL); \
2742 gttf2_libfunc = init_one_libfunc (GTTF2_LIBCALL); \
2743 getf2_libfunc = init_one_libfunc (GETF2_LIBCALL); \
2744 lttf2_libfunc = init_one_libfunc (LTTF2_LIBCALL); \
2745 letf2_libfunc = init_one_libfunc (LETF2_LIBCALL); \
2746 trunctfsf2_libfunc = init_one_libfunc (TRUNCTFSF2_LIBCALL); \
2747 trunctfdf2_libfunc = init_one_libfunc (TRUNCTFDF2_LIBCALL); \
2748 extendsftf2_libfunc = init_one_libfunc (EXTENDSFTF2_LIBCALL); \
2749 extenddftf2_libfunc = init_one_libfunc (EXTENDDFTF2_LIBCALL); \
2750 floatsitf_libfunc = init_one_libfunc (FLOATSITF2_LIBCALL); \
2751 fixtfsi_libfunc = init_one_libfunc (FIX_TRUNCTFSI2_LIBCALL); \
2752 fixunstfsi_libfunc \
2753 = init_one_libfunc (FIXUNS_TRUNCTFSI2_LIBCALL); \
2754 if (TARGET_FPU) \
2755 sqrt_optab->handlers[(int) TFmode].libfunc \
2756 = init_one_libfunc ("_Q_sqrt"); \
2757 } \
47428190 2758 INIT_SUBTARGET_OPTABS; \
78e9b5df
JW
2759 } while (0)
2760
2761/* This is meant to be redefined in the host dependent files */
2762#define INIT_SUBTARGET_OPTABS
2763
c5c60e15
BS
2764/* Nonzero if a floating point comparison library call for
2765 mode MODE that will return a boolean value. Zero if one
2766 of the libgcc2 functions is used. */
2767#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) ((MODE) == TFmode)
2768
1bb87f28
JW
2769/* Compute the cost of computing a constant rtl expression RTX
2770 whose rtx-code is CODE. The body of this macro is a portion
2771 of a switch statement. If the code is computed here,
2772 return it with a return statement. Otherwise, break from the switch. */
2773
3bb22aee 2774#define CONST_COSTS(RTX,CODE,OUTER_CODE) \
1bb87f28 2775 case CONST_INT: \
1bb87f28 2776 if (INTVAL (RTX) < 0x1000 && INTVAL (RTX) >= -0x1000) \
5b485d2c 2777 return 0; \
1bb87f28
JW
2778 case HIGH: \
2779 return 2; \
2780 case CONST: \
2781 case LABEL_REF: \
2782 case SYMBOL_REF: \
2783 return 4; \
2784 case CONST_DOUBLE: \
2785 if (GET_MODE (RTX) == DImode) \
2786 if ((XINT (RTX, 3) == 0 \
2787 && (unsigned) XINT (RTX, 2) < 0x1000) \
2788 || (XINT (RTX, 3) == -1 \
2789 && XINT (RTX, 2) < 0 \
2790 && XINT (RTX, 2) >= -0x1000)) \
5b485d2c 2791 return 0; \
1bb87f28
JW
2792 return 8;
2793
a0a74fda 2794#define ADDRESS_COST(RTX) 1
1bb87f28
JW
2795
2796/* Compute extra cost of moving data between one register class
bfd6bc60 2797 and another. */
284d86e9 2798#define GENERAL_OR_I64(C) ((C) == GENERAL_REGS || (C) == I64_REGS)
bfd6bc60 2799#define REGISTER_MOVE_COST(CLASS1, CLASS2) \
284d86e9
JC
2800 (((FP_REG_CLASS_P (CLASS1) && GENERAL_OR_I64 (CLASS2)) \
2801 || (GENERAL_OR_I64 (CLASS1) && FP_REG_CLASS_P (CLASS2)) \
bfd6bc60 2802 || (CLASS1) == FPCC_REGS || (CLASS2) == FPCC_REGS) \
284d86e9 2803 ? (sparc_cpu == PROCESSOR_ULTRASPARC ? 12 : 6) : 2)
1bb87f28
JW
2804
2805/* Provide the costs of a rtl expression. This is in the body of a
2806 switch on CODE. The purpose for the cost of MULT is to encourage
2807 `synth_mult' to find a synthetic multiply when reasonable.
2808
2809 If we need more than 12 insns to do a multiply, then go out-of-line,
2810 since the call overhead will be < 10% of the cost of the multiply. */
2811
3bb22aee 2812#define RTX_COSTS(X,CODE,OUTER_CODE) \
1bb87f28 2813 case MULT: \
3bc8b61e
DM
2814 if (sparc_cpu == PROCESSOR_ULTRASPARC) \
2815 return (GET_MODE (X) == DImode ? \
2816 COSTS_N_INSNS (34) : COSTS_N_INSNS (19)); \
bfd6bc60 2817 return TARGET_HARD_MUL ? COSTS_N_INSNS (5) : COSTS_N_INSNS (25); \
1bb87f28
JW
2818 case DIV: \
2819 case UDIV: \
2820 case MOD: \
2821 case UMOD: \
3bc8b61e
DM
2822 if (sparc_cpu == PROCESSOR_ULTRASPARC) \
2823 return (GET_MODE (X) == DImode ? \
2824 COSTS_N_INSNS (68) : COSTS_N_INSNS (37)); \
5b485d2c
JW
2825 return COSTS_N_INSNS (25); \
2826 /* Make FLOAT and FIX more expensive than CONST_DOUBLE,\
1bb87f28
JW
2827 so that cse will favor the latter. */ \
2828 case FLOAT: \
5b485d2c 2829 case FIX: \
1bb87f28
JW
2830 return 19;
2831
bfd6bc60
JC
2832#define ISSUE_RATE sparc_issue_rate()
2833
bef8d8c7 2834/* Adjust the cost of dependencies. */
8947065c 2835#define ADJUST_COST(INSN,LINK,DEP,COST) \
0b24a660 2836 (COST) = sparc_adjust_cost(INSN, LINK, DEP, COST)
bef8d8c7 2837
3bc8b61e
DM
2838#define MD_SCHED_INIT(DUMP, SCHED_VERBOSE) \
2839 if (sparc_cpu == PROCESSOR_ULTRASPARC) \
2840 ultrasparc_sched_init (DUMP, SCHED_VERBOSE)
2841
197043f5
RH
2842#define MD_SCHED_REORDER(DUMP, SCHED_VERBOSE, READY, N_READY, CLOCK, CIM) \
2843do { \
3bc8b61e 2844 if (sparc_cpu == PROCESSOR_ULTRASPARC) \
197043f5
RH
2845 ultrasparc_sched_reorder (DUMP, SCHED_VERBOSE, READY, N_READY); \
2846 CIM = issue_rate; \
2847} while (0)
3bc8b61e
DM
2848
2849#define MD_SCHED_VARIABLE_ISSUE(DUMP, SCHED_VERBOSE, INSN, CAN_ISSUE_MORE) \
197043f5
RH
2850do { \
2851 if (sparc_cpu == PROCESSOR_ULTRASPARC) \
2852 (CAN_ISSUE_MORE) = ultrasparc_variable_issue (INSN); \
2853 else \
2854 (CAN_ISSUE_MORE)--; \
2855} while (0)
3bc8b61e 2856
1bb87f28 2857/* Conditional branches with empty delay slots have a length of two. */
bfd6bc60 2858#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
197043f5 2859do { \
1bb87f28
JW
2860 if (GET_CODE (INSN) == CALL_INSN \
2861 || (GET_CODE (INSN) == JUMP_INSN && ! simplejump_p (insn))) \
197043f5
RH
2862 LENGTH += 1; \
2863} while (0)
1bb87f28
JW
2864\f
2865/* Control the assembler format that we output. */
2866
2867/* Output at beginning of assembler file. */
2868
2869#define ASM_FILE_START(file)
2870
1ccfa253
DE
2871/* A C string constant describing how to begin a comment in the target
2872 assembler language. The compiler assumes that the comment will end at
2873 the end of the line. */
2874
2875#define ASM_COMMENT_START "!"
2876
1bb87f28
JW
2877/* Output to assembler file text saying following lines
2878 may contain character constants, extra white space, comments, etc. */
2879
2880#define ASM_APP_ON ""
2881
2882/* Output to assembler file text saying following lines
2883 no longer contain unusual constructs. */
2884
2885#define ASM_APP_OFF ""
2886
7a6cf439
DE
2887/* ??? Try to make the style consistent here (_OP?). */
2888
2889#define ASM_LONGLONG ".xword"
303d524a
JW
2890#define ASM_LONG ".word"
2891#define ASM_SHORT ".half"
2892#define ASM_BYTE_OP ".byte"
7a6cf439
DE
2893#define ASM_FLOAT ".single"
2894#define ASM_DOUBLE ".double"
2895#define ASM_LONGDOUBLE ".xxx" /* ??? Not known (or used yet). */
303d524a 2896
1bb87f28
JW
2897/* Output before read-only data. */
2898
2899#define TEXT_SECTION_ASM_OP ".text"
2900
2901/* Output before writable data. */
2902
2903#define DATA_SECTION_ASM_OP ".data"
2904
2905/* How to refer to registers in assembler output.
2906 This sequence is indexed by compiler's hard-register-number (see above). */
2907
7a6cf439
DE
2908#define REGISTER_NAMES \
2909{"%g0", "%g1", "%g2", "%g3", "%g4", "%g5", "%g6", "%g7", \
2910 "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%sp", "%o7", \
2911 "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7", \
2912 "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%fp", "%i7", \
2913 "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7", \
2914 "%f8", "%f9", "%f10", "%f11", "%f12", "%f13", "%f14", "%f15", \
2915 "%f16", "%f17", "%f18", "%f19", "%f20", "%f21", "%f22", "%f23", \
2916 "%f24", "%f25", "%f26", "%f27", "%f28", "%f29", "%f30", "%f31", \
2917 "%f32", "%f33", "%f34", "%f35", "%f36", "%f37", "%f38", "%f39", \
2918 "%f40", "%f41", "%f42", "%f43", "%f44", "%f45", "%f46", "%f47", \
2919 "%f48", "%f49", "%f50", "%f51", "%f52", "%f53", "%f54", "%f55", \
2920 "%f56", "%f57", "%f58", "%f59", "%f60", "%f61", "%f62", "%f63", \
c4ce6853 2921 "%fcc0", "%fcc1", "%fcc2", "%fcc3", "%icc"}
ea3fa5f7 2922
c4ce6853 2923/* Define additional names for use in asm clobbers and asm declarations. */
ea3fa5f7 2924
c4ce6853
DE
2925#define ADDITIONAL_REGISTER_NAMES \
2926{{"ccr", SPARC_ICC_REG}, {"cc", SPARC_ICC_REG}}
ea3fa5f7 2927
c53aa195
JM
2928/* How to renumber registers for dbx and gdb. In the flat model, the frame
2929 pointer is really %i7. */
1bb87f28 2930
c53aa195
JM
2931#define DBX_REGISTER_NUMBER(REGNO) \
2932 (TARGET_FLAT && REGNO == FRAME_POINTER_REGNUM ? 31 : REGNO)
1bb87f28 2933
5bcb3f13
JM
2934/* On Sun 4, this limit is 2048. We use 1000 to be safe, since the length
2935 can run past this up to a continuation point. Once we used 1500, but
2936 a single entry in C++ can run more than 500 bytes, due to the length of
2937 mangled symbol names. dbxout.c should really be fixed to do
2938 continuations when they are actually needed instead of trying to
2939 guess... */
2940#define DBX_CONTIN_LENGTH 1000
1bb87f28
JW
2941
2942/* This is how to output a note to DBX telling it the line number
2943 to which the following sequence of instructions corresponds.
2944
2945 This is needed for SunOS 4.0, and should not hurt for 3.2
2946 versions either. */
2947#define ASM_OUTPUT_SOURCE_LINE(file, line) \
2948 { static int sym_lineno = 1; \
2949 fprintf (file, ".stabn 68,0,%d,LM%d\nLM%d:\n", \
2950 line, sym_lineno, sym_lineno); \
2951 sym_lineno += 1; }
2952
2953/* This is how to output the definition of a user-level label named NAME,
2954 such as the label on a static function or variable NAME. */
2955
2956#define ASM_OUTPUT_LABEL(FILE,NAME) \
2957 do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
2958
2959/* This is how to output a command to make the user-level label named NAME
2960 defined for reference from other files. */
2961
2962#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
2963 do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
2964
4e0c8ad2 2965/* The prefix to add to user-visible assembler symbols. */
1bb87f28 2966
4e0c8ad2 2967#define USER_LABEL_PREFIX "_"
1bb87f28 2968
d2a8e680 2969/* This is how to output a definition of an internal numbered label where
1bb87f28
JW
2970 PREFIX is the class of label and NUM is the number within the class. */
2971
2972#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
2973 fprintf (FILE, "%s%d:\n", PREFIX, NUM)
2974
2975/* This is how to store into the string LABEL
2976 the symbol_ref name of an internal numbered label where
2977 PREFIX is the class of label and NUM is the number within the class.
2978 This is suitable for output with `assemble_name'. */
2979
2980#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
4f70758f 2981 sprintf ((LABEL), "*%s%ld", (PREFIX), (long)(NUM))
1bb87f28 2982
1ccfa253
DE
2983/* This is how to output an assembler line defining a `float' constant.
2984 We always have to use a .long pseudo-op to do this because the native
2985 SVR4 ELF assembler is buggy and it generates incorrect values when we
2986 try to use the .float pseudo-op instead. */
1bb87f28 2987
1ccfa253
DE
2988#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
2989 { \
2990 long t; \
2991 char str[30]; \
2992 REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
2993 REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
2994 fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", ASM_LONG, t, \
2995 ASM_COMMENT_START, str); \
2996 } \
1bb87f28 2997
1ccfa253
DE
2998/* This is how to output an assembler line defining a `double' constant.
2999 We always have to use a .long pseudo-op to do this because the native
3000 SVR4 ELF assembler is buggy and it generates incorrect values when we
3001 try to use the .float pseudo-op instead. */
1bb87f28 3002
1ccfa253
DE
3003#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
3004 { \
3005 long t[2]; \
3006 char str[30]; \
3007 REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
3008 REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
3009 fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", ASM_LONG, t[0], \
3010 ASM_COMMENT_START, str); \
3011 fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[1]); \
3012 }
1bb87f28 3013
0cd02cbb
DE
3014/* This is how to output an assembler line defining a `long double'
3015 constant. */
3016
1ccfa253
DE
3017#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
3018 { \
3019 long t[4]; \
3020 char str[30]; \
3021 REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t); \
3022 REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
3023 fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", ASM_LONG, t[0], \
3024 ASM_COMMENT_START, str); \
3025 fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[1]); \
3026 fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[2]); \
3027 fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[3]); \
0cd02cbb
DE
3028 }
3029
1bb87f28
JW
3030/* This is how to output an assembler line defining an `int' constant. */
3031
3032#define ASM_OUTPUT_INT(FILE,VALUE) \
303d524a 3033( fprintf (FILE, "\t%s\t", ASM_LONG), \
1bb87f28
JW
3034 output_addr_const (FILE, (VALUE)), \
3035 fprintf (FILE, "\n"))
3036
3037/* This is how to output an assembler line defining a DImode constant. */
3038#define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \
3039 output_double_int (FILE, VALUE)
3040
3041/* Likewise for `char' and `short' constants. */
3042
3043#define ASM_OUTPUT_SHORT(FILE,VALUE) \
303d524a 3044( fprintf (FILE, "\t%s\t", ASM_SHORT), \
1bb87f28
JW
3045 output_addr_const (FILE, (VALUE)), \
3046 fprintf (FILE, "\n"))
3047
3048#define ASM_OUTPUT_CHAR(FILE,VALUE) \
303d524a 3049( fprintf (FILE, "\t%s\t", ASM_BYTE_OP), \
1bb87f28
JW
3050 output_addr_const (FILE, (VALUE)), \
3051 fprintf (FILE, "\n"))
3052
3053/* This is how to output an assembler line for a numeric constant byte. */
3054
3055#define ASM_OUTPUT_BYTE(FILE,VALUE) \
303d524a 3056 fprintf (FILE, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE))
1bb87f28 3057
e0d80184
DM
3058/* This is how we hook in and defer the case-vector until the end of
3059 the function. */
e0d80184
DM
3060#define ASM_OUTPUT_ADDR_VEC(LAB,VEC) \
3061 sparc_defer_case_vector ((LAB),(VEC), 0)
3062
3063#define ASM_OUTPUT_ADDR_DIFF_VEC(LAB,VEC) \
3064 sparc_defer_case_vector ((LAB),(VEC), 1)
3065
1bb87f28
JW
3066/* This is how to output an element of a case-vector that is absolute. */
3067
3068#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
4b69d2a3
RS
3069do { \
3070 char label[30]; \
3071 ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
67cb8900 3072 if (CASE_VECTOR_MODE == SImode) \
7a6cf439 3073 fprintf (FILE, "\t.word\t"); \
7a6cf439
DE
3074 else \
3075 fprintf (FILE, "\t.xword\t"); \
4b69d2a3 3076 assemble_name (FILE, label); \
e0d80184 3077 fputc ('\n', FILE); \
4b69d2a3 3078} while (0)
1bb87f28
JW
3079
3080/* This is how to output an element of a case-vector that is relative.
3081 (SPARC uses such vectors only when generating PIC.) */
3082
33f7f353 3083#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
4b69d2a3
RS
3084do { \
3085 char label[30]; \
e0d80184 3086 ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
67cb8900 3087 if (CASE_VECTOR_MODE == SImode) \
7a6cf439 3088 fprintf (FILE, "\t.word\t"); \
7a6cf439
DE
3089 else \
3090 fprintf (FILE, "\t.xword\t"); \
4b69d2a3 3091 assemble_name (FILE, label); \
e0d80184
DM
3092 ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL)); \
3093 fputc ('-', FILE); \
3094 assemble_name (FILE, label); \
3095 fputc ('\n', FILE); \
4b69d2a3 3096} while (0)
1bb87f28 3097
d1accaa3
JJ
3098/* This is what to output before and after case-vector (both
3099 relative and absolute). If .subsection -1 works, we put case-vectors
3100 at the beginning of the current section. */
3101
3102#ifdef HAVE_GAS_SUBSECTION_ORDERING
3103
3104#define ASM_OUTPUT_ADDR_VEC_START(FILE) \
3105 fprintf(FILE, "\t.subsection\t-1\n")
3106
3107#define ASM_OUTPUT_ADDR_VEC_END(FILE) \
3108 fprintf(FILE, "\t.previous\n")
3109
3110#endif
3111
1bb87f28
JW
3112/* This is how to output an assembler line
3113 that says to advance the location counter
3114 to a multiple of 2**LOG bytes. */
3115
3116#define ASM_OUTPUT_ALIGN(FILE,LOG) \
3117 if ((LOG) != 0) \
3118 fprintf (FILE, "\t.align %d\n", (1<<(LOG)))
3119
3120#define ASM_OUTPUT_SKIP(FILE,SIZE) \
3121 fprintf (FILE, "\t.skip %u\n", (SIZE))
3122
3123/* This says how to output an assembler line
3124 to define a global common symbol. */
3125
3126#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
b277ceaf 3127( fputs ("\t.common ", (FILE)), \
1bb87f28 3128 assemble_name ((FILE), (NAME)), \
b277ceaf 3129 fprintf ((FILE), ",%u,\"bss\"\n", (SIZE)))
1bb87f28 3130
b277ceaf
JW
3131/* This says how to output an assembler line to define a local common
3132 symbol. */
1bb87f28 3133
b277ceaf
JW
3134#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGNED) \
3135( fputs ("\t.reserve ", (FILE)), \
3136 assemble_name ((FILE), (NAME)), \
3137 fprintf ((FILE), ",%u,\"bss\",%u\n", \
3138 (SIZE), ((ALIGNED) / BITS_PER_UNIT)))
1bb87f28 3139
101d9529
JM
3140/* A C statement (sans semicolon) to output to the stdio stream
3141 FILE the assembler definition of uninitialized global DECL named
3142 NAME whose size is SIZE bytes and alignment is ALIGN bytes.
3143 Try to use asm_output_aligned_bss to implement this macro. */
3144
3145#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
3146 do { \
3147 fputs (".globl ", (FILE)); \
3148 assemble_name ((FILE), (NAME)); \
3149 fputs ("\n", (FILE)); \
3150 ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \
3151 } while (0)
3152
1bb87f28
JW
3153/* Store in OUTPUT a string (made with alloca) containing
3154 an assembler-name for a local static variable named NAME.
3155 LABELNO is an integer which is different for each call. */
3156
3157#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
3158( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
3159 sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
3160
c14f2655
RS
3161#define IDENT_ASM_OP ".ident"
3162
3163/* Output #ident as a .ident. */
3164
3165#define ASM_OUTPUT_IDENT(FILE, NAME) \
3166 fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
3167
c94b3179
JM
3168/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
3169 Used for C++ multiple inheritance. */
1df8f58f
JM
3170#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
3171do { \
3172 int big_delta = (DELTA) >= 4096 || (DELTA) < -4096; \
3173 if (big_delta) \
3174 fprintf (FILE, "\tset %d,%%g1\n\tadd %%o0,%%g1,%%o0\n", (DELTA)); \
194faace
RH
3175 /* Don't use the jmp solution unless we know the target is local to \
3176 the application or shared object. \
3177 XXX: Wimp out and don't actually check anything except if this is \
3178 an embedded target where we assume there are no shared libs. */ \
3179 if (!TARGET_CM_EMBMEDANY || flag_pic) \
fd407cd2
JM
3180 { \
3181 if (! big_delta) \
3182 fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
194faace 3183 fprintf (FILE, "\tmov %%o7,%%g1\n"); \
fd407cd2 3184 fprintf (FILE, "\tcall "); \
92d4501f 3185 assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
fd407cd2
JM
3186 fprintf (FILE, ",0\n"); \
3187 } \
a0a301fc 3188 else if (TARGET_CM_EMBMEDANY) \
1df8f58f
JM
3189 { \
3190 fprintf (FILE, "\tsetx "); \
92d4501f 3191 assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
1df8f58f
JM
3192 fprintf (FILE, ",%%g5,%%g1\n\tjmp %%g1\n"); \
3193 } \
3194 else \
3195 { \
3196 fprintf (FILE, "\tsethi %%hi("); \
92d4501f 3197 assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
1df8f58f 3198 fprintf (FILE, "),%%g1\n\tjmp %%g1+%%lo("); \
92d4501f 3199 assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
1df8f58f
JM
3200 fprintf (FILE, ")\n"); \
3201 } \
194faace
RH
3202 if (!TARGET_CM_EMBMEDANY || flag_pic) \
3203 fprintf (FILE, "\tmov %%g1,%%o7\n"); \
3204 else if (big_delta) \
fd407cd2 3205 fprintf (FILE, "\tnop\n"); \
fd407cd2
JM
3206 else \
3207 fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
c94b3179
JM
3208} while (0)
3209
1bb87f28
JW
3210/* Define the parentheses used to group arithmetic operations
3211 in assembler code. */
3212
3213#define ASM_OPEN_PAREN "("
3214#define ASM_CLOSE_PAREN ")"
3215
3216/* Define results of standard character escape sequences. */
3217#define TARGET_BELL 007
3218#define TARGET_BS 010
3219#define TARGET_TAB 011
3220#define TARGET_NEWLINE 012
3221#define TARGET_VT 013
3222#define TARGET_FF 014
3223#define TARGET_CR 015
3224
3225#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
a0a301fc 3226 ((CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^' || (CHAR) == '(' || (CHAR) == '_')
1bb87f28
JW
3227
3228/* Print operand X (an rtx) in assembler syntax to file FILE.
3229 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
3230 For `%' followed by punctuation, CODE is the punctuation and X is null. */
3231
3232#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
3233
3234/* Print a memory address as an operand to reference that memory location. */
3235
3236#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
3237{ register rtx base, index = 0; \
3238 int offset = 0; \
3239 register rtx addr = ADDR; \
3240 if (GET_CODE (addr) == REG) \
3241 fputs (reg_names[REGNO (addr)], FILE); \
3242 else if (GET_CODE (addr) == PLUS) \
3243 { \
3244 if (GET_CODE (XEXP (addr, 0)) == CONST_INT) \
3245 offset = INTVAL (XEXP (addr, 0)), base = XEXP (addr, 1);\
3246 else if (GET_CODE (XEXP (addr, 1)) == CONST_INT) \
3247 offset = INTVAL (XEXP (addr, 1)), base = XEXP (addr, 0);\
3248 else \
3249 base = XEXP (addr, 0), index = XEXP (addr, 1); \
1cb36a98
RH
3250 if (GET_CODE (base) == LO_SUM) \
3251 { \
3252 if (! USE_AS_OFFSETABLE_LO10 \
3253 || TARGET_ARCH32 \
3254 || TARGET_CM_MEDMID) \
3255 abort (); \
3256 output_operand (XEXP (base, 0), 0); \
3257 fputs ("+%lo(", FILE); \
3258 output_address (XEXP (base, 1)); \
3259 fprintf (FILE, ")+%d", offset); \
3260 } \
3261 else \
3262 { \
3263 fputs (reg_names[REGNO (base)], FILE); \
3264 if (index == 0) \
3265 fprintf (FILE, "%+d", offset); \
3266 else if (GET_CODE (index) == REG) \
3267 fprintf (FILE, "+%s", reg_names[REGNO (index)]); \
3268 else if (GET_CODE (index) == SYMBOL_REF \
3269 || GET_CODE (index) == CONST) \
3270 fputc ('+', FILE), output_addr_const (FILE, index); \
3271 else abort (); \
3272 } \
1bb87f28
JW
3273 } \
3274 else if (GET_CODE (addr) == MINUS \
3275 && GET_CODE (XEXP (addr, 1)) == LABEL_REF) \
3276 { \
3277 output_addr_const (FILE, XEXP (addr, 0)); \
3278 fputs ("-(", FILE); \
3279 output_addr_const (FILE, XEXP (addr, 1)); \
3280 fputs ("-.)", FILE); \
3281 } \
3282 else if (GET_CODE (addr) == LO_SUM) \
3283 { \
3284 output_operand (XEXP (addr, 0), 0); \
e0d80184
DM
3285 if (TARGET_CM_MEDMID) \
3286 fputs ("+%l44(", FILE); \
3287 else \
3288 fputs ("+%lo(", FILE); \
1bb87f28
JW
3289 output_address (XEXP (addr, 1)); \
3290 fputc (')', FILE); \
3291 } \
3292 else if (flag_pic && GET_CODE (addr) == CONST \
3293 && GET_CODE (XEXP (addr, 0)) == MINUS \
3294 && GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST \
3295 && GET_CODE (XEXP (XEXP (XEXP (addr, 0), 1), 0)) == MINUS \
3296 && XEXP (XEXP (XEXP (XEXP (addr, 0), 1), 0), 1) == pc_rtx) \
3297 { \
3298 addr = XEXP (addr, 0); \
3299 output_addr_const (FILE, XEXP (addr, 0)); \
3300 /* Group the args of the second CONST in parenthesis. */ \
3301 fputs ("-(", FILE); \
3302 /* Skip past the second CONST--it does nothing for us. */\
3303 output_addr_const (FILE, XEXP (XEXP (addr, 1), 0)); \
3304 /* Close the parenthesis. */ \
3305 fputc (')', FILE); \
3306 } \
3307 else \
3308 { \
3309 output_addr_const (FILE, addr); \
3310 } \
3311}
3312
f7e0e539
DM
3313/* Define the codes that are matched by predicates in sparc.c. */
3314
11301057
RH
3315#define PREDICATE_CODES \
3316{"reg_or_0_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE}}, \
3317{"fp_zero_operand", {CONST_DOUBLE}}, \
62190128
DM
3318{"fp_sethi_p", {CONST_DOUBLE}}, \
3319{"fp_mov_p", {CONST_DOUBLE}}, \
3320{"fp_high_losum_p", {CONST_DOUBLE}}, \
11301057
RH
3321{"intreg_operand", {SUBREG, REG}}, \
3322{"fcc_reg_operand", {REG}}, \
3323{"icc_or_fcc_reg_operand", {REG}}, \
3324{"restore_operand", {REG}}, \
3325{"call_operand", {MEM}}, \
3326{"call_operand_address", {SYMBOL_REF, LABEL_REF, CONST, CONST_DOUBLE, \
3327 ADDRESSOF, SUBREG, REG, PLUS, LO_SUM, CONST_INT}}, \
6871dd65 3328{"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, \
11301057
RH
3329{"symbolic_memory_operand", {SUBREG, MEM}}, \
3330{"label_ref_operand", {LABEL_REF}}, \
3331{"sp64_medium_pic_operand", {CONST}}, \
3332{"data_segment_operand", {SYMBOL_REF, PLUS, CONST}}, \
3333{"text_segment_operand", {LABEL_REF, SYMBOL_REF, PLUS, CONST}}, \
3334{"reg_or_nonsymb_mem_operand", {SUBREG, REG, MEM}}, \
3335{"splittable_symbolic_memory_operand", {MEM}}, \
3336{"splittable_immediate_memory_operand", {MEM}}, \
3337{"eq_or_neq", {EQ, NE}}, \
3338{"normal_comp_operator", {GE, GT, LE, LT, GTU, LEU}}, \
3339{"noov_compare_op", {NE, EQ, GE, GT, LE, LT, GEU, GTU, LEU, LTU}}, \
3340{"v9_regcmp_op", {EQ, NE, GE, LT, LE, GT}}, \
3341{"extend_op", {SIGN_EXTEND, ZERO_EXTEND}}, \
3342{"cc_arithop", {AND, IOR, XOR}}, \
3343{"cc_arithopn", {AND, IOR}}, \
3344{"arith_operand", {SUBREG, REG, CONST_INT}}, \
3345{"arith_add_operand", {SUBREG, REG, CONST_INT}}, \
3346{"arith11_operand", {SUBREG, REG, CONST_INT}}, \
3347{"arith10_operand", {SUBREG, REG, CONST_INT}}, \
3348{"arith_double_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE}}, \
3349{"arith_double_add_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE}}, \
3350{"arith11_double_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE}}, \
3351{"arith10_double_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE}}, \
3352{"small_int", {CONST_INT}}, \
3353{"small_int_or_double", {CONST_INT, CONST_DOUBLE}}, \
3354{"uns_small_int", {CONST_INT}}, \
3355{"uns_arith_operand", {SUBREG, REG, CONST_INT}}, \
3356{"clobbered_register", {REG}}, \
3357{"input_operand", {SUBREG, REG, CONST_INT, MEM, CONST}}, \
11301057
RH
3358{"const64_operand", {CONST_INT, CONST_DOUBLE}}, \
3359{"const64_high_operand", {CONST_INT, CONST_DOUBLE}},
f7e0e539 3360
27a36778
MS
3361/* The number of Pmode words for the setjmp buffer. */
3362#define JMP_BUF_SIZE 12
3363
59ba1a3a
MS
3364#define DONT_ACCESS_GBLS_AFTER_EPILOGUE (flag_pic)
3365
1bb87f28
JW
3366/* Defined in flags.h, but insn-emit.c does not include flags.h. */
3367
3368extern int flag_pic;