OSDN Git Service

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