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