; Options for the Renesas M32R port of the compiler.

; Copyright (C) 2005-2014 Free Software Foundation, Inc.
;
; 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/m32r/m32r-opts.h

; Selected code model.
Variable
enum m32r_model m32r_model_selected = M32R_MODEL_DEFAULT

; Selected SDA support.
Variable
enum m32r_sdata m32r_sdata_selected = M32R_SDATA_DEFAULT

m32rx
Target Report RejectNegative Mask(M32RX)
Compile for the m32rx

m32r2
Target Report RejectNegative Mask(M32R2)
Compile for the m32r2

m32r
Target RejectNegative
Compile for the m32r

malign-loops
Target Report Mask(ALIGN_LOOPS)
Align all loops to 32 byte boundary

mbranch-cost=1
Target Report RejectNegative Mask(BRANCH_COST)
Prefer branches over conditional execution

mbranch-cost=2
Target Report RejectNegative InverseMask(BRANCH_COST)
Give branches their default cost

mdebug
Target Mask(DEBUG)
Display compile time statistics

mflush-func=
Target RejectNegative Joined Var(m32r_cache_flush_func) Init(CACHE_FLUSH_FUNC)
Specify cache flush function

mflush-trap=
Target RejectNegative Joined UInteger Var(m32r_cache_flush_trap) Init(CACHE_FLUSH_TRAP)
Specify cache flush trap number

missue-rate=1
Target Report RejectNegative Mask(LOW_ISSUE_RATE)
Only issue one instruction per cycle

missue-rate=2
Target Report RejectNegative InverseMask(LOW_ISSUE_RATE)
Allow two instructions to be issued per cycle

mmodel=
Target RejectNegative Joined Enum(m32r_model) Var(m32r_model_selected)
Code size: small, medium or large

Enum
Name(m32r_model) Type(enum m32r_model)

EnumValue
Enum(m32r_model) String(small) Value(M32R_MODEL_SMALL)

EnumValue
Enum(m32r_model) String(medium) Value(M32R_MODEL_MEDIUM)

EnumValue
Enum(m32r_model) String(large) Value(M32R_MODEL_LARGE)

mno-flush-func
Target RejectNegative
Don't call any cache flush functions

mno-flush-trap
Target RejectNegative Var(m32r_cache_flush_trap, -1)
Don't call any cache flush trap

; mrelax
; Target Mask(RELAX)

msdata=
Target RejectNegative Joined Enum(m32r_sdata) Var(m32r_sdata_selected)
Small data area: none, sdata, use

Enum
Name(m32r_sdata) Type(enum m32r_sdata)

EnumValue
Enum(m32r_sdata) String(none) Value(M32R_SDATA_NONE)

EnumValue
Enum(m32r_sdata) String(sdata) Value(M32R_SDATA_SDATA)

EnumValue
Enum(m32r_sdata) String(use) Value(M32R_SDATA_USE)
