gcc: Xtensa Options
1
1 3.18.59 Xtensa Options
1 ----------------------
1
1 These options are supported for Xtensa targets:
1
1 '-mconst16'
1 '-mno-const16'
1 Enable or disable use of 'CONST16' instructions for loading
1 constant values. The 'CONST16' instruction is currently not a
1 standard option from Tensilica. When enabled, 'CONST16'
1 instructions are always used in place of the standard 'L32R'
1 instructions. The use of 'CONST16' is enabled by default only if
1 the 'L32R' instruction is not available.
1
1 '-mfused-madd'
1 '-mno-fused-madd'
1 Enable or disable use of fused multiply/add and multiply/subtract
1 instructions in the floating-point option. This has no effect if
1 the floating-point option is not also enabled. Disabling fused
1 multiply/add and multiply/subtract instructions forces the compiler
1 to use separate instructions for the multiply and add/subtract
1 operations. This may be desirable in some cases where strict IEEE
1 754-compliant results are required: the fused multiply add/subtract
1 instructions do not round the intermediate result, thereby
1 producing results with _more_ bits of precision than specified by
1 the IEEE standard. Disabling fused multiply add/subtract
1 instructions also ensures that the program output is not sensitive
1 to the compiler's ability to combine multiply and add/subtract
1 operations.
1
1 '-mserialize-volatile'
1 '-mno-serialize-volatile'
1 When this option is enabled, GCC inserts 'MEMW' instructions before
1 'volatile' memory references to guarantee sequential consistency.
1 The default is '-mserialize-volatile'. Use
1 '-mno-serialize-volatile' to omit the 'MEMW' instructions.
1
1 '-mforce-no-pic'
1 For targets, like GNU/Linux, where all user-mode Xtensa code must
1 be position-independent code (PIC), this option disables PIC for
1 compiling kernel code.
1
1 '-mtext-section-literals'
1 '-mno-text-section-literals'
1 These options control the treatment of literal pools. The default
1 is '-mno-text-section-literals', which places literals in a
1 separate section in the output file. This allows the literal pool
1 to be placed in a data RAM/ROM, and it also allows the linker to
1 combine literal pools from separate object files to remove
1 redundant literals and improve code size. With
1 '-mtext-section-literals', the literals are interspersed in the
1 text section in order to keep them as close as possible to their
1 references. This may be necessary for large assembly files.
1 Literals for each function are placed right before that function.
1
1 '-mauto-litpools'
1 '-mno-auto-litpools'
1 These options control the treatment of literal pools. The default
1 is '-mno-auto-litpools', which places literals in a separate
1 section in the output file unless '-mtext-section-literals' is
1 used. With '-mauto-litpools' the literals are interspersed in the
1 text section by the assembler. Compiler does not produce explicit
1 '.literal' directives and loads literals into registers with 'MOVI'
1 instructions instead of 'L32R' to let the assembler do relaxation
1 and place literals as necessary. This option allows assembler to
1 create several literal pools per function and assemble very big
1 functions, which may not be possible with
1 '-mtext-section-literals'.
1
1 '-mtarget-align'
1 '-mno-target-align'
1 When this option is enabled, GCC instructs the assembler to
1 automatically align instructions to reduce branch penalties at the
1 expense of some code density. The assembler attempts to widen
1 density instructions to align branch targets and the instructions
1 following call instructions. If there are not enough preceding
1 safe density instructions to align a target, no widening is
1 performed. The default is '-mtarget-align'. These options do not
1 affect the treatment of auto-aligned instructions like 'LOOP',
1 which the assembler always aligns, either by widening density
1 instructions or by inserting NOP instructions.
1
1 '-mlongcalls'
1 '-mno-longcalls'
1 When this option is enabled, GCC instructs the assembler to
1 translate direct calls to indirect calls unless it can determine
1 that the target of a direct call is in the range allowed by the
1 call instruction. This translation typically occurs for calls to
1 functions in other source files. Specifically, the assembler
1 translates a direct 'CALL' instruction into an 'L32R' followed by a
1 'CALLX' instruction. The default is '-mno-longcalls'. This option
1 should be used in programs where the call target can potentially be
1 out of range. This option is implemented in the assembler, not the
1 compiler, so the assembly code generated by GCC still shows direct
1 call instructions--look at the disassembled object code to see the
1 actual instructions. Note that the assembler uses an indirect call
1 for every cross-file call, not just those that really are out of
1 range.
1