| 1 |
282 |
jeremybenn |
/* Definitions for GCC. Part of the machine description for CRIS.
|
| 2 |
|
|
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
|
| 3 |
|
|
2009 Free Software Foundation, Inc.
|
| 4 |
|
|
Contributed by Axis Communications. Written by Hans-Peter Nilsson.
|
| 5 |
|
|
|
| 6 |
|
|
This file is part of GCC.
|
| 7 |
|
|
|
| 8 |
|
|
GCC is free software; you can redistribute it and/or modify
|
| 9 |
|
|
it under the terms of the GNU General Public License as published by
|
| 10 |
|
|
the Free Software Foundation; either version 3, or (at your option)
|
| 11 |
|
|
any later version.
|
| 12 |
|
|
|
| 13 |
|
|
GCC is distributed in the hope that it will be useful,
|
| 14 |
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 15 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 16 |
|
|
GNU General Public License for more details.
|
| 17 |
|
|
|
| 18 |
|
|
You should have received a copy of the GNU General Public License
|
| 19 |
|
|
along with GCC; see the file COPYING3. If not see
|
| 20 |
|
|
<http://www.gnu.org/licenses/>. */
|
| 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 |
|
|
/* We don't want to use gcc_assert for everything, as that can be
|
| 41 |
|
|
compiled out. */
|
| 42 |
|
|
#define CRIS_ASSERT(x) \
|
| 43 |
|
|
do { if (!(x)) internal_error ("CRIS-port assertion failed: " #x); } while (0)
|
| 44 |
|
|
|
| 45 |
|
|
/* Replacement for REG_P since it does not match SUBREGs. Happens for
|
| 46 |
|
|
testcase Axis-20000320 with gcc-2.9x. */
|
| 47 |
|
|
#define REG_S_P(x) \
|
| 48 |
|
|
(REG_P (x) || (GET_CODE (x) == SUBREG && REG_P (XEXP (x, 0))))
|
| 49 |
|
|
|
| 50 |
|
|
/* Last register in main register bank r0..r15. */
|
| 51 |
|
|
#define CRIS_LAST_GENERAL_REGISTER 15
|
| 52 |
|
|
|
| 53 |
|
|
/* Descriptions of registers used for arguments. */
|
| 54 |
|
|
#define CRIS_FIRST_ARG_REG 10
|
| 55 |
|
|
#define CRIS_MAX_ARGS_IN_REGS 4
|
| 56 |
|
|
|
| 57 |
|
|
/* See also *_REGNUM constants in cris.md. */
|
| 58 |
|
|
|
| 59 |
|
|
/* Most of the time, we need the index into the register-names array.
|
| 60 |
|
|
When passing debug-info, we need the real hardware register number. */
|
| 61 |
|
|
#define CRIS_CANONICAL_SRP_REGNUM (16 + 11)
|
| 62 |
|
|
#define CRIS_CANONICAL_MOF_REGNUM (16 + 7)
|
| 63 |
|
|
/* We have CCR in all models including v10, but that's 16 bits, so let's
|
| 64 |
|
|
prefer the DCCR number, which is a DMA pointer in pre-v8, so we'll
|
| 65 |
|
|
never clash with it for GCC purposes. */
|
| 66 |
|
|
#define CRIS_CANONICAL_CC0_REGNUM (16 + 13)
|
| 67 |
|
|
|
| 68 |
|
|
/* When generating PIC, these suffixes are added to the names of non-local
|
| 69 |
|
|
functions when being output. Contrary to other ports, we have offsets
|
| 70 |
|
|
relative to the GOT, not the PC. We might implement PC-relative PLT
|
| 71 |
|
|
semantics later for the general case; they are used in some cases right
|
| 72 |
|
|
now, such as MI thunks. */
|
| 73 |
|
|
#define CRIS_GOTPLT_SUFFIX ":GOTPLT"
|
| 74 |
|
|
#define CRIS_PLT_GOTOFFSET_SUFFIX ":PLTG"
|
| 75 |
|
|
#define CRIS_PLT_PCOFFSET_SUFFIX ":PLT"
|
| 76 |
|
|
|
| 77 |
|
|
#define CRIS_FUNCTION_ARG_SIZE(MODE, TYPE) \
|
| 78 |
|
|
((MODE) != BLKmode ? GET_MODE_SIZE (MODE) \
|
| 79 |
|
|
: (unsigned) int_size_in_bytes (TYPE))
|
| 80 |
|
|
|
| 81 |
|
|
/* Which CPU version this is. The parsed and adjusted cris_cpu_str. */
|
| 82 |
|
|
extern int cris_cpu_version;
|
| 83 |
|
|
|
| 84 |
|
|
/* Changing the order used to be necessary to put the fourth __make_dp
|
| 85 |
|
|
argument (a DImode parameter) in registers, to fit with the libfunc
|
| 86 |
|
|
parameter passing scheme used for intrinsic functions. FIXME: Check
|
| 87 |
|
|
performance and maybe remove definition from TARGET_LIBGCC2_CFLAGS now
|
| 88 |
|
|
that it isn't strictly necessary. We used to do this through
|
| 89 |
|
|
TARGET_LIBGCC2_CFLAGS, but that became increasingly difficult as the
|
| 90 |
|
|
parenthesis (that needed quoting) travels through several layers of
|
| 91 |
|
|
make and shell invocations. */
|
| 92 |
|
|
#ifdef IN_LIBGCC2
|
| 93 |
|
|
#define __make_dp(a,b,c,d) __cris_make_dp(d,a,b,c)
|
| 94 |
|
|
#endif
|
| 95 |
|
|
|
| 96 |
|
|
|
| 97 |
|
|
/* Node: Driver */
|
| 98 |
|
|
|
| 99 |
|
|
/* When using make with defaults.mak for Sun this will handily remove
|
| 100 |
|
|
any "-target sun*" switches. */
|
| 101 |
|
|
/* We need to override any previous definitions (linux.h) */
|
| 102 |
|
|
#undef WORD_SWITCH_TAKES_ARG
|
| 103 |
|
|
#define WORD_SWITCH_TAKES_ARG(STR) \
|
| 104 |
|
|
(DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \
|
| 105 |
|
|
|| !strcmp (STR, "target"))
|
| 106 |
|
|
|
| 107 |
|
|
/* Also provide canonical vN definitions when user specifies an alias.
|
| 108 |
|
|
Note that -melf overrides -maout. */
|
| 109 |
|
|
|
| 110 |
|
|
#define CPP_SPEC \
|
| 111 |
|
|
"%{mtune=*:-D__tune_%* %{mtune=v*:-D__CRIS_arch_tune=%*}\
|
| 112 |
|
|
%{mtune=etrax4:-D__tune_v3 -D__CRIS_arch_tune=3}\
|
| 113 |
|
|
%{mtune=etrax100:-D__tune_v8 -D__CRIS_arch_tune=8}\
|
| 114 |
|
|
%{mtune=svinto:-D__tune_v8 -D__CRIS_arch_tune=8}\
|
| 115 |
|
|
%{mtune=etrax100lx:-D__tune_v10 -D__CRIS_arch_tune=10}\
|
| 116 |
|
|
%{mtune=ng:-D__tune_v10 -D__CRIS_arch_tune=10}}\
|
| 117 |
|
|
%{mcpu=*:-D__arch_%* %{mcpu=v*:-D__CRIS_arch_version=%*}\
|
| 118 |
|
|
%{mcpu=etrax4:-D__arch_v3 -D__CRIS_arch_version=3}\
|
| 119 |
|
|
%{mcpu=etrax100:-D__arch_v8 -D__CRIS_arch_version=8}\
|
| 120 |
|
|
%{mcpu=svinto:-D__arch_v8 -D__CRIS_arch_version=8}\
|
| 121 |
|
|
%{mcpu=etrax100lx:-D__arch_v10 -D__CRIS_arch_version=10}\
|
| 122 |
|
|
%{mcpu=ng:-D__arch_v10 -D__CRIS_arch_version=10}}\
|
| 123 |
|
|
%{march=*:-D__arch_%* %{march=v*:-D__CRIS_arch_version=%*}\
|
| 124 |
|
|
%{march=etrax4:-D__arch_v3 -D__CRIS_arch_version=3}\
|
| 125 |
|
|
%{march=etrax100:-D__arch_v8 -D__CRIS_arch_version=8}\
|
| 126 |
|
|
%{march=svinto:-D__arch_v8 -D__CRIS_arch_version=8}\
|
| 127 |
|
|
%{march=etrax100lx:-D__arch_v10 -D__CRIS_arch_version=10}\
|
| 128 |
|
|
%{march=ng:-D__arch_v10 -D__CRIS_arch_version=10}}\
|
| 129 |
|
|
%{metrax100:-D__arch__v8 -D__CRIS_arch_version=8}\
|
| 130 |
|
|
%{metrax4:-D__arch__v3 -D__CRIS_arch_version=3}\
|
| 131 |
|
|
%(cpp_subtarget)"
|
| 132 |
|
|
|
| 133 |
|
|
/* For the cris-*-elf subtarget. */
|
| 134 |
|
|
|
| 135 |
|
|
#define CRIS_DEFAULT_TUNE "10"
|
| 136 |
|
|
#define CRIS_ARCH_CPP_DEFAULT
|
| 137 |
|
|
#define CRIS_DEFAULT_ASM_ARCH_OPTION ""
|
| 138 |
|
|
|
| 139 |
|
|
#ifdef TARGET_CPU_DEFAULT
|
| 140 |
|
|
#if TARGET_CPU_DEFAULT != 32 && TARGET_CPU_DEFAULT != 10
|
| 141 |
|
|
#error "Due to '()'; e.g. '#define TARGET_CPU_DEFAULT (10)', stringize TARGET_CPU_DEFAULT isn't useful: update manually."
|
| 142 |
|
|
#endif
|
| 143 |
|
|
|
| 144 |
|
|
#if TARGET_CPU_DEFAULT == 32
|
| 145 |
|
|
#undef CRIS_DEFAULT_TUNE
|
| 146 |
|
|
#define CRIS_DEFAULT_TUNE "32"
|
| 147 |
|
|
/* To enable use of "generic" cris-axis-elf binutils, always pass the
|
| 148 |
|
|
architecture option to GAS. (We don't do this for non-v32.) */
|
| 149 |
|
|
#undef CRIS_DEFAULT_ASM_ARCH_OPTION
|
| 150 |
|
|
#define CRIS_DEFAULT_ASM_ARCH_OPTION "--march=v32"
|
| 151 |
|
|
#endif
|
| 152 |
|
|
|
| 153 |
|
|
#undef CRIS_ARCH_CPP_DEFAULT
|
| 154 |
|
|
#define CRIS_ARCH_CPP_DEFAULT \
|
| 155 |
|
|
"%{!march=*:\
|
| 156 |
|
|
%{!metrax*:\
|
| 157 |
|
|
%{!mcpu=*:\
|
| 158 |
|
|
%{!mtune=*:-D__tune_v" CRIS_DEFAULT_TUNE "}\
|
| 159 |
|
|
-D__arch_v"CRIS_DEFAULT_TUNE\
|
| 160 |
|
|
" -D__CRIS_arch_version=" CRIS_DEFAULT_TUNE "}}}"
|
| 161 |
|
|
#endif
|
| 162 |
|
|
|
| 163 |
|
|
#define CRIS_CPP_SUBTARGET_SPEC \
|
| 164 |
|
|
"%{mbest-lib-options:\
|
| 165 |
|
|
%{!moverride-best-lib-options:\
|
| 166 |
|
|
%{!march=*:%{!metrax*:%{!mcpu=*:\
|
| 167 |
|
|
-D__tune_v" CRIS_DEFAULT_TUNE \
|
| 168 |
|
|
" -D__CRIS_arch_tune=" CRIS_DEFAULT_TUNE "}}}}}"\
|
| 169 |
|
|
CRIS_ARCH_CPP_DEFAULT
|
| 170 |
|
|
|
| 171 |
|
|
/* Remove those Sun-make "target" switches. */
|
| 172 |
|
|
/* Override previous definitions (linux.h). */
|
| 173 |
|
|
#undef CC1_SPEC
|
| 174 |
|
|
#define CC1_SPEC \
|
| 175 |
|
|
"%{target*:}\
|
| 176 |
|
|
%{metrax4:-march=v3}\
|
| 177 |
|
|
%{metrax100:-march=v8}\
|
| 178 |
|
|
%(cc1_subtarget)"
|
| 179 |
|
|
|
| 180 |
|
|
/* For the cris-*-elf subtarget. */
|
| 181 |
|
|
#define CRIS_CC1_SUBTARGET_SPEC \
|
| 182 |
|
|
"-melf\
|
| 183 |
|
|
%{mbest-lib-options:\
|
| 184 |
|
|
%{!moverride-best-lib-options:\
|
| 185 |
|
|
%{!march=*:%{!mcpu=*:-mtune=v" CRIS_DEFAULT_TUNE\
|
| 186 |
|
|
" -D__CRIS_arch_tune=" CRIS_DEFAULT_TUNE "}}\
|
| 187 |
|
|
%{!finhibit-size-directive:\
|
| 188 |
|
|
%{!fno-function-sections: -ffunction-sections}\
|
| 189 |
|
|
%{!fno-data-sections: -fdata-sections}}}}"
|
| 190 |
|
|
|
| 191 |
|
|
/* This adds to CC1_SPEC. */
|
| 192 |
|
|
#define CC1PLUS_SPEC ""
|
| 193 |
|
|
|
| 194 |
|
|
#ifdef HAVE_AS_NO_MUL_BUG_ABORT_OPTION
|
| 195 |
|
|
#define MAYBE_AS_NO_MUL_BUG_ABORT \
|
| 196 |
|
|
"%{mno-mul-bug-workaround:-no-mul-bug-abort} "
|
| 197 |
|
|
#else
|
| 198 |
|
|
#define MAYBE_AS_NO_MUL_BUG_ABORT
|
| 199 |
|
|
#endif
|
| 200 |
|
|
|
| 201 |
|
|
/* Override previous definitions (linux.h). */
|
| 202 |
|
|
#undef ASM_SPEC
|
| 203 |
|
|
#define ASM_SPEC \
|
| 204 |
|
|
MAYBE_AS_NO_MUL_BUG_ABORT \
|
| 205 |
|
|
"%{v:-v}\
|
| 206 |
|
|
%(asm_subtarget)\
|
| 207 |
|
|
%{march=*:%{cpu=*:%eDo not specify both -march=... and -mcpu=...}}\
|
| 208 |
|
|
%{march=v32:--march=v32} %{mcpu=v32:--march=v32}"
|
| 209 |
|
|
|
| 210 |
|
|
/* For the cris-*-elf subtarget. */
|
| 211 |
|
|
#define CRIS_ASM_SUBTARGET_SPEC \
|
| 212 |
|
|
"--em=criself %{!march=*:%{!cpu=*:" CRIS_DEFAULT_ASM_ARCH_OPTION "}}"
|
| 213 |
|
|
|
| 214 |
|
|
/* FIXME: We should propagate the -melf option to make the criself
|
| 215 |
|
|
"emulation" unless a linker script is provided (-T*), but I don't know
|
| 216 |
|
|
how to do that if either of -Ttext, -Tdata or -Tbss is given but no
|
| 217 |
|
|
linker script, as is usually the case. Leave it to the user for the
|
| 218 |
|
|
time being.
|
| 219 |
|
|
|
| 220 |
|
|
Note that -melf overrides -maout except that a.out-compiled libraries
|
| 221 |
|
|
are linked in (multilibbing). The somewhat cryptic -rpath-link pair is
|
| 222 |
|
|
to avoid *only* picking up the linux multilib subdir from the "-B./"
|
| 223 |
|
|
option during build, while still giving it preference. We'd need some
|
| 224 |
|
|
%s-variant that checked for existence of some specific file. */
|
| 225 |
|
|
/* Override previous definitions (svr4.h). */
|
| 226 |
|
|
#undef LINK_SPEC
|
| 227 |
|
|
#define LINK_SPEC \
|
| 228 |
|
|
"%{v:--verbose}\
|
| 229 |
|
|
%(link_subtarget)"
|
| 230 |
|
|
|
| 231 |
|
|
/* For the cris-*-elf subtarget. */
|
| 232 |
|
|
#define CRIS_LINK_SUBTARGET_SPEC \
|
| 233 |
|
|
"-mcriself\
|
| 234 |
|
|
%{sim2:%{!T*:-Tdata 0x4000000 -Tbss 0x8000000}}\
|
| 235 |
|
|
%{!r:%{O2|O3: --gc-sections}}"
|
| 236 |
|
|
|
| 237 |
|
|
/* Which library to get. The simulator uses a different library for
|
| 238 |
|
|
the low-level syscalls (implementing the Linux syscall ABI instead
|
| 239 |
|
|
of direct-iron accesses). Default everything with the stub "nosys"
|
| 240 |
|
|
library. */
|
| 241 |
|
|
/* Override previous definitions (linux.h). */
|
| 242 |
|
|
#undef LIB_SPEC
|
| 243 |
|
|
#define LIB_SPEC \
|
| 244 |
|
|
"%{sim*:--start-group -lc -lsyslinux --end-group}\
|
| 245 |
|
|
%{!sim*:%{g*:-lg}\
|
| 246 |
|
|
%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} -lbsp}\
|
| 247 |
|
|
-lnosys"
|
| 248 |
|
|
|
| 249 |
|
|
/* Linker startfile options; crt0 flavors.
|
| 250 |
|
|
We need to remove any previous definition (elfos.h). */
|
| 251 |
|
|
#undef STARTFILE_SPEC
|
| 252 |
|
|
#define STARTFILE_SPEC \
|
| 253 |
|
|
"%{sim*:crt1.o%s}%{!sim*:crt0.o%s}\
|
| 254 |
|
|
crti.o%s crtbegin.o%s"
|
| 255 |
|
|
|
| 256 |
|
|
#undef ENDFILE_SPEC
|
| 257 |
|
|
#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
|
| 258 |
|
|
|
| 259 |
|
|
#define EXTRA_SPECS \
|
| 260 |
|
|
{"cpp_subtarget", CRIS_CPP_SUBTARGET_SPEC}, \
|
| 261 |
|
|
{"cc1_subtarget", CRIS_CC1_SUBTARGET_SPEC}, \
|
| 262 |
|
|
{"asm_subtarget", CRIS_ASM_SUBTARGET_SPEC}, \
|
| 263 |
|
|
{"link_subtarget", CRIS_LINK_SUBTARGET_SPEC}, \
|
| 264 |
|
|
CRIS_SUBTARGET_EXTRA_SPECS
|
| 265 |
|
|
|
| 266 |
|
|
#define CRIS_SUBTARGET_EXTRA_SPECS
|
| 267 |
|
|
|
| 268 |
|
|
|
| 269 |
|
|
/* Node: Run-time Target */
|
| 270 |
|
|
|
| 271 |
|
|
#define TARGET_CPU_CPP_BUILTINS() \
|
| 272 |
|
|
do \
|
| 273 |
|
|
{ \
|
| 274 |
|
|
builtin_define_std ("cris"); \
|
| 275 |
|
|
builtin_define_std ("CRIS"); \
|
| 276 |
|
|
builtin_define_std ("GNU_CRIS"); \
|
| 277 |
|
|
builtin_define ("__CRIS_ABI_version=2"); \
|
| 278 |
|
|
builtin_assert ("cpu=cris"); \
|
| 279 |
|
|
builtin_assert ("machine=cris"); \
|
| 280 |
|
|
} \
|
| 281 |
|
|
while (0)
|
| 282 |
|
|
|
| 283 |
|
|
/* This needs to be at least 32 bits. */
|
| 284 |
|
|
extern int target_flags;
|
| 285 |
|
|
|
| 286 |
|
|
/* Previously controlled by target_flags. */
|
| 287 |
|
|
#define TARGET_ELF 1
|
| 288 |
|
|
|
| 289 |
|
|
/* Previously controlled by target_flags. Note that this is *not* set
|
| 290 |
|
|
for -melinux. */
|
| 291 |
|
|
#define TARGET_LINUX 0
|
| 292 |
|
|
|
| 293 |
|
|
/* For the cris-*-elf subtarget. */
|
| 294 |
|
|
#define CRIS_SUBTARGET_DEFAULT 0
|
| 295 |
|
|
|
| 296 |
|
|
#define CRIS_CPU_BASE 0
|
| 297 |
|
|
#define CRIS_CPU_ETRAX4 3 /* Just lz added. */
|
| 298 |
|
|
#define CRIS_CPU_SVINTO 8 /* Added swap, jsrc & Co., 32-bit accesses. */
|
| 299 |
|
|
#define CRIS_CPU_NG 10 /* Added mul[su]. */
|
| 300 |
|
|
#define CRIS_CPU_V32 32 /* Major changes. */
|
| 301 |
|
|
|
| 302 |
|
|
#ifndef TARGET_CPU_DEFAULT
|
| 303 |
|
|
#define TARGET_CPU_DEFAULT CRIS_CPU_BASE
|
| 304 |
|
|
#endif
|
| 305 |
|
|
|
| 306 |
|
|
/* Default target_flags if no switches specified. */
|
| 307 |
|
|
#ifndef TARGET_DEFAULT
|
| 308 |
|
|
# if TARGET_CPU_DEFAULT == 32
|
| 309 |
|
|
# define TARGET_DEFAULT \
|
| 310 |
|
|
(MASK_STACK_ALIGN \
|
| 311 |
|
|
+ MASK_CONST_ALIGN + MASK_DATA_ALIGN \
|
| 312 |
|
|
+ MASK_PROLOGUE_EPILOGUE)
|
| 313 |
|
|
# else /* 10 */
|
| 314 |
|
|
# define TARGET_DEFAULT \
|
| 315 |
|
|
(MASK_SIDE_EFFECT_PREFIXES + MASK_STACK_ALIGN \
|
| 316 |
|
|
+ MASK_CONST_ALIGN + MASK_DATA_ALIGN \
|
| 317 |
|
|
+ MASK_PROLOGUE_EPILOGUE + MASK_MUL_BUG)
|
| 318 |
|
|
# endif
|
| 319 |
|
|
#endif
|
| 320 |
|
|
|
| 321 |
|
|
/* Local, providing a default for cris_cpu_version. */
|
| 322 |
|
|
#define CRIS_DEFAULT_CPU_VERSION TARGET_CPU_DEFAULT
|
| 323 |
|
|
|
| 324 |
|
|
#define TARGET_HAS_MUL_INSNS (cris_cpu_version >= CRIS_CPU_NG)
|
| 325 |
|
|
#define TARGET_HAS_LZ (cris_cpu_version >= CRIS_CPU_ETRAX4)
|
| 326 |
|
|
#define TARGET_HAS_SWAP (cris_cpu_version >= CRIS_CPU_SVINTO)
|
| 327 |
|
|
#define TARGET_V32 (cris_cpu_version >= CRIS_CPU_V32)
|
| 328 |
|
|
|
| 329 |
|
|
#define CRIS_SUBTARGET_HANDLE_OPTION(x, y, z)
|
| 330 |
|
|
|
| 331 |
|
|
#define OVERRIDE_OPTIONS cris_override_options ()
|
| 332 |
|
|
|
| 333 |
|
|
#define OPTIMIZATION_OPTIONS(OPTIMIZE, SIZE) \
|
| 334 |
|
|
do \
|
| 335 |
|
|
{ \
|
| 336 |
|
|
if ((OPTIMIZE) >= 2 || (SIZE)) \
|
| 337 |
|
|
flag_omit_frame_pointer = 1; \
|
| 338 |
|
|
} \
|
| 339 |
|
|
while (0)
|
| 340 |
|
|
|
| 341 |
|
|
|
| 342 |
|
|
/* Node: Storage Layout */
|
| 343 |
|
|
|
| 344 |
|
|
#define BITS_BIG_ENDIAN 0
|
| 345 |
|
|
|
| 346 |
|
|
#define BYTES_BIG_ENDIAN 0
|
| 347 |
|
|
|
| 348 |
|
|
/* WORDS_BIG_ENDIAN is not defined in the hardware, but for consistency,
|
| 349 |
|
|
we use little-endianness, and we may also be able to use
|
| 350 |
|
|
post-increment on DImode indirect. */
|
| 351 |
|
|
#define WORDS_BIG_ENDIAN 0
|
| 352 |
|
|
|
| 353 |
|
|
#define UNITS_PER_WORD 4
|
| 354 |
|
|
|
| 355 |
|
|
#define CRIS_PROMOTED_MODE(MODE, UNSIGNEDP, TYPE) \
|
| 356 |
|
|
(GET_MODE_CLASS (MODE) == MODE_INT && GET_MODE_SIZE (MODE) < 4) \
|
| 357 |
|
|
? SImode : MODE
|
| 358 |
|
|
|
| 359 |
|
|
/* We will be using prototype promotion, so they will be 32 bit. */
|
| 360 |
|
|
#define PARM_BOUNDARY 32
|
| 361 |
|
|
|
| 362 |
|
|
/* Stack boundary is guided by -mstack-align, -mno-stack-align,
|
| 363 |
|
|
-malign.
|
| 364 |
|
|
Old comment: (2.1: still valid in 2.7.2?)
|
| 365 |
|
|
Note that to make this macro affect the alignment of stack
|
| 366 |
|
|
locals, a fix was required, and special precautions when handling
|
| 367 |
|
|
the stack pointer in various other macros (TARGET_ASM_FUNCTION_PROLOGUE
|
| 368 |
|
|
et al) were required. See file "function.c". If you would just define
|
| 369 |
|
|
this macro, it would only affect the builtin alloca and variable
|
| 370 |
|
|
local data (non-ANSI, non-K&R, Gnu C extension). */
|
| 371 |
|
|
#define STACK_BOUNDARY \
|
| 372 |
|
|
(TARGET_STACK_ALIGN ? (TARGET_ALIGN_BY_32 ? 32 : 16) : 8)
|
| 373 |
|
|
|
| 374 |
|
|
#define FUNCTION_BOUNDARY 16
|
| 375 |
|
|
|
| 376 |
|
|
/* Do not change BIGGEST_ALIGNMENT (when optimizing), as it will affect
|
| 377 |
|
|
strange places, at least in 2.1. */
|
| 378 |
|
|
#define BIGGEST_ALIGNMENT 8
|
| 379 |
|
|
|
| 380 |
|
|
/* If -m16bit, -m16-bit, -malign or -mdata-align,
|
| 381 |
|
|
align everything to 16 bit. */
|
| 382 |
|
|
#define DATA_ALIGNMENT(TYPE, BASIC_ALIGN) \
|
| 383 |
|
|
(TARGET_DATA_ALIGN \
|
| 384 |
|
|
? (TARGET_ALIGN_BY_32 \
|
| 385 |
|
|
? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN) \
|
| 386 |
|
|
: (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN)
|
| 387 |
|
|
|
| 388 |
|
|
/* Note that CONSTANT_ALIGNMENT has the effect of making gcc believe that
|
| 389 |
|
|
ALL references to constant stuff (in code segment, like strings) has
|
| 390 |
|
|
this alignment. That is a rather rushed assumption. Luckily we do not
|
| 391 |
|
|
care about the "alignment" operand to builtin memcpy (only place where
|
| 392 |
|
|
it counts), so it doesn't affect any bad spots. */
|
| 393 |
|
|
#define CONSTANT_ALIGNMENT(CONSTANT, BASIC_ALIGN) \
|
| 394 |
|
|
(TARGET_CONST_ALIGN \
|
| 395 |
|
|
? (TARGET_ALIGN_BY_32 \
|
| 396 |
|
|
? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN) \
|
| 397 |
|
|
: (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN)
|
| 398 |
|
|
|
| 399 |
|
|
/* FIXME: Define LOCAL_ALIGNMENT for word and dword or arrays and
|
| 400 |
|
|
structures (if -mstack-align=), and check that it is good. */
|
| 401 |
|
|
|
| 402 |
|
|
#define EMPTY_FIELD_BOUNDARY 8
|
| 403 |
|
|
|
| 404 |
|
|
#define STRUCTURE_SIZE_BOUNDARY 8
|
| 405 |
|
|
|
| 406 |
|
|
#define STRICT_ALIGNMENT 0
|
| 407 |
|
|
|
| 408 |
|
|
/* Remove any previous definition (elfos.h).
|
| 409 |
|
|
??? If it wasn't for all the other stuff that affects layout of
|
| 410 |
|
|
structures and bit-fields, this could presumably cause incompatibility
|
| 411 |
|
|
with other GNU/Linux ports (i.e. elfos.h users). */
|
| 412 |
|
|
#undef PCC_BITFIELD_TYPE_MATTERS
|
| 413 |
|
|
|
| 414 |
|
|
/* This is only used for non-scalars. Strange stuff happens to structs
|
| 415 |
|
|
(FIXME: What?) if we use anything larger than largest actually used
|
| 416 |
|
|
datum size, so lets make it 32. The type "long long" will still work
|
| 417 |
|
|
as usual. We can still have DImode insns, but they will only be used
|
| 418 |
|
|
for scalar data (i.e. long long). */
|
| 419 |
|
|
#define MAX_FIXED_MODE_SIZE 32
|
| 420 |
|
|
|
| 421 |
|
|
|
| 422 |
|
|
/* Node: Type Layout */
|
| 423 |
|
|
|
| 424 |
|
|
/* Note that DOUBLE_TYPE_SIZE is not defined anymore, since the default
|
| 425 |
|
|
value gives a 64-bit double, which is what we now use. */
|
| 426 |
|
|
|
| 427 |
|
|
/* For compatibility and historical reasons, a char should be signed. */
|
| 428 |
|
|
#define DEFAULT_SIGNED_CHAR 1
|
| 429 |
|
|
|
| 430 |
|
|
/* Note that WCHAR_TYPE_SIZE is used in cexp.y,
|
| 431 |
|
|
where TARGET_SHORT is not available. */
|
| 432 |
|
|
#undef WCHAR_TYPE
|
| 433 |
|
|
#define WCHAR_TYPE "long int"
|
| 434 |
|
|
|
| 435 |
|
|
#undef WCHAR_TYPE_SIZE
|
| 436 |
|
|
#define WCHAR_TYPE_SIZE 32
|
| 437 |
|
|
|
| 438 |
|
|
|
| 439 |
|
|
/* Node: Register Basics */
|
| 440 |
|
|
|
| 441 |
|
|
/* We count all 16 non-special registers, SRP, a faked argument
|
| 442 |
|
|
pointer register, MOF and CCR/DCCR. */
|
| 443 |
|
|
#define FIRST_PSEUDO_REGISTER (16 + 1 + 1 + 1 + 1)
|
| 444 |
|
|
|
| 445 |
|
|
/* For CRIS, these are r15 (pc) and r14 (sp). Register r8 is used as a
|
| 446 |
|
|
frame-pointer, but is not fixed. SRP is not included in general
|
| 447 |
|
|
registers and will not be used automatically. All other special
|
| 448 |
|
|
registers are fixed at the moment. The faked argument pointer register
|
| 449 |
|
|
is fixed too. */
|
| 450 |
|
|
#define FIXED_REGISTERS \
|
| 451 |
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0}
|
| 452 |
|
|
|
| 453 |
|
|
/* Register r9 is used for structure-address, r10-r13 for parameters,
|
| 454 |
|
|
r10- for return values. */
|
| 455 |
|
|
#define CALL_USED_REGISTERS \
|
| 456 |
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1}
|
| 457 |
|
|
|
| 458 |
|
|
#define CONDITIONAL_REGISTER_USAGE cris_conditional_register_usage ()
|
| 459 |
|
|
|
| 460 |
|
|
|
| 461 |
|
|
/* Node: Allocation Order */
|
| 462 |
|
|
|
| 463 |
|
|
/* We need this on CRIS, because call-used regs should be used first,
|
| 464 |
|
|
(so we don't need to push). Else start using registers from r0 and up.
|
| 465 |
|
|
This preference is mainly because if we put call-used-regs from r0
|
| 466 |
|
|
and up, then we can't use movem to push the rest, (which have to be
|
| 467 |
|
|
saved if we use them, and movem has to start with r0).
|
| 468 |
|
|
Change here if you change which registers to use as call registers.
|
| 469 |
|
|
|
| 470 |
|
|
The actual need to explicitly prefer call-used registers improved the
|
| 471 |
|
|
situation a lot for 2.1, but might not actually be needed anymore.
|
| 472 |
|
|
Still, this order reflects what GCC should find out by itself, so it
|
| 473 |
|
|
probably does not hurt.
|
| 474 |
|
|
|
| 475 |
|
|
Order of preference: Call-used-regs first, then r0 and up, last fp &
|
| 476 |
|
|
sp & pc as fillers.
|
| 477 |
|
|
Call-used regs in opposite order, so they will cause less conflict if
|
| 478 |
|
|
a function has few args (<= 3) and it wants a scratch reg.
|
| 479 |
|
|
Use struct-return address first, since very few functions use
|
| 480 |
|
|
structure return values so it is likely to be available. */
|
| 481 |
|
|
#define REG_ALLOC_ORDER \
|
| 482 |
|
|
{9, 13, 12, 11, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 17, 16, 18, 19}
|
| 483 |
|
|
|
| 484 |
|
|
/* Use MOF and ACR. Prefer ACR before any other register. Prefer MOF
|
| 485 |
|
|
then SRP after saved registers. The *after* is because they're only
|
| 486 |
|
|
useful for storage, not for things being computed, which is
|
| 487 |
|
|
apparently more common. */
|
| 488 |
|
|
#define REG_ALLOC_ORDER_V32 \
|
| 489 |
|
|
{15, 9, 13, 12, 11, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 17, 16, 14, 18, 19}
|
| 490 |
|
|
|
| 491 |
|
|
|
| 492 |
|
|
/* Node: Values in Registers */
|
| 493 |
|
|
|
| 494 |
|
|
/* The VOIDmode test is so we can omit mode on anonymous insns. FIXME:
|
| 495 |
|
|
Still needed in 2.9x, at least for Axis-20000319. */
|
| 496 |
|
|
#define HARD_REGNO_NREGS(REGNO, MODE) \
|
| 497 |
|
|
(MODE == VOIDmode \
|
| 498 |
|
|
? 1 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
|
| 499 |
|
|
|
| 500 |
|
|
/* CRIS permits all registers to hold all modes. Well, except for the
|
| 501 |
|
|
condition-code register. And we can't hold larger-than-register size
|
| 502 |
|
|
modes in the last special register that can hold a full 32 bits. */
|
| 503 |
|
|
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
|
| 504 |
|
|
(((MODE) == CCmode \
|
| 505 |
|
|
|| (REGNO) != CRIS_CC0_REGNUM) \
|
| 506 |
|
|
&& (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
|
| 507 |
|
|
|| ((REGNO) != CRIS_MOF_REGNUM && (REGNO) != CRIS_ACR_REGNUM)))
|
| 508 |
|
|
|
| 509 |
|
|
/* Because CCmode isn't covered by the "narrower mode" statement in
|
| 510 |
|
|
tm.texi, we can still say all modes are tieable despite not having an
|
| 511 |
|
|
always 1 HARD_REGNO_MODE_OK. */
|
| 512 |
|
|
#define MODES_TIEABLE_P(MODE1, MODE2) 1
|
| 513 |
|
|
|
| 514 |
|
|
|
| 515 |
|
|
/* Node: Leaf Functions */
|
| 516 |
|
|
/* (no definitions) */
|
| 517 |
|
|
|
| 518 |
|
|
/* Node: Stack Registers */
|
| 519 |
|
|
/* (no definitions) */
|
| 520 |
|
|
|
| 521 |
|
|
|
| 522 |
|
|
/* Node: Register Classes */
|
| 523 |
|
|
|
| 524 |
|
|
/* FIXME: A separate class for the return register would make sense.
|
| 525 |
|
|
|
| 526 |
|
|
We need a separate register class to handle register allocation for
|
| 527 |
|
|
ACR, since it can't be used for post-increment.
|
| 528 |
|
|
|
| 529 |
|
|
It's not obvious, but having subunions of all movable-between
|
| 530 |
|
|
register classes does really help register allocation. */
|
| 531 |
|
|
enum reg_class
|
| 532 |
|
|
{
|
| 533 |
|
|
NO_REGS,
|
| 534 |
|
|
ACR_REGS, MOF_REGS, CC0_REGS, SPECIAL_REGS,
|
| 535 |
|
|
SPEC_ACR_REGS, GENNONACR_REGS,
|
| 536 |
|
|
SPEC_GENNONACR_REGS, GENERAL_REGS,
|
| 537 |
|
|
ALL_REGS,
|
| 538 |
|
|
LIM_REG_CLASSES
|
| 539 |
|
|
};
|
| 540 |
|
|
|
| 541 |
|
|
#define N_REG_CLASSES (int) LIM_REG_CLASSES
|
| 542 |
|
|
|
| 543 |
|
|
#define REG_CLASS_NAMES \
|
| 544 |
|
|
{"NO_REGS", \
|
| 545 |
|
|
"ACR_REGS", "MOF_REGS", "CC0_REGS", "SPECIAL_REGS", \
|
| 546 |
|
|
"SPEC_ACR_REGS", "GENNONACR_REGS", "SPEC_GENNONACR_REGS", \
|
| 547 |
|
|
"GENERAL_REGS", "ALL_REGS"}
|
| 548 |
|
|
|
| 549 |
|
|
#define CRIS_SPECIAL_REGS_CONTENTS \
|
| 550 |
|
|
((1 << CRIS_SRP_REGNUM) | (1 << CRIS_MOF_REGNUM) | (1 << CRIS_CC0_REGNUM))
|
| 551 |
|
|
|
| 552 |
|
|
/* Count in the faked argument register in GENERAL_REGS. Keep out SRP. */
|
| 553 |
|
|
#define REG_CLASS_CONTENTS \
|
| 554 |
|
|
{ \
|
| 555 |
|
|
{0}, \
|
| 556 |
|
|
{1 << CRIS_ACR_REGNUM}, \
|
| 557 |
|
|
{1 << CRIS_MOF_REGNUM}, \
|
| 558 |
|
|
{1 << CRIS_CC0_REGNUM}, \
|
| 559 |
|
|
{CRIS_SPECIAL_REGS_CONTENTS}, \
|
| 560 |
|
|
{CRIS_SPECIAL_REGS_CONTENTS \
|
| 561 |
|
|
| (1 << CRIS_ACR_REGNUM)}, \
|
| 562 |
|
|
{(0xffff | (1 << CRIS_AP_REGNUM)) \
|
| 563 |
|
|
& ~(1 << CRIS_ACR_REGNUM)}, \
|
| 564 |
|
|
{(0xffff | (1 << CRIS_AP_REGNUM) \
|
| 565 |
|
|
| CRIS_SPECIAL_REGS_CONTENTS) \
|
| 566 |
|
|
& ~(1 << CRIS_ACR_REGNUM)}, \
|
| 567 |
|
|
{0xffff | (1 << CRIS_AP_REGNUM)}, \
|
| 568 |
|
|
{0xffff | (1 << CRIS_AP_REGNUM) \
|
| 569 |
|
|
| CRIS_SPECIAL_REGS_CONTENTS} \
|
| 570 |
|
|
}
|
| 571 |
|
|
|
| 572 |
|
|
#define REGNO_REG_CLASS(REGNO) \
|
| 573 |
|
|
((REGNO) == CRIS_ACR_REGNUM ? ACR_REGS : \
|
| 574 |
|
|
(REGNO) == CRIS_MOF_REGNUM ? MOF_REGS : \
|
| 575 |
|
|
(REGNO) == CRIS_CC0_REGNUM ? CC0_REGS : \
|
| 576 |
|
|
(REGNO) == CRIS_SRP_REGNUM ? SPECIAL_REGS : \
|
| 577 |
|
|
GENERAL_REGS)
|
| 578 |
|
|
|
| 579 |
|
|
#define BASE_REG_CLASS GENERAL_REGS
|
| 580 |
|
|
|
| 581 |
|
|
#define MODE_CODE_BASE_REG_CLASS(MODE, OCODE, ICODE) \
|
| 582 |
|
|
((OCODE) != POST_INC ? BASE_REG_CLASS : GENNONACR_REGS)
|
| 583 |
|
|
|
| 584 |
|
|
#define INDEX_REG_CLASS GENERAL_REGS
|
| 585 |
|
|
|
| 586 |
|
|
#define IRA_COVER_CLASSES { GENERAL_REGS, SPECIAL_REGS, LIM_REG_CLASSES }
|
| 587 |
|
|
|
| 588 |
|
|
#define REG_CLASS_FROM_LETTER(C) \
|
| 589 |
|
|
( \
|
| 590 |
|
|
(C) == 'a' ? ACR_REGS : \
|
| 591 |
|
|
(C) == 'b' ? GENNONACR_REGS : \
|
| 592 |
|
|
(C) == 'h' ? MOF_REGS : \
|
| 593 |
|
|
(C) == 'x' ? SPECIAL_REGS : \
|
| 594 |
|
|
(C) == 'c' ? CC0_REGS : \
|
| 595 |
|
|
NO_REGS \
|
| 596 |
|
|
)
|
| 597 |
|
|
|
| 598 |
|
|
/* Since it uses reg_renumber, it is safe only once reg_renumber
|
| 599 |
|
|
has been allocated, which happens in local-alloc.c. */
|
| 600 |
|
|
#define REGNO_OK_FOR_BASE_P(REGNO) \
|
| 601 |
|
|
((REGNO) <= CRIS_LAST_GENERAL_REGISTER \
|
| 602 |
|
|
|| (REGNO) == ARG_POINTER_REGNUM \
|
| 603 |
|
|
|| (unsigned) reg_renumber[REGNO] <= CRIS_LAST_GENERAL_REGISTER \
|
| 604 |
|
|
|| (unsigned) reg_renumber[REGNO] == ARG_POINTER_REGNUM)
|
| 605 |
|
|
|
| 606 |
|
|
/* REGNO_OK_FOR_BASE_P seems to be obsolete wrt. this one, but not yet
|
| 607 |
|
|
documented as such. */
|
| 608 |
|
|
#define REGNO_MODE_CODE_OK_FOR_BASE_P(REGNO, MODE, OCODE, ICODE) \
|
| 609 |
|
|
(REGNO_OK_FOR_BASE_P (REGNO) \
|
| 610 |
|
|
&& ((OCODE) != POST_INC \
|
| 611 |
|
|
|| !((REGNO) == CRIS_ACR_REGNUM \
|
| 612 |
|
|
|| (unsigned) reg_renumber[REGNO] == CRIS_ACR_REGNUM)))
|
| 613 |
|
|
|
| 614 |
|
|
/* See REGNO_OK_FOR_BASE_P. */
|
| 615 |
|
|
#define REGNO_OK_FOR_INDEX_P(REGNO) REGNO_OK_FOR_BASE_P(REGNO)
|
| 616 |
|
|
|
| 617 |
|
|
/* It seems like gcc (2.7.2 and 2.9x of 2000-03-22) may send "NO_REGS" as
|
| 618 |
|
|
the class for a constant (testcase: __Mul in arit.c). To avoid forcing
|
| 619 |
|
|
out a constant into the constant pool, we will trap this case and
|
| 620 |
|
|
return something a bit more sane. FIXME: Check if this is a bug.
|
| 621 |
|
|
Beware that we must not "override" classes that can be specified as
|
| 622 |
|
|
constraint letters, or else asm operands using them will fail when
|
| 623 |
|
|
they need to be reloaded. FIXME: Investigate whether that constitutes
|
| 624 |
|
|
a bug. */
|
| 625 |
|
|
#define PREFERRED_RELOAD_CLASS(X, CLASS) \
|
| 626 |
|
|
((CLASS) != ACR_REGS \
|
| 627 |
|
|
&& (CLASS) != MOF_REGS \
|
| 628 |
|
|
&& (CLASS) != CC0_REGS \
|
| 629 |
|
|
&& (CLASS) != SPECIAL_REGS \
|
| 630 |
|
|
? GENERAL_REGS : (CLASS))
|
| 631 |
|
|
|
| 632 |
|
|
/* We can't move special registers to and from memory in smaller than
|
| 633 |
|
|
word_mode. We also can't move between special registers. Luckily,
|
| 634 |
|
|
-1, as returned by true_regnum for non-sub/registers, is valid as a
|
| 635 |
|
|
parameter to our REGNO_REG_CLASS, returning GENERAL_REGS, so we get
|
| 636 |
|
|
the effect that any X that isn't a special-register is treated as
|
| 637 |
|
|
a non-empty intersection with GENERAL_REGS. */
|
| 638 |
|
|
#define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \
|
| 639 |
|
|
((((CLASS) == SPECIAL_REGS || (CLASS) == MOF_REGS) \
|
| 640 |
|
|
&& ((GET_MODE_SIZE (MODE) < 4 && MEM_P (X)) \
|
| 641 |
|
|
|| !reg_classes_intersect_p (REGNO_REG_CLASS (true_regnum (X)), \
|
| 642 |
|
|
GENERAL_REGS))) \
|
| 643 |
|
|
? GENERAL_REGS : NO_REGS)
|
| 644 |
|
|
|
| 645 |
|
|
/* FIXME: Fix regrename.c; it should check validity of replacements,
|
| 646 |
|
|
not just with a silly pass-specific macro. We may miss some
|
| 647 |
|
|
opportunities, but we must stop regrename from creating acr++. */
|
| 648 |
|
|
#define HARD_REGNO_RENAME_OK(FROM, TO) ((TO) != CRIS_ACR_REGNUM)
|
| 649 |
|
|
|
| 650 |
|
|
/* For CRIS, this is always the size of MODE in words,
|
| 651 |
|
|
since all registers are the same size. To use omitted modes in
|
| 652 |
|
|
patterns with reload constraints, you must say the widest size
|
| 653 |
|
|
which is allowed for VOIDmode.
|
| 654 |
|
|
FIXME: Does that still apply for gcc-2.9x? Keep poisoned until such
|
| 655 |
|
|
patterns are added back. News: 2001-03-16: Happens as early as the
|
| 656 |
|
|
underscore-test. */
|
| 657 |
|
|
#define CLASS_MAX_NREGS(CLASS, MODE) \
|
| 658 |
|
|
((MODE) == VOIDmode \
|
| 659 |
|
|
? 1 /* + cris_fatal ("CLASS_MAX_NREGS with VOIDmode") */ \
|
| 660 |
|
|
: ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
|
| 661 |
|
|
|
| 662 |
|
|
/* We are now out of letters; we could use ten more. This forces us to
|
| 663 |
|
|
use C-code in the 'md' file. FIXME: Use some EXTRA_CONSTRAINTS. */
|
| 664 |
|
|
#define CRIS_CONST_OK_FOR_LETTER_P(VALUE, C) \
|
| 665 |
|
|
( \
|
| 666 |
|
|
/* MOVEQ, CMPQ, ANDQ, ORQ. */ \
|
| 667 |
|
|
(C) == 'I' ? (VALUE) >= -32 && (VALUE) <= 31 : \
|
| 668 |
|
|
/* ADDQ, SUBQ. */ \
|
| 669 |
|
|
(C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 63 : \
|
| 670 |
|
|
/* ASRQ, BTSTQ, LSRQ, LSLQ. */ \
|
| 671 |
|
|
(C) == 'K' ? (VALUE) >= 0 && (VALUE) <= 31 : \
|
| 672 |
|
|
/* A 16-bit signed number. */ \
|
| 673 |
|
|
(C) == 'L' ? (VALUE) >= -32768 && (VALUE) <= 32767 : \
|
| 674 |
|
|
/* The constant 0 for CLEAR. */ \
|
| 675 |
|
|
(C) == 'M' ? (VALUE) == 0 : \
|
| 676 |
|
|
/* A negative ADDQ or SUBQ. */ \
|
| 677 |
|
|
(C) == 'N' ? (VALUE) >= -63 && (VALUE) < 0 : \
|
| 678 |
|
|
/* Quickened ints, QI and HI. */ \
|
| 679 |
|
|
(C) == 'O' ? (VALUE) >= 0 && (VALUE) <= 65535 \
|
| 680 |
|
|
&& ((VALUE) >= (65535-31) \
|
| 681 |
|
|
|| ((VALUE) >= (255-31) \
|
| 682 |
|
|
&& (VALUE) <= 255 )) : \
|
| 683 |
|
|
/* A 16-bit number signed *or* unsigned. */ \
|
| 684 |
|
|
(C) == 'P' ? (VALUE) >= -32768 && (VALUE) <= 65535 : \
|
| 685 |
|
|
0)
|
| 686 |
|
|
|
| 687 |
|
|
#define CONST_OK_FOR_CONSTRAINT_P(VALUE, C, S) \
|
| 688 |
|
|
( \
|
| 689 |
|
|
((C) != 'K' || (S)[1] == 'c') \
|
| 690 |
|
|
? CRIS_CONST_OK_FOR_LETTER_P (VALUE, C) : \
|
| 691 |
|
|
((C) == 'K' && (S)[1] == 'p') \
|
| 692 |
|
|
? exact_log2 (VALUE) >= 0 : \
|
| 693 |
|
|
0)
|
| 694 |
|
|
|
| 695 |
|
|
#define CONSTRAINT_LEN(C, S) ((C) == 'K' ? 2 : DEFAULT_CONSTRAINT_LEN (C, S))
|
| 696 |
|
|
|
| 697 |
|
|
/* It is really simple to make up a 0.0; it is the same as int-0 in
|
| 698 |
|
|
IEEE754. */
|
| 699 |
|
|
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
|
| 700 |
|
|
((C) == 'G' && ((VALUE) == CONST0_RTX (DFmode) \
|
| 701 |
|
|
|| (VALUE) == CONST0_RTX (SFmode)))
|
| 702 |
|
|
|
| 703 |
|
|
/* We need this on cris to distinguish delay-slottable addressing modes. */
|
| 704 |
|
|
#define EXTRA_CONSTRAINT(X, C) \
|
| 705 |
|
|
( \
|
| 706 |
|
|
/* Slottable address mode? */ \
|
| 707 |
|
|
(C) == 'Q' ? EXTRA_CONSTRAINT_Q (X) : \
|
| 708 |
|
|
/* Operand to BDAP or BIAP? */ \
|
| 709 |
|
|
(C) == 'R' ? EXTRA_CONSTRAINT_R (X) : \
|
| 710 |
|
|
/* A local PIC symbol? */ \
|
| 711 |
|
|
(C) == 'S' ? EXTRA_CONSTRAINT_S (X) : \
|
| 712 |
|
|
/* A three-address addressing-mode? */ \
|
| 713 |
|
|
(C) == 'T' ? EXTRA_CONSTRAINT_T (X) : \
|
| 714 |
|
|
/* A PLT symbol? */ \
|
| 715 |
|
|
(C) == 'U' ? EXTRA_CONSTRAINT_U (X) : \
|
| 716 |
|
|
0)
|
| 717 |
|
|
|
| 718 |
|
|
#define EXTRA_MEMORY_CONSTRAINT(X, STR) ((X) == 'Q')
|
| 719 |
|
|
|
| 720 |
|
|
#define EXTRA_CONSTRAINT_Q(X) \
|
| 721 |
|
|
( \
|
| 722 |
|
|
/* Just an indirect register (happens to also be \
|
| 723 |
|
|
"all" slottable memory addressing modes not \
|
| 724 |
|
|
covered by other constraints, i.e. '>'). */ \
|
| 725 |
|
|
MEM_P (X) && BASE_P (XEXP (X, 0)) \
|
| 726 |
|
|
)
|
| 727 |
|
|
|
| 728 |
|
|
#define EXTRA_CONSTRAINT_R(X) \
|
| 729 |
|
|
( \
|
| 730 |
|
|
/* An operand to BDAP or BIAP: \
|
| 731 |
|
|
A BIAP; r.S? */ \
|
| 732 |
|
|
BIAP_INDEX_P (X) \
|
| 733 |
|
|
/* A [reg] or (int) [reg], maybe with post-increment. */ \
|
| 734 |
|
|
|| BDAP_INDEX_P (X) \
|
| 735 |
|
|
|| CONSTANT_INDEX_P (X) \
|
| 736 |
|
|
)
|
| 737 |
|
|
|
| 738 |
|
|
#define EXTRA_CONSTRAINT_T(X) \
|
| 739 |
|
|
( \
|
| 740 |
|
|
/* Memory three-address operand. All are indirect-memory: */ \
|
| 741 |
|
|
MEM_P (X) \
|
| 742 |
|
|
&& ((MEM_P (XEXP (X, 0)) \
|
| 743 |
|
|
/* Double indirect: [[reg]] or [[reg+]]? */ \
|
| 744 |
|
|
&& (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) \
|
| 745 |
|
|
/* Just an explicit indirect reference: [const]? */ \
|
| 746 |
|
|
|| CONSTANT_P (XEXP (X, 0)) \
|
| 747 |
|
|
/* Something that is indexed; [...+...]? */ \
|
| 748 |
|
|
|| (GET_CODE (XEXP (X, 0)) == PLUS \
|
| 749 |
|
|
/* A BDAP constant: [reg+(8|16|32)bit offset]? */ \
|
| 750 |
|
|
&& ((BASE_P (XEXP (XEXP (X, 0), 0)) \
|
| 751 |
|
|
&& CONSTANT_INDEX_P (XEXP (XEXP (X, 0), 1))) \
|
| 752 |
|
|
/* A BDAP register: [reg+[reg(+)].S]? */ \
|
| 753 |
|
|
|| (BASE_P (XEXP (XEXP (X, 0), 0)) \
|
| 754 |
|
|
&& BDAP_INDEX_P(XEXP(XEXP(X, 0), 1))) \
|
| 755 |
|
|
/* Same, but with swapped arguments (no canonical \
|
| 756 |
|
|
ordering between e.g. REG and MEM as of LAST_UPDATED \
|
| 757 |
|
|
"Thu May 12 03:59:11 UTC 2005"). */ \
|
| 758 |
|
|
|| (BASE_P (XEXP (XEXP (X, 0), 1)) \
|
| 759 |
|
|
&& BDAP_INDEX_P (XEXP (XEXP (X, 0), 0))) \
|
| 760 |
|
|
/* A BIAP: [reg+reg.S] (MULT comes first). */ \
|
| 761 |
|
|
|| (BASE_P (XEXP (XEXP (X, 0), 1)) \
|
| 762 |
|
|
&& BIAP_INDEX_P (XEXP (XEXP (X, 0), 0)))))) \
|
| 763 |
|
|
)
|
| 764 |
|
|
|
| 765 |
|
|
/* PIC-constructs for symbols. */
|
| 766 |
|
|
#define EXTRA_CONSTRAINT_S(X) \
|
| 767 |
|
|
(flag_pic && GET_CODE (X) == CONST && cris_valid_pic_const (X, false))
|
| 768 |
|
|
|
| 769 |
|
|
#define EXTRA_CONSTRAINT_U(X) \
|
| 770 |
|
|
(flag_pic \
|
| 771 |
|
|
&& CONSTANT_P (X) \
|
| 772 |
|
|
&& cris_nonmemory_operand_or_callable_symbol (X, VOIDmode))
|
| 773 |
|
|
|
| 774 |
|
|
|
| 775 |
|
|
/* Node: Frame Layout */
|
| 776 |
|
|
|
| 777 |
|
|
#define STACK_GROWS_DOWNWARD
|
| 778 |
|
|
#define FRAME_GROWS_DOWNWARD 1
|
| 779 |
|
|
|
| 780 |
|
|
/* It seems to be indicated in the code (at least 2.1) that this is
|
| 781 |
|
|
better a constant, and best 0. */
|
| 782 |
|
|
#define STARTING_FRAME_OFFSET 0
|
| 783 |
|
|
|
| 784 |
|
|
#define FIRST_PARM_OFFSET(FNDECL) 0
|
| 785 |
|
|
|
| 786 |
|
|
#define RETURN_ADDR_RTX(COUNT, FRAMEADDR) \
|
| 787 |
|
|
cris_return_addr_rtx (COUNT, FRAMEADDR)
|
| 788 |
|
|
|
| 789 |
|
|
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, CRIS_SRP_REGNUM)
|
| 790 |
|
|
|
| 791 |
|
|
/* FIXME: Any __builtin_eh_return callers must not return anything and
|
| 792 |
|
|
there must not be collisions with incoming parameters. Luckily the
|
| 793 |
|
|
number of __builtin_eh_return callers is limited. For now return
|
| 794 |
|
|
parameter registers in reverse order and hope for the best. */
|
| 795 |
|
|
#define EH_RETURN_DATA_REGNO(N) \
|
| 796 |
|
|
(IN_RANGE ((N), 0, 3) ? (CRIS_FIRST_ARG_REG + 3 - (N)) : INVALID_REGNUM)
|
| 797 |
|
|
|
| 798 |
|
|
/* Store the stack adjustment in the structure-return-address register. */
|
| 799 |
|
|
#define CRIS_STACKADJ_REG CRIS_STRUCT_VALUE_REGNUM
|
| 800 |
|
|
#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (SImode, CRIS_STACKADJ_REG)
|
| 801 |
|
|
|
| 802 |
|
|
#define EH_RETURN_HANDLER_RTX \
|
| 803 |
|
|
cris_return_addr_rtx (0, NULL)
|
| 804 |
|
|
|
| 805 |
|
|
#define INIT_EXPANDERS cris_init_expanders ()
|
| 806 |
|
|
|
| 807 |
|
|
/* FIXME: Move this to right node (it's not documented properly yet). */
|
| 808 |
|
|
#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (CRIS_SRP_REGNUM)
|
| 809 |
|
|
|
| 810 |
|
|
/* FIXME: Move this to right node (it's not documented properly yet).
|
| 811 |
|
|
FIXME: Check what alignment we can assume regarding
|
| 812 |
|
|
TARGET_STACK_ALIGN and TARGET_ALIGN_BY_32. */
|
| 813 |
|
|
#define DWARF_CIE_DATA_ALIGNMENT -1
|
| 814 |
|
|
|
| 815 |
|
|
/* If we would ever need an exact mapping between canonical register
|
| 816 |
|
|
number and dwarf frame register, we would either need to include all
|
| 817 |
|
|
registers in the gcc description (with some marked fixed of course), or
|
| 818 |
|
|
an inverse mapping from dwarf register to gcc register. There is one
|
| 819 |
|
|
need in dwarf2out.c:expand_builtin_init_dwarf_reg_sizes. Right now, I
|
| 820 |
|
|
don't see that we need exact correspondence between DWARF *frame*
|
| 821 |
|
|
registers and DBX_REGISTER_NUMBER, so map them onto GCC registers. */
|
| 822 |
|
|
#define DWARF_FRAME_REGNUM(REG) (REG)
|
| 823 |
|
|
|
| 824 |
|
|
/* Node: Stack Checking */
|
| 825 |
|
|
/* (no definitions) FIXME: Check. */
|
| 826 |
|
|
|
| 827 |
|
|
/* Node: Frame Registers */
|
| 828 |
|
|
|
| 829 |
|
|
#define STACK_POINTER_REGNUM CRIS_SP_REGNUM
|
| 830 |
|
|
|
| 831 |
|
|
/* Register used for frame pointer. This is also the last of the saved
|
| 832 |
|
|
registers, when a frame pointer is not used. */
|
| 833 |
|
|
#define FRAME_POINTER_REGNUM CRIS_FP_REGNUM
|
| 834 |
|
|
|
| 835 |
|
|
/* Faked register, is always eliminated. We need it to eliminate
|
| 836 |
|
|
allocating stack slots for the return address and the frame pointer. */
|
| 837 |
|
|
#define ARG_POINTER_REGNUM CRIS_AP_REGNUM
|
| 838 |
|
|
|
| 839 |
|
|
#define STATIC_CHAIN_REGNUM CRIS_STATIC_CHAIN_REGNUM
|
| 840 |
|
|
|
| 841 |
|
|
|
| 842 |
|
|
/* Node: Elimination */
|
| 843 |
|
|
|
| 844 |
|
|
#define ELIMINABLE_REGS \
|
| 845 |
|
|
{{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
|
| 846 |
|
|
{ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
|
| 847 |
|
|
{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
|
| 848 |
|
|
|
| 849 |
|
|
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
|
| 850 |
|
|
(OFFSET) = cris_initial_elimination_offset (FROM, TO)
|
| 851 |
|
|
|
| 852 |
|
|
|
| 853 |
|
|
/* Node: Stack Arguments */
|
| 854 |
|
|
|
| 855 |
|
|
/* Since many parameters take up one register each in any case,
|
| 856 |
|
|
defining TARGET_PROMOTE_PROTOTYPES that always returns true would
|
| 857 |
|
|
seem like a good idea, but measurements indicate that a combination
|
| 858 |
|
|
using PROMOTE_MODE is better. */
|
| 859 |
|
|
|
| 860 |
|
|
#define ACCUMULATE_OUTGOING_ARGS 1
|
| 861 |
|
|
|
| 862 |
|
|
#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACKSIZE) 0
|
| 863 |
|
|
|
| 864 |
|
|
|
| 865 |
|
|
/* Node: Register Arguments */
|
| 866 |
|
|
|
| 867 |
|
|
/* The void_type_node is sent as a "closing" call. */
|
| 868 |
|
|
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
|
| 869 |
|
|
((CUM).regs < CRIS_MAX_ARGS_IN_REGS \
|
| 870 |
|
|
? gen_rtx_REG (MODE, (CRIS_FIRST_ARG_REG) + (CUM).regs) \
|
| 871 |
|
|
: NULL_RTX)
|
| 872 |
|
|
|
| 873 |
|
|
/* The differences between this and the previous, is that this one checks
|
| 874 |
|
|
that an argument is named, since incoming stdarg/varargs arguments are
|
| 875 |
|
|
pushed onto the stack, and we don't have to check against the "closing"
|
| 876 |
|
|
void_type_node TYPE parameter. */
|
| 877 |
|
|
#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
|
| 878 |
|
|
((NAMED) && (CUM).regs < CRIS_MAX_ARGS_IN_REGS \
|
| 879 |
|
|
? gen_rtx_REG (MODE, CRIS_FIRST_ARG_REG + (CUM).regs) \
|
| 880 |
|
|
: NULL_RTX)
|
| 881 |
|
|
|
| 882 |
|
|
/* Contrary to what you'd believe, defining FUNCTION_ARG_CALLEE_COPIES
|
| 883 |
|
|
seems like a (small total) loss, at least for gcc-2.7.2 compiling and
|
| 884 |
|
|
running gcc-2.1 (small win in size, small loss running -- 100.1%),
|
| 885 |
|
|
and similarly for size for products (.1 .. .3% bloat, sometimes win).
|
| 886 |
|
|
Due to the empirical likeliness of making slower code, it is not
|
| 887 |
|
|
defined. */
|
| 888 |
|
|
|
| 889 |
|
|
/* This no longer *needs* to be a structure; but keeping it as such should
|
| 890 |
|
|
not hurt (and hacking the ABI is simpler). */
|
| 891 |
|
|
#define CUMULATIVE_ARGS struct cum_args
|
| 892 |
|
|
struct cum_args {int regs;};
|
| 893 |
|
|
|
| 894 |
|
|
/* The regs member is an integer, the number of arguments got into
|
| 895 |
|
|
registers so far. */
|
| 896 |
|
|
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
|
| 897 |
|
|
((CUM).regs = 0)
|
| 898 |
|
|
|
| 899 |
|
|
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
|
| 900 |
|
|
((CUM).regs += (3 + CRIS_FUNCTION_ARG_SIZE (MODE, TYPE)) / 4)
|
| 901 |
|
|
|
| 902 |
|
|
#define FUNCTION_ARG_REGNO_P(REGNO) \
|
| 903 |
|
|
((REGNO) >= CRIS_FIRST_ARG_REG \
|
| 904 |
|
|
&& (REGNO) < CRIS_FIRST_ARG_REG + (CRIS_MAX_ARGS_IN_REGS))
|
| 905 |
|
|
|
| 906 |
|
|
|
| 907 |
|
|
/* Node: Scalar Return */
|
| 908 |
|
|
|
| 909 |
|
|
#define FUNCTION_VALUE_REGNO_P(N) cris_function_value_regno_p (N)
|
| 910 |
|
|
|
| 911 |
|
|
|
| 912 |
|
|
|
| 913 |
|
|
/* Node: Aggregate Return */
|
| 914 |
|
|
|
| 915 |
|
|
#define CRIS_STRUCT_VALUE_REGNUM ((CRIS_FIRST_ARG_REG) - 1)
|
| 916 |
|
|
|
| 917 |
|
|
|
| 918 |
|
|
/* Node: Caller Saves */
|
| 919 |
|
|
/* (no definitions) */
|
| 920 |
|
|
|
| 921 |
|
|
/* Node: Function entry */
|
| 922 |
|
|
|
| 923 |
|
|
/* See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and
|
| 924 |
|
|
TARGET_ASM_FUNCTION_EPILOGUE. */
|
| 925 |
|
|
|
| 926 |
|
|
/* Node: Profiling */
|
| 927 |
|
|
|
| 928 |
|
|
#define FUNCTION_PROFILER(FILE, LABELNO) \
|
| 929 |
|
|
error ("no FUNCTION_PROFILER for CRIS")
|
| 930 |
|
|
|
| 931 |
|
|
/* FIXME: Some of the undefined macros might be mandatory. If so, fix
|
| 932 |
|
|
documentation. */
|
| 933 |
|
|
|
| 934 |
|
|
|
| 935 |
|
|
/* Node: Trampolines */
|
| 936 |
|
|
|
| 937 |
|
|
#define TRAMPOLINE_SIZE (TARGET_V32 ? 58 : 32)
|
| 938 |
|
|
|
| 939 |
|
|
/* CRIS wants instructions on word-boundary. */
|
| 940 |
|
|
#define TRAMPOLINE_ALIGNMENT 16
|
| 941 |
|
|
|
| 942 |
|
|
/* Node: Library Calls */
|
| 943 |
|
|
|
| 944 |
|
|
/* If you change this, you have to check whatever libraries and systems
|
| 945 |
|
|
that use it. */
|
| 946 |
|
|
#define TARGET_EDOM 33
|
| 947 |
|
|
|
| 948 |
|
|
|
| 949 |
|
|
/* Node: Addressing Modes */
|
| 950 |
|
|
|
| 951 |
|
|
#define HAVE_POST_INCREMENT 1
|
| 952 |
|
|
|
| 953 |
|
|
/* Must be a compile-time constant, so we go with the highest value
|
| 954 |
|
|
among all CRIS variants. */
|
| 955 |
|
|
#define MAX_REGS_PER_ADDRESS 2
|
| 956 |
|
|
|
| 957 |
|
|
/* There are helper macros defined here which are used only in
|
| 958 |
|
|
GO_IF_LEGITIMATE_ADDRESS.
|
| 959 |
|
|
|
| 960 |
|
|
Note that you *have to* reject invalid addressing modes for mode
|
| 961 |
|
|
MODE, even if it is legal for normal addressing modes. You cannot
|
| 962 |
|
|
rely on the constraints to do this work. They can only be used to
|
| 963 |
|
|
doublecheck your intentions. One example is that you HAVE TO reject
|
| 964 |
|
|
(mem:DI (plus:SI (reg:SI x) (reg:SI y))) because for some reason
|
| 965 |
|
|
this cannot be reloaded. (Which of course you can argue that gcc
|
| 966 |
|
|
should have done.) FIXME: Strange. Check. */
|
| 967 |
|
|
|
| 968 |
|
|
/* No symbol can be used as an index (or more correct, as a base) together
|
| 969 |
|
|
with a register with PIC; the PIC register must be there. */
|
| 970 |
|
|
#define CONSTANT_INDEX_P(X) \
|
| 971 |
|
|
(CONSTANT_P (X) && (!flag_pic || cris_valid_pic_const (X, true)))
|
| 972 |
|
|
|
| 973 |
|
|
/* True if X is a valid base register. */
|
| 974 |
|
|
#define BASE_P(X) \
|
| 975 |
|
|
(REG_P (X) && REG_OK_FOR_BASE_P (X))
|
| 976 |
|
|
|
| 977 |
|
|
/* True if X is a valid base register with or without autoincrement. */
|
| 978 |
|
|
#define BASE_OR_AUTOINCR_P(X) \
|
| 979 |
|
|
(BASE_P (X) \
|
| 980 |
|
|
|| (GET_CODE (X) == POST_INC \
|
| 981 |
|
|
&& BASE_P (XEXP (X, 0)) \
|
| 982 |
|
|
&& REGNO (XEXP (X, 0)) != CRIS_ACR_REGNUM))
|
| 983 |
|
|
|
| 984 |
|
|
/* True if X is a valid (register) index for BDAP, i.e. [Rs].S or [Rs+].S. */
|
| 985 |
|
|
#define BDAP_INDEX_P(X) \
|
| 986 |
|
|
((MEM_P (X) && GET_MODE (X) == SImode \
|
| 987 |
|
|
&& BASE_OR_AUTOINCR_P (XEXP (X, 0))) \
|
| 988 |
|
|
|| (GET_CODE (X) == SIGN_EXTEND \
|
| 989 |
|
|
&& MEM_P (XEXP (X, 0)) \
|
| 990 |
|
|
&& (GET_MODE (XEXP (X, 0)) == HImode \
|
| 991 |
|
|
|| GET_MODE (XEXP (X, 0)) == QImode) \
|
| 992 |
|
|
&& BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0))))
|
| 993 |
|
|
|
| 994 |
|
|
/* True if X is a valid (register) index for BIAP, i.e. Rd.m. */
|
| 995 |
|
|
#define BIAP_INDEX_P(X) \
|
| 996 |
|
|
((BASE_P (X) && REG_OK_FOR_INDEX_P (X)) \
|
| 997 |
|
|
|| (GET_CODE (X) == MULT \
|
| 998 |
|
|
&& BASE_P (XEXP (X, 0)) \
|
| 999 |
|
|
&& REG_OK_FOR_INDEX_P (XEXP (X, 0)) \
|
| 1000 |
|
|
&& CONST_INT_P (XEXP (X, 1)) \
|
| 1001 |
|
|
&& (INTVAL (XEXP (X, 1)) == 2 \
|
| 1002 |
|
|
|| INTVAL (XEXP (X, 1)) == 4)))
|
| 1003 |
|
|
|
| 1004 |
|
|
/* A PIC operand looks like a normal symbol here. At output we dress it
|
| 1005 |
|
|
in "[rPIC+symbol:GOT]" (global symbol) or "rPIC+symbol:GOTOFF" (local
|
| 1006 |
|
|
symbol) so we exclude all addressing modes where we can't replace a
|
| 1007 |
|
|
plain "symbol" with that. A global PIC symbol does not fit anywhere
|
| 1008 |
|
|
here (but is thankfully a general_operand in itself). A local PIC
|
| 1009 |
|
|
symbol is valid for the plain "symbol + offset" case. */
|
| 1010 |
|
|
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
|
| 1011 |
|
|
{ \
|
| 1012 |
|
|
rtx x1, x2; \
|
| 1013 |
|
|
if (BASE_OR_AUTOINCR_P (X)) \
|
| 1014 |
|
|
goto ADDR; \
|
| 1015 |
|
|
else if (TARGET_V32) \
|
| 1016 |
|
|
/* Nothing else is valid then. */ \
|
| 1017 |
|
|
; \
|
| 1018 |
|
|
else if (CONSTANT_INDEX_P (X)) \
|
| 1019 |
|
|
goto ADDR; \
|
| 1020 |
|
|
/* Indexed? */ \
|
| 1021 |
|
|
else if (GET_CODE (X) == PLUS) \
|
| 1022 |
|
|
{ \
|
| 1023 |
|
|
x1 = XEXP (X, 0); \
|
| 1024 |
|
|
x2 = XEXP (X, 1); \
|
| 1025 |
|
|
/* BDAP o, Rd. */ \
|
| 1026 |
|
|
if ((BASE_P (x1) && CONSTANT_INDEX_P (x2)) \
|
| 1027 |
|
|
|| (BASE_P (x2) && CONSTANT_INDEX_P (x1)) \
|
| 1028 |
|
|
/* BDAP Rs[+], Rd. */ \
|
| 1029 |
|
|
|| (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
|
| 1030 |
|
|
&& ((BASE_P (x1) && BDAP_INDEX_P (x2)) \
|
| 1031 |
|
|
|| (BASE_P (x2) && BDAP_INDEX_P (x1)) \
|
| 1032 |
|
|
/* BIAP.m Rs, Rd */ \
|
| 1033 |
|
|
|| (BASE_P (x1) && BIAP_INDEX_P (x2)) \
|
| 1034 |
|
|
|| (BASE_P (x2) && BIAP_INDEX_P (x1))))) \
|
| 1035 |
|
|
goto ADDR; \
|
| 1036 |
|
|
} \
|
| 1037 |
|
|
else if (MEM_P (X)) \
|
| 1038 |
|
|
{ \
|
| 1039 |
|
|
/* DIP (Rs). Reject [[reg+]] and [[reg]] for \
|
| 1040 |
|
|
DImode (long long). */ \
|
| 1041 |
|
|
if (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
|
| 1042 |
|
|
&& (BASE_P (XEXP (X, 0)) \
|
| 1043 |
|
|
|| BASE_OR_AUTOINCR_P (XEXP (X, 0)))) \
|
| 1044 |
|
|
goto ADDR; \
|
| 1045 |
|
|
} \
|
| 1046 |
|
|
}
|
| 1047 |
|
|
|
| 1048 |
|
|
#ifndef REG_OK_STRICT
|
| 1049 |
|
|
/* Nonzero if X is a hard reg that can be used as a base reg
|
| 1050 |
|
|
or if it is a pseudo reg. */
|
| 1051 |
|
|
# define REG_OK_FOR_BASE_P(X) \
|
| 1052 |
|
|
(REGNO (X) <= CRIS_LAST_GENERAL_REGISTER \
|
| 1053 |
|
|
|| REGNO (X) == ARG_POINTER_REGNUM \
|
| 1054 |
|
|
|| REGNO (X) >= FIRST_PSEUDO_REGISTER)
|
| 1055 |
|
|
#else
|
| 1056 |
|
|
/* Nonzero if X is a hard reg that can be used as a base reg. */
|
| 1057 |
|
|
# define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
|
| 1058 |
|
|
#endif
|
| 1059 |
|
|
|
| 1060 |
|
|
#ifndef REG_OK_STRICT
|
| 1061 |
|
|
/* Nonzero if X is a hard reg that can be used as an index
|
| 1062 |
|
|
or if it is a pseudo reg. */
|
| 1063 |
|
|
# define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
|
| 1064 |
|
|
#else
|
| 1065 |
|
|
/* Nonzero if X is a hard reg that can be used as an index. */
|
| 1066 |
|
|
# define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
|
| 1067 |
|
|
#endif
|
| 1068 |
|
|
|
| 1069 |
|
|
/* Fix reloads known to cause suboptimal spilling. */
|
| 1070 |
|
|
#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, INDL, WIN) \
|
| 1071 |
|
|
do \
|
| 1072 |
|
|
{ \
|
| 1073 |
|
|
if (cris_reload_address_legitimized (X, MODE, OPNUM, TYPE, INDL)) \
|
| 1074 |
|
|
goto WIN; \
|
| 1075 |
|
|
} \
|
| 1076 |
|
|
while (0)
|
| 1077 |
|
|
|
| 1078 |
|
|
#define LEGITIMATE_CONSTANT_P(X) 1
|
| 1079 |
|
|
|
| 1080 |
|
|
|
| 1081 |
|
|
/* Node: Condition Code */
|
| 1082 |
|
|
|
| 1083 |
|
|
#define NOTICE_UPDATE_CC(EXP, INSN) cris_notice_update_cc (EXP, INSN)
|
| 1084 |
|
|
|
| 1085 |
|
|
/* FIXME: Maybe define CANONICALIZE_COMPARISON later, when playing with
|
| 1086 |
|
|
optimizations. It is needed; currently we do this with instruction
|
| 1087 |
|
|
patterns and NOTICE_UPDATE_CC. */
|
| 1088 |
|
|
|
| 1089 |
|
|
|
| 1090 |
|
|
/* Node: Costs */
|
| 1091 |
|
|
|
| 1092 |
|
|
#define REGISTER_MOVE_COST(MODE, FROM, TO) \
|
| 1093 |
|
|
cris_register_move_cost (MODE, FROM, TO)
|
| 1094 |
|
|
|
| 1095 |
|
|
/* This isn't strictly correct for v0..3 in buswidth-8bit mode, but
|
| 1096 |
|
|
should suffice. */
|
| 1097 |
|
|
#define MEMORY_MOVE_COST(M, CLASS, IN) \
|
| 1098 |
|
|
(((M) == QImode) ? 4 : ((M) == HImode) ? 4 : 6)
|
| 1099 |
|
|
|
| 1100 |
|
|
/* Regardless of the presence of delay slots, the default value of 1 for
|
| 1101 |
|
|
BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2
|
| 1102 |
|
|
with testcases ipps and gcc, giving smallest and fastest code. */
|
| 1103 |
|
|
|
| 1104 |
|
|
#define SLOW_BYTE_ACCESS 0
|
| 1105 |
|
|
|
| 1106 |
|
|
/* This is the threshold *below* which inline move sequences of
|
| 1107 |
|
|
word-length sizes will be emitted. The "9" will translate to
|
| 1108 |
|
|
(9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions
|
| 1109 |
|
|
(8 instruction sequences) or less. */
|
| 1110 |
|
|
#define MOVE_RATIO(speed) 9
|
| 1111 |
|
|
|
| 1112 |
|
|
|
| 1113 |
|
|
/* Node: Sections */
|
| 1114 |
|
|
|
| 1115 |
|
|
#define TEXT_SECTION_ASM_OP "\t.text"
|
| 1116 |
|
|
|
| 1117 |
|
|
#define DATA_SECTION_ASM_OP "\t.data"
|
| 1118 |
|
|
|
| 1119 |
|
|
#define FORCE_EH_FRAME_INFO_IN_DATA_SECTION (! TARGET_ELF)
|
| 1120 |
|
|
|
| 1121 |
|
|
/* The jump table is immediately connected to the preceding insn. */
|
| 1122 |
|
|
#define JUMP_TABLES_IN_TEXT_SECTION 1
|
| 1123 |
|
|
|
| 1124 |
|
|
|
| 1125 |
|
|
/* Node: PIC */
|
| 1126 |
|
|
|
| 1127 |
|
|
/* Helper type. */
|
| 1128 |
|
|
|
| 1129 |
|
|
enum cris_pic_symbol_type
|
| 1130 |
|
|
{
|
| 1131 |
|
|
cris_no_symbol = 0,
|
| 1132 |
|
|
cris_got_symbol = 1,
|
| 1133 |
|
|
cris_rel_symbol = 2,
|
| 1134 |
|
|
cris_got_symbol_needing_fixup = 3,
|
| 1135 |
|
|
cris_invalid_pic_symbol = 4
|
| 1136 |
|
|
};
|
| 1137 |
|
|
|
| 1138 |
|
|
#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? CRIS_GOT_REGNUM : INVALID_REGNUM)
|
| 1139 |
|
|
|
| 1140 |
|
|
#define LEGITIMATE_PIC_OPERAND_P(X) cris_legitimate_pic_operand (X)
|
| 1141 |
|
|
|
| 1142 |
|
|
|
| 1143 |
|
|
/* Node: File Framework */
|
| 1144 |
|
|
|
| 1145 |
|
|
/* We don't want an .ident for gcc. To avoid that but still support
|
| 1146 |
|
|
#ident, we override ASM_OUTPUT_IDENT and, since the gcc .ident is its
|
| 1147 |
|
|
only use besides ASM_OUTPUT_IDENT, undef IDENT_ASM_OP from elfos.h. */
|
| 1148 |
|
|
#undef IDENT_ASM_OP
|
| 1149 |
|
|
#undef ASM_OUTPUT_IDENT
|
| 1150 |
|
|
#define ASM_OUTPUT_IDENT(FILE, NAME) \
|
| 1151 |
|
|
fprintf (FILE, "%s\"%s\"\n", "\t.ident\t", NAME);
|
| 1152 |
|
|
|
| 1153 |
|
|
#define ASM_APP_ON "#APP\n"
|
| 1154 |
|
|
|
| 1155 |
|
|
#define ASM_APP_OFF "#NO_APP\n"
|
| 1156 |
|
|
|
| 1157 |
|
|
|
| 1158 |
|
|
/* Node: Data Output */
|
| 1159 |
|
|
|
| 1160 |
|
|
#define OUTPUT_ADDR_CONST_EXTRA(STREAM, X, FAIL) \
|
| 1161 |
|
|
do { if (!cris_output_addr_const_extra (STREAM, X)) goto FAIL; } while (0)
|
| 1162 |
|
|
|
| 1163 |
|
|
#define IS_ASM_LOGICAL_LINE_SEPARATOR(C, STR) (C) == '@'
|
| 1164 |
|
|
|
| 1165 |
|
|
/* Node: Uninitialized Data */
|
| 1166 |
|
|
|
| 1167 |
|
|
/* Remember to round off odd values if we want data alignment,
|
| 1168 |
|
|
since we cannot do that with an .align directive.
|
| 1169 |
|
|
|
| 1170 |
|
|
Using .comm causes the space not to be reserved in .bss, but by
|
| 1171 |
|
|
tricks with the symbol type. Not good if other tools than binutils
|
| 1172 |
|
|
are used on the object files. Since ".global ... .lcomm ..." works, we
|
| 1173 |
|
|
use that. Use .._ALIGNED_COMMON, since gcc whines when we only have
|
| 1174 |
|
|
..._COMMON, and we prefer to whine ourselves; BIGGEST_ALIGNMENT is not
|
| 1175 |
|
|
the one to check. This done for a.out only. */
|
| 1176 |
|
|
/* FIXME: I suspect a bug in gcc with alignment. Do not warn until
|
| 1177 |
|
|
investigated; it mucks up the testsuite results. */
|
| 1178 |
|
|
#define CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, LOCAL) \
|
| 1179 |
|
|
do \
|
| 1180 |
|
|
{ \
|
| 1181 |
|
|
int align_ = (ALIGN) / BITS_PER_UNIT; \
|
| 1182 |
|
|
if (TARGET_DATA_ALIGN && TARGET_ALIGN_BY_32 && align_ < 4) \
|
| 1183 |
|
|
align_ = 4; \
|
| 1184 |
|
|
else if (TARGET_DATA_ALIGN && align_ < 2) \
|
| 1185 |
|
|
align_ = 2; \
|
| 1186 |
|
|
/* FIXME: Do we need this? */ \
|
| 1187 |
|
|
else if (align_ < 1) \
|
| 1188 |
|
|
align_ = 1; \
|
| 1189 |
|
|
\
|
| 1190 |
|
|
if (TARGET_ELF) \
|
| 1191 |
|
|
{ \
|
| 1192 |
|
|
if (LOCAL) \
|
| 1193 |
|
|
{ \
|
| 1194 |
|
|
fprintf ((FILE), "%s", LOCAL_ASM_OP); \
|
| 1195 |
|
|
assemble_name ((FILE), (NAME)); \
|
| 1196 |
|
|
fprintf ((FILE), "\n"); \
|
| 1197 |
|
|
} \
|
| 1198 |
|
|
fprintf ((FILE), "%s", COMMON_ASM_OP); \
|
| 1199 |
|
|
assemble_name ((FILE), (NAME)); \
|
| 1200 |
|
|
fprintf ((FILE), ",%u,%u\n", (int)(SIZE), align_); \
|
| 1201 |
|
|
} \
|
| 1202 |
|
|
else \
|
| 1203 |
|
|
{ \
|
| 1204 |
|
|
/* We can't tell a one-only or weak COMM from a "global \
|
| 1205 |
|
|
COMM" so just make all non-locals weak. */ \
|
| 1206 |
|
|
if (! (LOCAL)) \
|
| 1207 |
|
|
ASM_WEAKEN_LABEL (FILE, NAME); \
|
| 1208 |
|
|
fputs ("\t.lcomm ", (FILE)); \
|
| 1209 |
|
|
assemble_name ((FILE), (NAME)); \
|
| 1210 |
|
|
fprintf ((FILE), ",%u\n", \
|
| 1211 |
|
|
((int)(SIZE) + (align_ - 1)) & ~(align_ - 1)); \
|
| 1212 |
|
|
} \
|
| 1213 |
|
|
} \
|
| 1214 |
|
|
while (0)
|
| 1215 |
|
|
|
| 1216 |
|
|
#define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
|
| 1217 |
|
|
CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 0)
|
| 1218 |
|
|
|
| 1219 |
|
|
#undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
|
| 1220 |
|
|
#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
|
| 1221 |
|
|
CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 1)
|
| 1222 |
|
|
|
| 1223 |
|
|
/* Node: Label Output */
|
| 1224 |
|
|
|
| 1225 |
|
|
/* Globalizing directive for a label. */
|
| 1226 |
|
|
#define GLOBAL_ASM_OP "\t.global "
|
| 1227 |
|
|
|
| 1228 |
|
|
#define SUPPORTS_WEAK 1
|
| 1229 |
|
|
|
| 1230 |
|
|
#define ASM_OUTPUT_SYMBOL_REF(STREAM, SYM) \
|
| 1231 |
|
|
cris_asm_output_symbol_ref (STREAM, SYM)
|
| 1232 |
|
|
|
| 1233 |
|
|
#define ASM_OUTPUT_LABEL_REF(STREAM, BUF) \
|
| 1234 |
|
|
cris_asm_output_label_ref (STREAM, BUF)
|
| 1235 |
|
|
|
| 1236 |
|
|
/* Remove any previous definition (elfos.h). */
|
| 1237 |
|
|
#undef ASM_GENERATE_INTERNAL_LABEL
|
| 1238 |
|
|
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
|
| 1239 |
|
|
sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long) NUM)
|
| 1240 |
|
|
|
| 1241 |
|
|
/* Node: Initialization */
|
| 1242 |
|
|
/* (no definitions) */
|
| 1243 |
|
|
|
| 1244 |
|
|
/* Node: Macros for Initialization */
|
| 1245 |
|
|
/* (no definitions) */
|
| 1246 |
|
|
|
| 1247 |
|
|
/* Node: Instruction Output */
|
| 1248 |
|
|
|
| 1249 |
|
|
#define REGISTER_NAMES \
|
| 1250 |
|
|
{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
|
| 1251 |
|
|
"r9", "r10", "r11", "r12", "r13", "sp", "acr", "srp", "mof", "faked_ap", "dccr"}
|
| 1252 |
|
|
|
| 1253 |
|
|
#define ADDITIONAL_REGISTER_NAMES \
|
| 1254 |
|
|
{{"r14", 14}, {"r15", 15}, {"pc", 15}}
|
| 1255 |
|
|
|
| 1256 |
|
|
#define PRINT_OPERAND(FILE, X, CODE) \
|
| 1257 |
|
|
cris_print_operand (FILE, X, CODE)
|
| 1258 |
|
|
|
| 1259 |
|
|
/* For delay-slot handling. */
|
| 1260 |
|
|
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
|
| 1261 |
|
|
((CODE) == '#' || (CODE) == '!' || (CODE) == ':')
|
| 1262 |
|
|
|
| 1263 |
|
|
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
|
| 1264 |
|
|
cris_print_operand_address (FILE, ADDR)
|
| 1265 |
|
|
|
| 1266 |
|
|
/* Output an empty line to illustrate the presence of the delay slot. */
|
| 1267 |
|
|
#define DBR_OUTPUT_SEQEND(FILE) \
|
| 1268 |
|
|
fprintf (FILE, "\n")
|
| 1269 |
|
|
|
| 1270 |
|
|
#define LOCAL_LABEL_PREFIX (TARGET_ELF ? "." : "")
|
| 1271 |
|
|
|
| 1272 |
|
|
/* cppinit.c initializes a const array from this, so it must be constant,
|
| 1273 |
|
|
can't have it different based on options. Luckily, the prefix is
|
| 1274 |
|
|
always allowed, so let's have it on all GCC-generated code. Note that
|
| 1275 |
|
|
we have this verbatim everywhere in the back-end, not using %R or %s or
|
| 1276 |
|
|
such. */
|
| 1277 |
|
|
#define REGISTER_PREFIX "$"
|
| 1278 |
|
|
|
| 1279 |
|
|
/* Remove any previous definition (elfos.h). */
|
| 1280 |
|
|
/* We use -fno-leading-underscore to remove it, when necessary. */
|
| 1281 |
|
|
#undef USER_LABEL_PREFIX
|
| 1282 |
|
|
#define USER_LABEL_PREFIX "_"
|
| 1283 |
|
|
|
| 1284 |
|
|
#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
|
| 1285 |
|
|
fprintf (FILE, \
|
| 1286 |
|
|
TARGET_V32 \
|
| 1287 |
|
|
? "\tsubq 4,$sp\n\tmove $%s,[$sp]\n" : "\tpush $%s\n", \
|
| 1288 |
|
|
reg_names[REGNO])
|
| 1289 |
|
|
|
| 1290 |
|
|
#define ASM_OUTPUT_REG_POP(FILE, REGNO) \
|
| 1291 |
|
|
fprintf (FILE, "\tmove [$sp+],$%s\n", reg_names[REGNO])
|
| 1292 |
|
|
|
| 1293 |
|
|
|
| 1294 |
|
|
/* Node: Dispatch Tables */
|
| 1295 |
|
|
|
| 1296 |
|
|
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
|
| 1297 |
|
|
do \
|
| 1298 |
|
|
{ \
|
| 1299 |
|
|
if (TARGET_V32) \
|
| 1300 |
|
|
asm_fprintf (FILE, "\t.word %LL%d-.\n", VALUE); \
|
| 1301 |
|
|
else \
|
| 1302 |
|
|
asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL); \
|
| 1303 |
|
|
} \
|
| 1304 |
|
|
while (0)
|
| 1305 |
|
|
|
| 1306 |
|
|
#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
|
| 1307 |
|
|
asm_fprintf (FILE, "\t.dword %LL%d\n", VALUE)
|
| 1308 |
|
|
|
| 1309 |
|
|
/* Defined to also emit an .align in elfos.h. We don't want that. */
|
| 1310 |
|
|
#undef ASM_OUTPUT_CASE_LABEL
|
| 1311 |
|
|
|
| 1312 |
|
|
/* Since the "bound" insn loads the comparison value if the compared<
|
| 1313 |
|
|
value (register) is out of bounds (0..comparison value-1), we need
|
| 1314 |
|
|
to output another case to catch it.
|
| 1315 |
|
|
The way to find it is to look for the label_ref at the else-arm inside
|
| 1316 |
|
|
the expanded casesi core-insn.
|
| 1317 |
|
|
FIXME: Check this construct when changing to new version of gcc. */
|
| 1318 |
|
|
#define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE) \
|
| 1319 |
|
|
cris_asm_output_case_end (STREAM, NUM, TABLE)
|
| 1320 |
|
|
|
| 1321 |
|
|
|
| 1322 |
|
|
/* Node: Exception Region Output */
|
| 1323 |
|
|
/* (no definitions) */
|
| 1324 |
|
|
/* FIXME: Fill in with our own optimized layout. */
|
| 1325 |
|
|
|
| 1326 |
|
|
/* Node: Alignment Output */
|
| 1327 |
|
|
|
| 1328 |
|
|
#define ASM_OUTPUT_ALIGN(FILE, LOG) \
|
| 1329 |
|
|
fprintf (FILE, "\t.align %d\n", (LOG))
|
| 1330 |
|
|
|
| 1331 |
|
|
|
| 1332 |
|
|
/* Node: All Debuggers */
|
| 1333 |
|
|
|
| 1334 |
|
|
#define DBX_REGISTER_NUMBER(REGNO) \
|
| 1335 |
|
|
((REGNO) == CRIS_SRP_REGNUM ? CRIS_CANONICAL_SRP_REGNUM : \
|
| 1336 |
|
|
(REGNO) == CRIS_MOF_REGNUM ? CRIS_CANONICAL_MOF_REGNUM : \
|
| 1337 |
|
|
(REGNO) == CRIS_CC0_REGNUM ? CRIS_CANONICAL_CC0_REGNUM : \
|
| 1338 |
|
|
(REGNO))
|
| 1339 |
|
|
|
| 1340 |
|
|
/* FIXME: Investigate DEBUGGER_AUTO_OFFSET, DEBUGGER_ARG_OFFSET. */
|
| 1341 |
|
|
|
| 1342 |
|
|
|
| 1343 |
|
|
/* Node: DBX Options */
|
| 1344 |
|
|
|
| 1345 |
|
|
/* Is this correct? Check later. */
|
| 1346 |
|
|
#define DBX_NO_XREFS
|
| 1347 |
|
|
|
| 1348 |
|
|
#define DBX_CONTIN_LENGTH 0
|
| 1349 |
|
|
|
| 1350 |
|
|
/* FIXME: Is this needed when we have 0 DBX_CONTIN_LENGTH? */
|
| 1351 |
|
|
#define DBX_CONTIN_CHAR '?'
|
| 1352 |
|
|
|
| 1353 |
|
|
|
| 1354 |
|
|
/* Node: DBX Hooks */
|
| 1355 |
|
|
/* (no definitions) */
|
| 1356 |
|
|
|
| 1357 |
|
|
/* Node: File names and DBX */
|
| 1358 |
|
|
/* (no definitions) */
|
| 1359 |
|
|
|
| 1360 |
|
|
|
| 1361 |
|
|
/* Node: SDB and DWARF */
|
| 1362 |
|
|
/* (no definitions) */
|
| 1363 |
|
|
|
| 1364 |
|
|
/* Node: Misc */
|
| 1365 |
|
|
|
| 1366 |
|
|
/* A combination of the bound (umin) insn together with a
|
| 1367 |
|
|
sign-extended add via the table to PC seems optimal.
|
| 1368 |
|
|
If the table overflows, the assembler will take care of it.
|
| 1369 |
|
|
Theoretically, in extreme cases (uncertain if they occur), an error
|
| 1370 |
|
|
will be emitted, so FIXME: Check how large case-tables are emitted,
|
| 1371 |
|
|
possible add an option to emit SImode case-tables. */
|
| 1372 |
|
|
#define CASE_VECTOR_MODE HImode
|
| 1373 |
|
|
|
| 1374 |
|
|
#define CASE_VECTOR_PC_RELATIVE 1
|
| 1375 |
|
|
|
| 1376 |
|
|
/* FIXME: Investigate CASE_VECTOR_SHORTEN_MODE to make sure HImode is not
|
| 1377 |
|
|
used when broken-.word could possibly fail (plus testcase). */
|
| 1378 |
|
|
|
| 1379 |
|
|
#define FIXUNS_TRUNC_LIKE_FIX_TRUNC
|
| 1380 |
|
|
|
| 1381 |
|
|
/* This is the number of bytes that can be moved in one
|
| 1382 |
|
|
reasonably fast instruction sequence. For CRIS, this is two
|
| 1383 |
|
|
instructions: mem => reg, reg => mem. */
|
| 1384 |
|
|
#define MOVE_MAX 4
|
| 1385 |
|
|
|
| 1386 |
|
|
/* Maybe SHIFT_COUNT_TRUNCATED is safe to define? FIXME: Check later. */
|
| 1387 |
|
|
|
| 1388 |
|
|
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
|
| 1389 |
|
|
|
| 1390 |
|
|
#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
|
| 1391 |
|
|
#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
|
| 1392 |
|
|
|
| 1393 |
|
|
#define Pmode SImode
|
| 1394 |
|
|
|
| 1395 |
|
|
#define FUNCTION_MODE QImode
|
| 1396 |
|
|
|
| 1397 |
|
|
#define NO_IMPLICIT_EXTERN_C
|
| 1398 |
|
|
|
| 1399 |
|
|
/* No specific purpose other than warningless compatibility. */
|
| 1400 |
|
|
#define HANDLE_PRAGMA_PACK_PUSH_POP 1
|
| 1401 |
|
|
|
| 1402 |
|
|
/*
|
| 1403 |
|
|
* Local variables:
|
| 1404 |
|
|
* eval: (c-set-style "gnu")
|
| 1405 |
|
|
* indent-tabs-mode: t
|
| 1406 |
|
|
* End:
|
| 1407 |
|
|
*/
|