; Options of Andes NDS32 cpu for GNU compiler
; Copyright (C) 2012-2022 Free Software Foundation, Inc.
; Contributed by Andes Technology Corporation.
;
; 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/nds32/nds32-opts.h

; ---------------------------------------------------------------
; The following options are designed for aliasing and compatibility options.

EB
Target RejectNegative Alias(mbig-endian)
Generate code in big-endian mode.

EL
Target RejectNegative Alias(mlittle-endian)
Generate code in little-endian mode.

mfp-as-gp
Target RejectNegative Alias(mforce-fp-as-gp)
Force performing fp-as-gp optimization.

mno-fp-as-gp
Target RejectNegative Alias(mforbid-fp-as-gp)
Forbid performing fp-as-gp optimization.

; ---------------------------------------------------------------

mabi=
Target RejectNegative Joined Enum(abi_type) Var(nds32_abi) Init(TARGET_DEFAULT_ABI)
Specify which ABI type to generate code for: 2, 2fp+.

Enum
Name(abi_type) Type(enum abi_type)
Known ABIs (for use with the -mabi= option):

EnumValue
Enum(abi_type) String(2) Value(NDS32_ABI_V2)

EnumValue
Enum(abi_type) String(2fp+) Value(NDS32_ABI_V2_FP_PLUS)

mfloat-abi=soft
Target RejectNegative Alias(mabi=, 2)
Specify use soft floating point ABI which mean alias to -mabi=2.

mfloat-abi=hard
Target RejectNegative Alias(mabi=, 2fp+)
Specify use soft floating point ABI which mean alias to -mabi=2fp+.

; ---------------------------------------------------------------

mreduced-regs
Target RejectNegative Negative(mfull-regs) Mask(REDUCED_REGS)
Use reduced-set registers for register allocation.

mfull-regs
Target RejectNegative Negative(mreduced-regs) InverseMask(REDUCED_REGS)
Use full-set registers for register allocation.

; ---------------------------------------------------------------

malways-align
Target Mask(ALWAYS_ALIGN)
Always align function entry, jump target and return address.

malign-functions
Target Mask(ALIGN_FUNCTION)
Align function entry to 4 byte.

mbig-endian
Target Undocumented RejectNegative Negative(mlittle-endian) Mask(BIG_ENDIAN)
Generate code in big-endian mode.

mlittle-endian
Target Undocumented RejectNegative Negative(mbig-endian) InverseMask(BIG_ENDIAN)
Generate code in little-endian mode.

mforce-fp-as-gp
Target Undocumented Mask(FORCE_FP_AS_GP)
Prevent $fp being allocated during register allocation so that compiler is able to force performing fp-as-gp optimization.

mforbid-fp-as-gp
Target Undocumented Mask(FORBID_FP_AS_GP)
Forbid using $fp to access static and global variables.  This option strictly forbids fp-as-gp optimization regardless of '-mforce-fp-as-gp'.

mict-model=
Target Undocumented RejectNegative Joined Enum(nds32_ict_model_type) Var(nds32_ict_model) Init(ICT_MODEL_SMALL)
Specify the address generation strategy for ICT call's code model.

Enum
Name(nds32_ict_model_type) Type(enum nds32_ict_model_type)
Known cmodel types (for use with the -mict-model= option):

EnumValue
Enum(nds32_ict_model_type) String(small) Value(ICT_MODEL_SMALL)

EnumValue
Enum(nds32_ict_model_type) String(large) Value(ICT_MODEL_LARGE)

mcmov
Target Mask(CMOV)
Generate conditional move instructions.

mhw-abs
Target Mask(HW_ABS)
Generate hardware abs instructions.

mext-perf
Target Mask(EXT_PERF)
Generate performance extension instructions.

mext-perf2
Target Mask(EXT_PERF2)
Generate performance extension version 2 instructions.

mext-string
Target Mask(EXT_STRING)
Generate string extension instructions.

mext-dsp
Target Mask(EXT_DSP)
Generate DSP extension instructions.

mv3push
Target Mask(V3PUSH)
Generate v3 push25/pop25 instructions.

m16-bit
Target Mask(16_BIT)
Generate 16-bit instructions.

mrelax-hint
Target Mask(RELAX_HINT)
Insert relax hint for linker to do relaxation.

mvh
Target Mask(VH) Condition(!TARGET_LINUX_ABI)
Enable Virtual Hosting support.

misr-vector-size=
Target RejectNegative Joined UInteger Var(nds32_isr_vector_size) Init(NDS32_DEFAULT_ISR_VECTOR_SIZE)
Specify the size of each interrupt vector, which must be 4 or 16.

misr-secure=
Target RejectNegative Joined UInteger Var(nds32_isr_secure_level) Init(0)
Specify the security level of c-isr for the whole file.

mcache-block-size=
Target RejectNegative Joined UInteger Var(nds32_cache_block_size) Init(NDS32_DEFAULT_CACHE_BLOCK_SIZE)
Specify the size of each cache block, which must be a power of 2 between 4 and 512.

march=
Target RejectNegative Joined Enum(nds32_arch_type) Var(nds32_arch_option) Init(ARCH_V3)
Specify the name of the target architecture.

Enum
Name(nds32_arch_type) Type(enum nds32_arch_type)
Known arch types (for use with the -march= option):

EnumValue
Enum(nds32_arch_type) String(v2) Value(ARCH_V2)

EnumValue
Enum(nds32_arch_type) String(v3) Value(ARCH_V3)

EnumValue
Enum(nds32_arch_type) String(v3j) Value(ARCH_V3J)

EnumValue
Enum(nds32_arch_type) String(v3m) Value(ARCH_V3M)

EnumValue
Enum(nds32_arch_type) String(v3f) Value(ARCH_V3F)

EnumValue
Enum(nds32_arch_type) String(v3s) Value(ARCH_V3S)

mcpu=
Target RejectNegative Joined Enum(nds32_cpu_type) Var(nds32_cpu_option) Init(CPU_N9)
Specify the cpu for pipeline model.

Enum
Name(nds32_cpu_type) Type(enum nds32_cpu_type)
Known cpu types (for use with the -mcpu= option):

EnumValue
Enum(nds32_cpu_type) String(n6) Value(CPU_N6)

EnumValue
Enum(nds32_cpu_type) String(n650) Value(CPU_N6)

EnumValue
Enum(nds32_cpu_type) String(n7) Value(CPU_N7)

EnumValue
Enum(nds32_cpu_type) String(n705) Value(CPU_N7)

EnumValue
Enum(nds32_cpu_type) String(n8) Value(CPU_N8)

EnumValue
Enum(nds32_cpu_type) String(n801) Value(CPU_N8)

EnumValue
Enum(nds32_cpu_type) String(sn8) Value(CPU_N8)

EnumValue
Enum(nds32_cpu_type) String(sn801) Value(CPU_N8)

EnumValue
Enum(nds32_cpu_type) String(s8) Value(CPU_N8)

EnumValue
Enum(nds32_cpu_type) String(s801) Value(CPU_N8)

EnumValue
Enum(nds32_cpu_type) String(e8) Value(CPU_E8)

EnumValue
Enum(nds32_cpu_type) String(e801) Value(CPU_E8)

EnumValue
Enum(nds32_cpu_type) String(n820) Value(CPU_E8)

EnumValue
Enum(nds32_cpu_type) String(s830) Value(CPU_E8)

EnumValue
Enum(nds32_cpu_type) String(e830) Value(CPU_E8)

EnumValue
Enum(nds32_cpu_type) String(n9) Value(CPU_N9)

EnumValue
Enum(nds32_cpu_type) String(n903) Value(CPU_N9)

EnumValue
Enum(nds32_cpu_type) String(n903a) Value(CPU_N9)

EnumValue
Enum(nds32_cpu_type) String(n968) Value(CPU_N9)

EnumValue
Enum(nds32_cpu_type) String(n968a) Value(CPU_N9)

EnumValue
Enum(nds32_cpu_type) String(n10) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1033) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1033a) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1033-fpu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1033-spu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1068) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1068a) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1068-fpu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1068a-fpu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1068-spu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(n1068a-spu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(d10) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(d1088) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(d1088-fpu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) String(d1088-spu) Value(CPU_N10)

EnumValue
Enum(nds32_cpu_type) Undocumented String(graywolf) Value(CPU_GRAYWOLF)

EnumValue
Enum(nds32_cpu_type) String(n15) Value(CPU_GRAYWOLF)

EnumValue
Enum(nds32_cpu_type) String(d15) Value(CPU_GRAYWOLF)

EnumValue
Enum(nds32_cpu_type) String(n15s) Value(CPU_GRAYWOLF)

EnumValue
Enum(nds32_cpu_type) String(d15s) Value(CPU_GRAYWOLF)

EnumValue
Enum(nds32_cpu_type) String(n15f) Value(CPU_GRAYWOLF)

EnumValue
Enum(nds32_cpu_type) String(d15f) Value(CPU_GRAYWOLF)

EnumValue
Enum(nds32_cpu_type) String(n12) Value(CPU_N12)

EnumValue
Enum(nds32_cpu_type) String(n1213) Value(CPU_N12)

EnumValue
Enum(nds32_cpu_type) String(n1233) Value(CPU_N12)

EnumValue
Enum(nds32_cpu_type) String(n1233-fpu) Value(CPU_N12)

EnumValue
Enum(nds32_cpu_type) String(n1233-spu) Value(CPU_N12)

EnumValue
Enum(nds32_cpu_type) String(n13) Value(CPU_N13)

EnumValue
Enum(nds32_cpu_type) String(n1337) Value(CPU_N13)

EnumValue
Enum(nds32_cpu_type) String(n1337-fpu) Value(CPU_N13)

EnumValue
Enum(nds32_cpu_type) String(n1337-spu) Value(CPU_N13)

EnumValue
Enum(nds32_cpu_type) String(simple) Value(CPU_SIMPLE)

mconfig-fpu=
Target RejectNegative Joined Enum(float_reg_number) Var(nds32_fp_regnum) Init(TARGET_CONFIG_FPU_DEFAULT)
Specify a fpu configuration value from 0 to 7; 0-3 is as FPU spec says, and 4-7 is corresponding to 0-3.

Enum
Name(float_reg_number) Type(enum float_reg_number)
Known floating-point number of registers (for use with the -mconfig-fpu= option):

EnumValue
Enum(float_reg_number) String(0) Value(NDS32_CONFIG_FPU_0)

EnumValue
Enum(float_reg_number) String(1) Value(NDS32_CONFIG_FPU_1)

EnumValue
Enum(float_reg_number) String(2) Value(NDS32_CONFIG_FPU_2)

EnumValue
Enum(float_reg_number) String(3) Value(NDS32_CONFIG_FPU_3)

EnumValue
Enum(float_reg_number) String(4) Value(NDS32_CONFIG_FPU_4)

EnumValue
Enum(float_reg_number) String(5) Value(NDS32_CONFIG_FPU_5)

EnumValue
Enum(float_reg_number) String(6) Value(NDS32_CONFIG_FPU_6)

EnumValue
Enum(float_reg_number) String(7) Value(NDS32_CONFIG_FPU_7)

mconfig-mul=
Target RejectNegative Joined Enum(nds32_mul_type) Var(nds32_mul_config) Init(MUL_TYPE_FAST_1)
Specify configuration of instruction mul: fast1, fast2 or slow. The default is fast1.

Enum
Name(nds32_mul_type) Type(enum nds32_mul_type)

EnumValue
Enum(nds32_mul_type) String(fast) Value(MUL_TYPE_FAST_1)

EnumValue
Enum(nds32_mul_type) String(fast1) Value(MUL_TYPE_FAST_1)

EnumValue
Enum(nds32_mul_type) String(fast2) Value(MUL_TYPE_FAST_2)

EnumValue
Enum(nds32_mul_type) String(slow) Value(MUL_TYPE_SLOW)

mconfig-register-ports=
Target RejectNegative Joined Enum(nds32_register_ports) Var(nds32_register_ports_config) Init(REG_PORT_3R2W)
Specify how many read/write ports for n9/n10 cores.  The value should be 3r2w or 2r1w.

Enum
Name(nds32_register_ports) Type(enum nds32_register_ports)

EnumValue
Enum(nds32_register_ports) String(3r2w) Value(REG_PORT_3R2W)

EnumValue
Enum(nds32_register_ports) String(2r1w) Value(REG_PORT_2R1W)

mctor-dtor
Target
Enable constructor/destructor feature.

mrelax
Target
Guide linker to relax instructions.

mext-fpu-fma
Target Mask(EXT_FPU_FMA)
Generate floating-point multiply-accumulation instructions.

mext-fpu-sp
Target Mask(FPU_SINGLE)
Generate single-precision floating-point instructions.

mext-fpu-dp
Target Mask(FPU_DOUBLE)
Generate double-precision floating-point instructions.

mforce-no-ext-dsp
Target Undocumented Mask(FORCE_NO_EXT_DSP)
Force disable hardware loop, even use -mext-dsp.

msched-prolog-epilog
Target Var(flag_sched_prolog_epilog) Init(0)
Permit scheduling of a function's prologue and epilogue sequence.

mret-in-naked-func
Target Var(flag_ret_in_naked_func) Init(1)
Generate return instruction in naked function.

malways-save-lp
Target Var(flag_always_save_lp) Init(0)
Always save $lp in the stack.

munaligned-access
Target Var(flag_unaligned_access) Init(0)
Enable unaligned word and halfword accesses to packed data.

minline-asm-r15
Target Var(flag_inline_asm_r15) Init(0)
Allow use r15 for inline ASM.
