3.18.38 RISC-V Options
These command-line options are defined for RISC-V targets:
- Set the cost of branches to roughly n instructions.
- When generating PIC code, do or don't allow the use of PLTs. Ignored for
non-PIC. The default is -mplt.
- Specify integer and floating-point calling convention. ABI-string
contains two parts: the size of integer types and the registers used for
floating-point types. For example ‘-march=rv64ifd -mabi=lp64d’ means that
‘long’ and pointers are 64-bit (implicitly defining ‘int’ to be
32-bit), and that floating-point values up to 64 bits wide are passed in F
registers. Contrast this with ‘-march=rv64ifd -mabi=lp64f’, which still
allows the compiler to generate code that uses the F and D extensions but only
allows floating-point values up to 32 bits long to be passed in registers; or
‘-march=rv64ifd -mabi=lp64’, in which no floating-point arguments will be
passed in registers.
The default for this argument is system dependent, users who want a specific
calling convention should specify one explicitly. The valid calling
conventions are: ‘ilp32’, ‘ilp32f’, ‘ilp32d’, ‘lp64’,
‘lp64f’, and ‘lp64d’. Some calling conventions are impossible to
implement on some ISAs: for example, ‘-march=rv32if -mabi=ilp32d’ is
invalid because the ABI requires 64-bit values be passed in F registers, but F
registers are only 32 bits wide.
- Do or don't use hardware floating-point divide and square root instructions.
This requires the F or D extensions for floating-point registers. The default
is to use them if the specified architecture has these instructions.
- Do or don't use hardware instructions for integer division. This requires the
M extension. The default is to use them if the specified architecture has
- Generate code for given RISC-V ISA (e.g. ‘rv64im’). ISA strings must be
lower-case. Examples include ‘rv64i’, ‘rv32g’, and ‘rv32imaf’.
- Optimize the output for the given processor, specified by microarchitecture
- Attempt to keep the stack boundary aligned to a 2 raised to num
byte boundary. If -mpreferred-stack-boundary is not specified,
the default is 4 (16 bytes or 128-bits).
Warning: If you use this switch, then you must build all modules with
the same value, including any libraries. This includes the system libraries
and startup modules.
- Put global and static data smaller than n bytes into a special section
(on some targets).
- Do or don't use smaller but slower prologue and epilogue code that uses
library function calls. The default is to use fast inline prologues and
- Do not or do generate unaligned memory accesses. The default is set depending
on whether the processor we are optimizing for supports fast unaligned access
- Generate code for the medium-low code model. The program and its statically
defined symbols must lie within a single 2 GiB address range and must lie
between absolute addresses −2 GiB and +2 GiB. Programs can be
statically or dynamically linked. This is the default code model.
- Generate code for the medium-any code model. The program and its statically
defined symbols must be within any single 2 GiB address range. Programs can be
statically or dynamically linked.
- Use or do not use assembler relocation operators when dealing with symbolic
addresses. The alternative is to use assembler macros instead, which may
- Take advantage of linker relaxations to reduce the number of instructions
required to materialize symbol addresses. The default is to take advantage of