; Command line options for the Renesas RX port of GCC.
; Copyright (C) 2008-2014 Free Software Foundation, Inc.
; Contributed by Red Hat.
;
; 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/rx/rx-opts.h

; The default is -fpu -m32bit-doubles.

m64bit-doubles
Target RejectNegative Mask(64BIT_DOUBLES) Report
Store doubles in 64 bits.

m32bit-doubles
Target RejectNegative InverseMask(64BIT_DOUBLES) Report
Stores doubles in 32 bits.  This is the default.

nofpu
Target RejectNegative Alias(mnofpu)
Disable the use of RX FPU instructions.  

mnofpu
Target RejectNegative Mask(NO_USE_FPU) Report Undocumented

fpu
Target RejectNegative InverseMask(NO_USE_FPU) Report
Enable the use of RX FPU instructions.  This is the default.

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

mcpu=
Target RejectNegative Joined Var(rx_cpu_type) Report ToLower Enum(rx_cpu_types) Init(RX600)
Specify the target RX cpu type.

Enum
Name(rx_cpu_types) Type(enum rx_cpu_types)

EnumValue
Enum(rx_cpu_types) String(rx610) Value(RX610)

EnumValue
Enum(rx_cpu_types) String(rx200) Value(RX200)

EnumValue
Enum(rx_cpu_types) String(rx600) Value(RX600)

EnumValue
Enum(rx_cpu_types) String(rx100) Value(RX100)

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

mbig-endian-data
Target RejectNegative Mask(BIG_ENDIAN_DATA) Report
Data is stored in big-endian format.

mlittle-endian-data
Target RejectNegative InverseMask(BIG_ENDIAN_DATA) Report
Data is stored in little-endian format.  (Default).

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

msmall-data-limit=
Target RejectNegative Joined UInteger Var(rx_small_data_limit) Init(0)
Maximum size of global and static variables which can be placed into the small data area.

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

msim
Target
Use the simulator runtime.

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

mas100-syntax
Target Mask(AS100_SYNTAX) Report
Generate assembler output that is compatible with the Renesas AS100 assembler.  This may restrict some of the compiler's capabilities.  The default is to generate GAS compatible syntax.

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

mrelax
Target
Enable linker relaxation.

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

mmax-constant-size=
Target RejectNegative Joined UInteger Var(rx_max_constant_size) Init(0)
Maximum size in bytes of constant values allowed as operands.

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

mint-register=
Target RejectNegative Joined UInteger Var(rx_deferred_options) Defer
Specifies the number of registers to reserve for interrupt handlers.

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

msave-acc-in-interrupts
Target Mask(SAVE_ACC_REGISTER)
Specifies whether interrupt functions should save and restore the accumulator register.

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

mpid
Target Mask(PID)
Enables Position-Independent-Data (PID) mode.

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

mwarn-multiple-fast-interrupts
Target Report Var(rx_warn_multiple_fast_interrupts) Init(1) Warning
Warn when multiple, different, fast interrupt handlers are in the compilation unit.

mgcc-abi
Target RejectNegative Report Mask(GCC_ABI)
Enable the use of the old, broken, ABI where all stacked function arguments are aligned to 32-bits.

mrx-abi
Target RejectNegative Report InverseMask(GCC_ABI)
Enable the use the standard RX ABI where all stacked function arguments are naturally aligned.  This is the default.

mlra
Target Report Mask(ENABLE_LRA)
Enable the use of the LRA register allocator.
