OSDN Git Service

* target.h (struct gcc_target): Add calls.pass_by_reference.
[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 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED)      \
957  (((CUM).regs == (CRIS_MAX_ARGS_IN_REGS - 1)                    \
958    && !targetm.calls.must_pass_in_stack (MODE, TYPE)            \
959    && CRIS_FUNCTION_ARG_SIZE (MODE, TYPE) > 4                   \
960    && CRIS_FUNCTION_ARG_SIZE (MODE, TYPE) <= 8)                 \
961   ? 1 : 0)
962
963 /* Contrary to what you'd believe, defining FUNCTION_ARG_CALLEE_COPIES
964    seems like a (small total) loss, at least for gcc-2.7.2 compiling and
965    running gcc-2.1 (small win in size, small loss running -- 100.1%),
966    and similarly for size for products (.1 .. .3% bloat, sometimes win).
967    Due to the empirical likeliness of making slower code, it is not
968    defined.  */
969
970 /* This no longer *needs* to be a structure; but keeping it as such should
971    not hurt (and hacking the ABI is simpler).  */
972 #define CUMULATIVE_ARGS struct cum_args
973 struct cum_args {int regs;};
974
975 /* The regs member is an integer, the number of arguments got into
976    registers so far.  */
977 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
978  ((CUM).regs = 0)
979
980 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)            \
981  ((CUM).regs += (3 + CRIS_FUNCTION_ARG_SIZE (MODE, TYPE)) / 4)
982
983 #define FUNCTION_ARG_REGNO_P(REGNO)                     \
984  ((REGNO) >= CRIS_FIRST_ARG_REG                         \
985   && (REGNO) < CRIS_FIRST_ARG_REG + (CRIS_MAX_ARGS_IN_REGS))
986
987
988 /* Node: Scalar Return */
989
990 /* Let's assume all functions return in r[CRIS_FIRST_ARG_REG] for the
991    time being.  */
992 #define FUNCTION_VALUE(VALTYPE, FUNC)  \
993  gen_rtx_REG (TYPE_MODE (VALTYPE), CRIS_FIRST_ARG_REG)
994
995 #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, CRIS_FIRST_ARG_REG)
996
997 #define FUNCTION_VALUE_REGNO_P(N) ((N) == CRIS_FIRST_ARG_REG)
998
999
1000 /* Node: Aggregate Return */
1001
1002 #if 0
1003 /* FIXME: Let's try this some time, so we return structures in registers.
1004    We would cast the result of int_size_in_bytes to unsigned, so we will
1005    get a huge number for "structures" of variable size (-1).  */
1006 #define RETURN_IN_MEMORY(TYPE) \
1007  ((unsigned) int_size_in_bytes (TYPE) > CRIS_MAX_ARGS_IN_REGS * UNITS_PER_WORD)
1008 #endif
1009
1010 #define CRIS_STRUCT_VALUE_REGNUM ((CRIS_FIRST_ARG_REG) - 1)
1011
1012
1013 /* Node: Caller Saves */
1014 /* (no definitions) */
1015
1016 /* Node: Function entry */
1017
1018 /* See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and
1019    TARGET_ASM_FUNCTION_EPILOGUE.  */
1020
1021 /* If the epilogue uses the "ret" insn, we need to fill the
1022    delay slot.  */
1023 #define DELAY_SLOTS_FOR_EPILOGUE cris_delay_slots_for_epilogue ()
1024
1025 #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) \
1026   cris_eligible_for_epilogue_delay (INSN)
1027
1028 /* Node: Profiling */
1029
1030 #define FUNCTION_PROFILER(FILE, LABELNO)  \
1031  error ("no FUNCTION_PROFILER for CRIS")
1032
1033 /* FIXME: Some of the undefined macros might be mandatory.  If so, fix
1034    documentation.  */
1035
1036
1037 /* Node: Trampolines */
1038
1039 /* This looks too complicated, and it is.  I assigned r7 to be the
1040    static chain register, but it is call-saved, so we have to save it,
1041    and come back to restore it after the call, so we have to save srp...
1042    Anyway, trampolines are rare enough that we can cope with this
1043    somewhat lack of elegance.
1044     (Do not be tempted to "straighten up" whitespace in the asms; the
1045    assembler #NO_APP state mandates strict spacing).  */
1046 #define TRAMPOLINE_TEMPLATE(FILE)               \
1047   do                                            \
1048     {                                           \
1049       fprintf (FILE, "\tmove.d $%s,[$pc+20]\n", \
1050                reg_names[STATIC_CHAIN_REGNUM]); \
1051       fprintf (FILE, "\tmove $srp,[$pc+22]\n"); \
1052       fprintf (FILE, "\tmove.d 0,$%s\n",        \
1053                reg_names[STATIC_CHAIN_REGNUM]); \
1054       fprintf (FILE, "\tjsr 0\n");              \
1055       fprintf (FILE, "\tmove.d 0,$%s\n",        \
1056                reg_names[STATIC_CHAIN_REGNUM]); \
1057       fprintf (FILE, "\tjump 0\n");             \
1058     }                                           \
1059   while (0)
1060
1061 #define TRAMPOLINE_SIZE 32
1062
1063 /* CRIS wants instructions on word-boundary.
1064    Note that due to a bug (reported) in 2.7.2 and earlier, this is
1065    actually treated as alignment in _bytes_, not _bits_.  (Obviously
1066    this is not fatal, only a slight waste of stack space).  */
1067 #define TRAMPOLINE_ALIGNMENT 16
1068
1069 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)               \
1070   do                                                            \
1071     {                                                           \
1072       emit_move_insn (gen_rtx_MEM (SImode,                      \
1073                                plus_constant (TRAMP, 10)),      \
1074                       CXT);                                     \
1075       emit_move_insn (gen_rtx_MEM (SImode,                      \
1076                                plus_constant (TRAMP, 16)),      \
1077                       FNADDR);                                  \
1078     }                                                           \
1079   while (0)
1080
1081 /* Note that there is no need to do anything with the cache for sake of
1082    a trampoline.  */
1083
1084
1085 /* Node: Library Calls */
1086
1087 /* If you change this, you have to check whatever libraries and systems
1088    that use it.  */
1089 #define TARGET_EDOM 33
1090
1091
1092 /* Node: Addressing Modes */
1093
1094 #define HAVE_POST_INCREMENT 1
1095
1096 #define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
1097
1098 #define MAX_REGS_PER_ADDRESS 2
1099
1100 /* There are helper macros defined here which are used only in
1101    GO_IF_LEGITIMATE_ADDRESS.
1102
1103    Note that you *have to* reject invalid addressing modes for mode
1104    MODE, even if it is legal for normal addressing modes.  You cannot
1105    rely on the constraints to do this work.  They can only be used to
1106    doublecheck your intentions.  One example is that you HAVE TO reject
1107    (mem:DI (plus:SI (reg:SI x) (reg:SI y))) because for some reason
1108    this cannot be reloaded.  (Which of course you can argue that gcc
1109    should have done.)  FIXME:  Strange.  Check.  */
1110
1111 /* No symbol can be used as an index (or more correct, as a base) together
1112    with a register with PIC; the PIC register must be there.  */
1113 #define CONSTANT_INDEX_P(X) \
1114  (CONSTANT_P (X) && !(flag_pic && cris_symbol (X)))
1115
1116 /* True if X is a valid base register.  */
1117 #define BASE_P(X) \
1118  (REG_P (X) && REG_OK_FOR_BASE_P (X))
1119
1120 /* True if X is a valid base register with or without autoincrement.  */
1121 #define BASE_OR_AUTOINCR_P(X) \
1122  (BASE_P (X) || (GET_CODE (X) == POST_INC && BASE_P (XEXP (X, 0))))
1123
1124 /* True if X is a valid (register) index for BDAP, i.e. [Rs].S or [Rs+].S.  */
1125 #define BDAP_INDEX_P(X)                                 \
1126  ((GET_CODE (X) == MEM && GET_MODE (X) == SImode        \
1127    && BASE_OR_AUTOINCR_P (XEXP (X, 0)))                 \
1128   || (GET_CODE (X) == SIGN_EXTEND                       \
1129       && GET_CODE (XEXP (X, 0)) == MEM                  \
1130       && (GET_MODE (XEXP (X, 0)) == HImode              \
1131           || GET_MODE (XEXP (X, 0)) == QImode)          \
1132       && BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0))))
1133
1134 /* True if X is a valid (register) index for BIAP, i.e. Rd.m.  */
1135 #define BIAP_INDEX_P(X)                         \
1136  ((BASE_P (X) && REG_OK_FOR_INDEX_P (X))        \
1137   || (GET_CODE (X) == MULT                      \
1138       && BASE_P (XEXP (X, 0))                   \
1139       && REG_OK_FOR_INDEX_P (XEXP (X, 0))       \
1140       && GET_CODE (XEXP (X, 1)) == CONST_INT    \
1141       && (INTVAL (XEXP (X, 1)) == 2             \
1142           || INTVAL (XEXP (X, 1)) == 4)))
1143
1144 /* True if X is an address that doesn't need a prefix i.e. [Rs] or [Rs+].  */
1145 #define SIMPLE_ADDRESS_P(X) \
1146  (BASE_P (X)                                            \
1147   || (GET_CODE (X) == POST_INC                          \
1148       && BASE_P (XEXP (X, 0))))
1149
1150 /* A PIC operand looks like a normal symbol here.  At output we dress it
1151    in "[rPIC+symbol:GOT]" (global symbol) or "rPIC+symbol:GOTOFF" (local
1152    symbol) so we exclude all addressing modes where we can't replace a
1153    plain "symbol" with that.  A global PIC symbol does not fit anywhere
1154    here (but is thankfully a general_operand in itself).  A local PIC
1155    symbol is valid for the plain "symbol + offset" case.  */
1156 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                 \
1157  {                                                              \
1158    rtx x1, x2;                                                  \
1159    if (SIMPLE_ADDRESS_P (X))                                    \
1160      goto ADDR;                                                 \
1161    if (CONSTANT_P (X)                                           \
1162        && (! flag_pic                                           \
1163            || cris_gotless_symbol (X)                           \
1164            || ! cris_symbol (X)))                               \
1165      goto ADDR;                                                 \
1166    /* Indexed?  */                                              \
1167    if (GET_CODE (X) == PLUS)                                    \
1168      {                                                          \
1169        x1 = XEXP (X, 0);                                        \
1170        x2 = XEXP (X, 1);                                        \
1171        /* BDAP o, Rd.  */                                       \
1172        if ((BASE_P (x1) && CONSTANT_INDEX_P (x2))               \
1173            || (BASE_P (x2) && CONSTANT_INDEX_P (x1))            \
1174             /* BDAP Rs[+], Rd.  */                              \
1175            || (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD           \
1176                && ((BASE_P (x1) && BDAP_INDEX_P (x2))           \
1177                    || (BASE_P (x2) && BDAP_INDEX_P (x1))        \
1178                    /* BIAP.m Rs, Rd */                          \
1179                    || (BASE_P (x1) && BIAP_INDEX_P (x2))        \
1180                    || (BASE_P (x2) && BIAP_INDEX_P (x1)))))     \
1181          goto ADDR;                                             \
1182      }                                                          \
1183    else if (GET_CODE (X) == MEM)                                \
1184      {                                                          \
1185        /* DIP (Rs).  Reject [[reg+]] and [[reg]] for            \
1186           DImode (long long).  */                               \
1187        if (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD               \
1188            && (BASE_P (XEXP (X, 0))                             \
1189                || BASE_OR_AUTOINCR_P (XEXP (X, 0))))            \
1190          goto ADDR;                                             \
1191      }                                                          \
1192  }
1193
1194 #ifndef REG_OK_STRICT
1195  /* Nonzero if X is a hard reg that can be used as a base reg
1196     or if it is a pseudo reg.  */
1197 # define REG_OK_FOR_BASE_P(X)                   \
1198  (REGNO (X) <= CRIS_LAST_GENERAL_REGISTER       \
1199   || REGNO (X) == ARG_POINTER_REGNUM            \
1200   || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1201 #else
1202  /* Nonzero if X is a hard reg that can be used as a base reg.  */
1203 # define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1204 #endif
1205
1206 #ifndef REG_OK_STRICT
1207  /* Nonzero if X is a hard reg that can be used as an index
1208     or if it is a pseudo reg.  */
1209 # define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
1210 #else
1211  /* Nonzero if X is a hard reg that can be used as an index.  */
1212 # define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1213 #endif
1214
1215 /* For now, don't do anything.  GCC does a good job most often.
1216
1217     Maybe we could do something about gcc:s misbehavior when it
1218    recalculates frame offsets for local variables, from fp+offs to
1219    sp+offs.  The resulting address expression gets screwed up
1220    sometimes, but I'm not sure that it may be fixed here, since it is
1221    already split up in several instructions (Is this still true?).
1222    FIXME: Check and adjust for gcc-2.9x.  */
1223 #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {}
1224
1225 /* Kludge to solve Axis-990219: Work around imperfection in
1226    reload_load_address1:
1227     (plus (sign_extend (mem:qi (reg))) (reg))
1228    should be reloaded as (plus (reg) (reg)), not
1229     (plus (sign_extend (reg)) (reg)).
1230    There are no checks that reload_load_address_1 "reloads"
1231    addresses correctly, so invalidness is not caught or
1232    corrected.
1233     When the right thing happens in reload, the kludge can
1234    be removed; still not as of 2003-02-27.  */
1235
1236 #define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN) \
1237   do                                                                    \
1238     {                                                                   \
1239       if (GET_CODE (X) == PLUS                                          \
1240           && REG_P (XEXP (X, 1))                                        \
1241           && GET_CODE (XEXP (X, 0)) == SIGN_EXTEND                      \
1242           && GET_CODE (XEXP (XEXP (X, 0), 0)) == MEM                    \
1243           && (GET_MODE (XEXP (XEXP (X, 0), 0)) == HImode                \
1244               || GET_MODE (XEXP (XEXP (X, 0), 0)) == QImode)            \
1245           && (REG_P (XEXP (XEXP (XEXP (X, 0), 0), 0))                   \
1246               || (GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 0))            \
1247                   == POST_INC                                           \
1248                   && REG_P (XEXP (XEXP (XEXP (XEXP (X, 0), 0), 0),      \
1249                                   0)))))                                \
1250         {                                                               \
1251           int something_reloaded = 0;                                   \
1252                                                                         \
1253           if (REGNO (XEXP (X, 1)) >= FIRST_PSEUDO_REGISTER)             \
1254             {                                                           \
1255               /* Second reg is pseudo, reload it.  */                   \
1256               push_reload (XEXP (X, 1), NULL_RTX, &XEXP (X, 1),         \
1257                            NULL,                                        \
1258                            GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0,  \
1259                            OPNUM, TYPE);                                \
1260               something_reloaded = 1;                                   \
1261             }                                                           \
1262                                                                         \
1263           if (REG_P (XEXP (XEXP (XEXP (X, 0), 0), 0))                   \
1264               && (REGNO (XEXP (XEXP (XEXP (X, 0), 0), 0))               \
1265                   >= FIRST_PSEUDO_REGISTER))                            \
1266             {                                                           \
1267               /* First one is a pseudo - reload that.  */               \
1268               push_reload (XEXP (XEXP (XEXP (X, 0), 0), 0), NULL_RTX,   \
1269                            &XEXP (XEXP (XEXP (X, 0), 0), 0), NULL,      \
1270                            GENERAL_REGS,                                \
1271                            GET_MODE (X), VOIDmode, 0, 0, OPNUM, TYPE);  \
1272               something_reloaded = 1;                                   \
1273             }                                                           \
1274                                                                         \
1275           if (! something_reloaded                                      \
1276               || (GET_CODE (XEXP (XEXP (X, 0), 0)) == POST_INC          \
1277                   && (REGNO (XEXP (XEXP (XEXP (X, 0), 0), 0))           \
1278                       >= FIRST_PSEUDO_REGISTER)))                       \
1279             /* Reload the sign_extend.  Happens if neither reg is a     \
1280                pseudo, or the first one was inside post_increment.  */  \
1281             push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL,     \
1282                          GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0,    \
1283                          OPNUM, TYPE);                                  \
1284           goto WIN;                                                     \
1285         }                                                               \
1286     }                                                                   \
1287   while (0)
1288
1289 /* In CRIS, only the postincrement address mode depends thus,
1290    since the increment depends on the size of the operand.  */
1291 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)       \
1292   do                                                    \
1293     {                                                   \
1294       if (GET_CODE (ADDR) == POST_INC)                  \
1295         goto LABEL;                                     \
1296     }                                                   \
1297   while (0)
1298
1299 #define LEGITIMATE_CONSTANT_P(X) 1
1300
1301
1302 /* Node: Condition Code */
1303
1304 #define NOTICE_UPDATE_CC(EXP, INSN) cris_notice_update_cc (EXP, INSN)
1305
1306 /* FIXME: Maybe define CANONICALIZE_COMPARISON later, when playing with
1307    optimizations.  It is needed; currently we do this with instruction
1308    patterns and NOTICE_UPDATE_CC.  */
1309
1310
1311 /* Node: Costs */
1312
1313 /* FIXME: Need to define REGISTER_MOVE_COST when more register classes are
1314    introduced.  */
1315
1316 /* This isn't strictly correct for v0..3 in buswidth-8bit mode, but
1317    should suffice.  */
1318 #define MEMORY_MOVE_COST(M, CLASS, IN) \
1319  (((M) == QImode) ? 4 : ((M) == HImode) ? 4 : 6)
1320
1321 /* Regardless of the presence of delay slots, the default value of 1 for
1322    BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2
1323    with testcases ipps and gcc, giving smallest and fastest code.  */
1324
1325 #define SLOW_BYTE_ACCESS 0
1326
1327 /* This is the threshold *below* which inline move sequences of
1328    word-length sizes will be emitted.  The "9" will translate to
1329    (9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions
1330    (8 instruction sequences) or less.  */
1331 #define MOVE_RATIO 9
1332
1333
1334 /* Node: Sections */
1335
1336 #define TEXT_SECTION_ASM_OP "\t.text"
1337
1338 #define DATA_SECTION_ASM_OP "\t.data"
1339
1340 #define FORCE_EH_FRAME_INFO_IN_DATA_SECTION (! TARGET_ELF)
1341
1342 /* The jump table is immediately connected to the preceding insn.  */
1343 #define JUMP_TABLES_IN_TEXT_SECTION 1
1344
1345 /* We pull a little trick to register the _fini function with atexit,
1346    after (presumably) registering the eh frame info, since we don't handle
1347    _fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF.  If
1348    you change this, don't forget that you can't have library function
1349    references (e.g. to atexit) in crtend.o, since those won't be resolved
1350    to libraries; those are linked in *before* crtend.o.  */
1351 #ifdef CRT_BEGIN
1352 # define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)             \
1353 static void __attribute__((__used__))                           \
1354 call_ ## FUNC (void)                                            \
1355 {                                                               \
1356   asm (SECTION_OP);                                             \
1357   FUNC ();                                                      \
1358   if (__builtin_strcmp (#FUNC, "frame_dummy") == 0)             \
1359    {                                                            \
1360      extern void __fini__start (void);                          \
1361      atexit (__fini__start);                                    \
1362    }                                                            \
1363   asm (TEXT_SECTION_ASM_OP);                                    \
1364 }
1365 #endif
1366
1367 /* Node: PIC */
1368
1369 #define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 0 : INVALID_REGNUM)
1370
1371 #define LEGITIMATE_PIC_OPERAND_P(X) cris_legitimate_pic_operand (X)
1372
1373
1374 /* Node: File Framework */
1375
1376 /* We don't want an .ident for gcc.  To avoid that but still support
1377    #ident, we override ASM_OUTPUT_IDENT and, since the gcc .ident is its
1378    only use besides ASM_OUTPUT_IDENT, undef IDENT_ASM_OP from elfos.h.  */
1379 #undef IDENT_ASM_OP
1380 #undef ASM_OUTPUT_IDENT
1381 #define ASM_OUTPUT_IDENT(FILE, NAME) \
1382   fprintf (FILE, "%s\"%s\"\n", "\t.ident\t", NAME);
1383
1384 #define ASM_APP_ON "#APP\n"
1385
1386 #define ASM_APP_OFF "#NO_APP\n"
1387
1388
1389 /* Node: Data Output */
1390
1391 #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) (C) == '@'
1392
1393 /* Node: Uninitialized Data */
1394
1395 /* Remember to round off odd values if we want data alignment,
1396    since we cannot do that with an .align directive.
1397
1398    Using .comm causes the space not to be reserved in .bss, but by
1399    tricks with the symbol type.  Not good if other tools than binutils
1400    are used on the object files.  Since ".global ... .lcomm ..." works, we
1401    use that.  Use .._ALIGNED_COMMON, since gcc whines when we only have
1402    ..._COMMON, and we prefer to whine ourselves; BIGGEST_ALIGNMENT is not
1403    the one to check.  This done for a.out only.  */
1404 /* FIXME: I suspect a bug in gcc with alignment.  Do not warn until
1405    investigated; it mucks up the testsuite results.  */
1406 #define CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, LOCAL) \
1407   do                                                                    \
1408     {                                                                   \
1409       int align_ = (ALIGN) / BITS_PER_UNIT;                             \
1410       if (TARGET_DATA_ALIGN && TARGET_ALIGN_BY_32 && align_ < 4)        \
1411         align_ = 4;                                                     \
1412       else if (TARGET_DATA_ALIGN && align_ < 2)                         \
1413         align_ = 2;                                                     \
1414       /* FIXME: Do we need this?  */                                    \
1415       else if (align_ < 1)                                              \
1416         align_ = 1;                                                     \
1417                                                                         \
1418       if (TARGET_ELF)                                                   \
1419         {                                                               \
1420           if (LOCAL)                                                    \
1421             {                                                           \
1422               fprintf ((FILE), "%s", LOCAL_ASM_OP);                     \
1423               assemble_name ((FILE), (NAME));                           \
1424               fprintf ((FILE), "\n");                                   \
1425             }                                                           \
1426           fprintf ((FILE), "%s", COMMON_ASM_OP);                        \
1427           assemble_name ((FILE), (NAME));                               \
1428           fprintf ((FILE), ",%u,%u\n", (int)(SIZE), align_);            \
1429         }                                                               \
1430       else                                                              \
1431         {                                                               \
1432           /* We can't tell a one-only or weak COMM from a "global       \
1433              COMM" so just make all non-locals weak.  */                \
1434           if (! (LOCAL))                                                \
1435             ASM_WEAKEN_LABEL (FILE, NAME);                              \
1436           fputs ("\t.lcomm ", (FILE));                                  \
1437           assemble_name ((FILE), (NAME));                               \
1438           fprintf ((FILE), ",%u\n",                                     \
1439                    ((int)(SIZE) + (align_ - 1)) & ~(align_ - 1));       \
1440         }                                                               \
1441     }                                                                   \
1442   while (0)
1443
1444 #define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
1445  CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 0)
1446
1447 #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
1448 #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
1449  CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 1)
1450
1451 /* FIXME: define ASM_OUTPUT_SHARED_COMMON and emit an error when it is
1452    used with -melinux and a.out.  */
1453
1454 /* Node: Label Output */
1455
1456 /* Globalizing directive for a label.  */
1457 #define GLOBAL_ASM_OP "\t.global "
1458
1459 #define SUPPORTS_WEAK 1
1460
1461 /* Remove any previous definition (elfos.h).  */
1462 #undef ASM_GENERATE_INTERNAL_LABEL
1463 #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
1464   sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long) NUM)
1465
1466 /* Node: Initialization */
1467 /* (no definitions) */
1468
1469 /* Node: Macros for Initialization */
1470 /* (no definitions) */
1471
1472 /* Node: Instruction Output */
1473
1474 #define REGISTER_NAMES                                  \
1475  {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
1476   "r9", "r10", "r11", "r12", "r13", "sp", "pc", "srp", "faked_ap"}
1477
1478 #define ADDITIONAL_REGISTER_NAMES \
1479  {{"r14", 14}, {"r15", 15}}
1480
1481 #define PRINT_OPERAND(FILE, X, CODE)            \
1482  cris_print_operand (FILE, X, CODE)
1483
1484 /* For delay-slot handling.  */
1485 #define PRINT_OPERAND_PUNCT_VALID_P(CODE)       \
1486  ((CODE) == '#' || (CODE) == '!')
1487
1488 #define PRINT_OPERAND_ADDRESS(FILE, ADDR)       \
1489    cris_print_operand_address (FILE, ADDR)
1490
1491 /* Output an empty line to illustrate the presence of the delay slot.  */
1492 #define DBR_OUTPUT_SEQEND(FILE) \
1493   fprintf (FILE, "\n")
1494
1495 #define LOCAL_LABEL_PREFIX (TARGET_ELF ? "." : "")
1496
1497 /* cppinit.c initializes a const array from this, so it must be constant,
1498    can't have it different based on options.  Luckily, the prefix is
1499    always allowed, so let's have it on all GCC-generated code.  Note that
1500    we have this verbatim everywhere in the back-end, not using %R or %s or
1501    such.  */
1502 #define REGISTER_PREFIX "$"
1503
1504 /* Remove any previous definition (elfos.h).  */
1505 /* We use -fno-leading-underscore to remove it, when necessary.  */
1506 #undef USER_LABEL_PREFIX
1507 #define USER_LABEL_PREFIX "_"
1508
1509 #define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
1510   fprintf (FILE, "\tpush $%s\n", reg_names[REGNO])
1511
1512 #define ASM_OUTPUT_REG_POP(FILE, REGNO) \
1513   fprintf (FILE, "\tpop $%s\n", reg_names[REGNO])
1514
1515
1516 /* Node: Dispatch Tables */
1517
1518 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)        \
1519   asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL)
1520
1521 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
1522   asm_fprintf (FILE, "\t.dword %LL%d\n", VALUE)
1523
1524 /* Defined to also emit an .align in elfos.h.  We don't want that.  */
1525 #undef ASM_OUTPUT_CASE_LABEL
1526
1527 /* Since the "bound" insn loads the comparison value if the compared<
1528    value (register) is out of bounds (0..comparison value-1), we need
1529    to output another case to catch it.
1530    The way to find it is to look for the label_ref at the else-arm inside
1531    the expanded casesi core-insn.
1532    FIXME: Check this construct when changing to new version of gcc.  */
1533 #define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE)                         \
1534   do                                                                    \
1535     {                                                                   \
1536       asm_fprintf (STREAM, "\t.word %LL%d-%LL%d%s\n",                   \
1537                    CODE_LABEL_NUMBER                                    \
1538                     (XEXP (XEXP (XEXP                                   \
1539                                   (XVECEXP                              \
1540                                     (PATTERN (PREV_INSN (PREV_INSN      \
1541                                                           (TABLE))),    \
1542                                      0, 0), 1), 2), 0)),                \
1543                    NUM,                                                 \
1544                    (TARGET_PDEBUG ? "; default" : ""));                 \
1545     }                                                                   \
1546   while (0)
1547
1548
1549 /* Node: Exception Region Output */
1550 /* (no definitions) */
1551 /* FIXME: Fill in with our own optimized layout.  */
1552
1553 /* Node: Alignment Output */
1554
1555 #define ASM_OUTPUT_ALIGN(FILE, LOG)  \
1556  fprintf (FILE, "\t.align %d\n", (LOG))
1557
1558
1559 /* Node: All Debuggers */
1560
1561 #define DBX_REGISTER_NUMBER(REGNO) \
1562  ((REGNO) == CRIS_SRP_REGNUM ? CRIS_CANONICAL_SRP_REGNUM : (REGNO))
1563
1564 /* FIXME: Investigate DEBUGGER_AUTO_OFFSET, DEBUGGER_ARG_OFFSET.  */
1565
1566
1567 /* Node: DBX Options */
1568
1569 /* Is this correct? Check later.  */
1570 #define DBX_NO_XREFS
1571
1572 #define DBX_CONTIN_LENGTH 0
1573
1574 /* FIXME: Is this needed when we have 0 DBX_CONTIN_LENGTH?  */
1575 #define DBX_CONTIN_CHAR '?'
1576
1577
1578 /* Node: DBX Hooks */
1579 /* (no definitions) */
1580
1581 /* Node: File names and DBX */
1582 /* (no definitions) */
1583
1584
1585 /* Node: SDB and DWARF */
1586 /* (no definitions) */
1587
1588 /* Node: Misc */
1589
1590 /* FIXME: Check this one more time.  */
1591 #define PREDICATE_CODES                                 \
1592  {"cris_orthogonal_operator",                           \
1593   {PLUS, MINUS, IOR, AND, UMIN}},                       \
1594  {"cris_commutative_orth_op",                           \
1595   {PLUS, IOR, AND, UMIN}},                              \
1596  {"cris_operand_extend_operator",                       \
1597   {PLUS, MINUS, UMIN}},                                 \
1598  {"cris_additive_operand_extend_operator",              \
1599   {PLUS, MINUS}},                                       \
1600  {"cris_extend_operator",                               \
1601   {ZERO_EXTEND, SIGN_EXTEND}},                          \
1602  {"cris_plus_or_bound_operator",                        \
1603   {PLUS, UMIN}},                                        \
1604  {"cris_mem_op",                                        \
1605   {MEM}},                                               \
1606  {"cris_bdap_operand",                                  \
1607   {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT,  \
1608    CONST_DOUBLE, CONST, SIGN_EXTEND}},                  \
1609  {"cris_bdap_biap_operand",                             \
1610   {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT,  \
1611    CONST_DOUBLE, CONST, SIGN_EXTEND, MULT}},            \
1612  {"cris_general_operand_or_gotless_symbol",             \
1613   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1614    LABEL_REF, SUBREG, REG, MEM}},                       \
1615  {"cris_general_operand_or_symbol",                     \
1616   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1617    LABEL_REF, SUBREG, REG, MEM}},                       \
1618  {"cris_general_operand_or_plt_symbol",                 \
1619   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1620    LABEL_REF, SUBREG, REG, MEM}},                       \
1621  {"cris_mem_call_operand",                              \
1622   {MEM}},
1623
1624 /* A combination of the bound (umin) insn together with a
1625    sign-extended add via the table to PC seems optimal.
1626    If the table overflows, the assembler will take care of it.
1627    Theoretically, in extreme cases (uncertain if they occur), an error
1628    will be emitted, so FIXME: Check how large case-tables are emitted,
1629    possible add an option to emit SImode case-tables.  */
1630 #define CASE_VECTOR_MODE HImode
1631
1632 #define CASE_VECTOR_PC_RELATIVE 1
1633
1634 /* FIXME: Investigate CASE_VECTOR_SHORTEN_MODE to make sure HImode is not
1635    used when broken-.word could possibly fail (plus testcase).  */
1636
1637 #define FIXUNS_TRUNC_LIKE_FIX_TRUNC
1638
1639 /* This is the number of bytes that can be moved in one
1640    reasonably fast instruction sequence.  For CRIS, this is two
1641    instructions: mem => reg, reg => mem.  */
1642 #define MOVE_MAX 4
1643
1644 /* Maybe SHIFT_COUNT_TRUNCATED is safe to define?  FIXME: Check later.  */
1645
1646 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1647
1648 #define Pmode SImode
1649
1650 #define FUNCTION_MODE QImode
1651
1652 #define NO_IMPLICIT_EXTERN_C
1653
1654 /*
1655  * Local variables:
1656  * eval: (c-set-style "gnu")
1657  * indent-tabs-mode: t
1658  * End:
1659  */