; Command line options for the Renesas RL78 port of GCC.
; Copyright (C) 2011-2021 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/rl78/rl78-opts.h

msim
Target
Use the simulator runtime.

mmul=
Target RejectNegative Joined Var(rl78_mul_type) Tolower Enum(rl78_mul_types) Init(MUL_UNINIT)
Selects the type of hardware multiplication and division to use (none/g13/g14).

Enum
Name(rl78_mul_types) Type(enum rl78_mul_types)

EnumValue
Enum(rl78_mul_types) String(g10) Value(MUL_NONE)

EnumValue
Enum(rl78_mul_types) String(g13) Value(MUL_G13)

EnumValue
Enum(rl78_mul_types) String(g14) Value(MUL_G14)

EnumValue
Enum(rl78_mul_types) String(rl78) Value(MUL_G14)

mallregs
Target Mask(ALLREGS) Optimization
Use all registers, reserving none for interrupt handlers.

mrelax
Target Optimization
Enable assembler and linker relaxation.  Enabled by default at -Os.

mcpu=
Target RejectNegative Joined Var(rl78_cpu_type) ToLower Enum(rl78_cpu_types) Init(CPU_UNINIT)
Selects the type of RL78 core being targeted (g10/g13/g14).  The default is the G14.  If set, also selects the hardware multiply support to be used.

Enum
Name(rl78_cpu_types) Type(enum rl78_cpu_types)

EnumValue
Enum(rl78_cpu_types) String(g10) Value(CPU_G10)

EnumValue
Enum(rl78_cpu_types) String(g13) Value(CPU_G13)

EnumValue
Enum(rl78_cpu_types) String(g14) Value(CPU_G14)

EnumValue
Enum(rl78_cpu_types) String(rl78) Value(CPU_G14)

mg10
Target RejectNegative Alias(mcpu=, g10)
Alias for -mcpu=g10.

mg13
Target RejectNegative Alias(mcpu=, g13)
Alias for -mcpu=g13.

mg14
Target RejectNegative Alias(mcpu=, g14)
Alias for -mcpu=g14.

mrl78
Target RejectNegative Alias(mcpu=, g14)
Alias for -mcpu=g14.

mes0
Target Mask(ES0)
Assume ES is zero throughout program execution, use ES: for read-only data.

msave-mduc-in-interrupts
Target Mask(SAVE_MDUC_REGISTERS)
Stores the MDUC registers in interrupt handlers for G13 target.
