OSDN Git Service

* target.h (targetm.calls.arg_partial_bytes): New.
[pf3gnuchains/gcc-fork.git] / gcc / config / cris / cris.h
1 /* Definitions for GCC.  Part of the machine description for CRIS.
2    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
3    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 2, 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 COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23 /* After the first "Node:" comment comes all preprocessor directives and
24    attached declarations described in the info files, the "Using and
25    Porting GCC" manual (uapgcc), in the same order as found in the "Target
26    macros" section in the gcc-2.9x CVS edition of 2000-03-17.  FIXME: Not
27    really, but needs an update anyway.
28
29    There is no generic copy-of-uapgcc comment, you'll have to see uapgcc
30    for that.  If applicable, there is a CRIS-specific comment.  The order
31    of macro definitions follow the order in the manual.  Every section in
32    the manual (node in the info pages) has an introductory `Node:
33    <subchapter>' comment.  If no macros are defined for a section, only
34    the section-comment is present.  */
35
36 /* Note that other header files (e.g. config/elfos.h, config/linux.h,
37    config/cris/linux.h and config/cris/aout.h) are responsible for lots of
38    settings not repeated below.  This file contains general CRIS
39    definitions and definitions for the cris-*-elf subtarget.  */
40
41 /* Replacement for REG_P since it does not match SUBREGs.  Happens for
42    testcase Axis-20000320 with gcc-2.9x.  */
43 #define REG_S_P(x) \
44  (REG_P (x) || (GET_CODE (x) == SUBREG && REG_P (XEXP (x, 0))))
45
46 /* Last register in main register bank r0..r15.  */
47 #define CRIS_LAST_GENERAL_REGISTER 15
48
49 /* Descriptions of registers used for arguments.  */
50 #define CRIS_FIRST_ARG_REG 10
51 #define CRIS_MAX_ARGS_IN_REGS 4
52
53 /* Other convenience definitions.  */
54 #define CRIS_PC_REGNUM 15
55 #define CRIS_SRP_REGNUM 16
56
57 /* Most of the time, we need the index into the register-names array.
58    When passing debug-info, we need the real register number.  */
59 #define CRIS_CANONICAL_SRP_REGNUM (16 + 11)
60 #define CRIS_CANONICAL_MOF_REGNUM (16 + 7)
61
62 /* When generating PIC, these suffixes are added to the names of non-local
63    functions when being output.  Contrary to other ports, we have offsets
64    relative to the GOT, not the PC.  We might implement PC-relative PLT
65    semantics later for the general case; they are used in some cases right
66    now, such as MI thunks.  */
67 #define CRIS_GOTPLT_SUFFIX ":GOTPLT"
68 #define CRIS_PLT_GOTOFFSET_SUFFIX ":PLTG"
69 #define CRIS_PLT_PCOFFSET_SUFFIX ":PLT"
70
71 #define CRIS_FUNCTION_ARG_SIZE(MODE, TYPE)      \
72   ((MODE) != BLKmode ? GET_MODE_SIZE (MODE)     \
73    : (unsigned) int_size_in_bytes (TYPE))
74
75 /* Check for max allowed stackframe. A "const char *" to be parsed.  */
76 extern const char *cris_max_stackframe_str;
77
78 /* Which CPU version this is.  A "const char *" to be parsed.  */
79 extern const char *cris_cpu_str;
80
81 /* Which CPU version this is.  The parsed and adjusted cris_cpu_str.  */
82 extern int cris_cpu_version;
83
84 /* Which CPU version to tune for.  A "const char *" to be parsed.  */
85 extern const char *cris_tune_str;
86
87 /* The argument to "-melinux-stacksize=".  We don't parse it currently;
88    it's just passed on to the linker.  We might want to do something
89    here someday.  */
90 extern const char *cris_elinux_stacksize_str;
91
92 /* Changing the order used to be necessary to put the fourth __make_dp
93    argument (a DImode parameter) in registers, to fit with the libfunc
94    parameter passing scheme used for intrinsic functions.  FIXME: Check
95    performance and maybe remove definition from TARGET_LIBGCC2_CFLAGS now
96    that it isn't strictly necessary.  We used to do this through
97    TARGET_LIBGCC2_CFLAGS, but that became increasingly difficult as the
98    parenthesis (that needed quoting) travels through several layers of
99    make and shell invocations.  */
100 #ifdef IN_LIBGCC2
101 #define __make_dp(a,b,c,d) __cris_make_dp(d,a,b,c)
102 #endif
103
104
105 /* Node: Driver */
106
107 /* When using make with defaults.mak for Sun this will handily remove
108    any "-target sun*" switches.  */
109 /* We need to override any previous definitions (linux.h) */
110 #undef WORD_SWITCH_TAKES_ARG
111 #define WORD_SWITCH_TAKES_ARG(STR)              \
112  (DEFAULT_WORD_SWITCH_TAKES_ARG (STR)           \
113   || !strcmp (STR, "target"))
114
115 /* Also provide canonical vN definitions when user specifies an alias.
116    Note that -melf overrides -maout.  */
117
118 #define CPP_SPEC \
119  "%{mtune=*:-D__tune_%* %{mtune=v*:-D__CRIS_arch_tune=%*}}\
120    %{mtune=etrax4:-D__tune_v3 -D__CRIS_arch_tune=3}\
121    %{mtune=etrax100:-D__tune_v8 -D__CRIS_arch_tune=8}\
122    %{mtune=svinto:-D__tune_v8 -D__CRIS_arch_tune=8}\
123    %{mtune=etrax100lx:-D__tune_v10 -D__CRIS_arch_tune=10}\
124    %{mtune=ng:-D__tune_v10 -D__CRIS_arch_tune=10}\
125   %{mcpu=*:-D__arch_%* %{mcpu=v*:-D__CRIS_arch_version=%*}}\
126    %{mcpu=etrax4:-D__arch_v3 -D__CRIS_arch_version=3}\
127    %{mcpu=etrax100:-D__arch_v8 -D__CRIS_arch_version=8}\
128    %{mcpu=svinto:-D__arch_v8 -D__CRIS_arch_version=8}\
129    %{mcpu=etrax100lx:-D__arch_v10 -D__CRIS_arch_version=10}\
130    %{mcpu=ng:-D__arch_v10 -D__CRIS_arch_version=10}\
131   %{march=*:-D__arch_%* %{march=v*:-D__CRIS_arch_version=%*}}\
132    %{march=etrax4:-D__arch_v3 -D__CRIS_arch_version=3}\
133    %{march=etrax100:-D__arch_v8 -D__CRIS_arch_version=8}\
134    %{march=svinto:-D__arch_v8 -D__CRIS_arch_version=8}\
135    %{march=etrax100lx:-D__arch_v10 -D__CRIS_arch_version=10}\
136    %{march=ng:-D__arch_v10 -D__CRIS_arch_version=10}\
137   %{metrax100:-D__arch__v8 -D__CRIS_arch_version=8}\
138   %{metrax4:-D__arch__v3 -D__CRIS_arch_version=3}\
139   %(cpp_subtarget)"
140
141 /* For the cris-*-elf subtarget.  */
142 #define CRIS_CPP_SUBTARGET_SPEC \
143  "%{mbest-lib-options:\
144    %{!moverride-best-lib-options:\
145     %{!march=*:%{!metrax*:%{!mcpu=*:-D__tune_v10 -D__CRIS_arch_tune=10}}}}}"
146
147 /* Remove those Sun-make "target" switches.  */
148 /* Override previous definitions (linux.h).  */
149 #undef CC1_SPEC
150 #define CC1_SPEC \
151  "%{target*:}\
152   %{metrax4:-march=v3}\
153   %{metrax100:-march=v8}\
154   %(cc1_subtarget)"
155
156 /* For the cris-*-elf subtarget.  */
157 #define CRIS_CC1_SUBTARGET_SPEC \
158  "-melf\
159   %{mbest-lib-options:\
160    %{!moverride-best-lib-options:\
161     %{!march=*:%{!mcpu=*:-mtune=v10 -D__CRIS_arch_tune=10}}\
162     %{!finhibit-size-directive:\
163       %{!fno-function-sections: -ffunction-sections}\
164       %{!fno-data-sections: -fdata-sections}}}}"
165
166 /* This adds to CC1_SPEC.  When bugs are removed from -fvtable-gc
167    (-fforce-addr causes invalid .vtable_entry asm in tinfo.cc and
168    nothing at all works in GCC 3.0-pre), add this line:
169    "%{mbest-lib-options:%{!moverride-best-lib-options:\
170    %{!melinux:%{!maout|melf:%{!fno-vtable-gc:-fvtable-gc}}}}}".  */
171 #define CC1PLUS_SPEC ""
172
173 #ifdef HAVE_AS_NO_MUL_BUG_ABORT_OPTION
174 #define MAYBE_AS_NO_MUL_BUG_ABORT \
175  "%{mno-mul-bug-workaround:-no-mul-bug-abort} "
176 #else
177 #define MAYBE_AS_NO_MUL_BUG_ABORT
178 #endif
179
180 /* Override previous definitions (linux.h).  */
181 #undef ASM_SPEC
182 #define ASM_SPEC \
183  MAYBE_AS_NO_MUL_BUG_ABORT \
184  "%{v:-v}\
185   %(asm_subtarget)"
186
187 /* For the cris-*-elf subtarget.  */
188 #define CRIS_ASM_SUBTARGET_SPEC "--em=criself"
189
190 /* FIXME: We should propagate the -melf option to make the criself
191    "emulation" unless a linker script is provided (-T*), but I don't know
192    how to do that if either of -Ttext, -Tdata or -Tbss is given but no
193    linker script, as is usually the case.  Leave it to the user for the
194    time being.
195
196    Note that -melf overrides -maout except that a.out-compiled libraries
197    are linked in (multilibbing).  The somewhat cryptic -rpath-link pair is
198    to avoid *only* picking up the linux multilib subdir from the "-B./"
199    option during build, while still giving it preference.  We'd need some
200    %s-variant that checked for existence of some specific file.  */
201 /* Override previous definitions (svr4.h).  */
202 #undef LINK_SPEC
203 #define LINK_SPEC \
204  "%{v:--verbose}\
205   %(link_subtarget)"
206
207 /* For the cris-*-elf subtarget.  */
208 #define CRIS_LINK_SUBTARGET_SPEC \
209  "-mcriself\
210   %{sim2:%{!T*:-Tdata 0x4000000 -Tbss 0x8000000}}\
211   %{!r:%{O2|O3: --gc-sections}}"
212
213 /* Which library to get.  The only difference from the default is to get
214    libsc.a if -sim is given to the driver.  Repeat -lc -lsysX
215    {X=sim,linux}, because libsysX needs (at least) errno from libc, and
216    then we want to resolve new unknowns in libc against libsysX, not
217    libnosys.  */
218 /* Override previous definitions (linux.h).  */
219 #undef LIB_SPEC
220 #define LIB_SPEC \
221  "%{sim*:-lc -lsyssim -lc -lsyssim}\
222   %{!sim*:%{g*:-lg}\
223     %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} -lbsp}\
224   -lnosys"
225
226 /* Linker startfile options; crt0 flavors.
227
228    At the moment there are no gcrt0.o or mcrt0.o, but keep them here and
229    link them to crt0.o to be prepared.  Use scrt0.c if running the
230    simulator, linear style, or s2crt0.c if fixed style.  */
231 /* We need to remove any previous definition (elfos.h).  */
232 #undef STARTFILE_SPEC
233 #define STARTFILE_SPEC \
234  "%{sim2:s2crt0.o%s}\
235   %{!sim2:%{sim:scrt0.o%s}\
236    %{!sim:%{pg:gcrt0.o%s}\
237     %{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}\
238   crtbegin.o%s"
239
240 #undef ENDFILE_SPEC
241 #define ENDFILE_SPEC "crtend.o%s"
242
243 #define EXTRA_SPECS                             \
244   {"cpp_subtarget", CRIS_CPP_SUBTARGET_SPEC},   \
245   {"cc1_subtarget", CRIS_CC1_SUBTARGET_SPEC},   \
246   {"asm_subtarget", CRIS_ASM_SUBTARGET_SPEC},   \
247   {"link_subtarget", CRIS_LINK_SUBTARGET_SPEC}, \
248   CRIS_SUBTARGET_EXTRA_SPECS
249
250 #define CRIS_SUBTARGET_EXTRA_SPECS
251
252
253 /* Node: Run-time Target */
254
255 #define TARGET_CPU_CPP_BUILTINS()               \
256   do                                            \
257     {                                           \
258       builtin_define_std ("cris");              \
259       builtin_define_std ("CRIS");              \
260       builtin_define_std ("GNU_CRIS");          \
261       builtin_define ("__CRIS_ABI_version=2");  \
262       builtin_assert ("cpu=cris");              \
263       builtin_assert ("machine=cris");          \
264     }                                           \
265   while (0)
266
267 /* This needs to be at least 32 bits.  */
268 extern int target_flags;
269
270 /* Currently this just affects alignment.  FIXME:  Redundant with
271    TARGET_ALIGN_BY_32, or put machine stuff here?  */
272 #define TARGET_MASK_SVINTO 1
273 #define TARGET_SVINTO (target_flags & TARGET_MASK_SVINTO)
274
275 /* If to use condition-codes generated by insns other than the
276    immediately preceding compare/test insn.
277     Used to check for errors in notice_update_cc.  */
278 #define TARGET_MASK_CCINIT 2
279 #define TARGET_CCINIT (target_flags & TARGET_MASK_CCINIT)
280
281 /* Debug option.  */
282 #define TARGET_MASK_PDEBUG 4
283 #define TARGET_PDEBUG (target_flags & TARGET_MASK_PDEBUG)
284
285 /* If to use side-effect patterns.  Used to debug the [rx=ry+i] type
286    patterns.  */
287 #define TARGET_MASK_SIDE_EFFECT_PREFIXES 8
288 #define TARGET_SIDE_EFFECT_PREFIXES \
289  (target_flags & TARGET_MASK_SIDE_EFFECT_PREFIXES)
290
291 /* If to expand mul into mstep.  Only used when making libc.a.  */
292 #define TARGET_MASK_EXPAND_MUL 16
293 #define TARGET_EXPAND_MUL (target_flags & TARGET_MASK_EXPAND_MUL)
294
295 /* If to *keep* (not force) alignment of stack at 16 bits.  */
296 #define TARGET_MASK_STACK_ALIGN 32
297 #define TARGET_STACK_ALIGN (target_flags & TARGET_MASK_STACK_ALIGN)
298
299 /* If to do alignment on individual non-modifiable objects.  */
300 #define TARGET_MASK_CONST_ALIGN 64
301 #define TARGET_CONST_ALIGN (target_flags & TARGET_MASK_CONST_ALIGN)
302
303 /* If to do alignment on individual modifiable objects.  */
304 #define TARGET_MASK_DATA_ALIGN 128
305 #define TARGET_DATA_ALIGN (target_flags & TARGET_MASK_DATA_ALIGN)
306
307 /* If not to omit function prologue and epilogue.  */
308 #define TARGET_MASK_PROLOGUE_EPILOGUE 256
309 #define TARGET_PROLOGUE_EPILOGUE (target_flags & TARGET_MASK_PROLOGUE_EPILOGUE)
310
311 /* Instructions additions from Etrax 4 and up.
312    (Just "lz", which we don't really generate from GCC -- yet).  */
313 #define TARGET_MASK_ETRAX4_ADD 512
314 #define TARGET_ETRAX4_ADD (target_flags & TARGET_MASK_ETRAX4_ADD)
315
316 /* Say that all alignment specifications say to prefer 32 rather
317    than 16 bits.  */
318 #define TARGET_MASK_ALIGN_BY_32 1024
319 #define TARGET_ALIGN_BY_32 (target_flags & TARGET_MASK_ALIGN_BY_32)
320
321 /* This condition is of limited use, as gcc is riddled with #ifdef:s
322    controlling this, rather than if (...):s.  */
323 #define TARGET_MASK_ELF 2048
324 #define TARGET_ELF (target_flags & TARGET_MASK_ELF)
325
326 /* Currently just used to error-check other options.  Note that this is
327    *not* set for -melinux.  */
328 #define TARGET_MASK_LINUX 4096
329 #define TARGET_LINUX (target_flags & TARGET_MASK_LINUX)
330
331 /* There's a small setup cost with using GOTPLT references, but should
332    in total be a win both in code-size and execution-time.  */
333 #define TARGET_MASK_AVOID_GOTPLT 8192
334 #define TARGET_AVOID_GOTPLT (target_flags & TARGET_MASK_AVOID_GOTPLT)
335
336 /* Whether or not to work around multiplication instruction hardware bug
337    when generating code for models where it may be present.  From the
338    trouble report for Etrax 100 LX: "A multiply operation may cause
339    incorrect cache behaviour under some specific circumstances. The
340    problem can occur if the instruction following the multiply instruction
341    causes a cache miss, and multiply operand 1 (source operand) bits
342    [31:27] matches the logical mapping of the mode register address
343    (0xb0....), and bits [9:2] of operand 1 matches the TLB register
344    address (0x258-0x25f).  There is such a mapping in kernel mode or when
345    the MMU is off.  Normally there is no such mapping in user mode, and
346    the problem will therefore probably not occur in Linux user mode
347    programs."
348
349    We have no sure-fire way to know from within GCC that we're compiling a
350    user program.  For example, -fpic/PIC is used in libgcc which is linked
351    into the kernel.  However, the workaround option -mno-mul-bug can be
352    safely used per-package when compiling programs.  The same goes for
353    general user-only libraries such as glibc, since there's no user-space
354    driver-like program that gets a mapping of I/O registers (all on the
355    same page, including the TLB registers).  */
356 #define TARGET_MASK_MUL_BUG 16384
357 #define TARGET_MUL_BUG (target_flags & TARGET_MASK_MUL_BUG)
358
359 #define TARGET_SWITCHES                                                 \
360  {                                                                      \
361   {"mul-bug-workaround",                 TARGET_MASK_MUL_BUG,           \
362    N_("Work around bug in multiplication instruction")},                \
363   {"no-mul-bug-workaround",             -TARGET_MASK_MUL_BUG, ""},      \
364   /* No "no-etrax" as it does not really imply any model.               \
365      On the other hand, "etrax" implies the common (and large)          \
366      subset matching all models.  */                                    \
367   {"etrax4",                             TARGET_MASK_ETRAX4_ADD,        \
368    N_("Compile for ETRAX 4 (CRIS v3)")},                                \
369   {"no-etrax4",                         -TARGET_MASK_ETRAX4_ADD, ""},   \
370   {"etrax100",                       (TARGET_MASK_SVINTO                \
371                                       + TARGET_MASK_ETRAX4_ADD          \
372                                       + TARGET_MASK_ALIGN_BY_32),       \
373    N_("Compile for ETRAX 100 (CRIS v8)")},                              \
374   {"no-etrax100",                   -(TARGET_MASK_SVINTO                \
375                                       + TARGET_MASK_ETRAX4_ADD), ""},   \
376   {"pdebug",                                 TARGET_MASK_PDEBUG,        \
377    N_("Emit verbose debug information in assembly code")},              \
378   {"no-pdebug",                             -TARGET_MASK_PDEBUG, ""},   \
379   {"cc-init",                                TARGET_MASK_CCINIT,        \
380    N_("Do not use condition codes from normal instructions")},          \
381   {"no-cc-init",                            -TARGET_MASK_CCINIT, ""},   \
382   {"side-effects",             TARGET_MASK_SIDE_EFFECT_PREFIXES, ""},   \
383   {"no-side-effects",         -TARGET_MASK_SIDE_EFFECT_PREFIXES,        \
384    N_("Do not emit addressing modes with side-effect assignment")},     \
385   {"stack-align",                       TARGET_MASK_STACK_ALIGN, ""},   \
386   {"no-stack-align",                   -TARGET_MASK_STACK_ALIGN,        \
387    N_("Do not tune stack alignment")},                                  \
388   {"data-align",                         TARGET_MASK_DATA_ALIGN, ""},   \
389   {"no-data-align",                     -TARGET_MASK_DATA_ALIGN,        \
390    N_("Do not tune writable data alignment")},                          \
391   {"const-align",                       TARGET_MASK_CONST_ALIGN, ""},   \
392   {"no-const-align",                   -TARGET_MASK_CONST_ALIGN,        \
393    N_("Do not tune code and read-only data alignment")},                \
394   {"32-bit",                        (TARGET_MASK_STACK_ALIGN            \
395                                      + TARGET_MASK_CONST_ALIGN          \
396                                      + TARGET_MASK_DATA_ALIGN           \
397                                      + TARGET_MASK_ALIGN_BY_32), ""},   \
398   {"32bit",                         (TARGET_MASK_STACK_ALIGN            \
399                                      + TARGET_MASK_CONST_ALIGN          \
400                                      + TARGET_MASK_DATA_ALIGN           \
401                                      + TARGET_MASK_ALIGN_BY_32),        \
402    N_("Align code and data to 32 bits")},                               \
403   {"16-bit",                         (TARGET_MASK_STACK_ALIGN           \
404                                       + TARGET_MASK_CONST_ALIGN         \
405                                       + TARGET_MASK_DATA_ALIGN), ""},   \
406   {"16bit",                          (TARGET_MASK_STACK_ALIGN           \
407                                       + TARGET_MASK_CONST_ALIGN         \
408                                       + TARGET_MASK_DATA_ALIGN), ""},   \
409   {"8-bit",                         -(TARGET_MASK_STACK_ALIGN           \
410                                       + TARGET_MASK_CONST_ALIGN         \
411                                       + TARGET_MASK_DATA_ALIGN), ""},   \
412   {"8bit",                          -(TARGET_MASK_STACK_ALIGN           \
413                                       + TARGET_MASK_CONST_ALIGN         \
414                                       + TARGET_MASK_DATA_ALIGN),        \
415    N_("Don't align items in code or data")},                            \
416   {"prologue-epilogue",           TARGET_MASK_PROLOGUE_EPILOGUE, ""},   \
417   {"no-prologue-epilogue",       -TARGET_MASK_PROLOGUE_EPILOGUE,        \
418    N_("Do not emit function prologue or epilogue")},                    \
419   /* We have to handle this m-option here since we can't wash it off in \
420      both CC1_SPEC and CC1PLUS_SPEC.  */                                \
421   {"best-lib-options",                                        0,        \
422  N_("Use the most feature-enabling options allowed by other options")}, \
423                                                                         \
424   /* We must call it "override-" since calling it "no-" will cause      \
425      gcc.c to forget it, if there's a "later" -mbest-lib-options.       \
426      Kludgy, but needed for some multilibbed files.  */                 \
427   {"override-best-lib-options",                               0,        \
428    N_("Override -mbest-lib-options")},                                  \
429   CRIS_SUBTARGET_SWITCHES                                               \
430   {"",                  TARGET_DEFAULT | CRIS_SUBTARGET_DEFAULT, ""}}   \
431
432 /* For the cris-*-elf subtarget.  */
433 #define CRIS_SUBTARGET_SWITCHES \
434  {"elf", 0, ""},
435
436 /* Default target_flags if no switches specified.  */
437 #ifndef TARGET_DEFAULT
438 # define TARGET_DEFAULT \
439  (TARGET_MASK_SIDE_EFFECT_PREFIXES + TARGET_MASK_STACK_ALIGN \
440   + TARGET_MASK_CONST_ALIGN + TARGET_MASK_DATA_ALIGN \
441   + TARGET_MASK_PROLOGUE_EPILOGUE + TARGET_MASK_MUL_BUG)
442 #endif
443
444 /* For the cris-*-elf subtarget.  */
445 #define CRIS_SUBTARGET_DEFAULT TARGET_MASK_ELF
446
447 #define CRIS_CPU_BASE 0
448 #define CRIS_CPU_ETRAX4 3       /* Just lz added.  */
449 #define CRIS_CPU_SVINTO 8       /* Added swap, jsrc & Co., 32-bit accesses.  */
450 #define CRIS_CPU_NG 10          /* Added mul[su].  */
451
452 /* Local, providing a default for cris_cpu_version.  */
453 #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_BASE
454
455 #define TARGET_HAS_MUL_INSNS (cris_cpu_version >= CRIS_CPU_NG)
456
457 #define TARGET_OPTIONS                                                  \
458  {{"cpu=", &cris_cpu_str, "", 0},                                       \
459   {"arch=", &cris_cpu_str,                                              \
460    N_("Generate code for the specified chip or CPU version"), 0},       \
461   {"tune=", &cris_tune_str,                                             \
462    N_("Tune alignment for the specified chip or CPU version"), 0},      \
463   {"max-stackframe=", &cris_max_stackframe_str,                         \
464    N_("Warn when a stackframe is larger than the specified size"), 0},  \
465   CRIS_SUBTARGET_LONG_OPTIONS                                           \
466   {"ax-stackframe=", &cris_max_stackframe_str, "", 0} }
467
468 #define CRIS_SUBTARGET_LONG_OPTIONS
469
470 /* Print subsidiary information on the compiler version in use.
471    Do not use VD.D syntax (D=digit), since this will cause confusion
472    with the base gcc version among users, when we ask which version of
473    gcc-cris they are using.  Please use some flavor of "R<number>" for
474    the version (no need for major.minor versions, I believe).  */
475 #define TARGET_VERSION \
476  fprintf (stderr, " [Axis CRIS%s]", CRIS_SUBTARGET_VERSION)
477
478 /* For the cris-*-elf subtarget.  */
479 #define CRIS_SUBTARGET_VERSION " - generic ELF"
480
481 #define OVERRIDE_OPTIONS cris_override_options ()
482
483 /* The following gives optimal code for gcc-2.7.2, but *may* be subject
484    to change.  Omitting flag_force_addr gives .1-.7% faster code for gcc
485    *only*, but 1.3% larger code.  On ipps it gives 5.3-10.6% slower
486    code(!) and 0.3% larger code.  For products, images gets .1-1.8%
487    larger.  Do not set strict aliasing from optimization options.  */
488 #define OPTIMIZATION_OPTIONS(OPTIMIZE, SIZE)    \
489   do                                            \
490     {                                           \
491       if ((OPTIMIZE) >= 2 || (SIZE))            \
492         {                                       \
493           flag_force_addr = 1;                  \
494           flag_omit_frame_pointer = 1;          \
495         }                                       \
496     }                                           \
497   while (0)
498
499
500 /* Node: Storage Layout */
501
502 #define BITS_BIG_ENDIAN 0
503
504 #define BYTES_BIG_ENDIAN 0
505
506 /* WORDS_BIG_ENDIAN is not defined in the hardware, but for consistency,
507    we use little-endianness, and we may also be able to use
508    post-increment on DImode indirect.  */
509 #define WORDS_BIG_ENDIAN 0
510
511 #define UNITS_PER_WORD 4
512
513 /* A combination of defining PROMOTE_FUNCTION_MODE,
514    TARGET_PROMOTE_FUNCTION_ARGS that always returns true
515    and *not* defining TARGET_PROMOTE_PROTOTYPES or PROMOTE_MODE gives the
516    best code size and speed for gcc, ipps and products in gcc-2.7.2.  */
517 #define CRIS_PROMOTED_MODE(MODE, UNSIGNEDP, TYPE) \
518  (GET_MODE_CLASS (MODE) == MODE_INT && GET_MODE_SIZE (MODE) < 4) \
519   ? SImode : MODE
520
521 #define PROMOTE_FUNCTION_MODE(MODE, UNSIGNEDP, TYPE)  \
522   (MODE) = CRIS_PROMOTED_MODE (MODE, UNSIGNEDP, TYPE)
523
524 /* Defining PROMOTE_FUNCTION_RETURN in gcc-2.7.2 uncovers bug 981110 (even
525    if defining FUNCTION_VALUE with MODE as PROMOTED_MODE ;-)
526
527    FIXME: Report this when cris.h is part of GCC, so others can easily
528    see the problem.  Maybe check other systems that define
529    TARGET_PROMOTE_FUNCTION_RETURN that always returns true.  */
530
531 /* We will be using prototype promotion, so they will be 32 bit.  */
532 #define PARM_BOUNDARY 32
533
534 /* Stack boundary is guided by -mstack-align, -mno-stack-align,
535    -malign.
536    Old comment: (2.1: still valid in 2.7.2?)
537     Note that to make this macro affect the alignment of stack
538    locals, a fix was required, and special precautions when handling
539    the stack pointer in various other macros (TARGET_ASM_FUNCTION_PROLOGUE
540    et al) were required.  See file "function.c".  If you would just define
541    this macro, it would only affect the builtin alloca and variable
542    local data (non-ANSI, non-K&R, Gnu C extension).  */
543 #define STACK_BOUNDARY \
544  (TARGET_STACK_ALIGN ? (TARGET_ALIGN_BY_32 ? 32 : 16) : 8)
545
546 #define FUNCTION_BOUNDARY 16
547
548 /* Do not change BIGGEST_ALIGNMENT (when optimizing), as it will affect
549    strange places, at least in 2.1.  */
550 #define BIGGEST_ALIGNMENT 8
551
552 /* If -m16bit,  -m16-bit, -malign or -mdata-align,
553    align everything to 16 bit.  */
554 #define DATA_ALIGNMENT(TYPE, BASIC_ALIGN)                       \
555  (TARGET_DATA_ALIGN                                             \
556   ? (TARGET_ALIGN_BY_32                                         \
557      ? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN)                    \
558      : (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN)
559
560 /* Note that CONSTANT_ALIGNMENT has the effect of making gcc believe that
561    ALL references to constant stuff (in code segment, like strings) has
562    this alignment.  That is a rather rushed assumption.  Luckily we do not
563    care about the "alignment" operand to builtin memcpy (only place where
564    it counts), so it doesn't affect any bad spots.  */
565 #define CONSTANT_ALIGNMENT(CONSTANT, BASIC_ALIGN)               \
566  (TARGET_CONST_ALIGN                                            \
567   ? (TARGET_ALIGN_BY_32                                         \
568      ? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN)                    \
569      : (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN)
570
571 /* FIXME: Define LOCAL_ALIGNMENT for word and dword or arrays and
572    structures (if -mstack-align=), and check that it is good.  */
573
574 #define EMPTY_FIELD_BOUNDARY 8
575
576 #define STRUCTURE_SIZE_BOUNDARY 8
577
578 #define STRICT_ALIGNMENT 0
579
580 /* Remove any previous definition (elfos.h).
581    ??? If it wasn't for all the other stuff that affects layout of
582    structures and bit-fields, this could presumably cause incompatibility
583    with other GNU/Linux ports (i.e. elfos.h users).  */
584 #undef PCC_BITFIELD_TYPE_MATTERS
585
586 /* This is only used for non-scalars.  Strange stuff happens to structs
587    (FIXME: What?) if we use anything larger than largest actually used
588    datum size, so lets make it 32.  The type "long long" will still work
589    as usual.  We can still have DImode insns, but they will only be used
590    for scalar data (i.e. long long).  */
591 #define MAX_FIXED_MODE_SIZE 32
592
593
594 /* Node: Type Layout */
595
596 /* Note that DOUBLE_TYPE_SIZE is not defined anymore, since the default
597    value gives a 64-bit double, which is what we now use.  */
598
599 /* For compatibility and historical reasons, a char should be signed.  */
600 #define DEFAULT_SIGNED_CHAR 1
601
602 /* Note that WCHAR_TYPE_SIZE is used in cexp.y,
603    where TARGET_SHORT is not available.  */
604 #undef WCHAR_TYPE
605 #define WCHAR_TYPE "long int"
606
607 #undef WCHAR_TYPE_SIZE
608 #define WCHAR_TYPE_SIZE 32
609
610
611 /* Node: Register Basics */
612
613 /*  We count all 16 non-special registers, SRP and a faked argument
614     pointer register.  */
615 #define FIRST_PSEUDO_REGISTER (16 + 1 + 1)
616
617 /* For CRIS, these are r15 (pc) and r14 (sp). Register r8 is used as a
618    frame-pointer, but is not fixed.  SRP is not included in general
619    registers and will not be used automatically.  All other special
620    registers are fixed at the moment.  The faked argument pointer register
621    is fixed too.  */
622 #define FIXED_REGISTERS \
623  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1}
624
625 /* Register r9 is used for structure-address, r10-r13 for parameters,
626    r10- for return values.  */
627 #define CALL_USED_REGISTERS \
628  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1}
629
630 #define CONDITIONAL_REGISTER_USAGE cris_conditional_register_usage ()
631
632
633 /* Node: Allocation Order */
634
635 /* We need this on CRIS, because call-used regs should be used first,
636    (so we don't need to push).  Else start using registers from r0 and up.
637     This preference is mainly because if we put call-used-regs from r0
638    and up, then we can't use movem to push the rest, (which have to be
639    saved if we use them, and movem has to start with r0).
640    Change here if you change which registers to use as call registers.
641
642    The actual need to explicitly prefer call-used registers improved the
643    situation a lot for 2.1, but might not actually be needed anymore.
644    Still, this order reflects what GCC should find out by itself, so it
645    probably does not hurt.
646
647    Order of preference: Call-used-regs first, then r0 and up, last fp &
648    sp & pc as fillers.
649    Call-used regs in opposite order, so they will cause less conflict if
650    a function has few args (<= 3) and it wants a scratch reg.
651     Use struct-return address first, since very few functions use
652    structure return values so it is likely to be available.  */
653 #define REG_ALLOC_ORDER \
654  {9, 13, 12, 11, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 16, 17}
655
656
657 /* Node: Values in Registers */
658
659 /* The VOIDmode test is so we can omit mode on anonymous insns.  FIXME:
660    Still needed in 2.9x, at least for Axis-20000319.  */
661 #define HARD_REGNO_NREGS(REGNO, MODE)   \
662  (MODE == VOIDmode \
663   ? 1 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
664
665 /* CRIS permits all registers to hold all modes.  */
666 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
667
668 #define MODES_TIEABLE_P(MODE1, MODE2)  1
669
670
671 /* Node: Leaf Functions */
672 /* (no definitions) */
673
674 /* Node: Stack Registers */
675 /* (no definitions) */
676
677
678 /* Node: Register Classes */
679
680 /* CRIS has only one kind of registers, so NO_REGS and ALL_REGS
681    are the only classes.  FIXME: It actually makes sense to have another
682    class for special registers, and yet another class for the
683    multiply-overflow register in v10; then a class for the return
684    register also makes sense.  */
685 enum reg_class {NO_REGS, ALL_REGS, LIM_REG_CLASSES};
686
687 #define N_REG_CLASSES (int) LIM_REG_CLASSES
688
689 #define REG_CLASS_NAMES {"NO_REGS", "ALL_REGS"}
690
691 #define GENERAL_REGS ALL_REGS
692
693 /* Count in the faked argument register in GENERAL_REGS.  Keep out SRP.  */
694 #define REG_CLASS_CONTENTS {{0}, {0x2ffff}}
695
696 #define REGNO_REG_CLASS(REGNO) GENERAL_REGS
697
698 #define BASE_REG_CLASS GENERAL_REGS
699
700 #define INDEX_REG_CLASS GENERAL_REGS
701
702 /* Get reg_class from a letter such as appears in the machine
703    description.  No letters are used, since 'r' is used for any
704    register.  */
705 #define REG_CLASS_FROM_LETTER(C) NO_REGS
706
707 /* Since it uses reg_renumber, it is safe only once reg_renumber
708    has been allocated, which happens in local-alloc.c.  */
709 #define REGNO_OK_FOR_BASE_P(REGNO)                                      \
710  ((REGNO) <= CRIS_LAST_GENERAL_REGISTER                                 \
711   || (REGNO) == ARG_POINTER_REGNUM                                      \
712   || (unsigned) reg_renumber[REGNO] <= CRIS_LAST_GENERAL_REGISTER       \
713   || (unsigned) reg_renumber[REGNO] == ARG_POINTER_REGNUM)
714
715 /* See REGNO_OK_FOR_BASE_P.  */
716 #define REGNO_OK_FOR_INDEX_P(REGNO) REGNO_OK_FOR_BASE_P(REGNO)
717
718 /* It seems like gcc (2.7.2 and 2.9x of 2000-03-22) may send "NO_REGS" as
719    the class for a constant (testcase: __Mul in arit.c).  To avoid forcing
720    out a constant into the constant pool, we will trap this case and
721    return something a bit more sane.  FIXME: Check if this is a bug.  */
722 #define PREFERRED_RELOAD_CLASS(X, CLASS) \
723  ((CLASS) == NO_REGS ? GENERAL_REGS : (CLASS))
724
725 /* For CRIS, this is always the size of MODE in words,
726    since all registers are the same size.  To use omitted modes in
727    patterns with reload constraints, you must say the widest size
728    which is allowed for VOIDmode.
729    FIXME:  Does that still apply for gcc-2.9x?  Keep poisoned until such
730    patterns are added back.  News: 2001-03-16: Happens as early as the
731    underscore-test.  */
732 #define CLASS_MAX_NREGS(CLASS, MODE)                                    \
733  ((MODE) == VOIDmode                                                    \
734   ? 1 /* + cris_fatal ("CLASS_MAX_NREGS with VOIDmode") */              \
735   : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
736
737 /* We are now out of letters; we could use ten more.  This forces us to
738    use C-code in the 'md' file.  FIXME: Use some EXTRA_CONSTRAINTS.  */
739 #define CONST_OK_FOR_LETTER_P(VALUE, C)                 \
740  (                                                      \
741   /* MOVEQ, CMPQ, ANDQ, ORQ.  */                        \
742   (C) == 'I' ? (VALUE) >= -32 && (VALUE) <= 31 :        \
743   /* ADDQ, SUBQ.  */                                    \
744   (C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 63 :          \
745   /* ASRQ, BTSTQ, LSRQ, LSLQ.  */                       \
746   (C) == 'K' ? (VALUE) >= 0 && (VALUE) <= 31 :          \
747   /* A 16-bit signed number.  */                        \
748   (C) == 'L' ? (VALUE) >= -32768 && (VALUE) <= 32767 :  \
749   /* The constant 0 for CLEAR.  */                      \
750   (C) == 'M' ? (VALUE) == 0 :                           \
751   /* A negative ADDQ or SUBQ.  */                       \
752   (C) == 'N' ? (VALUE) >= -63 && (VALUE) < 0 :          \
753   /* Quickened ints, QI and HI.  */                     \
754   (C) == 'O' ? (VALUE) >= 0 && (VALUE) <= 65535         \
755                 && ((VALUE) >= (65535-31)               \
756                     || ((VALUE) >= (255-31)             \
757                         && (VALUE) <= 255 )) :          \
758   /* A 16-bit number signed *or* unsigned.  */          \
759   (C) == 'P' ? (VALUE) >= -32768 && (VALUE) <= 65535 :  \
760   0)
761
762 /* It is really simple to make up a 0.0; it is the same as int-0 in
763    IEEE754.  */
764 #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C)                  \
765  ((C) == 'G' && ((VALUE) == CONST0_RTX (DFmode)                 \
766                  || (VALUE) == CONST0_RTX (SFmode)))
767
768 /* We need this on cris to distinguish delay-slottable addressing modes.  */
769 #define EXTRA_CONSTRAINT(X, C)                  \
770  (                                              \
771   /* Slottable address mode?  */                \
772   (C) == 'Q' ? EXTRA_CONSTRAINT_Q (X) :         \
773   /* Operand to BDAP or BIAP?  */               \
774   (C) == 'R' ? EXTRA_CONSTRAINT_R (X) :         \
775   /* A local PIC symbol?  */                    \
776   (C) == 'S' ? EXTRA_CONSTRAINT_S (X) :         \
777   /* A three-address addressing-mode?  */       \
778   (C) == 'T' ? EXTRA_CONSTRAINT_T (X) :         \
779   /* A global PIC symbol?  */                   \
780   (C) == 'U' ? EXTRA_CONSTRAINT_U (X) :         \
781   0)
782
783 #define EXTRA_CONSTRAINT_Q(X)                           \
784  (                                                      \
785   /* Slottable addressing modes:                        \
786      A register?  FIXME: Unnecessary.  */               \
787   (BASE_P (X) && REGNO (X) != CRIS_PC_REGNUM)           \
788   /* Indirect register: [reg]?  */                      \
789   || (GET_CODE (X) == MEM && BASE_P (XEXP (X, 0))       \
790       && REGNO (XEXP (X, 0)) != CRIS_PC_REGNUM)         \
791  )
792
793 #define EXTRA_CONSTRAINT_R(X)                                   \
794  (                                                              \
795   /* An operand to BDAP or BIAP:                                \
796      A BIAP; r.S? */                                            \
797   BIAP_INDEX_P (X)                                              \
798   /* A [reg] or (int) [reg], maybe with post-increment.  */     \
799   || BDAP_INDEX_P (X)                                           \
800   || CONSTANT_INDEX_P (X)                                       \
801  )
802
803 #define EXTRA_CONSTRAINT_T(X)                                           \
804  (                                                                      \
805   /* Memory three-address operand.  All are indirect-memory:  */        \
806   GET_CODE (X) == MEM                                                   \
807   && ((GET_CODE (XEXP (X, 0)) == MEM                                    \
808        /* Double indirect: [[reg]] or [[reg+]]?  */                     \
809        && (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0))))                 \
810       /* Just an explicit indirect reference: [const]?  */              \
811       || CONSTANT_P (XEXP (X, 0))                                       \
812       /* Something that is indexed; [...+...]?  */                      \
813       || (GET_CODE (XEXP (X, 0)) == PLUS                                \
814           /* A BDAP constant: [reg+(8|16|32)bit offset]?  */            \
815           && ((BASE_P (XEXP (XEXP (X, 0), 0))                           \
816                && CONSTANT_INDEX_P (XEXP (XEXP (X, 0), 1)))             \
817               /* Swap arguments to the above.  FIXME: gcc-2.9x? */      \
818               || (BASE_P (XEXP (XEXP (X, 0), 1))                        \
819                   && CONSTANT_INDEX_P (XEXP (XEXP (X, 0), 0)))          \
820               /* A BDAP register: [reg+[reg(+)].S]?  */                 \
821               || (BASE_P (XEXP (XEXP (X, 0), 0))                        \
822                   && BDAP_INDEX_P(XEXP(XEXP(X, 0), 1)))                 \
823               /* Same, but with swapped arguments.  */                  \
824               || (BASE_P (XEXP (XEXP (X, 0), 1))                        \
825                   && BDAP_INDEX_P (XEXP (XEXP (X, 0), 0)))              \
826               /* A BIAP: [reg+reg.S].  */                               \
827               || (BASE_P (XEXP (XEXP (X, 0), 0))                        \
828                   && BIAP_INDEX_P (XEXP (XEXP (X, 0), 1)))              \
829               /* Same, but with swapped arguments.  */                  \
830               || (BASE_P (XEXP (XEXP (X, 0), 1))                        \
831                   && BIAP_INDEX_P (XEXP (XEXP (X, 0), 0))))))           \
832  )
833
834 #define EXTRA_CONSTRAINT_S(X) \
835  (flag_pic && CONSTANT_P (X) && cris_gotless_symbol (X))
836
837 #define EXTRA_CONSTRAINT_U(X) \
838  (flag_pic && CONSTANT_P (X) && cris_got_symbol (X))
839
840
841 /* Node: Frame Layout */
842
843 #define STACK_GROWS_DOWNWARD
844 #define FRAME_GROWS_DOWNWARD
845
846 /* It seems to be indicated in the code (at least 2.1) that this is
847    better a constant, and best 0.  */
848 #define STARTING_FRAME_OFFSET 0
849
850 #define FIRST_PARM_OFFSET(FNDECL) 0
851
852 #define RETURN_ADDR_RTX(COUNT, FRAMEADDR) \
853  cris_return_addr_rtx (COUNT, FRAMEADDR)
854
855 #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, CRIS_SRP_REGNUM)
856
857 /* FIXME: Any __builtin_eh_return callers must not return anything and
858    there must not be collisions with incoming parameters.  Luckily the
859    number of __builtin_eh_return callers is limited.  For now return
860    parameter registers in reverse order and hope for the best.  */
861 #define EH_RETURN_DATA_REGNO(N) \
862   (IN_RANGE ((N), 0, 3) ? (CRIS_FIRST_ARG_REG + 3 - (N)) : INVALID_REGNUM)
863
864 /* Store the stack adjustment in the structure-return-address register.  */
865 #define CRIS_STACKADJ_REG CRIS_STRUCT_VALUE_REGNUM
866 #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (SImode, CRIS_STACKADJ_REG)
867
868 #define EH_RETURN_HANDLER_RTX \
869   cris_return_addr_rtx (0, NULL)
870
871 #define INIT_EXPANDERS cris_init_expanders ()
872
873 /* FIXME: Move this to right node (it's not documented properly yet).  */
874 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (CRIS_SRP_REGNUM)
875
876 /* FIXME: Move this to right node (it's not documented properly yet).
877    FIXME: Check what alignment we can assume regarding
878    TARGET_STACK_ALIGN and TARGET_ALIGN_BY_32.  */
879 #define DWARF_CIE_DATA_ALIGNMENT -1
880
881 /* If we would ever need an exact mapping between canonical register
882    number and dwarf frame register, we would either need to include all
883    registers in the gcc description (with some marked fixed of course), or
884    an inverse mapping from dwarf register to gcc register.  There is one
885    need in dwarf2out.c:expand_builtin_init_dwarf_reg_sizes.  Right now, I
886    don't see that we need exact correspondence between DWARF *frame*
887    registers and DBX_REGISTER_NUMBER, so map them onto GCC registers.  */
888 #define DWARF_FRAME_REGNUM(REG) (REG)
889
890 /* Node: Stack Checking */
891 /* (no definitions) FIXME: Check.  */
892
893 /* Node: Frame Registers */
894
895 #define STACK_POINTER_REGNUM 14
896
897 /* Register used for frame pointer.  This is also the last of the saved
898    registers, when a frame pointer is not used.  */
899 #define FRAME_POINTER_REGNUM 8
900
901 /* Faked register, is always eliminated.  We need it to eliminate
902    allocating stack slots for the return address and the frame pointer.  */
903 #define ARG_POINTER_REGNUM 17
904
905 #define STATIC_CHAIN_REGNUM 7
906
907
908 /* Node: Elimination */
909
910 /* Really only needed if the stack frame has variable length (alloca
911    or variable sized local arguments (GNU C extension).  */
912 #define FRAME_POINTER_REQUIRED 0
913
914 #define ELIMINABLE_REGS                         \
915  {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM},   \
916   {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM},   \
917   {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
918
919 /* We need not worry about when the frame-pointer is required for other
920    reasons.  */
921 #define CAN_ELIMINATE(FROM, TO) 1
922
923 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
924  (OFFSET) = cris_initial_elimination_offset (FROM, TO)
925
926
927 /* Node: Stack Arguments */
928
929 /* Since many parameters take up one register each in any case,
930    defining TARGET_PROMOTE_PROTOTYPES that always returns true would
931    seem like a good idea, but measurements indicate that a combination
932    using PROMOTE_MODE is better.  */
933
934 #define ACCUMULATE_OUTGOING_ARGS 1
935
936 #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACKSIZE) 0
937
938
939 /* Node: Register Arguments */
940
941 /* The void_type_node is sent as a "closing" call.  */
942 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)                    \
943  ((CUM).regs < CRIS_MAX_ARGS_IN_REGS                            \
944   ? gen_rtx_REG (MODE, (CRIS_FIRST_ARG_REG) + (CUM).regs)       \
945   : NULL_RTX)
946
947 /* The differences between this and the previous, is that this one checks
948    that an argument is named, since incoming stdarg/varargs arguments are
949    pushed onto the stack, and we don't have to check against the "closing"
950    void_type_node TYPE parameter.  */
951 #define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED)           \
952  ((NAMED) && (CUM).regs < CRIS_MAX_ARGS_IN_REGS                 \
953   ? gen_rtx_REG (MODE, CRIS_FIRST_ARG_REG + (CUM).regs)         \
954   : NULL_RTX)
955
956 /* Contrary to what you'd believe, defining FUNCTION_ARG_CALLEE_COPIES
957    seems like a (small total) loss, at least for gcc-2.7.2 compiling and
958    running gcc-2.1 (small win in size, small loss running -- 100.1%),
959    and similarly for size for products (.1 .. .3% bloat, sometimes win).
960    Due to the empirical likeliness of making slower code, it is not
961    defined.  */
962
963 /* This no longer *needs* to be a structure; but keeping it as such should
964    not hurt (and hacking the ABI is simpler).  */
965 #define CUMULATIVE_ARGS struct cum_args
966 struct cum_args {int regs;};
967
968 /* The regs member is an integer, the number of arguments got into
969    registers so far.  */
970 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
971  ((CUM).regs = 0)
972
973 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)            \
974  ((CUM).regs += (3 + CRIS_FUNCTION_ARG_SIZE (MODE, TYPE)) / 4)
975
976 #define FUNCTION_ARG_REGNO_P(REGNO)                     \
977  ((REGNO) >= CRIS_FIRST_ARG_REG                         \
978   && (REGNO) < CRIS_FIRST_ARG_REG + (CRIS_MAX_ARGS_IN_REGS))
979
980
981 /* Node: Scalar Return */
982
983 /* Let's assume all functions return in r[CRIS_FIRST_ARG_REG] for the
984    time being.  */
985 #define FUNCTION_VALUE(VALTYPE, FUNC)  \
986  gen_rtx_REG (TYPE_MODE (VALTYPE), CRIS_FIRST_ARG_REG)
987
988 #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, CRIS_FIRST_ARG_REG)
989
990 #define FUNCTION_VALUE_REGNO_P(N) ((N) == CRIS_FIRST_ARG_REG)
991
992
993 /* Node: Aggregate Return */
994
995 #if 0
996 /* FIXME: Let's try this some time, so we return structures in registers.
997    We would cast the result of int_size_in_bytes to unsigned, so we will
998    get a huge number for "structures" of variable size (-1).  */
999 #define RETURN_IN_MEMORY(TYPE) \
1000  ((unsigned) int_size_in_bytes (TYPE) > CRIS_MAX_ARGS_IN_REGS * UNITS_PER_WORD)
1001 #endif
1002
1003 #define CRIS_STRUCT_VALUE_REGNUM ((CRIS_FIRST_ARG_REG) - 1)
1004
1005
1006 /* Node: Caller Saves */
1007 /* (no definitions) */
1008
1009 /* Node: Function entry */
1010
1011 /* See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and
1012    TARGET_ASM_FUNCTION_EPILOGUE.  */
1013
1014 /* If the epilogue uses the "ret" insn, we need to fill the
1015    delay slot.  */
1016 #define DELAY_SLOTS_FOR_EPILOGUE cris_delay_slots_for_epilogue ()
1017
1018 #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) \
1019   cris_eligible_for_epilogue_delay (INSN)
1020
1021 /* Node: Profiling */
1022
1023 #define FUNCTION_PROFILER(FILE, LABELNO)  \
1024  error ("no FUNCTION_PROFILER for CRIS")
1025
1026 /* FIXME: Some of the undefined macros might be mandatory.  If so, fix
1027    documentation.  */
1028
1029
1030 /* Node: Trampolines */
1031
1032 /* This looks too complicated, and it is.  I assigned r7 to be the
1033    static chain register, but it is call-saved, so we have to save it,
1034    and come back to restore it after the call, so we have to save srp...
1035    Anyway, trampolines are rare enough that we can cope with this
1036    somewhat lack of elegance.
1037     (Do not be tempted to "straighten up" whitespace in the asms; the
1038    assembler #NO_APP state mandates strict spacing).  */
1039 #define TRAMPOLINE_TEMPLATE(FILE)               \
1040   do                                            \
1041     {                                           \
1042       fprintf (FILE, "\tmove.d $%s,[$pc+20]\n", \
1043                reg_names[STATIC_CHAIN_REGNUM]); \
1044       fprintf (FILE, "\tmove $srp,[$pc+22]\n"); \
1045       fprintf (FILE, "\tmove.d 0,$%s\n",        \
1046                reg_names[STATIC_CHAIN_REGNUM]); \
1047       fprintf (FILE, "\tjsr 0\n");              \
1048       fprintf (FILE, "\tmove.d 0,$%s\n",        \
1049                reg_names[STATIC_CHAIN_REGNUM]); \
1050       fprintf (FILE, "\tjump 0\n");             \
1051     }                                           \
1052   while (0)
1053
1054 #define TRAMPOLINE_SIZE 32
1055
1056 /* CRIS wants instructions on word-boundary.
1057    Note that due to a bug (reported) in 2.7.2 and earlier, this is
1058    actually treated as alignment in _bytes_, not _bits_.  (Obviously
1059    this is not fatal, only a slight waste of stack space).  */
1060 #define TRAMPOLINE_ALIGNMENT 16
1061
1062 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)               \
1063   do                                                            \
1064     {                                                           \
1065       emit_move_insn (gen_rtx_MEM (SImode,                      \
1066                                plus_constant (TRAMP, 10)),      \
1067                       CXT);                                     \
1068       emit_move_insn (gen_rtx_MEM (SImode,                      \
1069                                plus_constant (TRAMP, 16)),      \
1070                       FNADDR);                                  \
1071     }                                                           \
1072   while (0)
1073
1074 /* Note that there is no need to do anything with the cache for sake of
1075    a trampoline.  */
1076
1077
1078 /* Node: Library Calls */
1079
1080 /* If you change this, you have to check whatever libraries and systems
1081    that use it.  */
1082 #define TARGET_EDOM 33
1083
1084
1085 /* Node: Addressing Modes */
1086
1087 #define HAVE_POST_INCREMENT 1
1088
1089 #define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
1090
1091 #define MAX_REGS_PER_ADDRESS 2
1092
1093 /* There are helper macros defined here which are used only in
1094    GO_IF_LEGITIMATE_ADDRESS.
1095
1096    Note that you *have to* reject invalid addressing modes for mode
1097    MODE, even if it is legal for normal addressing modes.  You cannot
1098    rely on the constraints to do this work.  They can only be used to
1099    doublecheck your intentions.  One example is that you HAVE TO reject
1100    (mem:DI (plus:SI (reg:SI x) (reg:SI y))) because for some reason
1101    this cannot be reloaded.  (Which of course you can argue that gcc
1102    should have done.)  FIXME:  Strange.  Check.  */
1103
1104 /* No symbol can be used as an index (or more correct, as a base) together
1105    with a register with PIC; the PIC register must be there.  */
1106 #define CONSTANT_INDEX_P(X) \
1107  (CONSTANT_P (X) && !(flag_pic && cris_symbol (X)))
1108
1109 /* True if X is a valid base register.  */
1110 #define BASE_P(X) \
1111  (REG_P (X) && REG_OK_FOR_BASE_P (X))
1112
1113 /* True if X is a valid base register with or without autoincrement.  */
1114 #define BASE_OR_AUTOINCR_P(X) \
1115  (BASE_P (X) || (GET_CODE (X) == POST_INC && BASE_P (XEXP (X, 0))))
1116
1117 /* True if X is a valid (register) index for BDAP, i.e. [Rs].S or [Rs+].S.  */
1118 #define BDAP_INDEX_P(X)                                 \
1119  ((GET_CODE (X) == MEM && GET_MODE (X) == SImode        \
1120    && BASE_OR_AUTOINCR_P (XEXP (X, 0)))                 \
1121   || (GET_CODE (X) == SIGN_EXTEND                       \
1122       && GET_CODE (XEXP (X, 0)) == MEM                  \
1123       && (GET_MODE (XEXP (X, 0)) == HImode              \
1124           || GET_MODE (XEXP (X, 0)) == QImode)          \
1125       && BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0))))
1126
1127 /* True if X is a valid (register) index for BIAP, i.e. Rd.m.  */
1128 #define BIAP_INDEX_P(X)                         \
1129  ((BASE_P (X) && REG_OK_FOR_INDEX_P (X))        \
1130   || (GET_CODE (X) == MULT                      \
1131       && BASE_P (XEXP (X, 0))                   \
1132       && REG_OK_FOR_INDEX_P (XEXP (X, 0))       \
1133       && GET_CODE (XEXP (X, 1)) == CONST_INT    \
1134       && (INTVAL (XEXP (X, 1)) == 2             \
1135           || INTVAL (XEXP (X, 1)) == 4)))
1136
1137 /* True if X is an address that doesn't need a prefix i.e. [Rs] or [Rs+].  */
1138 #define SIMPLE_ADDRESS_P(X) \
1139  (BASE_P (X)                                            \
1140   || (GET_CODE (X) == POST_INC                          \
1141       && BASE_P (XEXP (X, 0))))
1142
1143 /* A PIC operand looks like a normal symbol here.  At output we dress it
1144    in "[rPIC+symbol:GOT]" (global symbol) or "rPIC+symbol:GOTOFF" (local
1145    symbol) so we exclude all addressing modes where we can't replace a
1146    plain "symbol" with that.  A global PIC symbol does not fit anywhere
1147    here (but is thankfully a general_operand in itself).  A local PIC
1148    symbol is valid for the plain "symbol + offset" case.  */
1149 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                 \
1150  {                                                              \
1151    rtx x1, x2;                                                  \
1152    if (SIMPLE_ADDRESS_P (X))                                    \
1153      goto ADDR;                                                 \
1154    if (CONSTANT_P (X)                                           \
1155        && (! flag_pic                                           \
1156            || cris_gotless_symbol (X)                           \
1157            || ! cris_symbol (X)))                               \
1158      goto ADDR;                                                 \
1159    /* Indexed?  */                                              \
1160    if (GET_CODE (X) == PLUS)                                    \
1161      {                                                          \
1162        x1 = XEXP (X, 0);                                        \
1163        x2 = XEXP (X, 1);                                        \
1164        /* BDAP o, Rd.  */                                       \
1165        if ((BASE_P (x1) && CONSTANT_INDEX_P (x2))               \
1166            || (BASE_P (x2) && CONSTANT_INDEX_P (x1))            \
1167             /* BDAP Rs[+], Rd.  */                              \
1168            || (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD           \
1169                && ((BASE_P (x1) && BDAP_INDEX_P (x2))           \
1170                    || (BASE_P (x2) && BDAP_INDEX_P (x1))        \
1171                    /* BIAP.m Rs, Rd */                          \
1172                    || (BASE_P (x1) && BIAP_INDEX_P (x2))        \
1173                    || (BASE_P (x2) && BIAP_INDEX_P (x1)))))     \
1174          goto ADDR;                                             \
1175      }                                                          \
1176    else if (GET_CODE (X) == MEM)                                \
1177      {                                                          \
1178        /* DIP (Rs).  Reject [[reg+]] and [[reg]] for            \
1179           DImode (long long).  */                               \
1180        if (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD               \
1181            && (BASE_P (XEXP (X, 0))                             \
1182                || BASE_OR_AUTOINCR_P (XEXP (X, 0))))            \
1183          goto ADDR;                                             \
1184      }                                                          \
1185  }
1186
1187 #ifndef REG_OK_STRICT
1188  /* Nonzero if X is a hard reg that can be used as a base reg
1189     or if it is a pseudo reg.  */
1190 # define REG_OK_FOR_BASE_P(X)                   \
1191  (REGNO (X) <= CRIS_LAST_GENERAL_REGISTER       \
1192   || REGNO (X) == ARG_POINTER_REGNUM            \
1193   || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1194 #else
1195  /* Nonzero if X is a hard reg that can be used as a base reg.  */
1196 # define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1197 #endif
1198
1199 #ifndef REG_OK_STRICT
1200  /* Nonzero if X is a hard reg that can be used as an index
1201     or if it is a pseudo reg.  */
1202 # define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
1203 #else
1204  /* Nonzero if X is a hard reg that can be used as an index.  */
1205 # define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1206 #endif
1207
1208 /* For now, don't do anything.  GCC does a good job most often.
1209
1210     Maybe we could do something about gcc:s misbehavior when it
1211    recalculates frame offsets for local variables, from fp+offs to
1212    sp+offs.  The resulting address expression gets screwed up
1213    sometimes, but I'm not sure that it may be fixed here, since it is
1214    already split up in several instructions (Is this still true?).
1215    FIXME: Check and adjust for gcc-2.9x.  */
1216 #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {}
1217
1218 /* Kludge to solve Axis-990219: Work around imperfection in
1219    reload_load_address1:
1220     (plus (sign_extend (mem:qi (reg))) (reg))
1221    should be reloaded as (plus (reg) (reg)), not
1222     (plus (sign_extend (reg)) (reg)).
1223    There are no checks that reload_load_address_1 "reloads"
1224    addresses correctly, so invalidness is not caught or
1225    corrected.
1226     When the right thing happens in reload, the kludge can
1227    be removed; still not as of 2003-02-27.  */
1228
1229 #define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN) \
1230   do                                                                    \
1231     {                                                                   \
1232       if (GET_CODE (X) == PLUS                                          \
1233           && REG_P (XEXP (X, 1))                                        \
1234           && GET_CODE (XEXP (X, 0)) == SIGN_EXTEND                      \
1235           && GET_CODE (XEXP (XEXP (X, 0), 0)) == MEM                    \
1236           && (GET_MODE (XEXP (XEXP (X, 0), 0)) == HImode                \
1237               || GET_MODE (XEXP (XEXP (X, 0), 0)) == QImode)            \
1238           && (REG_P (XEXP (XEXP (XEXP (X, 0), 0), 0))                   \
1239               || (GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 0))            \
1240                   == POST_INC                                           \
1241                   && REG_P (XEXP (XEXP (XEXP (XEXP (X, 0), 0), 0),      \
1242                                   0)))))                                \
1243         {                                                               \
1244           int something_reloaded = 0;                                   \
1245                                                                         \
1246           if (REGNO (XEXP (X, 1)) >= FIRST_PSEUDO_REGISTER)             \
1247             {                                                           \
1248               /* Second reg is pseudo, reload it.  */                   \
1249               push_reload (XEXP (X, 1), NULL_RTX, &XEXP (X, 1),         \
1250                            NULL,                                        \
1251                            GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0,  \
1252                            OPNUM, TYPE);                                \
1253               something_reloaded = 1;                                   \
1254             }                                                           \
1255                                                                         \
1256           if (REG_P (XEXP (XEXP (XEXP (X, 0), 0), 0))                   \
1257               && (REGNO (XEXP (XEXP (XEXP (X, 0), 0), 0))               \
1258                   >= FIRST_PSEUDO_REGISTER))                            \
1259             {                                                           \
1260               /* First one is a pseudo - reload that.  */               \
1261               push_reload (XEXP (XEXP (XEXP (X, 0), 0), 0), NULL_RTX,   \
1262                            &XEXP (XEXP (XEXP (X, 0), 0), 0), NULL,      \
1263                            GENERAL_REGS,                                \
1264                            GET_MODE (X), VOIDmode, 0, 0, OPNUM, TYPE);  \
1265               something_reloaded = 1;                                   \
1266             }                                                           \
1267                                                                         \
1268           if (! something_reloaded                                      \
1269               || (GET_CODE (XEXP (XEXP (X, 0), 0)) == POST_INC          \
1270                   && (REGNO (XEXP (XEXP (XEXP (X, 0), 0), 0))           \
1271                       >= FIRST_PSEUDO_REGISTER)))                       \
1272             /* Reload the sign_extend.  Happens if neither reg is a     \
1273                pseudo, or the first one was inside post_increment.  */  \
1274             push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL,     \
1275                          GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0,    \
1276                          OPNUM, TYPE);                                  \
1277           goto WIN;                                                     \
1278         }                                                               \
1279     }                                                                   \
1280   while (0)
1281
1282 /* In CRIS, only the postincrement address mode depends thus,
1283    since the increment depends on the size of the operand.  */
1284 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)       \
1285   do                                                    \
1286     {                                                   \
1287       if (GET_CODE (ADDR) == POST_INC)                  \
1288         goto LABEL;                                     \
1289     }                                                   \
1290   while (0)
1291
1292 #define LEGITIMATE_CONSTANT_P(X) 1
1293
1294
1295 /* Node: Condition Code */
1296
1297 #define NOTICE_UPDATE_CC(EXP, INSN) cris_notice_update_cc (EXP, INSN)
1298
1299 /* FIXME: Maybe define CANONICALIZE_COMPARISON later, when playing with
1300    optimizations.  It is needed; currently we do this with instruction
1301    patterns and NOTICE_UPDATE_CC.  */
1302
1303
1304 /* Node: Costs */
1305
1306 /* FIXME: Need to define REGISTER_MOVE_COST when more register classes are
1307    introduced.  */
1308
1309 /* This isn't strictly correct for v0..3 in buswidth-8bit mode, but
1310    should suffice.  */
1311 #define MEMORY_MOVE_COST(M, CLASS, IN) \
1312  (((M) == QImode) ? 4 : ((M) == HImode) ? 4 : 6)
1313
1314 /* Regardless of the presence of delay slots, the default value of 1 for
1315    BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2
1316    with testcases ipps and gcc, giving smallest and fastest code.  */
1317
1318 #define SLOW_BYTE_ACCESS 0
1319
1320 /* This is the threshold *below* which inline move sequences of
1321    word-length sizes will be emitted.  The "9" will translate to
1322    (9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions
1323    (8 instruction sequences) or less.  */
1324 #define MOVE_RATIO 9
1325
1326
1327 /* Node: Sections */
1328
1329 #define TEXT_SECTION_ASM_OP "\t.text"
1330
1331 #define DATA_SECTION_ASM_OP "\t.data"
1332
1333 #define FORCE_EH_FRAME_INFO_IN_DATA_SECTION (! TARGET_ELF)
1334
1335 /* The jump table is immediately connected to the preceding insn.  */
1336 #define JUMP_TABLES_IN_TEXT_SECTION 1
1337
1338 /* We pull a little trick to register the _fini function with atexit,
1339    after (presumably) registering the eh frame info, since we don't handle
1340    _fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF.  If
1341    you change this, don't forget that you can't have library function
1342    references (e.g. to atexit) in crtend.o, since those won't be resolved
1343    to libraries; those are linked in *before* crtend.o.  */
1344 #ifdef CRT_BEGIN
1345 # define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)             \
1346 static void __attribute__((__used__))                           \
1347 call_ ## FUNC (void)                                            \
1348 {                                                               \
1349   asm (SECTION_OP);                                             \
1350   FUNC ();                                                      \
1351   if (__builtin_strcmp (#FUNC, "frame_dummy") == 0)             \
1352    {                                                            \
1353      extern void __fini__start (void);                          \
1354      atexit (__fini__start);                                    \
1355    }                                                            \
1356   asm (TEXT_SECTION_ASM_OP);                                    \
1357 }
1358 #endif
1359
1360 /* Node: PIC */
1361
1362 #define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 0 : INVALID_REGNUM)
1363
1364 #define LEGITIMATE_PIC_OPERAND_P(X) cris_legitimate_pic_operand (X)
1365
1366
1367 /* Node: File Framework */
1368
1369 /* We don't want an .ident for gcc.  To avoid that but still support
1370    #ident, we override ASM_OUTPUT_IDENT and, since the gcc .ident is its
1371    only use besides ASM_OUTPUT_IDENT, undef IDENT_ASM_OP from elfos.h.  */
1372 #undef IDENT_ASM_OP
1373 #undef ASM_OUTPUT_IDENT
1374 #define ASM_OUTPUT_IDENT(FILE, NAME) \
1375   fprintf (FILE, "%s\"%s\"\n", "\t.ident\t", NAME);
1376
1377 #define ASM_APP_ON "#APP\n"
1378
1379 #define ASM_APP_OFF "#NO_APP\n"
1380
1381
1382 /* Node: Data Output */
1383
1384 #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) (C) == '@'
1385
1386 /* Node: Uninitialized Data */
1387
1388 /* Remember to round off odd values if we want data alignment,
1389    since we cannot do that with an .align directive.
1390
1391    Using .comm causes the space not to be reserved in .bss, but by
1392    tricks with the symbol type.  Not good if other tools than binutils
1393    are used on the object files.  Since ".global ... .lcomm ..." works, we
1394    use that.  Use .._ALIGNED_COMMON, since gcc whines when we only have
1395    ..._COMMON, and we prefer to whine ourselves; BIGGEST_ALIGNMENT is not
1396    the one to check.  This done for a.out only.  */
1397 /* FIXME: I suspect a bug in gcc with alignment.  Do not warn until
1398    investigated; it mucks up the testsuite results.  */
1399 #define CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, LOCAL) \
1400   do                                                                    \
1401     {                                                                   \
1402       int align_ = (ALIGN) / BITS_PER_UNIT;                             \
1403       if (TARGET_DATA_ALIGN && TARGET_ALIGN_BY_32 && align_ < 4)        \
1404         align_ = 4;                                                     \
1405       else if (TARGET_DATA_ALIGN && align_ < 2)                         \
1406         align_ = 2;                                                     \
1407       /* FIXME: Do we need this?  */                                    \
1408       else if (align_ < 1)                                              \
1409         align_ = 1;                                                     \
1410                                                                         \
1411       if (TARGET_ELF)                                                   \
1412         {                                                               \
1413           if (LOCAL)                                                    \
1414             {                                                           \
1415               fprintf ((FILE), "%s", LOCAL_ASM_OP);                     \
1416               assemble_name ((FILE), (NAME));                           \
1417               fprintf ((FILE), "\n");                                   \
1418             }                                                           \
1419           fprintf ((FILE), "%s", COMMON_ASM_OP);                        \
1420           assemble_name ((FILE), (NAME));                               \
1421           fprintf ((FILE), ",%u,%u\n", (int)(SIZE), align_);            \
1422         }                                                               \
1423       else                                                              \
1424         {                                                               \
1425           /* We can't tell a one-only or weak COMM from a "global       \
1426              COMM" so just make all non-locals weak.  */                \
1427           if (! (LOCAL))                                                \
1428             ASM_WEAKEN_LABEL (FILE, NAME);                              \
1429           fputs ("\t.lcomm ", (FILE));                                  \
1430           assemble_name ((FILE), (NAME));                               \
1431           fprintf ((FILE), ",%u\n",                                     \
1432                    ((int)(SIZE) + (align_ - 1)) & ~(align_ - 1));       \
1433         }                                                               \
1434     }                                                                   \
1435   while (0)
1436
1437 #define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
1438  CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 0)
1439
1440 #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
1441 #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
1442  CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 1)
1443
1444 /* FIXME: define ASM_OUTPUT_SHARED_COMMON and emit an error when it is
1445    used with -melinux and a.out.  */
1446
1447 /* Node: Label Output */
1448
1449 /* Globalizing directive for a label.  */
1450 #define GLOBAL_ASM_OP "\t.global "
1451
1452 #define SUPPORTS_WEAK 1
1453
1454 /* Remove any previous definition (elfos.h).  */
1455 #undef ASM_GENERATE_INTERNAL_LABEL
1456 #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
1457   sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long) NUM)
1458
1459 /* Node: Initialization */
1460 /* (no definitions) */
1461
1462 /* Node: Macros for Initialization */
1463 /* (no definitions) */
1464
1465 /* Node: Instruction Output */
1466
1467 #define REGISTER_NAMES                                  \
1468  {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
1469   "r9", "r10", "r11", "r12", "r13", "sp", "pc", "srp", "faked_ap"}
1470
1471 #define ADDITIONAL_REGISTER_NAMES \
1472  {{"r14", 14}, {"r15", 15}}
1473
1474 #define PRINT_OPERAND(FILE, X, CODE)            \
1475  cris_print_operand (FILE, X, CODE)
1476
1477 /* For delay-slot handling.  */
1478 #define PRINT_OPERAND_PUNCT_VALID_P(CODE)       \
1479  ((CODE) == '#' || (CODE) == '!')
1480
1481 #define PRINT_OPERAND_ADDRESS(FILE, ADDR)       \
1482    cris_print_operand_address (FILE, ADDR)
1483
1484 /* Output an empty line to illustrate the presence of the delay slot.  */
1485 #define DBR_OUTPUT_SEQEND(FILE) \
1486   fprintf (FILE, "\n")
1487
1488 #define LOCAL_LABEL_PREFIX (TARGET_ELF ? "." : "")
1489
1490 /* cppinit.c initializes a const array from this, so it must be constant,
1491    can't have it different based on options.  Luckily, the prefix is
1492    always allowed, so let's have it on all GCC-generated code.  Note that
1493    we have this verbatim everywhere in the back-end, not using %R or %s or
1494    such.  */
1495 #define REGISTER_PREFIX "$"
1496
1497 /* Remove any previous definition (elfos.h).  */
1498 /* We use -fno-leading-underscore to remove it, when necessary.  */
1499 #undef USER_LABEL_PREFIX
1500 #define USER_LABEL_PREFIX "_"
1501
1502 #define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
1503   fprintf (FILE, "\tpush $%s\n", reg_names[REGNO])
1504
1505 #define ASM_OUTPUT_REG_POP(FILE, REGNO) \
1506   fprintf (FILE, "\tpop $%s\n", reg_names[REGNO])
1507
1508
1509 /* Node: Dispatch Tables */
1510
1511 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)        \
1512   asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL)
1513
1514 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
1515   asm_fprintf (FILE, "\t.dword %LL%d\n", VALUE)
1516
1517 /* Defined to also emit an .align in elfos.h.  We don't want that.  */
1518 #undef ASM_OUTPUT_CASE_LABEL
1519
1520 /* Since the "bound" insn loads the comparison value if the compared<
1521    value (register) is out of bounds (0..comparison value-1), we need
1522    to output another case to catch it.
1523    The way to find it is to look for the label_ref at the else-arm inside
1524    the expanded casesi core-insn.
1525    FIXME: Check this construct when changing to new version of gcc.  */
1526 #define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE)                         \
1527   do                                                                    \
1528     {                                                                   \
1529       asm_fprintf (STREAM, "\t.word %LL%d-%LL%d%s\n",                   \
1530                    CODE_LABEL_NUMBER                                    \
1531                     (XEXP (XEXP (XEXP                                   \
1532                                   (XVECEXP                              \
1533                                     (PATTERN                            \
1534                                      (prev_nonnote_insn                 \
1535                                       (PREV_INSN (TABLE))),             \
1536                                      0, 0), 1), 2), 0)),                \
1537                    NUM,                                                 \
1538                    (TARGET_PDEBUG ? "; default" : ""));                 \
1539     }                                                                   \
1540   while (0)
1541
1542
1543 /* Node: Exception Region Output */
1544 /* (no definitions) */
1545 /* FIXME: Fill in with our own optimized layout.  */
1546
1547 /* Node: Alignment Output */
1548
1549 #define ASM_OUTPUT_ALIGN(FILE, LOG)  \
1550  fprintf (FILE, "\t.align %d\n", (LOG))
1551
1552
1553 /* Node: All Debuggers */
1554
1555 #define DBX_REGISTER_NUMBER(REGNO) \
1556  ((REGNO) == CRIS_SRP_REGNUM ? CRIS_CANONICAL_SRP_REGNUM : (REGNO))
1557
1558 /* FIXME: Investigate DEBUGGER_AUTO_OFFSET, DEBUGGER_ARG_OFFSET.  */
1559
1560
1561 /* Node: DBX Options */
1562
1563 /* Is this correct? Check later.  */
1564 #define DBX_NO_XREFS
1565
1566 #define DBX_CONTIN_LENGTH 0
1567
1568 /* FIXME: Is this needed when we have 0 DBX_CONTIN_LENGTH?  */
1569 #define DBX_CONTIN_CHAR '?'
1570
1571
1572 /* Node: DBX Hooks */
1573 /* (no definitions) */
1574
1575 /* Node: File names and DBX */
1576 /* (no definitions) */
1577
1578
1579 /* Node: SDB and DWARF */
1580 /* (no definitions) */
1581
1582 /* Node: Misc */
1583
1584 /* FIXME: Check this one more time.  */
1585 #define PREDICATE_CODES                                 \
1586  {"cris_orthogonal_operator",                           \
1587   {PLUS, MINUS, IOR, AND, UMIN}},                       \
1588  {"cris_commutative_orth_op",                           \
1589   {PLUS, IOR, AND, UMIN}},                              \
1590  {"cris_operand_extend_operator",                       \
1591   {PLUS, MINUS, UMIN}},                                 \
1592  {"cris_additive_operand_extend_operator",              \
1593   {PLUS, MINUS}},                                       \
1594  {"cris_extend_operator",                               \
1595   {ZERO_EXTEND, SIGN_EXTEND}},                          \
1596  {"cris_plus_or_bound_operator",                        \
1597   {PLUS, UMIN}},                                        \
1598  {"cris_mem_op",                                        \
1599   {MEM}},                                               \
1600  {"cris_bdap_operand",                                  \
1601   {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT,  \
1602    CONST_DOUBLE, CONST, SIGN_EXTEND}},                  \
1603  {"cris_bdap_biap_operand",                             \
1604   {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT,  \
1605    CONST_DOUBLE, CONST, SIGN_EXTEND, MULT}},            \
1606  {"cris_general_operand_or_gotless_symbol",             \
1607   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1608    LABEL_REF, SUBREG, REG, MEM}},                       \
1609  {"cris_general_operand_or_symbol",                     \
1610   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1611    LABEL_REF, SUBREG, REG, MEM}},                       \
1612  {"cris_general_operand_or_plt_symbol",                 \
1613   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1614    LABEL_REF, SUBREG, REG, MEM}},                       \
1615  {"cris_mem_call_operand",                              \
1616   {MEM}},
1617
1618 /* A combination of the bound (umin) insn together with a
1619    sign-extended add via the table to PC seems optimal.
1620    If the table overflows, the assembler will take care of it.
1621    Theoretically, in extreme cases (uncertain if they occur), an error
1622    will be emitted, so FIXME: Check how large case-tables are emitted,
1623    possible add an option to emit SImode case-tables.  */
1624 #define CASE_VECTOR_MODE HImode
1625
1626 #define CASE_VECTOR_PC_RELATIVE 1
1627
1628 /* FIXME: Investigate CASE_VECTOR_SHORTEN_MODE to make sure HImode is not
1629    used when broken-.word could possibly fail (plus testcase).  */
1630
1631 #define FIXUNS_TRUNC_LIKE_FIX_TRUNC
1632
1633 /* This is the number of bytes that can be moved in one
1634    reasonably fast instruction sequence.  For CRIS, this is two
1635    instructions: mem => reg, reg => mem.  */
1636 #define MOVE_MAX 4
1637
1638 /* Maybe SHIFT_COUNT_TRUNCATED is safe to define?  FIXME: Check later.  */
1639
1640 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1641
1642 #define Pmode SImode
1643
1644 #define FUNCTION_MODE QImode
1645
1646 #define NO_IMPLICIT_EXTERN_C
1647
1648 /*
1649  * Local variables:
1650  * eval: (c-set-style "gnu")
1651  * indent-tabs-mode: t
1652  * End:
1653  */