; Options for the SH port of the compiler.

; Copyright (C) 2005, 2006 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 2, 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 COPYING.  If not, write to the Free
; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, USA.

;; Used for various architecture options.
Mask(SH_E)

;; Set if the default precision of th FPU is single.
Mask(FPU_SINGLE)

;; Set if we should generate code using type 2A insns.
Mask(HARD_SH2A)

;; Set if we should generate code using type 2A DF insns.
Mask(HARD_SH2A_DOUBLE)

;; Set if compiling for SH4 hardware (to be used for insn costs etc.)
Mask(HARD_SH4)

;; Set if we should generate code for a SH5 CPU (either ISA).
Mask(SH5)

;; Set if we should save all target registers.
Mask(SAVE_ALL_TARGET_REGS)

m1
Target RejectNegative Mask(SH1) Condition(SUPPORT_SH1)
Generate SH1 code

m2
Target RejectNegative Mask(SH2) Condition(SUPPORT_SH2)
Generate SH2 code

m2a
Target RejectNegative Condition(SUPPORT_SH2A)
Generate SH2a code

m2a-nofpu
Target RejectNegative Condition(SUPPORT_SH2A_NOFPU)
Generate SH2a FPU-less code

m2a-single
Target RejectNegative Condition (SUPPORT_SH2A_SINGLE)
Generate default single-precision SH2a code

m2a-single-only
Target RejectNegative Condition (SUPPORT_SH2A_SINGLE_ONLY)
Generate only single-precision SH2a code

m2e
Target RejectNegative Condition(SUPPORT_SH2E)
Generate SH2e code

m3
Target RejectNegative Mask(SH3) Condition(SUPPORT_SH3)
Generate SH3 code

m3e
Target RejectNegative Condition(SUPPORT_SH3E)
Generate SH3e code

m4
Target RejectNegative Mask(SH4) Condition(SUPPORT_SH4)
Generate SH4 code

m4-100
Target RejectNegative Condition(SUPPORT_SH4)
Generate SH4-100 code

m4-200
Target RejectNegative Condition(SUPPORT_SH4)
Generate SH4-200 code

m4-nofpu
Target RejectNegative Condition(SUPPORT_SH4_NOFPU)
Generate SH4 FPU-less code

m4-400
Target RejectNegative Condition(SUPPORT_SH4_NOFPU)
Generate code for SH4 400 series (MMU/FPU-less)
;; passes -isa=sh4-nommu-nofpu to the assembler.

m4-500
Target RejectNegative Condition(SUPPORT_SH4_NOFPU)
Generate code for SH4 500 series (FPU-less).
;; passes -isa=sh4-nofpu to the assembler.

m4-single
Target RejectNegative Condition(SUPPORT_SH4_SINGLE)
Generate default single-precision SH4 code

m4-100-single
Target RejectNegative Condition(SUPPORT_SH4_SINGLE)
Generate default single-precision SH4-100 code

m4-200-single
Target RejectNegative Condition(SUPPORT_SH4_SINGLE)
Generate default single-precision SH4-200 code

m4-single-only
Target RejectNegative Condition(SUPPORT_SH4_SINGLE_ONLY)
Generate only single-precision SH4 code

m4-100-single-only
Target RejectNegative Condition(SUPPORT_SH4_SINGLE_ONLY)
Generate only single-precision SH4-100 code

m4-200-single-only
Target RejectNegative Condition(SUPPORT_SH4_SINGLE_ONLY)
Generate only single-precision SH4-200 code

m4a
Target RejectNegative Mask(SH4A) Condition(SUPPORT_SH4A)
Generate SH4a code

m4a-nofpu
Target RejectNegative Condition(SUPPORT_SH4A_NOFPU)
Generate SH4a FPU-less code

m4a-single
Target RejectNegative Condition(SUPPORT_SH4A_SINGLE)
Generate default single-precision SH4a code

m4a-single-only
Target RejectNegative Condition(SUPPORT_SH4A_SINGLE_ONLY)
Generate only single-precision SH4a code

m4al
Target RejectNegative Condition(SUPPORT_SH4AL)
Generate SH4al-dsp code

m5-32media
Target RejectNegative Condition(SUPPORT_SH5_32MEDIA)
Generate 32-bit SHmedia code

m5-32media-nofpu
Target RejectNegative Condition(SUPPORT_SH5_32MEDIA_NOFPU)
Generate 32-bit FPU-less SHmedia code

m5-64media
Target RejectNegative Condition(SUPPORT_SH5_64MEDIA)
Generate 64-bit SHmedia code

m5-64media-nofpu
Target RejectNegative Condition(SUPPORT_SH5_64MEDIA_NOFPU)
Generate 64-bit FPU-less SHmedia code

m5-compact
Target RejectNegative Condition(SUPPORT_SH5_32MEDIA)
Generate SHcompact code

m5-compact-nofpu
Target RejectNegative Condition(SUPPORT_SH5_32MEDIA_NOFPU)
Generate FPU-less SHcompact code

madjust-unroll
Target Report Mask(ADJUST_UNROLL) Condition(SUPPORT_ANY_SH5)
Throttle unrolling to avoid thrashing target registers unless the unroll benefit outweighs this

mb
Target Report RejectNegative InverseMask(LITTLE_ENDIAN)
Generate code in big endian mode

mbigtable
Target Report RejectNegative Mask(BIGTABLE)
Generate 32-bit offsets in switch tables

mcut2-workaround
Target RejectNegative Var(TARGET_SH5_CUT2_WORKAROUND)
Enable SH5 cut2 workaround

mdalign
Target Report RejectNegative Mask(ALIGN_DOUBLE)
Align doubles at 64-bit boundaries

mdiv=
Target RejectNegative Joined Var(sh_div_str) Init("")
Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp call-div1 call-fp call-table

mdivsi3_libfunc=
Target RejectNegative Joined Var(sh_divsi3_libfunc) Init("")
Specify name for 32 bit signed division function

mfmovd
Target RejectNegative Mask(FMOVD) Undocumented

mgettrcost=
Target RejectNegative Joined UInteger Var(sh_gettrcost) Init(-1)
Cost to assume for gettr insn

mhitachi
Target Report RejectNegative Mask(HITACHI)
Follow Renesas (formerly Hitachi) / SuperH calling conventions

mieee
Target Report Mask(IEEE)
Increase the IEEE compliance for floating-point code

mindexed-addressing
Target Report Mask(ALLOW_INDEXED_ADDRESS) Condition(SUPPORT_ANY_SH5_32MEDIA)
Enable the use of the indexed addressing mode for SHmedia32/SHcompact

minvalid-symbols
Target Report Mask(INVALID_SYMBOLS) Condition(SUPPORT_ANY_SH5)
Assume symbols might be invalid

misize
Target Report RejectNegative Mask(DUMPISIZE)
Annotate assembler instructions with estimated addresses

ml
Target Report RejectNegative Mask(LITTLE_ENDIAN)
Generate code in little endian mode

mnomacsave
Target Report RejectNegative Mask(NOMACSAVE)
Mark MAC register as call-clobbered

;; ??? This option is not useful, but is retained in case there are people
;; who are still relying on it.  It may be deleted in the future.
mpadstruct
Target Report RejectNegative Mask(PADSTRUCT)
Make structs a multiple of 4 bytes (warning: ABI altered)

mprefergot
Target Report RejectNegative Mask(PREFERGOT)
Emit function-calls using global offset table when generating PIC

mpt-fixed
Target Report Mask(PT_FIXED) Condition(SUPPORT_ANY_SH5)
Assume pt* instructions won't trap

mrelax
Target Report RejectNegative Mask(RELAX)
Shorten address references during linking

mrenesas
Target Mask(HITACHI) MaskExists
Follow Renesas (formerly Hitachi) / SuperH calling conventions

mspace
Target Report RejectNegative Mask(SMALLCODE)
Deprecated. Use -Os instead

multcost=
Target RejectNegative Joined UInteger Var(sh_multcost) Init(-1)
Cost to assume for a multiply insn

musermode
Target Report RejectNegative Mask(USERMODE)
Generate library function call to invalidate instruction cache entries after fixing trampoline

;; We might want to enable this by default for TARGET_HARD_SH4, because
;; zero-offset branches have zero latency.  Needs some benchmarking.
mpretend-cmove
Target Var(TARGET_PRETEND_CMOVE)
Pretend a branch-around-a-move is a conditional move.
