; Options for the SPARC 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/>.

HeaderInclude
config/sparc/sparc-opts.h

;; Debug flags
TargetVariable
unsigned int sparc_debug

mfpu
Target Mask(FPU)
Use hardware FP.

mhard-float
Target RejectNegative Mask(FPU)
Use hardware FP.

msoft-float
Target RejectNegative InverseMask(FPU)
Do not use hardware FP.

mflat
Target Mask(FLAT)
Use flat register window model.

munaligned-doubles
Target Mask(UNALIGNED_DOUBLES)
Assume possible double misalignment.

mapp-regs
Target Mask(APP_REGS)
Use ABI reserved registers.

mhard-quad-float
Target RejectNegative Mask(HARD_QUAD)
Use hardware quad FP instructions.

msoft-quad-float
Target RejectNegative InverseMask(HARD_QUAD)
Do not use hardware quad fp instructions.

mlra
Target Mask(LRA)
Enable Local Register Allocation.

mv8plus
Target Mask(V8PLUS)
Compile for V8+ ABI.

mvis
Target Mask(VIS)
Use UltraSPARC Visual Instruction Set version 1.0 extensions.

mvis2
Target Mask(VIS2)
Use UltraSPARC Visual Instruction Set version 2.0 extensions.

mvis3
Target Mask(VIS3)
Use UltraSPARC Visual Instruction Set version 3.0 extensions.

mvis4
Target Mask(VIS4)
Use UltraSPARC Visual Instruction Set version 4.0 extensions.

mvis4b
Target Mask(VIS4B)
Use additional VIS instructions introduced in OSA2017.

mcbcond
Target Mask(CBCOND)
Use UltraSPARC Compare-and-Branch extensions.

mfmaf
Target Mask(FMAF)
Use UltraSPARC Fused Multiply-Add extensions.

mfsmuld
Target Mask(FSMULD)
Use Floating-point Multiply Single to Double (FsMULd) instruction.

mpopc
Target Mask(POPC)
Use UltraSPARC Population-Count instruction.

msubxc
Target Mask(SUBXC)
Use UltraSPARC Subtract-Extended-with-Carry instruction.

mptr64
Target RejectNegative Mask(PTR64)
Pointers are 64-bit.

mptr32
Target RejectNegative InverseMask(PTR64)
Pointers are 32-bit.

m64
Target RejectNegative Mask(64BIT)
Use 64-bit ABI.

m32
Target RejectNegative InverseMask(64BIT)
Use 32-bit ABI.

mstack-bias
Target Mask(STACK_BIAS)
Use stack bias.

mfaster-structs
Target Mask(FASTER_STRUCTS)
Use structs on stronger alignment for double-word copies.

mrelax
Target
Optimize tail call instructions in assembler and linker.

muser-mode
Target InverseMask(SV_MODE)
Do not generate code that can only run in supervisor mode (default).

mcpu=
Target RejectNegative Joined Var(sparc_cpu_and_features) Enum(sparc_processor) Init(PROCESSOR_V7)
Use instructions of and schedule code for given CPU.

mtune=
Target RejectNegative Joined Var(sparc_cpu) Enum(sparc_processor) Init(PROCESSOR_V7)
Schedule code for given CPU.

Enum
Name(sparc_processor) Type(enum sparc_processor_type)

EnumValue
Enum(sparc_processor) String(native) Value(PROCESSOR_NATIVE) DriverOnly

EnumValue
Enum(sparc_processor) String(v7) Value(PROCESSOR_V7)

EnumValue
Enum(sparc_processor) String(cypress) Value(PROCESSOR_CYPRESS)

EnumValue
Enum(sparc_processor) String(v8) Value(PROCESSOR_V8)

EnumValue
Enum(sparc_processor) String(supersparc) Value(PROCESSOR_SUPERSPARC)

EnumValue
Enum(sparc_processor) String(hypersparc) Value(PROCESSOR_HYPERSPARC)

EnumValue
Enum(sparc_processor) String(leon) Value(PROCESSOR_LEON)

EnumValue
Enum(sparc_processor) String(leon3) Value(PROCESSOR_LEON3)

EnumValue
Enum(sparc_processor) String(leon3v7) Value(PROCESSOR_LEON3V7)

EnumValue
Enum(sparc_processor) String(leon5) Value(PROCESSOR_LEON5)

EnumValue
Enum(sparc_processor) String(sparclite) Value(PROCESSOR_SPARCLITE)

EnumValue
Enum(sparc_processor) String(f930) Value(PROCESSOR_F930)

EnumValue
Enum(sparc_processor) String(f934) Value(PROCESSOR_F934)

EnumValue
Enum(sparc_processor) String(sparclite86x) Value(PROCESSOR_SPARCLITE86X)

EnumValue
Enum(sparc_processor) String(sparclet) Value(PROCESSOR_SPARCLET)

EnumValue
Enum(sparc_processor) String(tsc701) Value(PROCESSOR_TSC701)

EnumValue
Enum(sparc_processor) String(v9) Value(PROCESSOR_V9)

EnumValue
Enum(sparc_processor) String(ultrasparc) Value(PROCESSOR_ULTRASPARC)

EnumValue
Enum(sparc_processor) String(ultrasparc3) Value(PROCESSOR_ULTRASPARC3)

EnumValue
Enum(sparc_processor) String(niagara) Value(PROCESSOR_NIAGARA)

EnumValue
Enum(sparc_processor) String(niagara2) Value(PROCESSOR_NIAGARA2)

EnumValue
Enum(sparc_processor) String(niagara3) Value(PROCESSOR_NIAGARA3)

EnumValue
Enum(sparc_processor) String(niagara4) Value(PROCESSOR_NIAGARA4)

EnumValue
Enum(sparc_processor) String(niagara7) Value(PROCESSOR_NIAGARA7)

EnumValue
Enum(sparc_processor) String(m8) Value(PROCESSOR_M8)

mcmodel=
Target RejectNegative Joined Var(sparc_code_model) Enum(sparc_code_model) Init(CM_32)
Use given SPARC-V9 code model.

Enum
Name(sparc_code_model) Type(enum sparc_code_model_type)

EnumValue
Enum(sparc_code_model) String(32) Value(CM_32)

EnumValue
Enum(sparc_code_model) String(medlow) Value(CM_MEDLOW)

EnumValue
Enum(sparc_code_model) String(medmid) Value(CM_MEDMID)

EnumValue
Enum(sparc_code_model) String(medany) Value(CM_MEDANY)

EnumValue
Enum(sparc_code_model) String(embmedany) Value(CM_EMBMEDANY)

mdebug=
Target RejectNegative Joined Undocumented Var(sparc_debug_string)
Enable debug output.

mstd-struct-return
Target Var(sparc_std_struct_return)
Enable strict 32-bit psABI struct return checking.

mfix-at697f
Target RejectNegative Var(sparc_fix_at697f)
Enable workaround for single erratum of AT697F processor
(corresponding to erratum #13 of AT697E processor).

mfix-ut699
Target RejectNegative Var(sparc_fix_ut699)
Enable workarounds for the errata of the UT699 processor.

mfix-ut700
Target RejectNegative Var(sparc_fix_ut700)
Enable workarounds for the errata of the UT699E/UT700 processor.

mfix-gr712rc
Target RejectNegative Var(sparc_fix_gr712rc)
Enable workarounds for the errata of the GR712RC processor.

;; Enable workaround for back-to-back store errata
TargetVariable
unsigned int sparc_fix_b2bst

;; Enable workaround for GRLIB-TN-0013 errata
TargetVariable
unsigned int sparc_fix_lost_divsqrt

Mask(LONG_DOUBLE_128)
;; Use 128-bit long double

Mask(LEON)
;; Generate code for LEON

Mask(LEON3)
;; Generate code for LEON3

Mask(SPARCLITE)
;; Generate code for SPARClite

Mask(SPARCLET)
;; Generate code for SPARClet

Mask(V8)
;; Generate code for SPARC-V8

Mask(V9)
;; Generate code for SPARC-V9

Mask(DEPRECATED_V8_INSNS)
;; Generate code that uses the V8 instructions deprecated
;; in the V9 architecture.

mmemory-model=
Target RejectNegative Joined Var(sparc_memory_model) Enum(sparc_memory_model) Init(SMM_DEFAULT)
Specify the memory model in effect for the program.

Enum
Name(sparc_memory_model) Type(enum sparc_memory_model_type)

EnumValue
Enum(sparc_memory_model) String(default) Value(SMM_DEFAULT)

EnumValue
Enum(sparc_memory_model) String(rmo) Value(SMM_RMO)

EnumValue
Enum(sparc_memory_model) String(pso) Value(SMM_PSO)

EnumValue
Enum(sparc_memory_model) String(tso) Value(SMM_TSO)

EnumValue
Enum(sparc_memory_model) String(sc) Value(SMM_SC)
