; Options for the CRIS port of the compiler.

; Copyright (C) 2005-2021 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 3, 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 COPYING3.  If not see
; <http://www.gnu.org/licenses/>.

; 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 behavior
; 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 Mask(MUL_BUG)
Work around bug in multiplication instruction.

; TARGET_ETRAX4_ADD: Instruction-set additions from Etrax 4 and up.
; (Just "lz".)
metrax4
Target Mask(ETRAX4_ADD)
Compile for ETRAX 4 (CRIS v3).

; See cris_handle_option.
metrax100
Target RejectNegative
Compile for ETRAX 100 (CRIS v8).

; See cris_handle_option.
mno-etrax100
Target RejectNegative Undocumented

mpdebug
Target 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 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 RejectNegative Mask(SIDE_EFFECT_PREFIXES) Undocumented

mno-side-effects
Target 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 RejectNegative Mask(STACK_ALIGN) Undocumented

mno-stack-align
Target RejectNegative InverseMask(STACK_ALIGN)
Do not tune stack alignment.

; TARGET_DATA_ALIGN: Whether to do alignment on individual
; modifiable objects.
mdata-align
Target RejectNegative Mask(DATA_ALIGN) Undocumented

mno-data-align
Target 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 RejectNegative Mask(CONST_ALIGN) Undocumented

mno-const-align
Target RejectNegative InverseMask(CONST_ALIGN)
Do not tune code and read-only data alignment.

; See cris_handle_option.
m32-bit
Target RejectNegative Undocumented

; See cris_handle_option.
m32bit
Target RejectNegative
Align code and data to 32 bits.

; See cris_handle_option.
m16-bit
Target RejectNegative Undocumented

; See cris_handle_option.
m16bit
Target RejectNegative Undocumented

; See cris_handle_option.
m8-bit
Target RejectNegative Undocumented

; See cris_handle_option.
m8bit
Target RejectNegative
Don't align items in code or data.

; TARGET_PROLOGUE_EPILOGUE: Whether or not to omit function
; prologue and epilogue.
mprologue-epilogue
Target RejectNegative Mask(PROLOGUE_EPILOGUE) Undocumented

mno-prologue-epilogue
Target 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 RejectNegative
Use the most feature-enabling options allowed by other options.

; FIXME: The following comment relates to gcc before cris.opt.
; Check if 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 RejectNegative
Override -mbest-lib-options.

mcpu=
Target RejectNegative Joined Undocumented Var(cris_cpu_str)

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

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

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

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

mtrap-using-break8
Target Var(cris_trap_using_break8) Init(2)
Emit traps as \"break 8\", default for CRIS v3 and up.  If disabled, calls to abort() are used.

mtrap-unaligned-atomic
Target Var(cris_trap_unaligned_atomic) Init(2)
Emit checks causing \"break 8\" instructions to execute when applying atomic builtins on misaligned memory.

munaligned-atomic-may-use-library
Target Var(cris_atomics_calling_libfunc) Init(2)
Handle atomic builtins that may be applied to unaligned data by calling library functions. Overrides -mtrap-unaligned-atomic.

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