Next: System V Options, Previous: H8/300 Options, Up: Submodel Options

#### 3.17.17 SH Options

These -m options are defined for the SH implementations:

`-m1`
  Generate code for the SH1.
`-m2`
  Generate code for the SH2.
`-m2e`
  Generate code for the SH2e.
`-m3`
  Generate code for the SH3.
`-m3e`
  Generate code for the SH3e.
`-m4-nofpu`
  Generate code for the SH4 without a floating-point unit.
`-m4-single-only`
  Generate code for the SH4 with a floating-point unit that only supports single-precision arithmetic.
`-m4-single`
  Generate code for the SH4 assuming the floating-point unit is in single-precision mode by default.
`-m4`
  Generate code for the SH4.
`-mb`
  Compile code for the processor in big endian mode.
`-ml`
  Compile code for the processor in little endian mode.
`-mdalign`
  Align doubles at 64-bit boundaries. Note that this changes the calling conventions, and thus some functions from the standard C library will not work unless you recompile it first with -mdalign.
`-mrelax`
  Shorten some address references at link time, when possible; uses the linker option -relax.
`-mbigtable`
  Use 32-bit offsets in `switch` tables. The default is to use 16-bit offsets.
`-mfmovd`
  Enable the use of the instruction `fmovd`.
`-mhitachi`
  Comply with the calling conventions defined by Renesas.
`-mnomacsave`
  Mark the `MAC` register as call-clobbered, even if -mhitachi is given.
`-mieee`
  Increase IEEE-compliance of floating-point code.
`-misize`
  Dump instruction size and location in the assembly code.
`-mpadstruct`
  This option is deprecated. It pads structures to multiple of 4 bytes, which is incompatible with the SH ABI.
`-mspace`
  Optimize for space instead of speed. Implied by -Os.
`-mprefergot`
  When generating position-independent code, emit function calls using the Global Offset Table instead of the Procedure Linkage Table.
`-musermode`
  Generate a library function call to invalidate instruction cache entries, after fixing up a trampoline. This library function call doesn't assume it can write to the whole memory address space. This is the default when the target is `sh-*-linux*`.