;; Command-line options for the C-SKY back end.
;; Copyright (C) 2018-2021 Free Software Foundation, Inc.
;; Contributed by C-SKY Microsystems and Mentor Graphics.
;;
;; 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/csky/csky_opts.h

;; Architecture/CPU options.
;; Normal CPU and arch enums are loaded from csky_tables.opt.

; For backward compatibility only.
march=ck803s
Target Var(flag_arch_ck803s) Undocumented

march=
Target RejectNegative ToLower Joined Enum(csky_arch) Var(csky_arch_option) Save
Specify the target architecture.

mcpu=
Target RejectNegative ToLower Joined Enum(csky_processor_type) Var(csky_cpu_option) Init(TARGET_CPU_csky_none) Save
Specify the target processor.

;; Endianness options.

mbig-endian
Target RejectNegative Mask(BIG_ENDIAN)
Generate big-endian code.

EB
Target RejectNegative Alias(mbig-endian) Undocumented

mlittle-endian
Target RejectNegative InverseMask(BIG_ENDIAN)
Generate little-endian code.

EL
Target RejectNegative Alias(mlittle-endian) Undocumented

;; Floating point options.  These affect code generation but not
;; assembly.

mhard-float
Target RejectNegative Alias(mfloat-abi=, hard) Undocumented

msoft-float
Target RejectNegative Alias(mfloat-abi=, soft) Undocumented

mfloat-abi=v2
Target RejectNegative Alias(mfloat-abi=, hard) Undocumented

mfloat-abi=v1
Target RejectNegative Alias(mfloat-abi=, softfp) Undocumented

mfloat-abi=
Target RejectNegative Joined Enum(float_abi_type) Var(csky_float_abi) Init(CSKY_FLOAT_ABI_SOFT)
Specify if floating point hardware should be used.

Enum
Name(float_abi_type) Type(enum float_abi_type)
Known floating-point ABIs (for use with the -mfloat-abi= option):

EnumValue
Enum(float_abi_type) String(soft) Value(CSKY_FLOAT_ABI_SOFT)

EnumValue
Enum(float_abi_type) String(softfp) Value(CSKY_FLOAT_ABI_SOFTFP)

EnumValue
Enum(float_abi_type) String(hard) Value(CSKY_FLOAT_ABI_HARD)

mfpu=
Target RejectNegative Joined Enum(csky_fpu) Var(csky_fpu_index) Init(TARGET_FPU_auto) Save
Specify the target floating-point hardware/format.

mdouble-float
Target Var(TARGET_DOUBLE_FLOAT) Init(-1)
Generate C-SKY FPU double float instructions (default for hard float).

mfdivdu
Target Var(TARGET_FDIVDU) Init(-1)
Generate frecipd/fsqrtd/fdivd instructions (default for hard float).

;; Instruction set extensions.  Most of these don't affect code
;; generation, and are passed through to the assembler.
;; There are builtin preprocessor defines for each of these.

melrw
Target Var(TARGET_ELRW) Init(-1)
Enable the extended LRW instruction (default for CK801).

mistack
Target Mask(ISTACK)
Enable interrupt stack instructions.

mmp
Target RejectNegative Mask(MP)
Enable multiprocessor instructions.

mcp
Target RejectNegative Mask(CP)
Enable coprocessor instructions.

mcache
Target RejectNegative Mask(CACHE)
Enable cache prefetch instructions.

msecurity
Target RejectNegative Mask(SECURITY)
Enable C-SKY SECURE instructions.

mmac
Target RejectNegative Alias(msecurity) Undocumented

mtrust
Target RejectNegative Mask(TRUST)
Enable C-SKY TRUST instructions.

mdsp
Target RejectNegative Var(TARGET_DSP)
Enable C-SKY DSP instructions.

medsp
Target RejectNegative Mask(EDSP)
Enable C-SKY Enhanced DSP instructions.

mvdsp
Target RejectNegative Mask(VDSP)
Enable C-SKY Vector DSP instructions.

;; Code generation options not passed to the assembler.

mdiv
Target Var(TARGET_DIV) Init(-1)
Generate divide instructions.

msmart
Target Var(TARGET_MINI_REGISTERS) Init(-1)
Generate code for Smart Mode.

mhigh-registers
Target Var(TARGET_HIGH_REGISTERS) Init(-1)
Enable use of R16-R31 (default).

manchor
Target Var(TARGET_ANCHOR)
Generate code using global anchor symbol addresses.

mpushpop
Target Var(TARGET_PUSHPOP) Init(1)
Generate push/pop instructions (default).

mmultiple-stld
Target Var(TARGET_MULTIPLE_STLD) Init(-1)
Generate stm/ldm instructions (default).

mstm
Target Alias(mmultiple-stld) Undocumented

mconstpool
Target Var(TARGET_CONSTANT_POOL) Init(-1)
Generate constant pools in the compiler instead of assembler.

mstack-size
Target Var(TARGET_STACK_SIZE) Init(0)
Emit .stack_size directives.

mccrt
Target Var(TARGET_LIBCCRT) Init(0)
Generate code for C-SKY compiler runtime instead of libgcc.

mbranch-cost=
Target Joined RejectNegative UInteger Var(csky_branch_cost) Init(1)
Set the branch costs to roughly the specified number of instructions.

msched-prolog
Target Var(flag_sched_prolog) Init(0)
Permit scheduling of function prologue and epilogue sequences.

msim
Target
Use the simulator runtime.
