OSDN Git Service

* alpha.h, arc.h, arm/aout.h, avr.h, c4x.h, cris.h, d30v.h,
[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 #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
1017  cris_asm_output_mi_thunk(FILE, THUNK_FNDECL, DELTA, FUNCTION)
1018
1019
1020 /* Node: Profiling */
1021
1022 #define FUNCTION_PROFILER(FILE, LABELNO)  \
1023  error ("no FUNCTION_PROFILER for CRIS")
1024
1025 /* FIXME: Some of the undefined macros might be mandatory.  If so, fix
1026    documentation.  */
1027
1028
1029 /* Node: Varargs */
1030
1031 /* We save the register number of the first anonymous argument in
1032    first_vararg_reg, and take care of this in the function prologue.
1033    This behaviour is used by at least one more port (the ARM?), but
1034    may be unsafe when compiling nested functions.  (With varargs? Hairy.)
1035    Note that nested-functions is a GNU C extension.
1036
1037    FIXME: We can actually put the size in PRETEND and deduce the number
1038    of registers from it in the prologue and epilogue.  */
1039 #define SETUP_INCOMING_VARARGS(ARGSSF, MODE, TYPE, PRETEND, SECOND)     \
1040   do                                                                    \
1041     {                                                                   \
1042       if ((ARGSSF).regs < (CRIS_MAX_ARGS_IN_REGS))                      \
1043         (PRETEND) = ((CRIS_MAX_ARGS_IN_REGS) - (ARGSSF).regs) * 4;      \
1044       if (TARGET_PDEBUG)                                                \
1045         {                                                               \
1046           fprintf (asm_out_file,                                        \
1047                    "\n; VA:: ANSI: %d args before, anon @ #%d, %dtime\n", \
1048                    (ARGSSF).regs, PRETEND, SECOND);                     \
1049         }                                                               \
1050     }                                                                   \
1051   while (0)
1052
1053 /* FIXME: This and other EXPAND_BUILTIN_VA_... target macros are not
1054    documented, although used by several targets.  */
1055 #define EXPAND_BUILTIN_VA_ARG(VALIST, TYPE) \
1056  cris_expand_builtin_va_arg (VALIST, TYPE)
1057
1058
1059 /* Node: Trampolines */
1060
1061 /* This looks too complicated, and it is.  I assigned r7 to be the
1062    static chain register, but it is call-saved, so we have to save it,
1063    and come back to restore it after the call, so we have to save srp...
1064    Anyway, trampolines are rare enough that we can cope with this
1065    somewhat lack of elegance.
1066     (Do not be tempted to "straighten up" whitespace in the asms; the
1067    assembler #NO_APP state mandates strict spacing).  */
1068 #define TRAMPOLINE_TEMPLATE(FILE)               \
1069   do                                            \
1070     {                                           \
1071       fprintf (FILE, "\tmove.d $%s,[$pc+20]\n", \
1072                reg_names[STATIC_CHAIN_REGNUM]); \
1073       fprintf (FILE, "\tmove $srp,[$pc+22]\n"); \
1074       fprintf (FILE, "\tmove.d 0,$%s\n",        \
1075                reg_names[STATIC_CHAIN_REGNUM]); \
1076       fprintf (FILE, "\tjsr 0\n");              \
1077       fprintf (FILE, "\tmove.d 0,$%s\n",        \
1078                reg_names[STATIC_CHAIN_REGNUM]); \
1079       fprintf (FILE, "\tjump 0\n");             \
1080     }                                           \
1081   while (0)
1082
1083 #define TRAMPOLINE_SIZE 32
1084
1085 /* CRIS wants instructions on word-boundary.
1086    Note that due to a bug (reported) in 2.7.2 and earlier, this is
1087    actually treated as alignment in _bytes_, not _bits_.  (Obviously
1088    this is not fatal, only a slight waste of stack space).  */
1089 #define TRAMPOLINE_ALIGNMENT 16
1090
1091 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)               \
1092   do                                                            \
1093     {                                                           \
1094       emit_move_insn (gen_rtx (MEM, SImode,                     \
1095                                plus_constant (TRAMP, 10)),      \
1096                       CXT);                                     \
1097       emit_move_insn (gen_rtx (MEM, SImode,                     \
1098                                plus_constant (TRAMP, 16)),      \
1099                       FNADDR);                                  \
1100     }                                                           \
1101   while (0)
1102
1103 /* Note that there is no need to do anything with the cache for sake of
1104    a trampoline.  */
1105
1106
1107 /* Node: Library Calls */
1108
1109 #define MULSI3_LIBCALL "__Mul"
1110 #define DIVSI3_LIBCALL "__Div"
1111 #define UDIVSI3_LIBCALL "__Udiv"
1112 #define MODSI3_LIBCALL "__Mod"
1113 #define UMODSI3_LIBCALL "__Umod"
1114
1115 /* If you change this, you have to check whatever libraries and systems
1116    that use it.  */
1117 #define TARGET_EDOM 33
1118
1119
1120 /* Node: Addressing Modes */
1121
1122 #define HAVE_POST_INCREMENT 1
1123
1124 #define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
1125
1126 #define MAX_REGS_PER_ADDRESS 2
1127
1128 /* There are helper macros defined here which are used only in
1129    GO_IF_LEGITIMATE_ADDRESS.
1130
1131    Note that you *have to* reject invalid addressing modes for mode
1132    MODE, even if it is legal for normal addressing modes.  You cannot
1133    rely on the constraints to do this work.  They can only be used to
1134    doublecheck your intentions.  One example is that you HAVE TO reject
1135    (mem:DI (plus:SI (reg:SI x) (reg:SI y))) because for some reason
1136    this cannot be reloaded.  (Which of course you can argue that gcc
1137    should have done.)  FIXME:  Strange.  Check.  */
1138
1139 /* No symbol can be used as an index (or more correct, as a base) together
1140    with a register with PIC; the PIC register must be there.  */
1141 #define CONSTANT_INDEX_P(X) \
1142  (CONSTANT_P (X) && !(flag_pic && cris_symbol (X)))
1143
1144 /* True if X is a valid base register.  */
1145 #define BASE_P(X) \
1146  (REG_P (X) && REG_OK_FOR_BASE_P (X))
1147
1148 /* True if X is a valid base register with or without autoincrement.  */
1149 #define BASE_OR_AUTOINCR_P(X) \
1150  (BASE_P (X) || (GET_CODE (X) == POST_INC && BASE_P (XEXP (X, 0))))
1151
1152 /* True if X is a valid (register) index for BDAP, i.e. [Rs].S or [Rs+].S.  */
1153 #define BDAP_INDEX_P(X)                                 \
1154  ((GET_CODE (X) == MEM && GET_MODE (X) == SImode        \
1155    && BASE_OR_AUTOINCR_P (XEXP (X, 0)))                 \
1156   || (GET_CODE (X) == SIGN_EXTEND                       \
1157       && GET_CODE (XEXP (X, 0)) == MEM                  \
1158       && (GET_MODE (XEXP (X, 0)) == HImode              \
1159           || GET_MODE (XEXP (X, 0)) == QImode)          \
1160       && BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0))))
1161
1162 /* True if X is a valid (register) index for BIAP, i.e. Rd.m.  */
1163 #define BIAP_INDEX_P(X)                         \
1164  ((BASE_P (X) && REG_OK_FOR_INDEX_P (X))        \
1165   || (GET_CODE (X) == MULT                      \
1166       && BASE_P (XEXP (X, 0))                   \
1167       && REG_OK_FOR_INDEX_P (XEXP (X, 0))       \
1168       && GET_CODE (XEXP (X, 1)) == CONST_INT    \
1169       && (INTVAL (XEXP (X, 1)) == 2             \
1170           || INTVAL (XEXP (X, 1)) == 4)))
1171
1172 /* True if X is an address that doesn't need a prefix i.e. [Rs] or [Rs+].  */
1173 #define SIMPLE_ADDRESS_P(X) \
1174  (BASE_P (X)                                            \
1175   || (GET_CODE (X) == POST_INC                          \
1176       && BASE_P (XEXP (X, 0))))
1177
1178 /* A PIC operand looks like a normal symbol here.  At output we dress it
1179    in "[rPIC+symbol:GOT]" (global symbol) or "rPIC+symbol:GOTOFF" (local
1180    symbol) so we exclude all addressing modes where we can't replace a
1181    plain "symbol" with that.  A global PIC symbol does not fit anywhere
1182    here (but is thankfully a general_operand in itself).  A local PIC
1183    symbol is valid for the plain "symbol + offset" case.  */
1184 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                 \
1185  {                                                              \
1186    rtx x1, x2;                                                  \
1187    if (SIMPLE_ADDRESS_P (X))                                    \
1188      goto ADDR;                                                 \
1189    if (CONSTANT_P (X)                                           \
1190        && (! flag_pic                                           \
1191            || cris_gotless_symbol (X)                           \
1192            || ! cris_symbol (X)))                               \
1193      goto ADDR;                                                 \
1194    /* Indexed?  */                                              \
1195    if (GET_CODE (X) == PLUS)                                    \
1196      {                                                          \
1197        x1 = XEXP (X, 0);                                        \
1198        x2 = XEXP (X, 1);                                        \
1199        /* BDAP o, Rd.  */                                       \
1200        if ((BASE_P (x1) && CONSTANT_INDEX_P (x2))               \
1201            || (BASE_P (x2) && CONSTANT_INDEX_P (x1))            \
1202             /* BDAP Rs[+], Rd.  */                              \
1203            || (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD           \
1204                && ((BASE_P (x1) && BDAP_INDEX_P (x2))           \
1205                    || (BASE_P (x2) && BDAP_INDEX_P (x1))        \
1206                    /* BIAP.m Rs, Rd */                          \
1207                    || (BASE_P (x1) && BIAP_INDEX_P (x2))        \
1208                    || (BASE_P (x2) && BIAP_INDEX_P (x1)))))     \
1209          goto ADDR;                                             \
1210      }                                                          \
1211    else if (GET_CODE (X) == MEM)                                \
1212      {                                                          \
1213        /* DIP (Rs).  Reject [[reg+]] and [[reg]] for            \
1214           DImode (long long).  */                               \
1215        if (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD               \
1216            && (BASE_P (XEXP (X, 0))                             \
1217                || BASE_OR_AUTOINCR_P (XEXP (X, 0))))            \
1218          goto ADDR;                                             \
1219      }                                                          \
1220  }
1221
1222 #ifndef REG_OK_STRICT
1223  /* Nonzero if X is a hard reg that can be used as a base reg
1224     or if it is a pseudo reg.  */
1225 # define REG_OK_FOR_BASE_P(X)                   \
1226  (REGNO (X) <= CRIS_LAST_GENERAL_REGISTER       \
1227   || REGNO (X) == ARG_POINTER_REGNUM            \
1228   || REGNO (X) >= FIRST_PSEUDO_REGISTER)
1229 #else
1230  /* Nonzero if X is a hard reg that can be used as a base reg.  */
1231 # define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1232 #endif
1233
1234 #ifndef REG_OK_STRICT
1235  /* Nonzero if X is a hard reg that can be used as an index
1236     or if it is a pseudo reg.  */
1237 # define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
1238 #else
1239  /* Nonzero if X is a hard reg that can be used as an index.  */
1240 # define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1241 #endif
1242
1243 /* For now, don't do anything.  GCC does a good job most often.
1244
1245     Maybe we could do something about gcc:s misbehaviour when it
1246    recalculates frame offsets for local variables, from fp+offs to
1247    sp+offs.  The resulting address expression gets screwed up
1248    sometimes, but I'm not sure that it may be fixed here, since it is
1249    already split up in several instructions (Is this still true?).
1250    FIXME: Check and adjust for gcc-2.9x.  */
1251 #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {}
1252
1253 /* Functionality import from EGCS.
1254    Kludge to solve Axis-990219: Work around imperfection in
1255    reload_load_address1:
1256     (plus (sign_extend (mem:qi (reg))) (reg))
1257    should be reloaded as (plus (reg) (reg)), not
1258     (plus (sign_extend (reg)) (reg)).
1259    There are no checks that reload_load_address_1 "reloads"
1260    addresses correctly, so invalidness is not caught or
1261    corrected.
1262     When the right thing happens, the "something_reloaded" kludge can
1263    be removed.  The right thing does not appear to happen for
1264    EGCS CVS as of this date (above).  */
1265
1266 #define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN) \
1267   do                                                                    \
1268     {                                                                   \
1269       if (GET_CODE (X) == PLUS                                          \
1270           && REG_P (XEXP (X, 1))                                        \
1271           && GET_CODE (XEXP (X, 0)) == SIGN_EXTEND                      \
1272           && GET_CODE (XEXP (XEXP (X, 0), 0)) == MEM                    \
1273           && (GET_MODE (XEXP (XEXP (X, 0), 0)) == HImode                \
1274               || GET_MODE (XEXP (XEXP (X, 0), 0)) == QImode)            \
1275           && (REG_P (XEXP (XEXP (XEXP (X, 0), 0), 0))                   \
1276               || (GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 0))            \
1277                   == POST_INC                                           \
1278                   && REG_P (XEXP (XEXP (XEXP (XEXP (X, 0), 0), 0),      \
1279                                   0)))))                                \
1280         {                                                               \
1281           int something_reloaded = 0;                                   \
1282                                                                         \
1283           if (REGNO (XEXP (X, 1)) >= FIRST_PSEUDO_REGISTER)             \
1284             {                                                           \
1285               /* Second reg is pseudo, reload it.  */                   \
1286               push_reload (XEXP (X, 1), NULL_RTX, &XEXP (X, 1),         \
1287                            NULL,                                        \
1288                            GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0,  \
1289                            OPNUM, TYPE);                                \
1290               something_reloaded = 1;                                   \
1291             }                                                           \
1292                                                                         \
1293           if (REG_P (XEXP (XEXP (XEXP (X, 0), 0), 0))                   \
1294               && (REGNO (XEXP (XEXP (XEXP (X, 0), 0), 0))               \
1295                   >= FIRST_PSEUDO_REGISTER))                            \
1296             {                                                           \
1297               /* First one is a pseudo - reload that.  */               \
1298               push_reload (XEXP (XEXP (XEXP (X, 0), 0), 0), NULL_RTX,   \
1299                            &XEXP (XEXP (XEXP (X, 0), 0), 0), NULL,      \
1300                            GENERAL_REGS,                                \
1301                            GET_MODE (X), VOIDmode, 0, 0, OPNUM, TYPE);  \
1302               something_reloaded = 1;                                   \
1303             }                                                           \
1304                                                                         \
1305           if (! something_reloaded                                      \
1306               || (GET_CODE (XEXP (XEXP (X, 0), 0)) == POST_INC          \
1307                   && (REGNO (XEXP (XEXP (XEXP (X, 0), 0), 0))           \
1308                       >= FIRST_PSEUDO_REGISTER)))                       \
1309             /* Reload the sign_extend.  Happens if neither reg is a     \
1310                pseudo, or the first one was inside post_increment.  */  \
1311             push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL,     \
1312                          GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0,    \
1313                          OPNUM, TYPE);                                  \
1314           goto WIN;                                                     \
1315         }                                                               \
1316     }                                                                   \
1317   while (0)
1318
1319 /* In CRIS, only the postincrement address mode depends thus,
1320    since the increment depends on the size of the operand.  */
1321 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)       \
1322   do                                                    \
1323     {                                                   \
1324       if (GET_CODE (ADDR) == POST_INC)                  \
1325         goto LABEL;                                     \
1326     }                                                   \
1327   while (0)
1328
1329 #define LEGITIMATE_CONSTANT_P(X) 1
1330
1331
1332 /* Node: Condition Code */
1333
1334 #define NOTICE_UPDATE_CC(EXP, INSN) cris_notice_update_cc (EXP, INSN)
1335
1336 /* FIXME: Maybe define CANONICALIZE_COMPARISON later, when playing with
1337    optimizations.  It is needed; currently we do this with instruction
1338    patterns and NOTICE_UPDATE_CC.  */
1339
1340
1341 /* Node: Costs */
1342
1343 #define CONST_COSTS(RTX, CODE, OUTER_CODE)                              \
1344  case CONST_INT:                                                        \
1345    if (INTVAL (RTX) == 0)                                               \
1346      return 0;                                                          \
1347    if (INTVAL (RTX) < 32 && INTVAL (RTX) >= -32)                        \
1348      return 1;                                                          \
1349    /* Eight or 16 bits are a word and cycle more expensive.  */         \
1350    if (INTVAL (RTX) <= 32767 && INTVAL (RTX) >= -32768)                 \
1351      return 2;                                                          \
1352    /* A 32 bit constant (or very seldom, unsigned 16 bits) costs        \
1353       another word.  FIXME: This isn't linear to 16 bits.  */           \
1354    return 4;                                                            \
1355  case LABEL_REF:                                                        \
1356    return 6;                                                            \
1357  case CONST:                                                            \
1358  case SYMBOL_REF:                                                       \
1359    /* For PIC, we need a prefix (if it isn't already there),            \
1360       and the PIC register.  For a global PIC symbol, we also need a    \
1361       read of the GOT.  */                                              \
1362    return                                                               \
1363      flag_pic ? (cris_got_symbol (RTX) ? (2 + 4 + 6) : (2 + 6)) : 6;    \
1364  case CONST_DOUBLE:                                                     \
1365    if (RTX != CONST0_RTX (GET_MODE (RTX) == VOIDmode ? DImode           \
1366                           : GET_MODE (RTX)))                            \
1367      return 12;                                                         \
1368    /* Make 0.0 cheap, else test-insns will not be used.  */             \
1369    return 0;
1370
1371 #define RTX_COSTS(X, CODE, OUTER_CODE)                                  \
1372  case MULT:                                                             \
1373    /* Identify values that are no powers of two.  Powers of 2 are       \
1374       taken care of already and those values should not be              \
1375       changed.  */                                                      \
1376    if (GET_CODE (XEXP (X, 1)) != CONST_INT                              \
1377        || exact_log2 (INTVAL (XEXP (X, 1)) < 0))                        \
1378      {                                                                  \
1379         /* If we have a multiply insn, then the cost is between         \
1380            1 and 2 "fast" instructions.  */                             \
1381         if (TARGET_HAS_MUL_INSNS)                                       \
1382           return COSTS_N_INSNS (1) + COSTS_N_INSNS (1) /2;              \
1383                                                                         \
1384         /* Estimate as 4 + 4 * #ofbits.  */                             \
1385         return COSTS_N_INSNS (132);                                     \
1386      }                                                                  \
1387      break;                                                             \
1388  case UDIV:                                                             \
1389  case MOD:                                                              \
1390  case UMOD:                                                             \
1391  case DIV:                                                              \
1392    if (GET_CODE (XEXP (X, 1)) != CONST_INT                              \
1393        || exact_log2 (INTVAL (XEXP (X, 1)) < 0))                        \
1394      /* Estimate this as 4 + 8 * #of bits.  */                          \
1395      return COSTS_N_INSNS (260);                                        \
1396                                                                         \
1397  case AND:                                                              \
1398    if (GET_CODE (XEXP (X, 1)) == CONST_INT                              \
1399        /* Two constants may actually happen before optimization.  */    \
1400        && GET_CODE (XEXP (X, 0)) != CONST_INT                           \
1401        && !CONST_OK_FOR_LETTER_P (INTVAL (XEXP (X, 1)), 'I'))           \
1402      return                                                             \
1403        rtx_cost (XEXP (X, 0), OUTER_CODE) + 2                           \
1404        + 2 * GET_MODE_NUNITS (GET_MODE (XEXP (X, 0)));                  \
1405                                                                         \
1406  case ZERO_EXTEND: case SIGN_EXTEND:                                    \
1407    /* Same as move. If embedded in other insn, cost is 0.  */           \
1408    return rtx_cost (XEXP (X, 0), OUTER_CODE);
1409
1410 #define ADDRESS_COST(X) cris_address_cost (X)
1411
1412 /* FIXME: Need to define REGISTER_MOVE_COST when more register classes are
1413    introduced.  */
1414
1415 /* This isn't strictly correct for v0..3 in buswidth-8bit mode, but
1416    should suffice.  */
1417 #define MEMORY_MOVE_COST(M, CLASS, IN) \
1418  (((M) == QImode) ? 4 : ((M) == HImode) ? 4 : 6)
1419
1420 /* Regardless of the presence of delay slots, the default value of 1 for
1421    BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2
1422    with testcases ipps and gcc, giving smallest and fastest code.  */
1423
1424 #define SLOW_BYTE_ACCESS 0
1425
1426 /* This is the threshold *below* which inline move sequences of
1427    word-length sizes will be emitted.  The "9" will translate to
1428    (9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions
1429    (8 instruction sequences) or less.  */
1430 #define MOVE_RATIO 9
1431
1432
1433 /* Node: Sections */
1434
1435 #define TEXT_SECTION_ASM_OP "\t.text"
1436
1437 #define DATA_SECTION_ASM_OP "\t.data"
1438
1439 #define FORCE_EH_FRAME_INFO_IN_DATA_SECTION (! TARGET_ELF)
1440
1441 /* The jump table is immediately connected to the preceding insn.  */
1442 #define JUMP_TABLES_IN_TEXT_SECTION 1
1443
1444 /* We pull a little trick to register the _fini function with atexit,
1445    after (presumably) registering the eh frame info, since we don't handle
1446    _fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF.  If
1447    you change this, don't forget that you can't have library function
1448    references (e.g. to atexit) in crtend.o, since those won't be resolved
1449    to libraries; those are linked in *before* crtend.o.  */
1450 #ifdef CRT_BEGIN
1451 # define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)             \
1452 static void __attribute__((__used__))                           \
1453 call_ ## FUNC (void)                                            \
1454 {                                                               \
1455   asm (SECTION_OP);                                             \
1456   FUNC ();                                                      \
1457   if (__builtin_strcmp (#FUNC, "frame_dummy") == 0)             \
1458    {                                                            \
1459      extern void __fini__start (void);                          \
1460      atexit (__fini__start);                                    \
1461    }                                                            \
1462   asm (TEXT_SECTION_ASM_OP);                                    \
1463 }
1464 #endif
1465
1466 /* Node: PIC */
1467
1468 #define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 0 : INVALID_REGNUM)
1469
1470 #define LEGITIMATE_PIC_OPERAND_P(X) cris_legitimate_pic_operand (X)
1471
1472
1473 /* Node: File Framework */
1474
1475 /* NO_APP *only at file start* means faster assembly.
1476    It also means comments are not allowed.
1477    In some cases comments will be output for debugging purposes.
1478    Make sure they are allowed then.  */
1479 /* Override previous definitions (elfos.h).  */
1480 #undef ASM_FILE_START
1481 #define ASM_FILE_START(STREAM)                                  \
1482   do                                                            \
1483     {                                                           \
1484       if (TARGET_PDEBUG || flag_print_asm_name)                 \
1485         fprintf ((STREAM), "#APP\n");                           \
1486       else                                                      \
1487         fprintf ((STREAM), "#NO_APP\n");                        \
1488       if (TARGET_ELF)                                           \
1489         output_file_directive ((STREAM), main_input_filename);  \
1490     }                                                           \
1491   while (0)
1492
1493 /* Override previous definitions (elfos.h).  */
1494 #undef ASM_FILE_END
1495 #define ASM_FILE_END(STREAM)
1496
1497 /* We don't want an .ident for gcc.  To avoid that but still support
1498    #ident, we override ASM_OUTPUT_IDENT and, since the gcc .ident is its
1499    only use besides ASM_OUTPUT_IDENT, undef IDENT_ASM_OP from elfos.h.  */
1500 #undef IDENT_ASM_OP
1501 #undef ASM_OUTPUT_IDENT
1502 #define ASM_OUTPUT_IDENT(FILE, NAME) \
1503   fprintf (FILE, "%s\"%s\"\n", "\t.ident\t", NAME);
1504
1505 #define ASM_APP_ON "#APP\n"
1506
1507 #define ASM_APP_OFF "#NO_APP\n"
1508
1509
1510 /* Node: Data Output */
1511
1512 #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) (C) == '@'
1513
1514 /* Node: Uninitialized Data */
1515
1516 /* Remember to round off odd values if we want data alignment,
1517    since we cannot do that with an .align directive.
1518
1519    Using .comm causes the space not to be reserved in .bss, but by
1520    tricks with the symbol type.  Not good if other tools than binutils
1521    are used on the object files.  Since ".global ... .lcomm ..." works, we
1522    use that.  Use .._ALIGNED_COMMON, since gcc whines when we only have
1523    ..._COMMON, and we prefer to whine ourselves; BIGGEST_ALIGNMENT is not
1524    the one to check.  This done for a.out only.  */
1525 /* FIXME: I suspect a bug in gcc with alignment.  Do not warn until
1526    investigated; it mucks up the testsuite results.  */
1527 #define CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, LOCAL) \
1528   do                                                                    \
1529     {                                                                   \
1530       int align_ = (ALIGN) / BITS_PER_UNIT;                             \
1531       if (TARGET_DATA_ALIGN && TARGET_ALIGN_BY_32 && align_ < 4)        \
1532         align_ = 4;                                                     \
1533       else if (TARGET_DATA_ALIGN && align_ < 2)                         \
1534         align_ = 2;                                                     \
1535       /* FIXME: Do we need this?  */                                    \
1536       else if (align_ < 1)                                              \
1537         align_ = 1;                                                     \
1538                                                                         \
1539       if (TARGET_ELF)                                                   \
1540         {                                                               \
1541           if (LOCAL)                                                    \
1542             {                                                           \
1543               fprintf ((FILE), "%s", LOCAL_ASM_OP);                     \
1544               assemble_name ((FILE), (NAME));                           \
1545               fprintf ((FILE), "\n");                                   \
1546             }                                                           \
1547           fprintf ((FILE), "%s", COMMON_ASM_OP);                        \
1548           assemble_name ((FILE), (NAME));                               \
1549           fprintf ((FILE), ",%u,%u\n", (SIZE), align_);                 \
1550         }                                                               \
1551       else                                                              \
1552         {                                                               \
1553           /* We can't tell a one-only or weak COMM from a "global       \
1554              COMM" so just make all non-locals weak.  */                \
1555           if (! (LOCAL))                                                \
1556             ASM_WEAKEN_LABEL (FILE, NAME);                              \
1557           fputs ("\t.lcomm ", (FILE));                                  \
1558           assemble_name ((FILE), (NAME));                               \
1559           fprintf ((FILE), ",%u\n",                                     \
1560                    ((SIZE) + (align_ - 1)) & ~(align_ - 1));            \
1561         }                                                               \
1562     }                                                                   \
1563   while (0)
1564
1565 #define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
1566  CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 0)
1567
1568 #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
1569 #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
1570  CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 1)
1571
1572 /* FIXME: define ASM_OUTPUT_SHARED_COMMON and emit an error when it is
1573    used with -melinux and a.out.  */
1574
1575 /* Node: Label Output */
1576
1577 #define ASM_GLOBALIZE_LABEL(FILE, NAME)         \
1578   do                                            \
1579     {                                           \
1580       fputs ("\t.global ", FILE);               \
1581       assemble_name (FILE, NAME);               \
1582       fputs ("\n", FILE);                       \
1583     }                                           \
1584   while (0)
1585
1586 #define SUPPORTS_WEAK 1
1587
1588 /* FIXME: This macro isn't documented, but this would probably be an
1589    appropriate location.  It's only used in crtstuff.c, else we'd have to
1590    handle (to #undef or ignore it) in a.out.  */
1591 #define HAVE_GAS_HIDDEN 1
1592
1593 #undef  ASM_OUTPUT_INTERNAL_LABEL
1594 #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM)    \
1595   do                                                    \
1596     {                                                   \
1597       asm_fprintf (FILE, "%L%s%d:\n", PREFIX, NUM);     \
1598     }                                                   \
1599   while (0)
1600
1601 /* Remove any previous definition (elfos.h).  */
1602 #undef ASM_GENERATE_INTERNAL_LABEL
1603 #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
1604   sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long) NUM)
1605
1606 #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO)          \
1607   do                                                            \
1608     {                                                           \
1609       (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10);        \
1610       sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO));           \
1611     }                                                           \
1612   while (0)
1613
1614
1615 /* Node: Initialization */
1616 /* (no definitions) */
1617
1618 /* Node: Macros for Initialization */
1619 /* (no definitions) */
1620
1621 /* Node: Instruction Output */
1622
1623 #define REGISTER_NAMES                                  \
1624  {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
1625   "r9", "r10", "r11", "r12", "r13", "sp", "pc", "srp", "faked_ap"}
1626
1627 #define ADDITIONAL_REGISTER_NAMES \
1628  {{"r14", 14}, {"r15", 15}}
1629
1630 #define PRINT_OPERAND(FILE, X, CODE)            \
1631  cris_print_operand (FILE, X, CODE)
1632
1633 /* For delay-slot handling.  */
1634 #define PRINT_OPERAND_PUNCT_VALID_P(CODE) (CODE == '#')
1635
1636 #define PRINT_OPERAND_ADDRESS(FILE, ADDR)       \
1637    cris_print_operand_address (FILE, ADDR)
1638
1639 /* Output an empty line to illustrate the presence of the delay slot.  */
1640 #define DBR_OUTPUT_SEQEND(FILE) \
1641   fprintf (FILE, "\n")
1642
1643 #define LOCAL_LABEL_PREFIX (TARGET_ELF ? "." : "")
1644
1645 /* cppinit.c initializes a const array from this, so it must be constant,
1646    can't have it different based on options.  Luckily, the prefix is
1647    always allowed, so let's have it on all GCC-generated code.  Note that
1648    we have this verbatim everywhere in the back-end, not using %R or %s or
1649    such.  */
1650 #define REGISTER_PREFIX "$"
1651
1652 /* Remove any previous definition (elfos.h).  */
1653 /* We use -fno-leading-underscore to remove it, when necessary.  */
1654 #undef USER_LABEL_PREFIX
1655 #define USER_LABEL_PREFIX "_"
1656
1657 #define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
1658   fprintf (FILE, "\tpush $%s\n", reg_names[REGNO])
1659
1660 #define ASM_OUTPUT_REG_POP(FILE, REGNO) \
1661   fprintf (FILE, "\tpop $%s\n", reg_names[REGNO])
1662
1663
1664 /* Node: Dispatch Tables */
1665
1666 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)        \
1667   asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL)
1668
1669 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
1670   asm_fprintf (FILE, "\t.dword %LL%d\n", VALUE)
1671
1672 /* Defined to also emit an .align in elfos.h.  We don't want that.  */
1673 #undef ASM_OUTPUT_CASE_LABEL
1674
1675 /* Since the "bound" insn loads the comparison value if the compared<
1676    value (register) is out of bounds (0..comparison value-1), we need
1677    to output another case to catch it.
1678    The way to find it is to look for the label_ref at the else-arm inside
1679    the expanded casesi core-insn.
1680    FIXME: Check this construct when changing to new version of gcc.  */
1681 #define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE)                         \
1682   do                                                                    \
1683     {                                                                   \
1684       asm_fprintf (STREAM, "\t.word %LL%d-%LL%d%s\n",                   \
1685                    CODE_LABEL_NUMBER                                    \
1686                     (XEXP (XEXP (XEXP                                   \
1687                                   (XVECEXP                              \
1688                                     (PATTERN (PREV_INSN (PREV_INSN      \
1689                                                           (TABLE))),    \
1690                                      0, 0), 1), 2), 0)),                \
1691                    NUM,                                                 \
1692                    (TARGET_PDEBUG ? "; default" : ""));                 \
1693     }                                                                   \
1694   while (0)
1695
1696
1697 /* Node: Exception Region Output */
1698 /* (no definitions) */
1699 /* FIXME: Fill in with our own optimized layout.  */
1700
1701 /* Node: Alignment Output */
1702
1703 #define ASM_OUTPUT_ALIGN(FILE, LOG)  \
1704  fprintf (FILE, "\t.align %d\n", (LOG))
1705
1706
1707 /* Node: All Debuggers */
1708
1709 #define DBX_REGISTER_NUMBER(REGNO) \
1710  ((REGNO) == CRIS_SRP_REGNUM ? CRIS_CANONICAL_SRP_REGNUM : (REGNO))
1711
1712 /* FIXME: Investigate DEBUGGER_AUTO_OFFSET, DEBUGGER_ARG_OFFSET.  */
1713
1714
1715 /* Node: DBX Options */
1716
1717 /* Is this correct? Check later.  */
1718 #define DBX_NO_XREFS
1719
1720 #define DBX_CONTIN_LENGTH 0
1721
1722 /* FIXME: Is this needed when we have 0 DBX_CONTIN_LENGTH?  */
1723 #define DBX_CONTIN_CHAR '?'
1724
1725
1726 /* Node: DBX Hooks */
1727 /* (no definitions) */
1728
1729 /* Node: File names and DBX */
1730 /* (no definitions) */
1731
1732
1733 /* Node: SDB and DWARF */
1734 /* (no definitions) */
1735
1736 /* Node: Misc */
1737
1738 /* FIXME: Check this one more time.  */
1739 #define PREDICATE_CODES                                 \
1740  {"cris_orthogonal_operator",                           \
1741   {PLUS, MINUS, IOR, AND, UMIN}},                       \
1742  {"cris_commutative_orth_op",                           \
1743   {PLUS, IOR, AND, UMIN}},                              \
1744  {"cris_operand_extend_operator",                       \
1745   {PLUS, MINUS, UMIN}},                                 \
1746  {"cris_extend_operator",                               \
1747   {ZERO_EXTEND, SIGN_EXTEND}},                          \
1748  {"cris_plus_or_bound_operator",                        \
1749   {PLUS, UMIN}},                                        \
1750  {"cris_bdap_operand",                                  \
1751   {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT,  \
1752    CONST_DOUBLE, CONST, SIGN_EXTEND}},                  \
1753  {"cris_bdap_biap_operand",                             \
1754   {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT,  \
1755    CONST_DOUBLE, CONST, SIGN_EXTEND, MULT}},            \
1756  {"cris_general_operand_or_gotless_symbol",             \
1757   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1758    LABEL_REF, SUBREG, REG, MEM}},                       \
1759  {"cris_general_operand_or_symbol",                     \
1760   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1761    LABEL_REF, SUBREG, REG, MEM}},                       \
1762  {"cris_general_operand_or_plt_symbol",                 \
1763   {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,          \
1764    LABEL_REF, SUBREG, REG, MEM}},                       \
1765  {"cris_mem_call_operand",                              \
1766   {MEM}},
1767
1768 /* A combination of the bound (umin) insn together with a
1769    sign-extended add via the table to PC seems optimal.
1770    If the table overflows, the assembler will take care of it.
1771    Theoretically, in extreme cases (uncertain if they occur), an error
1772    will be emitted, so FIXME: Check how large case-tables are emitted,
1773    possible add an option to emit SImode case-tables.  */
1774 #define CASE_VECTOR_MODE HImode
1775
1776 #define CASE_VECTOR_PC_RELATIVE 1
1777
1778 /* FIXME: Investigate CASE_VECTOR_SHORTEN_MODE to make sure HImode is not
1779    used when broken-.word could possibly fail (plus test-case).  */
1780
1781 #define FIXUNS_TRUNC_LIKE_FIX_TRUNC
1782
1783 /* This is the number of bytes that can be moved in one
1784    reasonably fast instruction sequence.  For CRIS, this is two
1785    instructions: mem => reg, reg => mem.  */
1786 #define MOVE_MAX 4
1787
1788 /* Maybe SHIFT_COUNT_TRUNCATED is safe to define?  FIXME: Check later.  */
1789
1790 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
1791
1792 #define STORE_FLAG_VALUE 1
1793
1794 #define Pmode SImode
1795
1796 #define FUNCTION_MODE QImode
1797
1798 #define NO_IMPLICIT_EXTERN_C
1799
1800 /*
1801  * Local variables:
1802  * eval: (c-set-style "gnu")
1803  * indent-tabs-mode: t
1804  * End:
1805  */