#### 3.17.24 MeP Options

`-mabsdiff`
  Enables the `abs` instruction, which is the absolute difference between two registers.
`-mall-opts`
  Enables all the optional instructions—average, multiply, divide, bit operations, leading zero, absolute difference, min/max, clip, and saturation.
`-maverage`
  Enables the `ave` instruction, which computes the average of two registers.
`-mbased=`n
  Variables of size n bytes or smaller are placed in the `.based` section by default. Based variables use the `$tp` register as a base register, and there is a 128-byte limit to the `.based` section.
`-mbitops`
  Enables the bit operation instructions—bit test (`btstm`), set (`bsetm`), clear (`bclrm`), invert (`bnotm`), and test-and-set (`tas`).
`-mc=`name
  Selects which section constant data is placed in. name may be `tiny`, `near`, or `far`.
`-mclip`
  Enables the `clip` instruction. Note that `-mclip` is not useful unless you also provide `-mminmax`.
`-mconfig=`name
  Selects one of the built-in core configurations. Each MeP chip has one or more modules in it; each module has a core CPU and a variety of coprocessors, optional instructions, and peripherals. The `MeP-Integrator` tool, not part of GCC, provides these configurations through this option; using this option is the same as using all the corresponding command-line options. The default configuration is `default`.
`-mcop`
  Enables the coprocessor instructions. By default, this is a 32-bit coprocessor. Note that the coprocessor is normally enabled via the `-mconfig=` option.
`-mcop32`
  Enables the 32-bit coprocessor's instructions.
`-mcop64`
  Enables the 64-bit coprocessor's instructions.
`-mivc2`
  Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor.
`-mdc`
  Causes constant variables to be placed in the `.near` section.
`-mdiv`
  Enables the `div` and `divu` instructions.
`-meb`
  Generate big-endian code.
`-mel`
  Generate little-endian code.
`-mio-volatile`
  Tells the compiler that any variable marked with the `io` attribute is to be considered volatile.
`-ml`
  Causes variables to be assigned to the `.far` section by default.
`-mleadz`
  Enables the `leadz` (leading zero) instruction.
`-mm`
  Causes variables to be assigned to the `.near` section by default.
`-mminmax`
  Enables the `min` and `max` instructions.
`-mmult`
  Enables the multiplication and multiply-accumulate instructions.
`-mno-opts`
  Disables all the optional instructions enabled by `-mall-opts`.
`-mrepeat`
  Enables the `repeat` and `erepeat` instructions, used for low-overhead looping.
`-ms`
  Causes all variables to default to the `.tiny` section. Note that there is a 65536-byte limit to this section. Accesses to these variables use the `%gp` base register.
`-msatur`
  Enables the saturation instructions. Note that the compiler does not currently generate these itself, but this option is included for compatibility with other tools, like `as`.
`-msdram`
  Link the SDRAM-based runtime instead of the default ROM-based runtime.
`-msim`
  Link the simulator runtime libraries.
`-msimnovec`
  Link the simulator runtime libraries, excluding built-in support for reset and exception vectors and tables.
`-mtf`
  Causes all functions to default to the `.far` section. Without this option, functions default to the `.near` section.
`-mtiny=`n
  Variables that are n bytes or smaller are allocated to the `.tiny` section. These variables use the `$gp` base register. The default for this option is 4, but note that there's a 65536-byte limit to the `.tiny` section.