1 |
282 |
jeremybenn |
/* Definitions for GCC. Part of the machine description for CRIS.
|
2 |
|
|
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
|
3 |
|
|
2009 Free Software Foundation, Inc.
|
4 |
|
|
Contributed by Axis Communications. Written by Hans-Peter Nilsson.
|
5 |
|
|
|
6 |
|
|
This file is part of GCC.
|
7 |
|
|
|
8 |
|
|
GCC is free software; you can redistribute it and/or modify
|
9 |
|
|
it under the terms of the GNU General Public License as published by
|
10 |
|
|
the Free Software Foundation; either version 3, or (at your option)
|
11 |
|
|
any later version.
|
12 |
|
|
|
13 |
|
|
GCC is distributed in the hope that it will be useful,
|
14 |
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16 |
|
|
GNU General Public License for more details.
|
17 |
|
|
|
18 |
|
|
You should have received a copy of the GNU General Public License
|
19 |
|
|
along with GCC; see the file COPYING3. If not see
|
20 |
|
|
<http://www.gnu.org/licenses/>. */
|
21 |
|
|
|
22 |
|
|
/* After the first "Node:" comment comes all preprocessor directives and
|
23 |
|
|
attached declarations described in the info files, the "Using and
|
24 |
|
|
Porting GCC" manual (uapgcc), in the same order as found in the "Target
|
25 |
|
|
macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not
|
26 |
|
|
really, but needs an update anyway.
|
27 |
|
|
|
28 |
|
|
There is no generic copy-of-uapgcc comment, you'll have to see uapgcc
|
29 |
|
|
for that. If applicable, there is a CRIS-specific comment. The order
|
30 |
|
|
of macro definitions follow the order in the manual. Every section in
|
31 |
|
|
the manual (node in the info pages) has an introductory `Node:
|
32 |
|
|
<subchapter>' comment. If no macros are defined for a section, only
|
33 |
|
|
the section-comment is present. */
|
34 |
|
|
|
35 |
|
|
/* Note that other header files (e.g. config/elfos.h, config/linux.h,
|
36 |
|
|
config/cris/linux.h and config/cris/aout.h) are responsible for lots of
|
37 |
|
|
settings not repeated below. This file contains general CRIS
|
38 |
|
|
definitions and definitions for the cris-*-elf subtarget. */
|
39 |
|
|
|
40 |
|
|
/* We don't want to use gcc_assert for everything, as that can be
|
41 |
|
|
compiled out. */
|
42 |
|
|
#define CRIS_ASSERT(x) \
|
43 |
|
|
do { if (!(x)) internal_error ("CRIS-port assertion failed: " #x); } while (0)
|
44 |
|
|
|
45 |
|
|
/* Replacement for REG_P since it does not match SUBREGs. Happens for
|
46 |
|
|
testcase Axis-20000320 with gcc-2.9x. */
|
47 |
|
|
#define REG_S_P(x) \
|
48 |
|
|
(REG_P (x) || (GET_CODE (x) == SUBREG && REG_P (XEXP (x, 0))))
|
49 |
|
|
|
50 |
|
|
/* Last register in main register bank r0..r15. */
|
51 |
|
|
#define CRIS_LAST_GENERAL_REGISTER 15
|
52 |
|
|
|
53 |
|
|
/* Descriptions of registers used for arguments. */
|
54 |
|
|
#define CRIS_FIRST_ARG_REG 10
|
55 |
|
|
#define CRIS_MAX_ARGS_IN_REGS 4
|
56 |
|
|
|
57 |
|
|
/* See also *_REGNUM constants in cris.md. */
|
58 |
|
|
|
59 |
|
|
/* Most of the time, we need the index into the register-names array.
|
60 |
|
|
When passing debug-info, we need the real hardware register number. */
|
61 |
|
|
#define CRIS_CANONICAL_SRP_REGNUM (16 + 11)
|
62 |
|
|
#define CRIS_CANONICAL_MOF_REGNUM (16 + 7)
|
63 |
|
|
/* We have CCR in all models including v10, but that's 16 bits, so let's
|
64 |
|
|
prefer the DCCR number, which is a DMA pointer in pre-v8, so we'll
|
65 |
|
|
never clash with it for GCC purposes. */
|
66 |
|
|
#define CRIS_CANONICAL_CC0_REGNUM (16 + 13)
|
67 |
|
|
|
68 |
|
|
/* When generating PIC, these suffixes are added to the names of non-local
|
69 |
|
|
functions when being output. Contrary to other ports, we have offsets
|
70 |
|
|
relative to the GOT, not the PC. We might implement PC-relative PLT
|
71 |
|
|
semantics later for the general case; they are used in some cases right
|
72 |
|
|
now, such as MI thunks. */
|
73 |
|
|
#define CRIS_GOTPLT_SUFFIX ":GOTPLT"
|
74 |
|
|
#define CRIS_PLT_GOTOFFSET_SUFFIX ":PLTG"
|
75 |
|
|
#define CRIS_PLT_PCOFFSET_SUFFIX ":PLT"
|
76 |
|
|
|
77 |
|
|
#define CRIS_FUNCTION_ARG_SIZE(MODE, TYPE) \
|
78 |
|
|
((MODE) != BLKmode ? GET_MODE_SIZE (MODE) \
|
79 |
|
|
: (unsigned) int_size_in_bytes (TYPE))
|
80 |
|
|
|
81 |
|
|
/* Which CPU version this is. The parsed and adjusted cris_cpu_str. */
|
82 |
|
|
extern int cris_cpu_version;
|
83 |
|
|
|
84 |
|
|
/* Changing the order used to be necessary to put the fourth __make_dp
|
85 |
|
|
argument (a DImode parameter) in registers, to fit with the libfunc
|
86 |
|
|
parameter passing scheme used for intrinsic functions. FIXME: Check
|
87 |
|
|
performance and maybe remove definition from TARGET_LIBGCC2_CFLAGS now
|
88 |
|
|
that it isn't strictly necessary. We used to do this through
|
89 |
|
|
TARGET_LIBGCC2_CFLAGS, but that became increasingly difficult as the
|
90 |
|
|
parenthesis (that needed quoting) travels through several layers of
|
91 |
|
|
make and shell invocations. */
|
92 |
|
|
#ifdef IN_LIBGCC2
|
93 |
|
|
#define __make_dp(a,b,c,d) __cris_make_dp(d,a,b,c)
|
94 |
|
|
#endif
|
95 |
|
|
|
96 |
|
|
|
97 |
|
|
/* Node: Driver */
|
98 |
|
|
|
99 |
|
|
/* When using make with defaults.mak for Sun this will handily remove
|
100 |
|
|
any "-target sun*" switches. */
|
101 |
|
|
/* We need to override any previous definitions (linux.h) */
|
102 |
|
|
#undef WORD_SWITCH_TAKES_ARG
|
103 |
|
|
#define WORD_SWITCH_TAKES_ARG(STR) \
|
104 |
|
|
(DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \
|
105 |
|
|
|| !strcmp (STR, "target"))
|
106 |
|
|
|
107 |
|
|
/* Also provide canonical vN definitions when user specifies an alias.
|
108 |
|
|
Note that -melf overrides -maout. */
|
109 |
|
|
|
110 |
|
|
#define CPP_SPEC \
|
111 |
|
|
"%{mtune=*:-D__tune_%* %{mtune=v*:-D__CRIS_arch_tune=%*}\
|
112 |
|
|
%{mtune=etrax4:-D__tune_v3 -D__CRIS_arch_tune=3}\
|
113 |
|
|
%{mtune=etrax100:-D__tune_v8 -D__CRIS_arch_tune=8}\
|
114 |
|
|
%{mtune=svinto:-D__tune_v8 -D__CRIS_arch_tune=8}\
|
115 |
|
|
%{mtune=etrax100lx:-D__tune_v10 -D__CRIS_arch_tune=10}\
|
116 |
|
|
%{mtune=ng:-D__tune_v10 -D__CRIS_arch_tune=10}}\
|
117 |
|
|
%{mcpu=*:-D__arch_%* %{mcpu=v*:-D__CRIS_arch_version=%*}\
|
118 |
|
|
%{mcpu=etrax4:-D__arch_v3 -D__CRIS_arch_version=3}\
|
119 |
|
|
%{mcpu=etrax100:-D__arch_v8 -D__CRIS_arch_version=8}\
|
120 |
|
|
%{mcpu=svinto:-D__arch_v8 -D__CRIS_arch_version=8}\
|
121 |
|
|
%{mcpu=etrax100lx:-D__arch_v10 -D__CRIS_arch_version=10}\
|
122 |
|
|
%{mcpu=ng:-D__arch_v10 -D__CRIS_arch_version=10}}\
|
123 |
|
|
%{march=*:-D__arch_%* %{march=v*:-D__CRIS_arch_version=%*}\
|
124 |
|
|
%{march=etrax4:-D__arch_v3 -D__CRIS_arch_version=3}\
|
125 |
|
|
%{march=etrax100:-D__arch_v8 -D__CRIS_arch_version=8}\
|
126 |
|
|
%{march=svinto:-D__arch_v8 -D__CRIS_arch_version=8}\
|
127 |
|
|
%{march=etrax100lx:-D__arch_v10 -D__CRIS_arch_version=10}\
|
128 |
|
|
%{march=ng:-D__arch_v10 -D__CRIS_arch_version=10}}\
|
129 |
|
|
%{metrax100:-D__arch__v8 -D__CRIS_arch_version=8}\
|
130 |
|
|
%{metrax4:-D__arch__v3 -D__CRIS_arch_version=3}\
|
131 |
|
|
%(cpp_subtarget)"
|
132 |
|
|
|
133 |
|
|
/* For the cris-*-elf subtarget. */
|
134 |
|
|
|
135 |
|
|
#define CRIS_DEFAULT_TUNE "10"
|
136 |
|
|
#define CRIS_ARCH_CPP_DEFAULT
|
137 |
|
|
#define CRIS_DEFAULT_ASM_ARCH_OPTION ""
|
138 |
|
|
|
139 |
|
|
#ifdef TARGET_CPU_DEFAULT
|
140 |
|
|
#if TARGET_CPU_DEFAULT != 32 && TARGET_CPU_DEFAULT != 10
|
141 |
|
|
#error "Due to '()'; e.g. '#define TARGET_CPU_DEFAULT (10)', stringize TARGET_CPU_DEFAULT isn't useful: update manually."
|
142 |
|
|
#endif
|
143 |
|
|
|
144 |
|
|
#if TARGET_CPU_DEFAULT == 32
|
145 |
|
|
#undef CRIS_DEFAULT_TUNE
|
146 |
|
|
#define CRIS_DEFAULT_TUNE "32"
|
147 |
|
|
/* To enable use of "generic" cris-axis-elf binutils, always pass the
|
148 |
|
|
architecture option to GAS. (We don't do this for non-v32.) */
|
149 |
|
|
#undef CRIS_DEFAULT_ASM_ARCH_OPTION
|
150 |
|
|
#define CRIS_DEFAULT_ASM_ARCH_OPTION "--march=v32"
|
151 |
|
|
#endif
|
152 |
|
|
|
153 |
|
|
#undef CRIS_ARCH_CPP_DEFAULT
|
154 |
|
|
#define CRIS_ARCH_CPP_DEFAULT \
|
155 |
|
|
"%{!march=*:\
|
156 |
|
|
%{!metrax*:\
|
157 |
|
|
%{!mcpu=*:\
|
158 |
|
|
%{!mtune=*:-D__tune_v" CRIS_DEFAULT_TUNE "}\
|
159 |
|
|
-D__arch_v"CRIS_DEFAULT_TUNE\
|
160 |
|
|
" -D__CRIS_arch_version=" CRIS_DEFAULT_TUNE "}}}"
|
161 |
|
|
#endif
|
162 |
|
|
|
163 |
|
|
#define CRIS_CPP_SUBTARGET_SPEC \
|
164 |
|
|
"%{mbest-lib-options:\
|
165 |
|
|
%{!moverride-best-lib-options:\
|
166 |
|
|
%{!march=*:%{!metrax*:%{!mcpu=*:\
|
167 |
|
|
-D__tune_v" CRIS_DEFAULT_TUNE \
|
168 |
|
|
" -D__CRIS_arch_tune=" CRIS_DEFAULT_TUNE "}}}}}"\
|
169 |
|
|
CRIS_ARCH_CPP_DEFAULT
|
170 |
|
|
|
171 |
|
|
/* Remove those Sun-make "target" switches. */
|
172 |
|
|
/* Override previous definitions (linux.h). */
|
173 |
|
|
#undef CC1_SPEC
|
174 |
|
|
#define CC1_SPEC \
|
175 |
|
|
"%{target*:}\
|
176 |
|
|
%{metrax4:-march=v3}\
|
177 |
|
|
%{metrax100:-march=v8}\
|
178 |
|
|
%(cc1_subtarget)"
|
179 |
|
|
|
180 |
|
|
/* For the cris-*-elf subtarget. */
|
181 |
|
|
#define CRIS_CC1_SUBTARGET_SPEC \
|
182 |
|
|
"-melf\
|
183 |
|
|
%{mbest-lib-options:\
|
184 |
|
|
%{!moverride-best-lib-options:\
|
185 |
|
|
%{!march=*:%{!mcpu=*:-mtune=v" CRIS_DEFAULT_TUNE\
|
186 |
|
|
" -D__CRIS_arch_tune=" CRIS_DEFAULT_TUNE "}}\
|
187 |
|
|
%{!finhibit-size-directive:\
|
188 |
|
|
%{!fno-function-sections: -ffunction-sections}\
|
189 |
|
|
%{!fno-data-sections: -fdata-sections}}}}"
|
190 |
|
|
|
191 |
|
|
/* This adds to CC1_SPEC. */
|
192 |
|
|
#define CC1PLUS_SPEC ""
|
193 |
|
|
|
194 |
|
|
#ifdef HAVE_AS_NO_MUL_BUG_ABORT_OPTION
|
195 |
|
|
#define MAYBE_AS_NO_MUL_BUG_ABORT \
|
196 |
|
|
"%{mno-mul-bug-workaround:-no-mul-bug-abort} "
|
197 |
|
|
#else
|
198 |
|
|
#define MAYBE_AS_NO_MUL_BUG_ABORT
|
199 |
|
|
#endif
|
200 |
|
|
|
201 |
|
|
/* Override previous definitions (linux.h). */
|
202 |
|
|
#undef ASM_SPEC
|
203 |
|
|
#define ASM_SPEC \
|
204 |
|
|
MAYBE_AS_NO_MUL_BUG_ABORT \
|
205 |
|
|
"%{v:-v}\
|
206 |
|
|
%(asm_subtarget)\
|
207 |
|
|
%{march=*:%{cpu=*:%eDo not specify both -march=... and -mcpu=...}}\
|
208 |
|
|
%{march=v32:--march=v32} %{mcpu=v32:--march=v32}"
|
209 |
|
|
|
210 |
|
|
/* For the cris-*-elf subtarget. */
|
211 |
|
|
#define CRIS_ASM_SUBTARGET_SPEC \
|
212 |
|
|
"--em=criself %{!march=*:%{!cpu=*:" CRIS_DEFAULT_ASM_ARCH_OPTION "}}"
|
213 |
|
|
|
214 |
|
|
/* FIXME: We should propagate the -melf option to make the criself
|
215 |
|
|
"emulation" unless a linker script is provided (-T*), but I don't know
|
216 |
|
|
how to do that if either of -Ttext, -Tdata or -Tbss is given but no
|
217 |
|
|
linker script, as is usually the case. Leave it to the user for the
|
218 |
|
|
time being.
|
219 |
|
|
|
220 |
|
|
Note that -melf overrides -maout except that a.out-compiled libraries
|
221 |
|
|
are linked in (multilibbing). The somewhat cryptic -rpath-link pair is
|
222 |
|
|
to avoid *only* picking up the linux multilib subdir from the "-B./"
|
223 |
|
|
option during build, while still giving it preference. We'd need some
|
224 |
|
|
%s-variant that checked for existence of some specific file. */
|
225 |
|
|
/* Override previous definitions (svr4.h). */
|
226 |
|
|
#undef LINK_SPEC
|
227 |
|
|
#define LINK_SPEC \
|
228 |
|
|
"%{v:--verbose}\
|
229 |
|
|
%(link_subtarget)"
|
230 |
|
|
|
231 |
|
|
/* For the cris-*-elf subtarget. */
|
232 |
|
|
#define CRIS_LINK_SUBTARGET_SPEC \
|
233 |
|
|
"-mcriself\
|
234 |
|
|
%{sim2:%{!T*:-Tdata 0x4000000 -Tbss 0x8000000}}\
|
235 |
|
|
%{!r:%{O2|O3: --gc-sections}}"
|
236 |
|
|
|
237 |
|
|
/* Which library to get. The simulator uses a different library for
|
238 |
|
|
the low-level syscalls (implementing the Linux syscall ABI instead
|
239 |
|
|
of direct-iron accesses). Default everything with the stub "nosys"
|
240 |
|
|
library. */
|
241 |
|
|
/* Override previous definitions (linux.h). */
|
242 |
|
|
#undef LIB_SPEC
|
243 |
|
|
#define LIB_SPEC \
|
244 |
|
|
"%{sim*:--start-group -lc -lsyslinux --end-group}\
|
245 |
|
|
%{!sim*:%{g*:-lg}\
|
246 |
|
|
%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} -lbsp}\
|
247 |
|
|
-lnosys"
|
248 |
|
|
|
249 |
|
|
/* Linker startfile options; crt0 flavors.
|
250 |
|
|
We need to remove any previous definition (elfos.h). */
|
251 |
|
|
#undef STARTFILE_SPEC
|
252 |
|
|
#define STARTFILE_SPEC \
|
253 |
|
|
"%{sim*:crt1.o%s}%{!sim*:crt0.o%s}\
|
254 |
|
|
crti.o%s crtbegin.o%s"
|
255 |
|
|
|
256 |
|
|
#undef ENDFILE_SPEC
|
257 |
|
|
#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
|
258 |
|
|
|
259 |
|
|
#define EXTRA_SPECS \
|
260 |
|
|
{"cpp_subtarget", CRIS_CPP_SUBTARGET_SPEC}, \
|
261 |
|
|
{"cc1_subtarget", CRIS_CC1_SUBTARGET_SPEC}, \
|
262 |
|
|
{"asm_subtarget", CRIS_ASM_SUBTARGET_SPEC}, \
|
263 |
|
|
{"link_subtarget", CRIS_LINK_SUBTARGET_SPEC}, \
|
264 |
|
|
CRIS_SUBTARGET_EXTRA_SPECS
|
265 |
|
|
|
266 |
|
|
#define CRIS_SUBTARGET_EXTRA_SPECS
|
267 |
|
|
|
268 |
|
|
|
269 |
|
|
/* Node: Run-time Target */
|
270 |
|
|
|
271 |
|
|
#define TARGET_CPU_CPP_BUILTINS() \
|
272 |
|
|
do \
|
273 |
|
|
{ \
|
274 |
|
|
builtin_define_std ("cris"); \
|
275 |
|
|
builtin_define_std ("CRIS"); \
|
276 |
|
|
builtin_define_std ("GNU_CRIS"); \
|
277 |
|
|
builtin_define ("__CRIS_ABI_version=2"); \
|
278 |
|
|
builtin_assert ("cpu=cris"); \
|
279 |
|
|
builtin_assert ("machine=cris"); \
|
280 |
|
|
} \
|
281 |
|
|
while (0)
|
282 |
|
|
|
283 |
|
|
/* This needs to be at least 32 bits. */
|
284 |
|
|
extern int target_flags;
|
285 |
|
|
|
286 |
|
|
/* Previously controlled by target_flags. */
|
287 |
|
|
#define TARGET_ELF 1
|
288 |
|
|
|
289 |
|
|
/* Previously controlled by target_flags. Note that this is *not* set
|
290 |
|
|
for -melinux. */
|
291 |
|
|
#define TARGET_LINUX 0
|
292 |
|
|
|
293 |
|
|
/* For the cris-*-elf subtarget. */
|
294 |
|
|
#define CRIS_SUBTARGET_DEFAULT 0
|
295 |
|
|
|
296 |
|
|
#define CRIS_CPU_BASE 0
|
297 |
|
|
#define CRIS_CPU_ETRAX4 3 /* Just lz added. */
|
298 |
|
|
#define CRIS_CPU_SVINTO 8 /* Added swap, jsrc & Co., 32-bit accesses. */
|
299 |
|
|
#define CRIS_CPU_NG 10 /* Added mul[su]. */
|
300 |
|
|
#define CRIS_CPU_V32 32 /* Major changes. */
|
301 |
|
|
|
302 |
|
|
#ifndef TARGET_CPU_DEFAULT
|
303 |
|
|
#define TARGET_CPU_DEFAULT CRIS_CPU_BASE
|
304 |
|
|
#endif
|
305 |
|
|
|
306 |
|
|
/* Default target_flags if no switches specified. */
|
307 |
|
|
#ifndef TARGET_DEFAULT
|
308 |
|
|
# if TARGET_CPU_DEFAULT == 32
|
309 |
|
|
# define TARGET_DEFAULT \
|
310 |
|
|
(MASK_STACK_ALIGN \
|
311 |
|
|
+ MASK_CONST_ALIGN + MASK_DATA_ALIGN \
|
312 |
|
|
+ MASK_PROLOGUE_EPILOGUE)
|
313 |
|
|
# else /* 10 */
|
314 |
|
|
# define TARGET_DEFAULT \
|
315 |
|
|
(MASK_SIDE_EFFECT_PREFIXES + MASK_STACK_ALIGN \
|
316 |
|
|
+ MASK_CONST_ALIGN + MASK_DATA_ALIGN \
|
317 |
|
|
+ MASK_PROLOGUE_EPILOGUE + MASK_MUL_BUG)
|
318 |
|
|
# endif
|
319 |
|
|
#endif
|
320 |
|
|
|
321 |
|
|
/* Local, providing a default for cris_cpu_version. */
|
322 |
|
|
#define CRIS_DEFAULT_CPU_VERSION TARGET_CPU_DEFAULT
|
323 |
|
|
|
324 |
|
|
#define TARGET_HAS_MUL_INSNS (cris_cpu_version >= CRIS_CPU_NG)
|
325 |
|
|
#define TARGET_HAS_LZ (cris_cpu_version >= CRIS_CPU_ETRAX4)
|
326 |
|
|
#define TARGET_HAS_SWAP (cris_cpu_version >= CRIS_CPU_SVINTO)
|
327 |
|
|
#define TARGET_V32 (cris_cpu_version >= CRIS_CPU_V32)
|
328 |
|
|
|
329 |
|
|
#define CRIS_SUBTARGET_HANDLE_OPTION(x, y, z)
|
330 |
|
|
|
331 |
|
|
#define OVERRIDE_OPTIONS cris_override_options ()
|
332 |
|
|
|
333 |
|
|
#define OPTIMIZATION_OPTIONS(OPTIMIZE, SIZE) \
|
334 |
|
|
do \
|
335 |
|
|
{ \
|
336 |
|
|
if ((OPTIMIZE) >= 2 || (SIZE)) \
|
337 |
|
|
flag_omit_frame_pointer = 1; \
|
338 |
|
|
} \
|
339 |
|
|
while (0)
|
340 |
|
|
|
341 |
|
|
|
342 |
|
|
/* Node: Storage Layout */
|
343 |
|
|
|
344 |
|
|
#define BITS_BIG_ENDIAN 0
|
345 |
|
|
|
346 |
|
|
#define BYTES_BIG_ENDIAN 0
|
347 |
|
|
|
348 |
|
|
/* WORDS_BIG_ENDIAN is not defined in the hardware, but for consistency,
|
349 |
|
|
we use little-endianness, and we may also be able to use
|
350 |
|
|
post-increment on DImode indirect. */
|
351 |
|
|
#define WORDS_BIG_ENDIAN 0
|
352 |
|
|
|
353 |
|
|
#define UNITS_PER_WORD 4
|
354 |
|
|
|
355 |
|
|
#define CRIS_PROMOTED_MODE(MODE, UNSIGNEDP, TYPE) \
|
356 |
|
|
(GET_MODE_CLASS (MODE) == MODE_INT && GET_MODE_SIZE (MODE) < 4) \
|
357 |
|
|
? SImode : MODE
|
358 |
|
|
|
359 |
|
|
/* We will be using prototype promotion, so they will be 32 bit. */
|
360 |
|
|
#define PARM_BOUNDARY 32
|
361 |
|
|
|
362 |
|
|
/* Stack boundary is guided by -mstack-align, -mno-stack-align,
|
363 |
|
|
-malign.
|
364 |
|
|
Old comment: (2.1: still valid in 2.7.2?)
|
365 |
|
|
Note that to make this macro affect the alignment of stack
|
366 |
|
|
locals, a fix was required, and special precautions when handling
|
367 |
|
|
the stack pointer in various other macros (TARGET_ASM_FUNCTION_PROLOGUE
|
368 |
|
|
et al) were required. See file "function.c". If you would just define
|
369 |
|
|
this macro, it would only affect the builtin alloca and variable
|
370 |
|
|
local data (non-ANSI, non-K&R, Gnu C extension). */
|
371 |
|
|
#define STACK_BOUNDARY \
|
372 |
|
|
(TARGET_STACK_ALIGN ? (TARGET_ALIGN_BY_32 ? 32 : 16) : 8)
|
373 |
|
|
|
374 |
|
|
#define FUNCTION_BOUNDARY 16
|
375 |
|
|
|
376 |
|
|
/* Do not change BIGGEST_ALIGNMENT (when optimizing), as it will affect
|
377 |
|
|
strange places, at least in 2.1. */
|
378 |
|
|
#define BIGGEST_ALIGNMENT 8
|
379 |
|
|
|
380 |
|
|
/* If -m16bit, -m16-bit, -malign or -mdata-align,
|
381 |
|
|
align everything to 16 bit. */
|
382 |
|
|
#define DATA_ALIGNMENT(TYPE, BASIC_ALIGN) \
|
383 |
|
|
(TARGET_DATA_ALIGN \
|
384 |
|
|
? (TARGET_ALIGN_BY_32 \
|
385 |
|
|
? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN) \
|
386 |
|
|
: (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN)
|
387 |
|
|
|
388 |
|
|
/* Note that CONSTANT_ALIGNMENT has the effect of making gcc believe that
|
389 |
|
|
ALL references to constant stuff (in code segment, like strings) has
|
390 |
|
|
this alignment. That is a rather rushed assumption. Luckily we do not
|
391 |
|
|
care about the "alignment" operand to builtin memcpy (only place where
|
392 |
|
|
it counts), so it doesn't affect any bad spots. */
|
393 |
|
|
#define CONSTANT_ALIGNMENT(CONSTANT, BASIC_ALIGN) \
|
394 |
|
|
(TARGET_CONST_ALIGN \
|
395 |
|
|
? (TARGET_ALIGN_BY_32 \
|
396 |
|
|
? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN) \
|
397 |
|
|
: (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN)
|
398 |
|
|
|
399 |
|
|
/* FIXME: Define LOCAL_ALIGNMENT for word and dword or arrays and
|
400 |
|
|
structures (if -mstack-align=), and check that it is good. */
|
401 |
|
|
|
402 |
|
|
#define EMPTY_FIELD_BOUNDARY 8
|
403 |
|
|
|
404 |
|
|
#define STRUCTURE_SIZE_BOUNDARY 8
|
405 |
|
|
|
406 |
|
|
#define STRICT_ALIGNMENT 0
|
407 |
|
|
|
408 |
|
|
/* Remove any previous definition (elfos.h).
|
409 |
|
|
??? If it wasn't for all the other stuff that affects layout of
|
410 |
|
|
structures and bit-fields, this could presumably cause incompatibility
|
411 |
|
|
with other GNU/Linux ports (i.e. elfos.h users). */
|
412 |
|
|
#undef PCC_BITFIELD_TYPE_MATTERS
|
413 |
|
|
|
414 |
|
|
/* This is only used for non-scalars. Strange stuff happens to structs
|
415 |
|
|
(FIXME: What?) if we use anything larger than largest actually used
|
416 |
|
|
datum size, so lets make it 32. The type "long long" will still work
|
417 |
|
|
as usual. We can still have DImode insns, but they will only be used
|
418 |
|
|
for scalar data (i.e. long long). */
|
419 |
|
|
#define MAX_FIXED_MODE_SIZE 32
|
420 |
|
|
|
421 |
|
|
|
422 |
|
|
/* Node: Type Layout */
|
423 |
|
|
|
424 |
|
|
/* Note that DOUBLE_TYPE_SIZE is not defined anymore, since the default
|
425 |
|
|
value gives a 64-bit double, which is what we now use. */
|
426 |
|
|
|
427 |
|
|
/* For compatibility and historical reasons, a char should be signed. */
|
428 |
|
|
#define DEFAULT_SIGNED_CHAR 1
|
429 |
|
|
|
430 |
|
|
/* Note that WCHAR_TYPE_SIZE is used in cexp.y,
|
431 |
|
|
where TARGET_SHORT is not available. */
|
432 |
|
|
#undef WCHAR_TYPE
|
433 |
|
|
#define WCHAR_TYPE "long int"
|
434 |
|
|
|
435 |
|
|
#undef WCHAR_TYPE_SIZE
|
436 |
|
|
#define WCHAR_TYPE_SIZE 32
|
437 |
|
|
|
438 |
|
|
|
439 |
|
|
/* Node: Register Basics */
|
440 |
|
|
|
441 |
|
|
/* We count all 16 non-special registers, SRP, a faked argument
|
442 |
|
|
pointer register, MOF and CCR/DCCR. */
|
443 |
|
|
#define FIRST_PSEUDO_REGISTER (16 + 1 + 1 + 1 + 1)
|
444 |
|
|
|
445 |
|
|
/* For CRIS, these are r15 (pc) and r14 (sp). Register r8 is used as a
|
446 |
|
|
frame-pointer, but is not fixed. SRP is not included in general
|
447 |
|
|
registers and will not be used automatically. All other special
|
448 |
|
|
registers are fixed at the moment. The faked argument pointer register
|
449 |
|
|
is fixed too. */
|
450 |
|
|
#define FIXED_REGISTERS \
|
451 |
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0}
|
452 |
|
|
|
453 |
|
|
/* Register r9 is used for structure-address, r10-r13 for parameters,
|
454 |
|
|
r10- for return values. */
|
455 |
|
|
#define CALL_USED_REGISTERS \
|
456 |
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1}
|
457 |
|
|
|
458 |
|
|
#define CONDITIONAL_REGISTER_USAGE cris_conditional_register_usage ()
|
459 |
|
|
|
460 |
|
|
|
461 |
|
|
/* Node: Allocation Order */
|
462 |
|
|
|
463 |
|
|
/* We need this on CRIS, because call-used regs should be used first,
|
464 |
|
|
(so we don't need to push). Else start using registers from r0 and up.
|
465 |
|
|
This preference is mainly because if we put call-used-regs from r0
|
466 |
|
|
and up, then we can't use movem to push the rest, (which have to be
|
467 |
|
|
saved if we use them, and movem has to start with r0).
|
468 |
|
|
Change here if you change which registers to use as call registers.
|
469 |
|
|
|
470 |
|
|
The actual need to explicitly prefer call-used registers improved the
|
471 |
|
|
situation a lot for 2.1, but might not actually be needed anymore.
|
472 |
|
|
Still, this order reflects what GCC should find out by itself, so it
|
473 |
|
|
probably does not hurt.
|
474 |
|
|
|
475 |
|
|
Order of preference: Call-used-regs first, then r0 and up, last fp &
|
476 |
|
|
sp & pc as fillers.
|
477 |
|
|
Call-used regs in opposite order, so they will cause less conflict if
|
478 |
|
|
a function has few args (<= 3) and it wants a scratch reg.
|
479 |
|
|
Use struct-return address first, since very few functions use
|
480 |
|
|
structure return values so it is likely to be available. */
|
481 |
|
|
#define REG_ALLOC_ORDER \
|
482 |
|
|
{9, 13, 12, 11, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 17, 16, 18, 19}
|
483 |
|
|
|
484 |
|
|
/* Use MOF and ACR. Prefer ACR before any other register. Prefer MOF
|
485 |
|
|
then SRP after saved registers. The *after* is because they're only
|
486 |
|
|
useful for storage, not for things being computed, which is
|
487 |
|
|
apparently more common. */
|
488 |
|
|
#define REG_ALLOC_ORDER_V32 \
|
489 |
|
|
{15, 9, 13, 12, 11, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 17, 16, 14, 18, 19}
|
490 |
|
|
|
491 |
|
|
|
492 |
|
|
/* Node: Values in Registers */
|
493 |
|
|
|
494 |
|
|
/* The VOIDmode test is so we can omit mode on anonymous insns. FIXME:
|
495 |
|
|
Still needed in 2.9x, at least for Axis-20000319. */
|
496 |
|
|
#define HARD_REGNO_NREGS(REGNO, MODE) \
|
497 |
|
|
(MODE == VOIDmode \
|
498 |
|
|
? 1 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
|
499 |
|
|
|
500 |
|
|
/* CRIS permits all registers to hold all modes. Well, except for the
|
501 |
|
|
condition-code register. And we can't hold larger-than-register size
|
502 |
|
|
modes in the last special register that can hold a full 32 bits. */
|
503 |
|
|
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
|
504 |
|
|
(((MODE) == CCmode \
|
505 |
|
|
|| (REGNO) != CRIS_CC0_REGNUM) \
|
506 |
|
|
&& (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
|
507 |
|
|
|| ((REGNO) != CRIS_MOF_REGNUM && (REGNO) != CRIS_ACR_REGNUM)))
|
508 |
|
|
|
509 |
|
|
/* Because CCmode isn't covered by the "narrower mode" statement in
|
510 |
|
|
tm.texi, we can still say all modes are tieable despite not having an
|
511 |
|
|
always 1 HARD_REGNO_MODE_OK. */
|
512 |
|
|
#define MODES_TIEABLE_P(MODE1, MODE2) 1
|
513 |
|
|
|
514 |
|
|
|
515 |
|
|
/* Node: Leaf Functions */
|
516 |
|
|
/* (no definitions) */
|
517 |
|
|
|
518 |
|
|
/* Node: Stack Registers */
|
519 |
|
|
/* (no definitions) */
|
520 |
|
|
|
521 |
|
|
|
522 |
|
|
/* Node: Register Classes */
|
523 |
|
|
|
524 |
|
|
/* FIXME: A separate class for the return register would make sense.
|
525 |
|
|
|
526 |
|
|
We need a separate register class to handle register allocation for
|
527 |
|
|
ACR, since it can't be used for post-increment.
|
528 |
|
|
|
529 |
|
|
It's not obvious, but having subunions of all movable-between
|
530 |
|
|
register classes does really help register allocation. */
|
531 |
|
|
enum reg_class
|
532 |
|
|
{
|
533 |
|
|
NO_REGS,
|
534 |
|
|
ACR_REGS, MOF_REGS, CC0_REGS, SPECIAL_REGS,
|
535 |
|
|
SPEC_ACR_REGS, GENNONACR_REGS,
|
536 |
|
|
SPEC_GENNONACR_REGS, GENERAL_REGS,
|
537 |
|
|
ALL_REGS,
|
538 |
|
|
LIM_REG_CLASSES
|
539 |
|
|
};
|
540 |
|
|
|
541 |
|
|
#define N_REG_CLASSES (int) LIM_REG_CLASSES
|
542 |
|
|
|
543 |
|
|
#define REG_CLASS_NAMES \
|
544 |
|
|
{"NO_REGS", \
|
545 |
|
|
"ACR_REGS", "MOF_REGS", "CC0_REGS", "SPECIAL_REGS", \
|
546 |
|
|
"SPEC_ACR_REGS", "GENNONACR_REGS", "SPEC_GENNONACR_REGS", \
|
547 |
|
|
"GENERAL_REGS", "ALL_REGS"}
|
548 |
|
|
|
549 |
|
|
#define CRIS_SPECIAL_REGS_CONTENTS \
|
550 |
|
|
((1 << CRIS_SRP_REGNUM) | (1 << CRIS_MOF_REGNUM) | (1 << CRIS_CC0_REGNUM))
|
551 |
|
|
|
552 |
|
|
/* Count in the faked argument register in GENERAL_REGS. Keep out SRP. */
|
553 |
|
|
#define REG_CLASS_CONTENTS \
|
554 |
|
|
{ \
|
555 |
|
|
{0}, \
|
556 |
|
|
{1 << CRIS_ACR_REGNUM}, \
|
557 |
|
|
{1 << CRIS_MOF_REGNUM}, \
|
558 |
|
|
{1 << CRIS_CC0_REGNUM}, \
|
559 |
|
|
{CRIS_SPECIAL_REGS_CONTENTS}, \
|
560 |
|
|
{CRIS_SPECIAL_REGS_CONTENTS \
|
561 |
|
|
| (1 << CRIS_ACR_REGNUM)}, \
|
562 |
|
|
{(0xffff | (1 << CRIS_AP_REGNUM)) \
|
563 |
|
|
& ~(1 << CRIS_ACR_REGNUM)}, \
|
564 |
|
|
{(0xffff | (1 << CRIS_AP_REGNUM) \
|
565 |
|
|
| CRIS_SPECIAL_REGS_CONTENTS) \
|
566 |
|
|
& ~(1 << CRIS_ACR_REGNUM)}, \
|
567 |
|
|
{0xffff | (1 << CRIS_AP_REGNUM)}, \
|
568 |
|
|
{0xffff | (1 << CRIS_AP_REGNUM) \
|
569 |
|
|
| CRIS_SPECIAL_REGS_CONTENTS} \
|
570 |
|
|
}
|
571 |
|
|
|
572 |
|
|
#define REGNO_REG_CLASS(REGNO) \
|
573 |
|
|
((REGNO) == CRIS_ACR_REGNUM ? ACR_REGS : \
|
574 |
|
|
(REGNO) == CRIS_MOF_REGNUM ? MOF_REGS : \
|
575 |
|
|
(REGNO) == CRIS_CC0_REGNUM ? CC0_REGS : \
|
576 |
|
|
(REGNO) == CRIS_SRP_REGNUM ? SPECIAL_REGS : \
|
577 |
|
|
GENERAL_REGS)
|
578 |
|
|
|
579 |
|
|
#define BASE_REG_CLASS GENERAL_REGS
|
580 |
|
|
|
581 |
|
|
#define MODE_CODE_BASE_REG_CLASS(MODE, OCODE, ICODE) \
|
582 |
|
|
((OCODE) != POST_INC ? BASE_REG_CLASS : GENNONACR_REGS)
|
583 |
|
|
|
584 |
|
|
#define INDEX_REG_CLASS GENERAL_REGS
|
585 |
|
|
|
586 |
|
|
#define IRA_COVER_CLASSES { GENERAL_REGS, SPECIAL_REGS, LIM_REG_CLASSES }
|
587 |
|
|
|
588 |
|
|
#define REG_CLASS_FROM_LETTER(C) \
|
589 |
|
|
( \
|
590 |
|
|
(C) == 'a' ? ACR_REGS : \
|
591 |
|
|
(C) == 'b' ? GENNONACR_REGS : \
|
592 |
|
|
(C) == 'h' ? MOF_REGS : \
|
593 |
|
|
(C) == 'x' ? SPECIAL_REGS : \
|
594 |
|
|
(C) == 'c' ? CC0_REGS : \
|
595 |
|
|
NO_REGS \
|
596 |
|
|
)
|
597 |
|
|
|
598 |
|
|
/* Since it uses reg_renumber, it is safe only once reg_renumber
|
599 |
|
|
has been allocated, which happens in local-alloc.c. */
|
600 |
|
|
#define REGNO_OK_FOR_BASE_P(REGNO) \
|
601 |
|
|
((REGNO) <= CRIS_LAST_GENERAL_REGISTER \
|
602 |
|
|
|| (REGNO) == ARG_POINTER_REGNUM \
|
603 |
|
|
|| (unsigned) reg_renumber[REGNO] <= CRIS_LAST_GENERAL_REGISTER \
|
604 |
|
|
|| (unsigned) reg_renumber[REGNO] == ARG_POINTER_REGNUM)
|
605 |
|
|
|
606 |
|
|
/* REGNO_OK_FOR_BASE_P seems to be obsolete wrt. this one, but not yet
|
607 |
|
|
documented as such. */
|
608 |
|
|
#define REGNO_MODE_CODE_OK_FOR_BASE_P(REGNO, MODE, OCODE, ICODE) \
|
609 |
|
|
(REGNO_OK_FOR_BASE_P (REGNO) \
|
610 |
|
|
&& ((OCODE) != POST_INC \
|
611 |
|
|
|| !((REGNO) == CRIS_ACR_REGNUM \
|
612 |
|
|
|| (unsigned) reg_renumber[REGNO] == CRIS_ACR_REGNUM)))
|
613 |
|
|
|
614 |
|
|
/* See REGNO_OK_FOR_BASE_P. */
|
615 |
|
|
#define REGNO_OK_FOR_INDEX_P(REGNO) REGNO_OK_FOR_BASE_P(REGNO)
|
616 |
|
|
|
617 |
|
|
/* It seems like gcc (2.7.2 and 2.9x of 2000-03-22) may send "NO_REGS" as
|
618 |
|
|
the class for a constant (testcase: __Mul in arit.c). To avoid forcing
|
619 |
|
|
out a constant into the constant pool, we will trap this case and
|
620 |
|
|
return something a bit more sane. FIXME: Check if this is a bug.
|
621 |
|
|
Beware that we must not "override" classes that can be specified as
|
622 |
|
|
constraint letters, or else asm operands using them will fail when
|
623 |
|
|
they need to be reloaded. FIXME: Investigate whether that constitutes
|
624 |
|
|
a bug. */
|
625 |
|
|
#define PREFERRED_RELOAD_CLASS(X, CLASS) \
|
626 |
|
|
((CLASS) != ACR_REGS \
|
627 |
|
|
&& (CLASS) != MOF_REGS \
|
628 |
|
|
&& (CLASS) != CC0_REGS \
|
629 |
|
|
&& (CLASS) != SPECIAL_REGS \
|
630 |
|
|
? GENERAL_REGS : (CLASS))
|
631 |
|
|
|
632 |
|
|
/* We can't move special registers to and from memory in smaller than
|
633 |
|
|
word_mode. We also can't move between special registers. Luckily,
|
634 |
|
|
-1, as returned by true_regnum for non-sub/registers, is valid as a
|
635 |
|
|
parameter to our REGNO_REG_CLASS, returning GENERAL_REGS, so we get
|
636 |
|
|
the effect that any X that isn't a special-register is treated as
|
637 |
|
|
a non-empty intersection with GENERAL_REGS. */
|
638 |
|
|
#define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \
|
639 |
|
|
((((CLASS) == SPECIAL_REGS || (CLASS) == MOF_REGS) \
|
640 |
|
|
&& ((GET_MODE_SIZE (MODE) < 4 && MEM_P (X)) \
|
641 |
|
|
|| !reg_classes_intersect_p (REGNO_REG_CLASS (true_regnum (X)), \
|
642 |
|
|
GENERAL_REGS))) \
|
643 |
|
|
? GENERAL_REGS : NO_REGS)
|
644 |
|
|
|
645 |
|
|
/* FIXME: Fix regrename.c; it should check validity of replacements,
|
646 |
|
|
not just with a silly pass-specific macro. We may miss some
|
647 |
|
|
opportunities, but we must stop regrename from creating acr++. */
|
648 |
|
|
#define HARD_REGNO_RENAME_OK(FROM, TO) ((TO) != CRIS_ACR_REGNUM)
|
649 |
|
|
|
650 |
|
|
/* For CRIS, this is always the size of MODE in words,
|
651 |
|
|
since all registers are the same size. To use omitted modes in
|
652 |
|
|
patterns with reload constraints, you must say the widest size
|
653 |
|
|
which is allowed for VOIDmode.
|
654 |
|
|
FIXME: Does that still apply for gcc-2.9x? Keep poisoned until such
|
655 |
|
|
patterns are added back. News: 2001-03-16: Happens as early as the
|
656 |
|
|
underscore-test. */
|
657 |
|
|
#define CLASS_MAX_NREGS(CLASS, MODE) \
|
658 |
|
|
((MODE) == VOIDmode \
|
659 |
|
|
? 1 /* + cris_fatal ("CLASS_MAX_NREGS with VOIDmode") */ \
|
660 |
|
|
: ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
|
661 |
|
|
|
662 |
|
|
/* We are now out of letters; we could use ten more. This forces us to
|
663 |
|
|
use C-code in the 'md' file. FIXME: Use some EXTRA_CONSTRAINTS. */
|
664 |
|
|
#define CRIS_CONST_OK_FOR_LETTER_P(VALUE, C) \
|
665 |
|
|
( \
|
666 |
|
|
/* MOVEQ, CMPQ, ANDQ, ORQ. */ \
|
667 |
|
|
(C) == 'I' ? (VALUE) >= -32 && (VALUE) <= 31 : \
|
668 |
|
|
/* ADDQ, SUBQ. */ \
|
669 |
|
|
(C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 63 : \
|
670 |
|
|
/* ASRQ, BTSTQ, LSRQ, LSLQ. */ \
|
671 |
|
|
(C) == 'K' ? (VALUE) >= 0 && (VALUE) <= 31 : \
|
672 |
|
|
/* A 16-bit signed number. */ \
|
673 |
|
|
(C) == 'L' ? (VALUE) >= -32768 && (VALUE) <= 32767 : \
|
674 |
|
|
/* The constant 0 for CLEAR. */ \
|
675 |
|
|
(C) == 'M' ? (VALUE) == 0 : \
|
676 |
|
|
/* A negative ADDQ or SUBQ. */ \
|
677 |
|
|
(C) == 'N' ? (VALUE) >= -63 && (VALUE) < 0 : \
|
678 |
|
|
/* Quickened ints, QI and HI. */ \
|
679 |
|
|
(C) == 'O' ? (VALUE) >= 0 && (VALUE) <= 65535 \
|
680 |
|
|
&& ((VALUE) >= (65535-31) \
|
681 |
|
|
|| ((VALUE) >= (255-31) \
|
682 |
|
|
&& (VALUE) <= 255 )) : \
|
683 |
|
|
/* A 16-bit number signed *or* unsigned. */ \
|
684 |
|
|
(C) == 'P' ? (VALUE) >= -32768 && (VALUE) <= 65535 : \
|
685 |
|
|
0)
|
686 |
|
|
|
687 |
|
|
#define CONST_OK_FOR_CONSTRAINT_P(VALUE, C, S) \
|
688 |
|
|
( \
|
689 |
|
|
((C) != 'K' || (S)[1] == 'c') \
|
690 |
|
|
? CRIS_CONST_OK_FOR_LETTER_P (VALUE, C) : \
|
691 |
|
|
((C) == 'K' && (S)[1] == 'p') \
|
692 |
|
|
? exact_log2 (VALUE) >= 0 : \
|
693 |
|
|
0)
|
694 |
|
|
|
695 |
|
|
#define CONSTRAINT_LEN(C, S) ((C) == 'K' ? 2 : DEFAULT_CONSTRAINT_LEN (C, S))
|
696 |
|
|
|
697 |
|
|
/* It is really simple to make up a 0.0; it is the same as int-0 in
|
698 |
|
|
IEEE754. */
|
699 |
|
|
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
|
700 |
|
|
((C) == 'G' && ((VALUE) == CONST0_RTX (DFmode) \
|
701 |
|
|
|| (VALUE) == CONST0_RTX (SFmode)))
|
702 |
|
|
|
703 |
|
|
/* We need this on cris to distinguish delay-slottable addressing modes. */
|
704 |
|
|
#define EXTRA_CONSTRAINT(X, C) \
|
705 |
|
|
( \
|
706 |
|
|
/* Slottable address mode? */ \
|
707 |
|
|
(C) == 'Q' ? EXTRA_CONSTRAINT_Q (X) : \
|
708 |
|
|
/* Operand to BDAP or BIAP? */ \
|
709 |
|
|
(C) == 'R' ? EXTRA_CONSTRAINT_R (X) : \
|
710 |
|
|
/* A local PIC symbol? */ \
|
711 |
|
|
(C) == 'S' ? EXTRA_CONSTRAINT_S (X) : \
|
712 |
|
|
/* A three-address addressing-mode? */ \
|
713 |
|
|
(C) == 'T' ? EXTRA_CONSTRAINT_T (X) : \
|
714 |
|
|
/* A PLT symbol? */ \
|
715 |
|
|
(C) == 'U' ? EXTRA_CONSTRAINT_U (X) : \
|
716 |
|
|
0)
|
717 |
|
|
|
718 |
|
|
#define EXTRA_MEMORY_CONSTRAINT(X, STR) ((X) == 'Q')
|
719 |
|
|
|
720 |
|
|
#define EXTRA_CONSTRAINT_Q(X) \
|
721 |
|
|
( \
|
722 |
|
|
/* Just an indirect register (happens to also be \
|
723 |
|
|
"all" slottable memory addressing modes not \
|
724 |
|
|
covered by other constraints, i.e. '>'). */ \
|
725 |
|
|
MEM_P (X) && BASE_P (XEXP (X, 0)) \
|
726 |
|
|
)
|
727 |
|
|
|
728 |
|
|
#define EXTRA_CONSTRAINT_R(X) \
|
729 |
|
|
( \
|
730 |
|
|
/* An operand to BDAP or BIAP: \
|
731 |
|
|
A BIAP; r.S? */ \
|
732 |
|
|
BIAP_INDEX_P (X) \
|
733 |
|
|
/* A [reg] or (int) [reg], maybe with post-increment. */ \
|
734 |
|
|
|| BDAP_INDEX_P (X) \
|
735 |
|
|
|| CONSTANT_INDEX_P (X) \
|
736 |
|
|
)
|
737 |
|
|
|
738 |
|
|
#define EXTRA_CONSTRAINT_T(X) \
|
739 |
|
|
( \
|
740 |
|
|
/* Memory three-address operand. All are indirect-memory: */ \
|
741 |
|
|
MEM_P (X) \
|
742 |
|
|
&& ((MEM_P (XEXP (X, 0)) \
|
743 |
|
|
/* Double indirect: [[reg]] or [[reg+]]? */ \
|
744 |
|
|
&& (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) \
|
745 |
|
|
/* Just an explicit indirect reference: [const]? */ \
|
746 |
|
|
|| CONSTANT_P (XEXP (X, 0)) \
|
747 |
|
|
/* Something that is indexed; [...+...]? */ \
|
748 |
|
|
|| (GET_CODE (XEXP (X, 0)) == PLUS \
|
749 |
|
|
/* A BDAP constant: [reg+(8|16|32)bit offset]? */ \
|
750 |
|
|
&& ((BASE_P (XEXP (XEXP (X, 0), 0)) \
|
751 |
|
|
&& CONSTANT_INDEX_P (XEXP (XEXP (X, 0), 1))) \
|
752 |
|
|
/* A BDAP register: [reg+[reg(+)].S]? */ \
|
753 |
|
|
|| (BASE_P (XEXP (XEXP (X, 0), 0)) \
|
754 |
|
|
&& BDAP_INDEX_P(XEXP(XEXP(X, 0), 1))) \
|
755 |
|
|
/* Same, but with swapped arguments (no canonical \
|
756 |
|
|
ordering between e.g. REG and MEM as of LAST_UPDATED \
|
757 |
|
|
"Thu May 12 03:59:11 UTC 2005"). */ \
|
758 |
|
|
|| (BASE_P (XEXP (XEXP (X, 0), 1)) \
|
759 |
|
|
&& BDAP_INDEX_P (XEXP (XEXP (X, 0), 0))) \
|
760 |
|
|
/* A BIAP: [reg+reg.S] (MULT comes first). */ \
|
761 |
|
|
|| (BASE_P (XEXP (XEXP (X, 0), 1)) \
|
762 |
|
|
&& BIAP_INDEX_P (XEXP (XEXP (X, 0), 0)))))) \
|
763 |
|
|
)
|
764 |
|
|
|
765 |
|
|
/* PIC-constructs for symbols. */
|
766 |
|
|
#define EXTRA_CONSTRAINT_S(X) \
|
767 |
|
|
(flag_pic && GET_CODE (X) == CONST && cris_valid_pic_const (X, false))
|
768 |
|
|
|
769 |
|
|
#define EXTRA_CONSTRAINT_U(X) \
|
770 |
|
|
(flag_pic \
|
771 |
|
|
&& CONSTANT_P (X) \
|
772 |
|
|
&& cris_nonmemory_operand_or_callable_symbol (X, VOIDmode))
|
773 |
|
|
|
774 |
|
|
|
775 |
|
|
/* Node: Frame Layout */
|
776 |
|
|
|
777 |
|
|
#define STACK_GROWS_DOWNWARD
|
778 |
|
|
#define FRAME_GROWS_DOWNWARD 1
|
779 |
|
|
|
780 |
|
|
/* It seems to be indicated in the code (at least 2.1) that this is
|
781 |
|
|
better a constant, and best 0. */
|
782 |
|
|
#define STARTING_FRAME_OFFSET 0
|
783 |
|
|
|
784 |
|
|
#define FIRST_PARM_OFFSET(FNDECL) 0
|
785 |
|
|
|
786 |
|
|
#define RETURN_ADDR_RTX(COUNT, FRAMEADDR) \
|
787 |
|
|
cris_return_addr_rtx (COUNT, FRAMEADDR)
|
788 |
|
|
|
789 |
|
|
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, CRIS_SRP_REGNUM)
|
790 |
|
|
|
791 |
|
|
/* FIXME: Any __builtin_eh_return callers must not return anything and
|
792 |
|
|
there must not be collisions with incoming parameters. Luckily the
|
793 |
|
|
number of __builtin_eh_return callers is limited. For now return
|
794 |
|
|
parameter registers in reverse order and hope for the best. */
|
795 |
|
|
#define EH_RETURN_DATA_REGNO(N) \
|
796 |
|
|
(IN_RANGE ((N), 0, 3) ? (CRIS_FIRST_ARG_REG + 3 - (N)) : INVALID_REGNUM)
|
797 |
|
|
|
798 |
|
|
/* Store the stack adjustment in the structure-return-address register. */
|
799 |
|
|
#define CRIS_STACKADJ_REG CRIS_STRUCT_VALUE_REGNUM
|
800 |
|
|
#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (SImode, CRIS_STACKADJ_REG)
|
801 |
|
|
|
802 |
|
|
#define EH_RETURN_HANDLER_RTX \
|
803 |
|
|
cris_return_addr_rtx (0, NULL)
|
804 |
|
|
|
805 |
|
|
#define INIT_EXPANDERS cris_init_expanders ()
|
806 |
|
|
|
807 |
|
|
/* FIXME: Move this to right node (it's not documented properly yet). */
|
808 |
|
|
#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (CRIS_SRP_REGNUM)
|
809 |
|
|
|
810 |
|
|
/* FIXME: Move this to right node (it's not documented properly yet).
|
811 |
|
|
FIXME: Check what alignment we can assume regarding
|
812 |
|
|
TARGET_STACK_ALIGN and TARGET_ALIGN_BY_32. */
|
813 |
|
|
#define DWARF_CIE_DATA_ALIGNMENT -1
|
814 |
|
|
|
815 |
|
|
/* If we would ever need an exact mapping between canonical register
|
816 |
|
|
number and dwarf frame register, we would either need to include all
|
817 |
|
|
registers in the gcc description (with some marked fixed of course), or
|
818 |
|
|
an inverse mapping from dwarf register to gcc register. There is one
|
819 |
|
|
need in dwarf2out.c:expand_builtin_init_dwarf_reg_sizes. Right now, I
|
820 |
|
|
don't see that we need exact correspondence between DWARF *frame*
|
821 |
|
|
registers and DBX_REGISTER_NUMBER, so map them onto GCC registers. */
|
822 |
|
|
#define DWARF_FRAME_REGNUM(REG) (REG)
|
823 |
|
|
|
824 |
|
|
/* Node: Stack Checking */
|
825 |
|
|
/* (no definitions) FIXME: Check. */
|
826 |
|
|
|
827 |
|
|
/* Node: Frame Registers */
|
828 |
|
|
|
829 |
|
|
#define STACK_POINTER_REGNUM CRIS_SP_REGNUM
|
830 |
|
|
|
831 |
|
|
/* Register used for frame pointer. This is also the last of the saved
|
832 |
|
|
registers, when a frame pointer is not used. */
|
833 |
|
|
#define FRAME_POINTER_REGNUM CRIS_FP_REGNUM
|
834 |
|
|
|
835 |
|
|
/* Faked register, is always eliminated. We need it to eliminate
|
836 |
|
|
allocating stack slots for the return address and the frame pointer. */
|
837 |
|
|
#define ARG_POINTER_REGNUM CRIS_AP_REGNUM
|
838 |
|
|
|
839 |
|
|
#define STATIC_CHAIN_REGNUM CRIS_STATIC_CHAIN_REGNUM
|
840 |
|
|
|
841 |
|
|
|
842 |
|
|
/* Node: Elimination */
|
843 |
|
|
|
844 |
|
|
#define ELIMINABLE_REGS \
|
845 |
|
|
{{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
|
846 |
|
|
{ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
|
847 |
|
|
{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
|
848 |
|
|
|
849 |
|
|
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
|
850 |
|
|
(OFFSET) = cris_initial_elimination_offset (FROM, TO)
|
851 |
|
|
|
852 |
|
|
|
853 |
|
|
/* Node: Stack Arguments */
|
854 |
|
|
|
855 |
|
|
/* Since many parameters take up one register each in any case,
|
856 |
|
|
defining TARGET_PROMOTE_PROTOTYPES that always returns true would
|
857 |
|
|
seem like a good idea, but measurements indicate that a combination
|
858 |
|
|
using PROMOTE_MODE is better. */
|
859 |
|
|
|
860 |
|
|
#define ACCUMULATE_OUTGOING_ARGS 1
|
861 |
|
|
|
862 |
|
|
#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACKSIZE) 0
|
863 |
|
|
|
864 |
|
|
|
865 |
|
|
/* Node: Register Arguments */
|
866 |
|
|
|
867 |
|
|
/* The void_type_node is sent as a "closing" call. */
|
868 |
|
|
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
|
869 |
|
|
((CUM).regs < CRIS_MAX_ARGS_IN_REGS \
|
870 |
|
|
? gen_rtx_REG (MODE, (CRIS_FIRST_ARG_REG) + (CUM).regs) \
|
871 |
|
|
: NULL_RTX)
|
872 |
|
|
|
873 |
|
|
/* The differences between this and the previous, is that this one checks
|
874 |
|
|
that an argument is named, since incoming stdarg/varargs arguments are
|
875 |
|
|
pushed onto the stack, and we don't have to check against the "closing"
|
876 |
|
|
void_type_node TYPE parameter. */
|
877 |
|
|
#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
|
878 |
|
|
((NAMED) && (CUM).regs < CRIS_MAX_ARGS_IN_REGS \
|
879 |
|
|
? gen_rtx_REG (MODE, CRIS_FIRST_ARG_REG + (CUM).regs) \
|
880 |
|
|
: NULL_RTX)
|
881 |
|
|
|
882 |
|
|
/* Contrary to what you'd believe, defining FUNCTION_ARG_CALLEE_COPIES
|
883 |
|
|
seems like a (small total) loss, at least for gcc-2.7.2 compiling and
|
884 |
|
|
running gcc-2.1 (small win in size, small loss running -- 100.1%),
|
885 |
|
|
and similarly for size for products (.1 .. .3% bloat, sometimes win).
|
886 |
|
|
Due to the empirical likeliness of making slower code, it is not
|
887 |
|
|
defined. */
|
888 |
|
|
|
889 |
|
|
/* This no longer *needs* to be a structure; but keeping it as such should
|
890 |
|
|
not hurt (and hacking the ABI is simpler). */
|
891 |
|
|
#define CUMULATIVE_ARGS struct cum_args
|
892 |
|
|
struct cum_args {int regs;};
|
893 |
|
|
|
894 |
|
|
/* The regs member is an integer, the number of arguments got into
|
895 |
|
|
registers so far. */
|
896 |
|
|
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
|
897 |
|
|
((CUM).regs = 0)
|
898 |
|
|
|
899 |
|
|
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
|
900 |
|
|
((CUM).regs += (3 + CRIS_FUNCTION_ARG_SIZE (MODE, TYPE)) / 4)
|
901 |
|
|
|
902 |
|
|
#define FUNCTION_ARG_REGNO_P(REGNO) \
|
903 |
|
|
((REGNO) >= CRIS_FIRST_ARG_REG \
|
904 |
|
|
&& (REGNO) < CRIS_FIRST_ARG_REG + (CRIS_MAX_ARGS_IN_REGS))
|
905 |
|
|
|
906 |
|
|
|
907 |
|
|
/* Node: Scalar Return */
|
908 |
|
|
|
909 |
|
|
#define FUNCTION_VALUE_REGNO_P(N) cris_function_value_regno_p (N)
|
910 |
|
|
|
911 |
|
|
|
912 |
|
|
|
913 |
|
|
/* Node: Aggregate Return */
|
914 |
|
|
|
915 |
|
|
#define CRIS_STRUCT_VALUE_REGNUM ((CRIS_FIRST_ARG_REG) - 1)
|
916 |
|
|
|
917 |
|
|
|
918 |
|
|
/* Node: Caller Saves */
|
919 |
|
|
/* (no definitions) */
|
920 |
|
|
|
921 |
|
|
/* Node: Function entry */
|
922 |
|
|
|
923 |
|
|
/* See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and
|
924 |
|
|
TARGET_ASM_FUNCTION_EPILOGUE. */
|
925 |
|
|
|
926 |
|
|
/* Node: Profiling */
|
927 |
|
|
|
928 |
|
|
#define FUNCTION_PROFILER(FILE, LABELNO) \
|
929 |
|
|
error ("no FUNCTION_PROFILER for CRIS")
|
930 |
|
|
|
931 |
|
|
/* FIXME: Some of the undefined macros might be mandatory. If so, fix
|
932 |
|
|
documentation. */
|
933 |
|
|
|
934 |
|
|
|
935 |
|
|
/* Node: Trampolines */
|
936 |
|
|
|
937 |
|
|
#define TRAMPOLINE_SIZE (TARGET_V32 ? 58 : 32)
|
938 |
|
|
|
939 |
|
|
/* CRIS wants instructions on word-boundary. */
|
940 |
|
|
#define TRAMPOLINE_ALIGNMENT 16
|
941 |
|
|
|
942 |
|
|
/* Node: Library Calls */
|
943 |
|
|
|
944 |
|
|
/* If you change this, you have to check whatever libraries and systems
|
945 |
|
|
that use it. */
|
946 |
|
|
#define TARGET_EDOM 33
|
947 |
|
|
|
948 |
|
|
|
949 |
|
|
/* Node: Addressing Modes */
|
950 |
|
|
|
951 |
|
|
#define HAVE_POST_INCREMENT 1
|
952 |
|
|
|
953 |
|
|
/* Must be a compile-time constant, so we go with the highest value
|
954 |
|
|
among all CRIS variants. */
|
955 |
|
|
#define MAX_REGS_PER_ADDRESS 2
|
956 |
|
|
|
957 |
|
|
/* There are helper macros defined here which are used only in
|
958 |
|
|
GO_IF_LEGITIMATE_ADDRESS.
|
959 |
|
|
|
960 |
|
|
Note that you *have to* reject invalid addressing modes for mode
|
961 |
|
|
MODE, even if it is legal for normal addressing modes. You cannot
|
962 |
|
|
rely on the constraints to do this work. They can only be used to
|
963 |
|
|
doublecheck your intentions. One example is that you HAVE TO reject
|
964 |
|
|
(mem:DI (plus:SI (reg:SI x) (reg:SI y))) because for some reason
|
965 |
|
|
this cannot be reloaded. (Which of course you can argue that gcc
|
966 |
|
|
should have done.) FIXME: Strange. Check. */
|
967 |
|
|
|
968 |
|
|
/* No symbol can be used as an index (or more correct, as a base) together
|
969 |
|
|
with a register with PIC; the PIC register must be there. */
|
970 |
|
|
#define CONSTANT_INDEX_P(X) \
|
971 |
|
|
(CONSTANT_P (X) && (!flag_pic || cris_valid_pic_const (X, true)))
|
972 |
|
|
|
973 |
|
|
/* True if X is a valid base register. */
|
974 |
|
|
#define BASE_P(X) \
|
975 |
|
|
(REG_P (X) && REG_OK_FOR_BASE_P (X))
|
976 |
|
|
|
977 |
|
|
/* True if X is a valid base register with or without autoincrement. */
|
978 |
|
|
#define BASE_OR_AUTOINCR_P(X) \
|
979 |
|
|
(BASE_P (X) \
|
980 |
|
|
|| (GET_CODE (X) == POST_INC \
|
981 |
|
|
&& BASE_P (XEXP (X, 0)) \
|
982 |
|
|
&& REGNO (XEXP (X, 0)) != CRIS_ACR_REGNUM))
|
983 |
|
|
|
984 |
|
|
/* True if X is a valid (register) index for BDAP, i.e. [Rs].S or [Rs+].S. */
|
985 |
|
|
#define BDAP_INDEX_P(X) \
|
986 |
|
|
((MEM_P (X) && GET_MODE (X) == SImode \
|
987 |
|
|
&& BASE_OR_AUTOINCR_P (XEXP (X, 0))) \
|
988 |
|
|
|| (GET_CODE (X) == SIGN_EXTEND \
|
989 |
|
|
&& MEM_P (XEXP (X, 0)) \
|
990 |
|
|
&& (GET_MODE (XEXP (X, 0)) == HImode \
|
991 |
|
|
|| GET_MODE (XEXP (X, 0)) == QImode) \
|
992 |
|
|
&& BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0))))
|
993 |
|
|
|
994 |
|
|
/* True if X is a valid (register) index for BIAP, i.e. Rd.m. */
|
995 |
|
|
#define BIAP_INDEX_P(X) \
|
996 |
|
|
((BASE_P (X) && REG_OK_FOR_INDEX_P (X)) \
|
997 |
|
|
|| (GET_CODE (X) == MULT \
|
998 |
|
|
&& BASE_P (XEXP (X, 0)) \
|
999 |
|
|
&& REG_OK_FOR_INDEX_P (XEXP (X, 0)) \
|
1000 |
|
|
&& CONST_INT_P (XEXP (X, 1)) \
|
1001 |
|
|
&& (INTVAL (XEXP (X, 1)) == 2 \
|
1002 |
|
|
|| INTVAL (XEXP (X, 1)) == 4)))
|
1003 |
|
|
|
1004 |
|
|
/* A PIC operand looks like a normal symbol here. At output we dress it
|
1005 |
|
|
in "[rPIC+symbol:GOT]" (global symbol) or "rPIC+symbol:GOTOFF" (local
|
1006 |
|
|
symbol) so we exclude all addressing modes where we can't replace a
|
1007 |
|
|
plain "symbol" with that. A global PIC symbol does not fit anywhere
|
1008 |
|
|
here (but is thankfully a general_operand in itself). A local PIC
|
1009 |
|
|
symbol is valid for the plain "symbol + offset" case. */
|
1010 |
|
|
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
|
1011 |
|
|
{ \
|
1012 |
|
|
rtx x1, x2; \
|
1013 |
|
|
if (BASE_OR_AUTOINCR_P (X)) \
|
1014 |
|
|
goto ADDR; \
|
1015 |
|
|
else if (TARGET_V32) \
|
1016 |
|
|
/* Nothing else is valid then. */ \
|
1017 |
|
|
; \
|
1018 |
|
|
else if (CONSTANT_INDEX_P (X)) \
|
1019 |
|
|
goto ADDR; \
|
1020 |
|
|
/* Indexed? */ \
|
1021 |
|
|
else if (GET_CODE (X) == PLUS) \
|
1022 |
|
|
{ \
|
1023 |
|
|
x1 = XEXP (X, 0); \
|
1024 |
|
|
x2 = XEXP (X, 1); \
|
1025 |
|
|
/* BDAP o, Rd. */ \
|
1026 |
|
|
if ((BASE_P (x1) && CONSTANT_INDEX_P (x2)) \
|
1027 |
|
|
|| (BASE_P (x2) && CONSTANT_INDEX_P (x1)) \
|
1028 |
|
|
/* BDAP Rs[+], Rd. */ \
|
1029 |
|
|
|| (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
|
1030 |
|
|
&& ((BASE_P (x1) && BDAP_INDEX_P (x2)) \
|
1031 |
|
|
|| (BASE_P (x2) && BDAP_INDEX_P (x1)) \
|
1032 |
|
|
/* BIAP.m Rs, Rd */ \
|
1033 |
|
|
|| (BASE_P (x1) && BIAP_INDEX_P (x2)) \
|
1034 |
|
|
|| (BASE_P (x2) && BIAP_INDEX_P (x1))))) \
|
1035 |
|
|
goto ADDR; \
|
1036 |
|
|
} \
|
1037 |
|
|
else if (MEM_P (X)) \
|
1038 |
|
|
{ \
|
1039 |
|
|
/* DIP (Rs). Reject [[reg+]] and [[reg]] for \
|
1040 |
|
|
DImode (long long). */ \
|
1041 |
|
|
if (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
|
1042 |
|
|
&& (BASE_P (XEXP (X, 0)) \
|
1043 |
|
|
|| BASE_OR_AUTOINCR_P (XEXP (X, 0)))) \
|
1044 |
|
|
goto ADDR; \
|
1045 |
|
|
} \
|
1046 |
|
|
}
|
1047 |
|
|
|
1048 |
|
|
#ifndef REG_OK_STRICT
|
1049 |
|
|
/* Nonzero if X is a hard reg that can be used as a base reg
|
1050 |
|
|
or if it is a pseudo reg. */
|
1051 |
|
|
# define REG_OK_FOR_BASE_P(X) \
|
1052 |
|
|
(REGNO (X) <= CRIS_LAST_GENERAL_REGISTER \
|
1053 |
|
|
|| REGNO (X) == ARG_POINTER_REGNUM \
|
1054 |
|
|
|| REGNO (X) >= FIRST_PSEUDO_REGISTER)
|
1055 |
|
|
#else
|
1056 |
|
|
/* Nonzero if X is a hard reg that can be used as a base reg. */
|
1057 |
|
|
# define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
|
1058 |
|
|
#endif
|
1059 |
|
|
|
1060 |
|
|
#ifndef REG_OK_STRICT
|
1061 |
|
|
/* Nonzero if X is a hard reg that can be used as an index
|
1062 |
|
|
or if it is a pseudo reg. */
|
1063 |
|
|
# define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
|
1064 |
|
|
#else
|
1065 |
|
|
/* Nonzero if X is a hard reg that can be used as an index. */
|
1066 |
|
|
# define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
|
1067 |
|
|
#endif
|
1068 |
|
|
|
1069 |
|
|
/* Fix reloads known to cause suboptimal spilling. */
|
1070 |
|
|
#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, INDL, WIN) \
|
1071 |
|
|
do \
|
1072 |
|
|
{ \
|
1073 |
|
|
if (cris_reload_address_legitimized (X, MODE, OPNUM, TYPE, INDL)) \
|
1074 |
|
|
goto WIN; \
|
1075 |
|
|
} \
|
1076 |
|
|
while (0)
|
1077 |
|
|
|
1078 |
|
|
#define LEGITIMATE_CONSTANT_P(X) 1
|
1079 |
|
|
|
1080 |
|
|
|
1081 |
|
|
/* Node: Condition Code */
|
1082 |
|
|
|
1083 |
|
|
#define NOTICE_UPDATE_CC(EXP, INSN) cris_notice_update_cc (EXP, INSN)
|
1084 |
|
|
|
1085 |
|
|
/* FIXME: Maybe define CANONICALIZE_COMPARISON later, when playing with
|
1086 |
|
|
optimizations. It is needed; currently we do this with instruction
|
1087 |
|
|
patterns and NOTICE_UPDATE_CC. */
|
1088 |
|
|
|
1089 |
|
|
|
1090 |
|
|
/* Node: Costs */
|
1091 |
|
|
|
1092 |
|
|
#define REGISTER_MOVE_COST(MODE, FROM, TO) \
|
1093 |
|
|
cris_register_move_cost (MODE, FROM, TO)
|
1094 |
|
|
|
1095 |
|
|
/* This isn't strictly correct for v0..3 in buswidth-8bit mode, but
|
1096 |
|
|
should suffice. */
|
1097 |
|
|
#define MEMORY_MOVE_COST(M, CLASS, IN) \
|
1098 |
|
|
(((M) == QImode) ? 4 : ((M) == HImode) ? 4 : 6)
|
1099 |
|
|
|
1100 |
|
|
/* Regardless of the presence of delay slots, the default value of 1 for
|
1101 |
|
|
BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2
|
1102 |
|
|
with testcases ipps and gcc, giving smallest and fastest code. */
|
1103 |
|
|
|
1104 |
|
|
#define SLOW_BYTE_ACCESS 0
|
1105 |
|
|
|
1106 |
|
|
/* This is the threshold *below* which inline move sequences of
|
1107 |
|
|
word-length sizes will be emitted. The "9" will translate to
|
1108 |
|
|
(9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions
|
1109 |
|
|
(8 instruction sequences) or less. */
|
1110 |
|
|
#define MOVE_RATIO(speed) 9
|
1111 |
|
|
|
1112 |
|
|
|
1113 |
|
|
/* Node: Sections */
|
1114 |
|
|
|
1115 |
|
|
#define TEXT_SECTION_ASM_OP "\t.text"
|
1116 |
|
|
|
1117 |
|
|
#define DATA_SECTION_ASM_OP "\t.data"
|
1118 |
|
|
|
1119 |
|
|
#define FORCE_EH_FRAME_INFO_IN_DATA_SECTION (! TARGET_ELF)
|
1120 |
|
|
|
1121 |
|
|
/* The jump table is immediately connected to the preceding insn. */
|
1122 |
|
|
#define JUMP_TABLES_IN_TEXT_SECTION 1
|
1123 |
|
|
|
1124 |
|
|
|
1125 |
|
|
/* Node: PIC */
|
1126 |
|
|
|
1127 |
|
|
/* Helper type. */
|
1128 |
|
|
|
1129 |
|
|
enum cris_pic_symbol_type
|
1130 |
|
|
{
|
1131 |
|
|
cris_no_symbol = 0,
|
1132 |
|
|
cris_got_symbol = 1,
|
1133 |
|
|
cris_rel_symbol = 2,
|
1134 |
|
|
cris_got_symbol_needing_fixup = 3,
|
1135 |
|
|
cris_invalid_pic_symbol = 4
|
1136 |
|
|
};
|
1137 |
|
|
|
1138 |
|
|
#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? CRIS_GOT_REGNUM : INVALID_REGNUM)
|
1139 |
|
|
|
1140 |
|
|
#define LEGITIMATE_PIC_OPERAND_P(X) cris_legitimate_pic_operand (X)
|
1141 |
|
|
|
1142 |
|
|
|
1143 |
|
|
/* Node: File Framework */
|
1144 |
|
|
|
1145 |
|
|
/* We don't want an .ident for gcc. To avoid that but still support
|
1146 |
|
|
#ident, we override ASM_OUTPUT_IDENT and, since the gcc .ident is its
|
1147 |
|
|
only use besides ASM_OUTPUT_IDENT, undef IDENT_ASM_OP from elfos.h. */
|
1148 |
|
|
#undef IDENT_ASM_OP
|
1149 |
|
|
#undef ASM_OUTPUT_IDENT
|
1150 |
|
|
#define ASM_OUTPUT_IDENT(FILE, NAME) \
|
1151 |
|
|
fprintf (FILE, "%s\"%s\"\n", "\t.ident\t", NAME);
|
1152 |
|
|
|
1153 |
|
|
#define ASM_APP_ON "#APP\n"
|
1154 |
|
|
|
1155 |
|
|
#define ASM_APP_OFF "#NO_APP\n"
|
1156 |
|
|
|
1157 |
|
|
|
1158 |
|
|
/* Node: Data Output */
|
1159 |
|
|
|
1160 |
|
|
#define OUTPUT_ADDR_CONST_EXTRA(STREAM, X, FAIL) \
|
1161 |
|
|
do { if (!cris_output_addr_const_extra (STREAM, X)) goto FAIL; } while (0)
|
1162 |
|
|
|
1163 |
|
|
#define IS_ASM_LOGICAL_LINE_SEPARATOR(C, STR) (C) == '@'
|
1164 |
|
|
|
1165 |
|
|
/* Node: Uninitialized Data */
|
1166 |
|
|
|
1167 |
|
|
/* Remember to round off odd values if we want data alignment,
|
1168 |
|
|
since we cannot do that with an .align directive.
|
1169 |
|
|
|
1170 |
|
|
Using .comm causes the space not to be reserved in .bss, but by
|
1171 |
|
|
tricks with the symbol type. Not good if other tools than binutils
|
1172 |
|
|
are used on the object files. Since ".global ... .lcomm ..." works, we
|
1173 |
|
|
use that. Use .._ALIGNED_COMMON, since gcc whines when we only have
|
1174 |
|
|
..._COMMON, and we prefer to whine ourselves; BIGGEST_ALIGNMENT is not
|
1175 |
|
|
the one to check. This done for a.out only. */
|
1176 |
|
|
/* FIXME: I suspect a bug in gcc with alignment. Do not warn until
|
1177 |
|
|
investigated; it mucks up the testsuite results. */
|
1178 |
|
|
#define CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, LOCAL) \
|
1179 |
|
|
do \
|
1180 |
|
|
{ \
|
1181 |
|
|
int align_ = (ALIGN) / BITS_PER_UNIT; \
|
1182 |
|
|
if (TARGET_DATA_ALIGN && TARGET_ALIGN_BY_32 && align_ < 4) \
|
1183 |
|
|
align_ = 4; \
|
1184 |
|
|
else if (TARGET_DATA_ALIGN && align_ < 2) \
|
1185 |
|
|
align_ = 2; \
|
1186 |
|
|
/* FIXME: Do we need this? */ \
|
1187 |
|
|
else if (align_ < 1) \
|
1188 |
|
|
align_ = 1; \
|
1189 |
|
|
\
|
1190 |
|
|
if (TARGET_ELF) \
|
1191 |
|
|
{ \
|
1192 |
|
|
if (LOCAL) \
|
1193 |
|
|
{ \
|
1194 |
|
|
fprintf ((FILE), "%s", LOCAL_ASM_OP); \
|
1195 |
|
|
assemble_name ((FILE), (NAME)); \
|
1196 |
|
|
fprintf ((FILE), "\n"); \
|
1197 |
|
|
} \
|
1198 |
|
|
fprintf ((FILE), "%s", COMMON_ASM_OP); \
|
1199 |
|
|
assemble_name ((FILE), (NAME)); \
|
1200 |
|
|
fprintf ((FILE), ",%u,%u\n", (int)(SIZE), align_); \
|
1201 |
|
|
} \
|
1202 |
|
|
else \
|
1203 |
|
|
{ \
|
1204 |
|
|
/* We can't tell a one-only or weak COMM from a "global \
|
1205 |
|
|
COMM" so just make all non-locals weak. */ \
|
1206 |
|
|
if (! (LOCAL)) \
|
1207 |
|
|
ASM_WEAKEN_LABEL (FILE, NAME); \
|
1208 |
|
|
fputs ("\t.lcomm ", (FILE)); \
|
1209 |
|
|
assemble_name ((FILE), (NAME)); \
|
1210 |
|
|
fprintf ((FILE), ",%u\n", \
|
1211 |
|
|
((int)(SIZE) + (align_ - 1)) & ~(align_ - 1)); \
|
1212 |
|
|
} \
|
1213 |
|
|
} \
|
1214 |
|
|
while (0)
|
1215 |
|
|
|
1216 |
|
|
#define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
|
1217 |
|
|
CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 0)
|
1218 |
|
|
|
1219 |
|
|
#undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
|
1220 |
|
|
#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
|
1221 |
|
|
CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 1)
|
1222 |
|
|
|
1223 |
|
|
/* Node: Label Output */
|
1224 |
|
|
|
1225 |
|
|
/* Globalizing directive for a label. */
|
1226 |
|
|
#define GLOBAL_ASM_OP "\t.global "
|
1227 |
|
|
|
1228 |
|
|
#define SUPPORTS_WEAK 1
|
1229 |
|
|
|
1230 |
|
|
#define ASM_OUTPUT_SYMBOL_REF(STREAM, SYM) \
|
1231 |
|
|
cris_asm_output_symbol_ref (STREAM, SYM)
|
1232 |
|
|
|
1233 |
|
|
#define ASM_OUTPUT_LABEL_REF(STREAM, BUF) \
|
1234 |
|
|
cris_asm_output_label_ref (STREAM, BUF)
|
1235 |
|
|
|
1236 |
|
|
/* Remove any previous definition (elfos.h). */
|
1237 |
|
|
#undef ASM_GENERATE_INTERNAL_LABEL
|
1238 |
|
|
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
|
1239 |
|
|
sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long) NUM)
|
1240 |
|
|
|
1241 |
|
|
/* Node: Initialization */
|
1242 |
|
|
/* (no definitions) */
|
1243 |
|
|
|
1244 |
|
|
/* Node: Macros for Initialization */
|
1245 |
|
|
/* (no definitions) */
|
1246 |
|
|
|
1247 |
|
|
/* Node: Instruction Output */
|
1248 |
|
|
|
1249 |
|
|
#define REGISTER_NAMES \
|
1250 |
|
|
{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
|
1251 |
|
|
"r9", "r10", "r11", "r12", "r13", "sp", "acr", "srp", "mof", "faked_ap", "dccr"}
|
1252 |
|
|
|
1253 |
|
|
#define ADDITIONAL_REGISTER_NAMES \
|
1254 |
|
|
{{"r14", 14}, {"r15", 15}, {"pc", 15}}
|
1255 |
|
|
|
1256 |
|
|
#define PRINT_OPERAND(FILE, X, CODE) \
|
1257 |
|
|
cris_print_operand (FILE, X, CODE)
|
1258 |
|
|
|
1259 |
|
|
/* For delay-slot handling. */
|
1260 |
|
|
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
|
1261 |
|
|
((CODE) == '#' || (CODE) == '!' || (CODE) == ':')
|
1262 |
|
|
|
1263 |
|
|
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
|
1264 |
|
|
cris_print_operand_address (FILE, ADDR)
|
1265 |
|
|
|
1266 |
|
|
/* Output an empty line to illustrate the presence of the delay slot. */
|
1267 |
|
|
#define DBR_OUTPUT_SEQEND(FILE) \
|
1268 |
|
|
fprintf (FILE, "\n")
|
1269 |
|
|
|
1270 |
|
|
#define LOCAL_LABEL_PREFIX (TARGET_ELF ? "." : "")
|
1271 |
|
|
|
1272 |
|
|
/* cppinit.c initializes a const array from this, so it must be constant,
|
1273 |
|
|
can't have it different based on options. Luckily, the prefix is
|
1274 |
|
|
always allowed, so let's have it on all GCC-generated code. Note that
|
1275 |
|
|
we have this verbatim everywhere in the back-end, not using %R or %s or
|
1276 |
|
|
such. */
|
1277 |
|
|
#define REGISTER_PREFIX "$"
|
1278 |
|
|
|
1279 |
|
|
/* Remove any previous definition (elfos.h). */
|
1280 |
|
|
/* We use -fno-leading-underscore to remove it, when necessary. */
|
1281 |
|
|
#undef USER_LABEL_PREFIX
|
1282 |
|
|
#define USER_LABEL_PREFIX "_"
|
1283 |
|
|
|
1284 |
|
|
#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
|
1285 |
|
|
fprintf (FILE, \
|
1286 |
|
|
TARGET_V32 \
|
1287 |
|
|
? "\tsubq 4,$sp\n\tmove $%s,[$sp]\n" : "\tpush $%s\n", \
|
1288 |
|
|
reg_names[REGNO])
|
1289 |
|
|
|
1290 |
|
|
#define ASM_OUTPUT_REG_POP(FILE, REGNO) \
|
1291 |
|
|
fprintf (FILE, "\tmove [$sp+],$%s\n", reg_names[REGNO])
|
1292 |
|
|
|
1293 |
|
|
|
1294 |
|
|
/* Node: Dispatch Tables */
|
1295 |
|
|
|
1296 |
|
|
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
|
1297 |
|
|
do \
|
1298 |
|
|
{ \
|
1299 |
|
|
if (TARGET_V32) \
|
1300 |
|
|
asm_fprintf (FILE, "\t.word %LL%d-.\n", VALUE); \
|
1301 |
|
|
else \
|
1302 |
|
|
asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL); \
|
1303 |
|
|
} \
|
1304 |
|
|
while (0)
|
1305 |
|
|
|
1306 |
|
|
#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
|
1307 |
|
|
asm_fprintf (FILE, "\t.dword %LL%d\n", VALUE)
|
1308 |
|
|
|
1309 |
|
|
/* Defined to also emit an .align in elfos.h. We don't want that. */
|
1310 |
|
|
#undef ASM_OUTPUT_CASE_LABEL
|
1311 |
|
|
|
1312 |
|
|
/* Since the "bound" insn loads the comparison value if the compared<
|
1313 |
|
|
value (register) is out of bounds (0..comparison value-1), we need
|
1314 |
|
|
to output another case to catch it.
|
1315 |
|
|
The way to find it is to look for the label_ref at the else-arm inside
|
1316 |
|
|
the expanded casesi core-insn.
|
1317 |
|
|
FIXME: Check this construct when changing to new version of gcc. */
|
1318 |
|
|
#define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE) \
|
1319 |
|
|
cris_asm_output_case_end (STREAM, NUM, TABLE)
|
1320 |
|
|
|
1321 |
|
|
|
1322 |
|
|
/* Node: Exception Region Output */
|
1323 |
|
|
/* (no definitions) */
|
1324 |
|
|
/* FIXME: Fill in with our own optimized layout. */
|
1325 |
|
|
|
1326 |
|
|
/* Node: Alignment Output */
|
1327 |
|
|
|
1328 |
|
|
#define ASM_OUTPUT_ALIGN(FILE, LOG) \
|
1329 |
|
|
fprintf (FILE, "\t.align %d\n", (LOG))
|
1330 |
|
|
|
1331 |
|
|
|
1332 |
|
|
/* Node: All Debuggers */
|
1333 |
|
|
|
1334 |
|
|
#define DBX_REGISTER_NUMBER(REGNO) \
|
1335 |
|
|
((REGNO) == CRIS_SRP_REGNUM ? CRIS_CANONICAL_SRP_REGNUM : \
|
1336 |
|
|
(REGNO) == CRIS_MOF_REGNUM ? CRIS_CANONICAL_MOF_REGNUM : \
|
1337 |
|
|
(REGNO) == CRIS_CC0_REGNUM ? CRIS_CANONICAL_CC0_REGNUM : \
|
1338 |
|
|
(REGNO))
|
1339 |
|
|
|
1340 |
|
|
/* FIXME: Investigate DEBUGGER_AUTO_OFFSET, DEBUGGER_ARG_OFFSET. */
|
1341 |
|
|
|
1342 |
|
|
|
1343 |
|
|
/* Node: DBX Options */
|
1344 |
|
|
|
1345 |
|
|
/* Is this correct? Check later. */
|
1346 |
|
|
#define DBX_NO_XREFS
|
1347 |
|
|
|
1348 |
|
|
#define DBX_CONTIN_LENGTH 0
|
1349 |
|
|
|
1350 |
|
|
/* FIXME: Is this needed when we have 0 DBX_CONTIN_LENGTH? */
|
1351 |
|
|
#define DBX_CONTIN_CHAR '?'
|
1352 |
|
|
|
1353 |
|
|
|
1354 |
|
|
/* Node: DBX Hooks */
|
1355 |
|
|
/* (no definitions) */
|
1356 |
|
|
|
1357 |
|
|
/* Node: File names and DBX */
|
1358 |
|
|
/* (no definitions) */
|
1359 |
|
|
|
1360 |
|
|
|
1361 |
|
|
/* Node: SDB and DWARF */
|
1362 |
|
|
/* (no definitions) */
|
1363 |
|
|
|
1364 |
|
|
/* Node: Misc */
|
1365 |
|
|
|
1366 |
|
|
/* A combination of the bound (umin) insn together with a
|
1367 |
|
|
sign-extended add via the table to PC seems optimal.
|
1368 |
|
|
If the table overflows, the assembler will take care of it.
|
1369 |
|
|
Theoretically, in extreme cases (uncertain if they occur), an error
|
1370 |
|
|
will be emitted, so FIXME: Check how large case-tables are emitted,
|
1371 |
|
|
possible add an option to emit SImode case-tables. */
|
1372 |
|
|
#define CASE_VECTOR_MODE HImode
|
1373 |
|
|
|
1374 |
|
|
#define CASE_VECTOR_PC_RELATIVE 1
|
1375 |
|
|
|
1376 |
|
|
/* FIXME: Investigate CASE_VECTOR_SHORTEN_MODE to make sure HImode is not
|
1377 |
|
|
used when broken-.word could possibly fail (plus testcase). */
|
1378 |
|
|
|
1379 |
|
|
#define FIXUNS_TRUNC_LIKE_FIX_TRUNC
|
1380 |
|
|
|
1381 |
|
|
/* This is the number of bytes that can be moved in one
|
1382 |
|
|
reasonably fast instruction sequence. For CRIS, this is two
|
1383 |
|
|
instructions: mem => reg, reg => mem. */
|
1384 |
|
|
#define MOVE_MAX 4
|
1385 |
|
|
|
1386 |
|
|
/* Maybe SHIFT_COUNT_TRUNCATED is safe to define? FIXME: Check later. */
|
1387 |
|
|
|
1388 |
|
|
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
|
1389 |
|
|
|
1390 |
|
|
#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
|
1391 |
|
|
#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
|
1392 |
|
|
|
1393 |
|
|
#define Pmode SImode
|
1394 |
|
|
|
1395 |
|
|
#define FUNCTION_MODE QImode
|
1396 |
|
|
|
1397 |
|
|
#define NO_IMPLICIT_EXTERN_C
|
1398 |
|
|
|
1399 |
|
|
/* No specific purpose other than warningless compatibility. */
|
1400 |
|
|
#define HANDLE_PRAGMA_PACK_PUSH_POP 1
|
1401 |
|
|
|
1402 |
|
|
/*
|
1403 |
|
|
* Local variables:
|
1404 |
|
|
* eval: (c-set-style "gnu")
|
1405 |
|
|
* indent-tabs-mode: t
|
1406 |
|
|
* End:
|
1407 |
|
|
*/
|