; 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, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, 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 Var(cris_cpu_str)

march=
Target Report RejectNegative Joined Var(cris_cpu_str)
-march=ARCH	Generate code for the specified chip or CPU version

mtune=
Target Report RejectNegative Joined Var(cris_tune_str)
-mtune=ARCH	Tune alignment for the specified chip or CPU version

mmax-stackframe=
Target Report RejectNegative Joined Var(cris_max_stackframe_str)
-mmax-stackframe=SIZE	Warn when a stackframe is larger than the specified size

max-stackframe=
Target Report RejectNegative Joined Undocumented Var(cris_max_stackframe_str)

; 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)
