#### 3.18.26 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 run-time 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.