3.17.44 SPU Options
These ‘-m’ options are supported on the SPU:
-mwarn-reloc
-merror-reloc
-
The loader for SPU does not handle dynamic relocations. By default, GCC
gives an error when it generates code that requires a dynamic
relocation. -mno-error-reloc disables the error,
-mwarn-reloc generates a warning instead.
-msafe-dma
-munsafe-dma
-
Instructions that initiate or test completion of DMA must not be
reordered with respect to loads and stores of the memory that is being
accessed.
With -munsafe-dma you must use the
volatile
keyword to protect
memory accesses, but that can lead to inefficient code in places where the
memory is known to not change. Rather than mark the memory as volatile,
you can use -msafe-dma to tell the compiler to treat
the DMA instructions as potentially affecting all memory.
-mbranch-hints
-
By default, GCC generates a branch hint instruction to avoid
pipeline stalls for always-taken or probably-taken branches. A hint
is not generated closer than 8 instructions away from its branch.
There is little reason to disable them, except for debugging purposes,
or to make an object a little bit smaller.
-msmall-mem
-mlarge-mem
-
By default, GCC generates code assuming that addresses are never larger
than 18 bits. With -mlarge-mem code is generated that assumes
a full 32-bit address.
-mstdmain
-
By default, GCC links against startup code that assumes the SPU-style
main function interface (which has an unconventional parameter list).
With -mstdmain, GCC links your program against startup
code that assumes a C99-style interface to
main
, including a
local copy of argv
strings.
-mfixed-range=
register-range- Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot use. This is
useful when compiling kernel code. A register range is specified as
two registers separated by a dash. Multiple register ranges can be
specified separated by a comma.
-mea32
-mea64
- Compile code assuming that pointers to the PPU address space accessed
via the
__ea
named address space qualifier are either 32 or 64
bits wide. The default is 32 bits. As this is an ABI-changing option,
all object code in an executable must be compiled with the same setting.
-maddress-space-conversion
-mno-address-space-conversion
- Allow/disallow treating the
__ea
address space as superset
of the generic address space. This enables explicit type casts
between __ea
and generic pointer as well as implicit
conversions of generic pointers to __ea
pointers. The
default is to allow address space pointer conversions.
-mcache-size=
cache-size- This option controls the version of libgcc that the compiler links to an
executable and selects a software-managed cache for accessing variables
in the
__ea
address space with a particular cache size. Possible
options for cache-size are ‘8’, ‘16’, ‘32’, ‘64’
and ‘128’. The default cache size is 64KB.
-matomic-updates
-mno-atomic-updates
- This option controls the version of libgcc that the compiler links to an
executable and selects whether atomic updates to the software-managed
cache of PPU-side variables are used. If you use atomic updates, changes
to a PPU variable from SPU code using the
__ea
named address space
qualifier do not interfere with changes to other PPU variables residing
in the same cache line from PPU code. If you do not use atomic updates,
such interference may occur; however, writing back cache lines is
more efficient. The default behavior is to use atomic updates.
-mdual-nops
-mdual-nops=
n- By default, GCC inserts nops to increase dual issue when it expects
it to increase performance. n can be a value from 0 to 10. A
smaller n inserts fewer nops. 10 is the default, 0 is the
same as -mno-dual-nops. Disabled with -Os.
-mhint-max-nops=
n- Maximum number of nops to insert for a branch hint. A branch hint must
be at least 8 instructions away from the branch it is affecting. GCC
inserts up to n nops to enforce this, otherwise it does not
generate the branch hint.
-mhint-max-distance=
n- The encoding of the branch hint instruction limits the hint to be within
256 instructions of the branch it is affecting. By default, GCC makes
sure it is within 125.
-msafe-hints
- Work around a hardware bug that causes the SPU to stall indefinitely.
By default, GCC inserts the
hbrp
instruction to make sure
this stall won't happen.