OSDN Git Service

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