; Command line options for the Renesas RL78 port of GCC.
; Copyright (C) 2011-2018 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 Report
Use the simulator runtime.

mmul=
Target RejectNegative Joined Var(rl78_mul_type) Report 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) Report Optimization
Use all registers, reserving none for interrupt handlers.

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

mcpu=
Target RejectNegative Joined Var(rl78_cpu_type) Report 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 Report Alias(mcpu=, g10)
Alias for -mcpu=g10.

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

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

mrl78
Target RejectNegative Report 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.
