; Options for the CRIS port of the compiler.

; Copyright (C) 2005-2022 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.cc 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)
