config.gcc: Specify .opt files.

* config.gcc <cris-*>: Specify .opt files.
	* config/cris/cris.opt, config/cris/elf.opt, config/cris/aout.opt,
	config/cris/linux.opt: New files.
	* config/cris/aout.h (CRIS_SUBTARGET_SWITCHES)
	(CRIS_SUBTARGET_LONG_OPTIONS): Don't define.
	(TARGET_ELF): Override to 0.
	(CRIS_SUBTARGET_HANDLE_OPTION): Override to handle -melinux and
	-melinux-stacksize=N.
	* config/cris/cris.c: (cris_handle_option): New function.
	(TARGET_DEFAULT_TARGET_FLAGS): Override.
	(TARGET_HANDLE_OPTION): Override to cris_handle_option.
	(cris_override_options): Use MASK_*, not TARGET_MASK_*.
	* config/cris/cris.h (TARGET_MASK_SVINTO, TARGET_SVINTO,
	(TARGET_MASK_CCINIT, TARGET_CCINIT, TARGET_MASK_PDEBUG)
	(TARGET_PDEBUG, TARGET_MASK_SIDE_EFFECT_PREFIXES)
	(TARGET_SIDE_EFFECT_PREFIXES, TARGET_MASK_EXPAND_MUL)
	(TARGET_EXPAND_MUL, TARGET_MASK_STACK_ALIGN, TARGET_STACK_ALIGN)
	(TARGET_MASK_CONST_ALIGN, TARGET_CONST_ALIGN)
	(TARGET_MASK_DATA_ALIGN, TARGET_DATA_ALIGN)
	(TARGET_MASK_PROLOGUE_EPILOGUE, TARGET_PROLOGUE_EPILOGUE)
	(TARGET_MASK_ETRAX4_ADD, TARGET_ETRAX4_ADD)
	(TARGET_MASK_ALIGN_BY_32, TARGET_ALIGN_BY_32, TARGET_MASK_ELF)
	(TARGET_ELF, TARGET_MASK_LINUX, TARGET_LINUX)
	(TARGET_MASK_AVOID_GOTPLT, TARGET_AVOID_GOTPLT)
	(TARGET_MASK_MUL_BUG, TARGET_MUL_BUG, TARGET_SWITCHES)
	(CRIS_SUBTARGET_SWITCHES, TARGET_OPTIONS)
	(CRIS_SUBTARGET_LONG_OPTIONS): Don't define.
	(TARGET_LINUX): Define 0.
	(TARGET_DEFAULT): Use MASK_*, not TARGET_MASK_*.
	(CRIS_SUBTARGET_DEFAULT): Define to 0, not TARGET_MASK_ELF.
	(CRIS_SUBTARGET_DEFAULT): New empty default macro.
	* config/cris/linux.h (CRIS_SUBTARGET_SWITCHES): Don't define.
	(TARGET_LINUX): Override to 1.
	(CRIS_SUBTARGET_DEFAULT): Use MASK_*, not TARGET_MASK_*.

From-SVN: r98611
This commit is contained in:
Hans-Peter Nilsson 2005-04-23 14:03:53 +00:00 committed by Hans-Peter Nilsson
parent bfe936c0c1
commit 2a186d97aa
10 changed files with 448 additions and 214 deletions

View File

@ -1,3 +1,40 @@
2005-04-23 Hans-Peter Nilsson <hp@axis.com>
* config.gcc <cris-*>: Specify .opt files.
* config/cris/cris.opt, config/cris/elf.opt, config/cris/aout.opt,
config/cris/linux.opt: New files.
* config/cris/aout.h (CRIS_SUBTARGET_SWITCHES)
(CRIS_SUBTARGET_LONG_OPTIONS): Don't define.
(TARGET_ELF): Override to 0.
(CRIS_SUBTARGET_HANDLE_OPTION): Override to handle -melinux and
-melinux-stacksize=N.
* config/cris/cris.c: (cris_handle_option): New function.
(TARGET_DEFAULT_TARGET_FLAGS): Override.
(TARGET_HANDLE_OPTION): Override to cris_handle_option.
(cris_override_options): Use MASK_*, not TARGET_MASK_*.
* config/cris/cris.h (TARGET_MASK_SVINTO, TARGET_SVINTO,
(TARGET_MASK_CCINIT, TARGET_CCINIT, TARGET_MASK_PDEBUG)
(TARGET_PDEBUG, TARGET_MASK_SIDE_EFFECT_PREFIXES)
(TARGET_SIDE_EFFECT_PREFIXES, TARGET_MASK_EXPAND_MUL)
(TARGET_EXPAND_MUL, TARGET_MASK_STACK_ALIGN, TARGET_STACK_ALIGN)
(TARGET_MASK_CONST_ALIGN, TARGET_CONST_ALIGN)
(TARGET_MASK_DATA_ALIGN, TARGET_DATA_ALIGN)
(TARGET_MASK_PROLOGUE_EPILOGUE, TARGET_PROLOGUE_EPILOGUE)
(TARGET_MASK_ETRAX4_ADD, TARGET_ETRAX4_ADD)
(TARGET_MASK_ALIGN_BY_32, TARGET_ALIGN_BY_32, TARGET_MASK_ELF)
(TARGET_ELF, TARGET_MASK_LINUX, TARGET_LINUX)
(TARGET_MASK_AVOID_GOTPLT, TARGET_AVOID_GOTPLT)
(TARGET_MASK_MUL_BUG, TARGET_MUL_BUG, TARGET_SWITCHES)
(CRIS_SUBTARGET_SWITCHES, TARGET_OPTIONS)
(CRIS_SUBTARGET_LONG_OPTIONS): Don't define.
(TARGET_LINUX): Define 0.
(TARGET_DEFAULT): Use MASK_*, not TARGET_MASK_*.
(CRIS_SUBTARGET_DEFAULT): Define to 0, not TARGET_MASK_ELF.
(CRIS_SUBTARGET_DEFAULT): New empty default macro.
* config/cris/linux.h (CRIS_SUBTARGET_SWITCHES): Don't define.
(TARGET_LINUX): Override to 1.
(CRIS_SUBTARGET_DEFAULT): Use MASK_*, not TARGET_MASK_*.
2005-04-23 Nathan Sidwell <nathan@codesourcery.com>
* haifa-sched.c (schedule_block): Fix thinko in previous

View File

@ -757,16 +757,19 @@ cris-*-aout)
tm_file="dbxelf.h ${tm_file} cris/aout.h"
gas=yes
tmake_file="cris/t-cris cris/t-aout"
extra_options="${extra_options} cris/aout.opt"
;;
cris-*-elf | cris-*-none)
tm_file="dbxelf.h elfos.h ${tm_file}"
tmake_file="cris/t-cris cris/t-elfmulti"
gas=yes
extra_options="${extra_options} cris/elf.opt"
;;
cris-*-linux*)
tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
# We need to avoid using t-linux, so override default tmake_file
tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
extra_options="${extra_options} cris/linux.opt"
;;
fr30-*-elf)
tm_file="dbxelf.h elfos.h svr4.h ${tm_file}"

View File

@ -74,22 +74,35 @@ Boston, MA 02111-1307, USA. */
%{static:-Bstatic}}\
%{melinux-stacksize=*:-defsym __Stacksize=%*}"
#undef CRIS_SUBTARGET_SWITCHES
#define CRIS_SUBTARGET_SWITCHES \
{"elinux", (TARGET_MASK_SVINTO \
+ TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN \
+ TARGET_MASK_DATA_ALIGN \
+ TARGET_MASK_ETRAX4_ADD \
+ TARGET_MASK_ALIGN_BY_32), \
N_("Compile for the MMU-less Etrax 100-based elinux system")}, \
/* Legacy option. */ \
{"aout", 0, ""},
/* Previously controlled by target_flags. */
#undef TARGET_ELF
#define TARGET_ELF 0
#undef CRIS_SUBTARGET_LONG_OPTIONS
#define CRIS_SUBTARGET_LONG_OPTIONS \
{"elinux-stacksize=", &cris_elinux_stacksize_str, \
N_("For elinux, request a specified stack-size for this program"), 0}, \
#undef CRIS_SUBTARGET_HANDLE_OPTION
#define CRIS_SUBTARGET_HANDLE_OPTION(CODE, ARG, VALUE) \
do \
{ \
switch (CODE) \
{ \
case OPT_melinux: \
target_flags \
|= (MASK_SVINTO \
+ MASK_STACK_ALIGN \
+ MASK_CONST_ALIGN \
+ MASK_DATA_ALIGN \
+ MASK_ETRAX4_ADD \
+ MASK_ALIGN_BY_32); \
break; \
\
case OPT_melinux_stacksize_: \
cris_elinux_stacksize_str = (ARG); \
break; \
\
default: \
break; \
} \
} \
while (0)
#undef CRIS_SUBTARGET_VERSION
#define CRIS_SUBTARGET_VERSION " - a.out"

32
gcc/config/cris/aout.opt Normal file
View File

@ -0,0 +1,32 @@
; a.out-specific options for the CRIS port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 2, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.
; Legacy option.
maout
Target Report RejectNegative Undocumented
melinux
Target Report RejectNegative
Compile for the MMU-less Etrax 100-based elinux system
melinux-stacksize=
Target Report RejectNegative Joined
-melinux-stacksize=SIZE For elinux, request a specified stack-size for this program

View File

@ -134,6 +134,8 @@ static int cris_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
tree, bool);
static tree cris_md_asm_clobbers (tree, tree, tree);
static bool cris_handle_option (size_t, const char *, int);
/* This is the argument from the "-max-stack-stackframe=" option. */
const char *cris_max_stackframe_str;
@ -200,6 +202,10 @@ int cris_cpu_version = CRIS_DEFAULT_CPU_VERSION;
#define TARGET_ARG_PARTIAL_BYTES cris_arg_partial_bytes
#undef TARGET_MD_ASM_CLOBBERS
#define TARGET_MD_ASM_CLOBBERS cris_md_asm_clobbers
#undef TARGET_DEFAULT_TARGET_FLAGS
#define TARGET_DEFAULT_TARGET_FLAGS (TARGET_DEFAULT | CRIS_SUBTARGET_DEFAULT)
#undef TARGET_HANDLE_OPTION
#define TARGET_HANDLE_OPTION cris_handle_option
struct gcc_target targetm = TARGET_INITIALIZER;
@ -2032,6 +2038,77 @@ cris_got_symbol (rtx x)
return 1;
}
/* TARGET_HANDLE_OPTION worker. We just store the values into local
variables here. Checks for correct semantics are in
cris_override_options. */
static bool
cris_handle_option (size_t code, const char *arg, int value ATTRIBUTE_UNUSED)
{
switch (code)
{
case OPT_metrax100:
target_flags
|= (MASK_SVINTO
+ MASK_ETRAX4_ADD
+ MASK_ALIGN_BY_32);
break;
case OPT_mno_etrax100:
target_flags
&= ~(MASK_SVINTO
+ MASK_ETRAX4_ADD
+ MASK_ALIGN_BY_32);
break;
case OPT_m32_bit:
case OPT_m32bit:
target_flags
|= (MASK_STACK_ALIGN
+ MASK_CONST_ALIGN
+ MASK_DATA_ALIGN
+ MASK_ALIGN_BY_32);
break;
case OPT_m16_bit:
case OPT_m16bit:
target_flags
|= (MASK_STACK_ALIGN
+ MASK_CONST_ALIGN
+ MASK_DATA_ALIGN);
break;
case OPT_m8_bit:
case OPT_m8bit:
target_flags
&= ~(MASK_STACK_ALIGN
+ MASK_CONST_ALIGN
+ MASK_DATA_ALIGN);
break;
case OPT_max_stackframe_:
case OPT_mmax_stackframe_:
cris_max_stackframe_str = arg;
break;
case OPT_march_:
case OPT_mcpu_:
cris_cpu_str = arg;
break;
case OPT_mtune_:
cris_tune_str = arg;
break;
default:
break;
}
CRIS_SUBTARGET_HANDLE_OPTION(code, arg, value);
return true;
}
/* The OVERRIDE_OPTIONS worker.
As is the norm, this also parses -mfoo=bar type parameters. */
@ -2077,14 +2154,14 @@ cris_override_options (void)
/* Set the target flags. */
if (cris_cpu_version >= CRIS_CPU_ETRAX4)
target_flags |= TARGET_MASK_ETRAX4_ADD;
target_flags |= MASK_ETRAX4_ADD;
/* If this is Svinto or higher, align for 32 bit accesses. */
if (cris_cpu_version >= CRIS_CPU_SVINTO)
target_flags
|= (TARGET_MASK_SVINTO | TARGET_MASK_ALIGN_BY_32
| TARGET_MASK_STACK_ALIGN | TARGET_MASK_CONST_ALIGN
| TARGET_MASK_DATA_ALIGN);
|= (MASK_SVINTO | MASK_ALIGN_BY_32
| MASK_STACK_ALIGN | MASK_CONST_ALIGN
| MASK_DATA_ALIGN);
/* Note that we do not add new flags when it can be completely
described with a macro that uses -mcpu=X. So
@ -2115,8 +2192,8 @@ cris_override_options (void)
/* We have currently nothing more to tune than alignment for
memory accesses. */
target_flags
|= (TARGET_MASK_STACK_ALIGN | TARGET_MASK_CONST_ALIGN
| TARGET_MASK_DATA_ALIGN | TARGET_MASK_ALIGN_BY_32);
|= (MASK_STACK_ALIGN | MASK_CONST_ALIGN
| MASK_DATA_ALIGN | MASK_ALIGN_BY_32);
}
if (flag_pic)

View File

@ -257,182 +257,23 @@ extern const char *cris_elinux_stacksize_str;
/* This needs to be at least 32 bits. */
extern int target_flags;
/* Currently this just affects alignment. FIXME: Redundant with
TARGET_ALIGN_BY_32, or put machine stuff here? */
#define TARGET_MASK_SVINTO 1
#define TARGET_SVINTO (target_flags & TARGET_MASK_SVINTO)
/* Previously controlled by target_flags. */
#define TARGET_ELF 1
/* If to use condition-codes generated by insns other than the
immediately preceding compare/test insn.
Used to check for errors in notice_update_cc. */
#define TARGET_MASK_CCINIT 2
#define TARGET_CCINIT (target_flags & TARGET_MASK_CCINIT)
/* Debug option. */
#define TARGET_MASK_PDEBUG 4
#define TARGET_PDEBUG (target_flags & TARGET_MASK_PDEBUG)
/* If to use side-effect patterns. Used to debug the [rx=ry+i] type
patterns. */
#define TARGET_MASK_SIDE_EFFECT_PREFIXES 8
#define TARGET_SIDE_EFFECT_PREFIXES \
(target_flags & TARGET_MASK_SIDE_EFFECT_PREFIXES)
/* If to expand mul into mstep. Only used when making libc.a. */
#define TARGET_MASK_EXPAND_MUL 16
#define TARGET_EXPAND_MUL (target_flags & TARGET_MASK_EXPAND_MUL)
/* If to *keep* (not force) alignment of stack at 16 bits. */
#define TARGET_MASK_STACK_ALIGN 32
#define TARGET_STACK_ALIGN (target_flags & TARGET_MASK_STACK_ALIGN)
/* If to do alignment on individual non-modifiable objects. */
#define TARGET_MASK_CONST_ALIGN 64
#define TARGET_CONST_ALIGN (target_flags & TARGET_MASK_CONST_ALIGN)
/* If to do alignment on individual modifiable objects. */
#define TARGET_MASK_DATA_ALIGN 128
#define TARGET_DATA_ALIGN (target_flags & TARGET_MASK_DATA_ALIGN)
/* If not to omit function prologue and epilogue. */
#define TARGET_MASK_PROLOGUE_EPILOGUE 256
#define TARGET_PROLOGUE_EPILOGUE (target_flags & TARGET_MASK_PROLOGUE_EPILOGUE)
/* Instructions additions from Etrax 4 and up.
(Just "lz", which we don't really generate from GCC -- yet). */
#define TARGET_MASK_ETRAX4_ADD 512
#define TARGET_ETRAX4_ADD (target_flags & TARGET_MASK_ETRAX4_ADD)
/* Say that all alignment specifications say to prefer 32 rather
than 16 bits. */
#define TARGET_MASK_ALIGN_BY_32 1024
#define TARGET_ALIGN_BY_32 (target_flags & TARGET_MASK_ALIGN_BY_32)
/* This condition is of limited use, as gcc is riddled with #ifdef:s
controlling this, rather than if (...):s. */
#define TARGET_MASK_ELF 2048
#define TARGET_ELF (target_flags & TARGET_MASK_ELF)
/* Currently just used to error-check other options. Note that this is
*not* set for -melinux. */
#define TARGET_MASK_LINUX 4096
#define TARGET_LINUX (target_flags & TARGET_MASK_LINUX)
/* There's a small setup cost with using GOTPLT references, but should
in total be a win both in code-size and execution-time. */
#define TARGET_MASK_AVOID_GOTPLT 8192
#define TARGET_AVOID_GOTPLT (target_flags & TARGET_MASK_AVOID_GOTPLT)
/* Whether or not to work around multiplication instruction hardware bug
when generating code for models where it may be present. From the
trouble report for Etrax 100 LX: "A multiply operation may cause
incorrect cache behaviour under some specific circumstances. The
problem can occur if the instruction following the multiply instruction
causes a cache miss, and multiply operand 1 (source operand) bits
[31:27] matches the logical mapping of the mode register address
(0xb0....), and bits [9:2] of operand 1 matches the TLB register
address (0x258-0x25f). There is such a mapping in kernel mode or when
the MMU is off. Normally there is no such mapping in user mode, and
the problem will therefore probably not occur in Linux user mode
programs."
We have no sure-fire way to know from within GCC that we're compiling a
user program. For example, -fpic/PIC is used in libgcc which is linked
into the kernel. However, the workaround option -mno-mul-bug can be
safely used per-package when compiling programs. The same goes for
general user-only libraries such as glibc, since there's no user-space
driver-like program that gets a mapping of I/O registers (all on the
same page, including the TLB registers). */
#define TARGET_MASK_MUL_BUG 16384
#define TARGET_MUL_BUG (target_flags & TARGET_MASK_MUL_BUG)
#define TARGET_SWITCHES \
{ \
{"mul-bug-workaround", TARGET_MASK_MUL_BUG, \
N_("Work around bug in multiplication instruction")}, \
{"no-mul-bug-workaround", -TARGET_MASK_MUL_BUG, ""}, \
/* No "no-etrax" as it does not really imply any model. \
On the other hand, "etrax" implies the common (and large) \
subset matching all models. */ \
{"etrax4", TARGET_MASK_ETRAX4_ADD, \
N_("Compile for ETRAX 4 (CRIS v3)")}, \
{"no-etrax4", -TARGET_MASK_ETRAX4_ADD, ""}, \
{"etrax100", (TARGET_MASK_SVINTO \
+ TARGET_MASK_ETRAX4_ADD \
+ TARGET_MASK_ALIGN_BY_32), \
N_("Compile for ETRAX 100 (CRIS v8)")}, \
{"no-etrax100", -(TARGET_MASK_SVINTO \
+ TARGET_MASK_ETRAX4_ADD), ""}, \
{"pdebug", TARGET_MASK_PDEBUG, \
N_("Emit verbose debug information in assembly code")}, \
{"no-pdebug", -TARGET_MASK_PDEBUG, ""}, \
{"cc-init", TARGET_MASK_CCINIT, \
N_("Do not use condition codes from normal instructions")}, \
{"no-cc-init", -TARGET_MASK_CCINIT, ""}, \
{"side-effects", TARGET_MASK_SIDE_EFFECT_PREFIXES, ""}, \
{"no-side-effects", -TARGET_MASK_SIDE_EFFECT_PREFIXES, \
N_("Do not emit addressing modes with side-effect assignment")}, \
{"stack-align", TARGET_MASK_STACK_ALIGN, ""}, \
{"no-stack-align", -TARGET_MASK_STACK_ALIGN, \
N_("Do not tune stack alignment")}, \
{"data-align", TARGET_MASK_DATA_ALIGN, ""}, \
{"no-data-align", -TARGET_MASK_DATA_ALIGN, \
N_("Do not tune writable data alignment")}, \
{"const-align", TARGET_MASK_CONST_ALIGN, ""}, \
{"no-const-align", -TARGET_MASK_CONST_ALIGN, \
N_("Do not tune code and read-only data alignment")}, \
{"32-bit", (TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN \
+ TARGET_MASK_DATA_ALIGN \
+ TARGET_MASK_ALIGN_BY_32), ""}, \
{"32bit", (TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN \
+ TARGET_MASK_DATA_ALIGN \
+ TARGET_MASK_ALIGN_BY_32), \
N_("Align code and data to 32 bits")}, \
{"16-bit", (TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN \
+ TARGET_MASK_DATA_ALIGN), ""}, \
{"16bit", (TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN \
+ TARGET_MASK_DATA_ALIGN), ""}, \
{"8-bit", -(TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN \
+ TARGET_MASK_DATA_ALIGN), ""}, \
{"8bit", -(TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN \
+ TARGET_MASK_DATA_ALIGN), \
N_("Don't align items in code or data")}, \
{"prologue-epilogue", TARGET_MASK_PROLOGUE_EPILOGUE, ""}, \
{"no-prologue-epilogue", -TARGET_MASK_PROLOGUE_EPILOGUE, \
N_("Do not emit function prologue or epilogue")}, \
/* We have to handle this m-option here since we can't wash it off in \
both CC1_SPEC and CC1PLUS_SPEC. */ \
{"best-lib-options", 0, \
N_("Use the most feature-enabling options allowed by other options")}, \
\
/* We must call it "override-" since calling it "no-" will cause \
gcc.c to forget it, if there's a "later" -mbest-lib-options. \
Kludgy, but needed for some multilibbed files. */ \
{"override-best-lib-options", 0, \
N_("Override -mbest-lib-options")}, \
CRIS_SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT | CRIS_SUBTARGET_DEFAULT, ""}} \
/* For the cris-*-elf subtarget. */
#define CRIS_SUBTARGET_SWITCHES \
{"elf", 0, ""},
/* Previously controlled by target_flags. Note that this is *not* set
for -melinux. */
#define TARGET_LINUX 0
/* Default target_flags if no switches specified. */
#ifndef TARGET_DEFAULT
# define TARGET_DEFAULT \
(TARGET_MASK_SIDE_EFFECT_PREFIXES + TARGET_MASK_STACK_ALIGN \
+ TARGET_MASK_CONST_ALIGN + TARGET_MASK_DATA_ALIGN \
+ TARGET_MASK_PROLOGUE_EPILOGUE + TARGET_MASK_MUL_BUG)
(MASK_SIDE_EFFECT_PREFIXES + MASK_STACK_ALIGN \
+ MASK_CONST_ALIGN + MASK_DATA_ALIGN \
+ MASK_PROLOGUE_EPILOGUE + MASK_MUL_BUG)
#endif
/* For the cris-*-elf subtarget. */
#define CRIS_SUBTARGET_DEFAULT TARGET_MASK_ELF
#define CRIS_SUBTARGET_DEFAULT 0
#define CRIS_CPU_BASE 0
#define CRIS_CPU_ETRAX4 3 /* Just lz added. */
@ -444,18 +285,7 @@ extern int target_flags;
#define TARGET_HAS_MUL_INSNS (cris_cpu_version >= CRIS_CPU_NG)
#define TARGET_OPTIONS \
{{"cpu=", &cris_cpu_str, "", 0}, \
{"arch=", &cris_cpu_str, \
N_("Generate code for the specified chip or CPU version"), 0}, \
{"tune=", &cris_tune_str, \
N_("Tune alignment for the specified chip or CPU version"), 0}, \
{"max-stackframe=", &cris_max_stackframe_str, \
N_("Warn when a stackframe is larger than the specified size"), 0}, \
CRIS_SUBTARGET_LONG_OPTIONS \
{"ax-stackframe=", &cris_max_stackframe_str, "", 0} }
#define CRIS_SUBTARGET_LONG_OPTIONS
#define CRIS_SUBTARGET_HANDLE_OPTION(x, y, z)
/* Print subsidiary information on the compiler version in use.
Do not use VD.D syntax (D=digit), since this will cause confusion

191
gcc/config/cris/cris.opt Normal file
View File

@ -0,0 +1,191 @@
; Options for the CRIS port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 2, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.
; TARGET_MUL_BUG: Whether or not to work around multiplication
; instruction hardware bug when generating code for models where
; it may be present. From the trouble report for Etrax 100 LX:
; "A multiply operation may cause incorrect cache behaviour
; under some specific circumstances. The problem can occur if
; the instruction following the multiply instruction causes a
; cache miss, and multiply operand 1 (source operand) bits
; [31:27] matches the logical mapping of the mode register
; address (0xb0....), and bits [9:2] of operand 1 matches the
; TLB register address (0x258-0x25f). There is such a mapping
; in kernel mode or when the MMU is off. Normally there is no
; such mapping in user mode, and the problem will therefore
; probably not occur in Linux user mode programs."
;
; We have no sure-fire way to know from within GCC that we're
; compiling a user program. For example, -fpic/PIC is used in
; libgcc which is linked into the kernel. However, the
; workaround option -mno-mul-bug can be safely used per-package
; when compiling programs. The same goes for general user-only
; libraries such as glibc, since there's no user-space
; driver-like program that gets a mapping of I/O registers (all
; on the same page, including the TLB registers).
mmul-bug-workaround
Target Report Mask(MUL_BUG)
Work around bug in multiplication instruction
; TARGET_ETRAX4_ADD: Instruction-set additions from Etrax 4 and up.
; (Just "lz", which we don't really generate from GCC -- yet).
metrax4
Target Report Mask(ETRAX4_ADD)
Compile for ETRAX 4 (CRIS v3)
; See cris_handle_option.
metrax100
Target Report RejectNegative
Compile for ETRAX 100 (CRIS v8)
; See cris_handle_option.
mno-etrax100
Target Report RejectNegative Undocumented
mpdebug
Target Report Mask(PDEBUG)
Emit verbose debug information in assembly code
; TARGET_CCINIT: Whether to use condition-codes generated by
; insns other than the immediately preceding compare/test insn.
; Used to check for errors in notice_update_cc.
mcc-init
Target Report Mask(CCINIT)
Do not use condition codes from normal instructions
; TARGET_SIDE_EFFECT_PREFIXES: Whether to use side-effect
; patterns. Used to debug the [rx=ry+i] type patterns.
mside-effects
Target Report RejectNegative Mask(SIDE_EFFECT_PREFIXES) Undocumented
mno-side-effects
Target Report RejectNegative InverseMask(SIDE_EFFECT_PREFIXES)
Do not emit addressing modes with side-effect assignment
; TARGET_STACK_ALIGN: Whether to *keep* (not force) alignment of
; stack at 16 (or 32, depending on TARGET_ALIGN_BY_32) bits.
mstack-align
Target Report RejectNegative Mask(STACK_ALIGN) Undocumented
mno-stack-align
Target Report RejectNegative InverseMask(STACK_ALIGN)
Do not tune stack alignment
; TARGET_DATA_ALIGN: Whether to do alignment on individual
; modifiable objects.
mdata-align
Target Report RejectNegative Mask(DATA_ALIGN) Undocumented
mno-data-align
Target Report RejectNegative InverseMask(DATA_ALIGN)
Do not tune writable data alignment
; TARGET_CONST_ALIGN: Whether to do alignment on individual
; non-modifiable objects.
mconst-align
Target Report RejectNegative Mask(CONST_ALIGN) Undocumented
mno-const-align
Target Report RejectNegative InverseMask(CONST_ALIGN)
Do not tune code and read-only data alignment
; See cris_handle_option.
m32-bit
Target Report RejectNegative Undocumented
; See cris_handle_option.
m32bit
Target Report RejectNegative
Align code and data to 32 bits
; See cris_handle_option.
m16-bit
Target Report RejectNegative Undocumented
; See cris_handle_option.
m16bit
Target Report RejectNegative Undocumented
; See cris_handle_option.
m8-bit
Target Report RejectNegative Undocumented
; See cris_handle_option.
m8bit
Target Report RejectNegative
Don't align items in code or data
; TARGET_PROLOGUE_EPILOGUE: Whether or not to omit function
; prologue and epilogue.
mprologue-epilogue
Target Report RejectNegative Mask(PROLOGUE_EPILOGUE) Undocumented
mno-prologue-epilogue
Target Report RejectNegative InverseMask(PROLOGUE_EPILOGUE)
Do not emit function prologue or epilogue
; We have to handle this m-option here since we can't wash it
; off in both CC1_SPEC and CC1PLUS_SPEC.
mbest-lib-options
Target Report RejectNegative
Use the most feature-enabling options allowed by other options
; FIXME: The following comment relates to gcc before cris.opt.
; Check it it's still valid:
; We must call it "override-" since calling it "no-" will cause
; gcc.c to forget it, if there's a "later" -mbest-lib-options.
; Kludgy, but needed for some multilibbed files.
moverride-best-lib-options
Target Report RejectNegative
Override -mbest-lib-options
mcpu=
Target Report RejectNegative Joined Undocumented
march=
Target Report RejectNegative Joined
-march=ARCH Generate code for the specified chip or CPU version
mtune=
Target Report RejectNegative Joined
-mtune=ARCH Tune alignment for the specified chip or CPU version
mmax-stackframe=
Target Report RejectNegative Joined
-mmax-stackframe=SIZE Warn when a stackframe is larger than the specified size
max-stackframe=
Target Report RejectNegative Joined Undocumented
; TARGET_SVINTO: Currently this just affects alignment. FIXME:
; Redundant with TARGET_ALIGN_BY_32, or put machine stuff here?
; This and the others below could just as well be variables and
; TARGET_* defines in cris.h.
Mask(SVINTO)
; TARGET_ALIGN_BY_32: Say that all alignment specifications say
; to prefer 32 rather than 16 bits.
Mask(ALIGN_BY_32)
; TARGET_AVOID_GOTPLT is referred to in the .c and the .md so we
; need to allocate the flag and macros here.
Mask(AVOID_GOTPLT)

23
gcc/config/cris/elf.opt Normal file
View File

@ -0,0 +1,23 @@
; ELF-specific options for the CRIS port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 2, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.
melf
Target Report RejectNegative Undocumented

View File

@ -1,5 +1,5 @@
/* Definitions for GCC. Part of the machine description for CRIS.
Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
Contributed by Axis Communications. Written by Hans-Peter Nilsson.
This file is part of GCC.
@ -60,21 +60,15 @@ Boston, MA 02111-1307, USA. */
%{!fleading-underscore:--no-underscore}\
%{fPIC|fpic|fPIE|fpie: --pic}"
/* Provide a legacy -mlinux option. */
#undef CRIS_SUBTARGET_SWITCHES
#define CRIS_SUBTARGET_SWITCHES \
{"linux", 0, ""}, \
{"gotplt", -TARGET_MASK_AVOID_GOTPLT, ""}, \
{"no-gotplt", TARGET_MASK_AVOID_GOTPLT, \
N_("Together with -fpic and -fPIC, do not use GOTPLT references")},
/* Previously controlled by target_flags. */
#undef TARGET_LINUX
#define TARGET_LINUX 1
#undef CRIS_SUBTARGET_DEFAULT
#define CRIS_SUBTARGET_DEFAULT \
(TARGET_MASK_SVINTO \
+ TARGET_MASK_ETRAX4_ADD \
+ TARGET_MASK_ALIGN_BY_32 \
+ TARGET_MASK_ELF \
+ TARGET_MASK_LINUX)
(MASK_SVINTO \
+ MASK_ETRAX4_ADD \
+ MASK_ALIGN_BY_32)
#undef CRIS_DEFAULT_CPU_VERSION
#define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG

34
gcc/config/cris/linux.opt Normal file
View File

@ -0,0 +1,34 @@
; GNU/Linux-specific options for the CRIS port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 2, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.
; Provide a legacy -mlinux option.
mlinux
Target Report RejectNegative Undocumented
mno-gotplt
Target Report RejectNegative Mask(AVOID_GOTPLT) MaskExists
Together with -fpic and -fPIC, do not use GOTPLT references
; There's a small added setup cost with using GOTPLT references
; for the first (resolving) call, but should in total be a win
; both in code-size and execution-time.
mgotplt
Target Report RejectNegative InverseMask(AVOID_GOTPLT) Undocumented