компилятор C и C ++ проекта GNU (GNU project C and C++ compiler)
Параметры подробно (Options detail)
RX
These command-line options are defined for RX targets:
-m64bit-doubles
-m32bit-doubles
Make the "double" data type be 64 bits (-m64bit-doubles
) or
32 bits (-m32bit-doubles
) in size. The default is
-m32bit-doubles
. Note RX floating-point hardware only works
on 32-bit values, which is why the default is
-m32bit-doubles
.
-fpu
-nofpu
Enables (-fpu
) or disables (-nofpu
) the use of RX floating-
point hardware. The default is enabled for the RX600 series
and disabled for the RX200 series.
Floating-point instructions are only generated for 32-bit
floating-point values, however, so the FPU hardware is not
used for doubles if the -m64bit-doubles
option is used.
Note If the -fpu
option is enabled then
-funsafe-math-optimizations
is also enabled automatically.
This is because the RX FPU instructions are themselves
unsafe.
-mcpu=
name
Selects the type of RX CPU to be targeted. Currently three
types are supported, the generic RX600
and RX200
series
hardware and the specific RX610
CPU. The default is RX600
.
The only difference between RX600
and RX610
is that the RX610
does not support the "MVTIPL" instruction.
The RX200
series does not have a hardware floating-point unit
and so -nofpu
is enabled by default when this type is
selected.
-mbig-endian-data
-mlittle-endian-data
Store data (but not code) in the big-endian format. The
default is -mlittle-endian-data
, i.e. to store data in the
little-endian format.
-msmall-data-limit=
N
Specifies the maximum size in bytes of global and static
variables which can be placed into the small data area.
Using the small data area can lead to smaller and faster
code, but the size of area is limited and it is up to the
programmer to ensure that the area does not overflow. Also
when the small data area is used one of the RX's registers
(usually "r13") is reserved for use pointing to this area, so
it is no longer available for use by the compiler. This
could result in slower and/or larger code if variables are
pushed onto the stack instead of being held in this register.
Note, common variables (variables that have not been
initialized) and constants are not placed into the small data
area as they are assigned to other sections in the output
executable.
The default value is zero, which disables this feature.
Note, this feature is not enabled by default with higher
optimization levels (-O2
etc) because of the potentially
detrimental effects of reserving a register. It is up to the
programmer to experiment and discover whether this feature is
of benefit to their program. See the description of the
-mpid
option for a description of how the actual register to
hold the small data area pointer is chosen.
-msim
-mno-sim
Use the simulator runtime. The default is to use the
libgloss board-specific runtime.
-mas100-syntax
-mno-as100-syntax
When generating assembler output use a syntax that is
compatible with Renesas's AS100 assembler. This syntax can
also be handled by the GAS assembler, but it has some
restrictions so it is not generated by default.
-mmax-constant-size=
N
Specifies the maximum size, in bytes, of a constant that can
be used as an operand in a RX instruction. Although the RX
instruction set does allow constants of up to 4 bytes in
length to be used in instructions, a longer value equates to
a longer instruction. Thus in some circumstances it can be
beneficial to restrict the size of constants that are used in
instructions. Constants that are too big are instead placed
into a constant pool and referenced via register indirection.
The value N can be between 0 and 4. A value of 0 (the
default) or 4 means that constants of any size are allowed.
-mrelax
Enable linker relaxation. Linker relaxation is a process
whereby the linker attempts to reduce the size of a program
by finding shorter versions of various instructions.
Disabled by default.
-mint-register=
N
Specify the number of registers to reserve for fast interrupt
handler functions. The value N can be between 0 and 4. A
value of 1 means that register "r13" is reserved for the
exclusive use of fast interrupt handlers. A value of 2
reserves "r13" and "r12". A value of 3 reserves "r13", "r12"
and "r11", and a value of 4 reserves "r13" through "r10". A
value of 0, the default, does not reserve any registers.
-msave-acc-in-interrupts
Specifies that interrupt handler functions should preserve
the accumulator register. This is only necessary if normal
code might use the accumulator register, for example because
it performs 64-bit multiplications. The default is to ignore
the accumulator as this makes the interrupt handlers faster.
-mpid
-mno-pid
Enables the generation of position independent data. When
enabled any access to constant data is done via an offset
from a base address held in a register. This allows the
location of constant data to be determined at run time
without requiring the executable to be relocated, which is a
benefit to embedded applications with tight memory
constraints. Data that can be modified is not affected by
this option.
Note, using this feature reserves a register, usually "r13",
for the constant data base address. This can result in
slower and/or larger code, especially in complicated
functions.
The actual register chosen to hold the constant data base
address depends upon whether the -msmall-data-limit
and/or
the -mint-register
command-line options are enabled.
Starting with register "r13" and proceeding downwards,
registers are allocated first to satisfy the requirements of
-mint-register
, then -mpid
and finally -msmall-data-limit
.
Thus it is possible for the small data area register to be
"r8" if both -mint-register=4
and -mpid
are specified on the
command line.
By default this feature is not enabled. The default can be
restored via the -mno-pid
command-line option.
-mno-warn-multiple-fast-interrupts
-mwarn-multiple-fast-interrupts
Prevents GCC from issuing a warning message if it finds more
than one fast interrupt handler when it is compiling a file.
The default is to issue a warning for each extra fast
interrupt handler found, as the RX only supports one such
interrupt.
-mallow-string-insns
-mno-allow-string-insns
Enables or disables the use of the string manipulation
instructions "SMOVF", "SCMPU", "SMOVB", "SMOVU", "SUNTIL"
"SWHILE" and also the "RMPA" instruction. These instructions
may prefetch data, which is not safe to do if accessing an
I/O register. (See section 12.2.7 of the RX62N Group User's
Manual for more information).
The default is to allow these instructions, but it is not
possible for GCC to reliably detect all circumstances where a
string instruction might be used to access an I/O register,
so their use cannot be disabled automatically. Instead it is
reliant upon the programmer to use the
-mno-allow-string-insns
option if their program accesses I/O
space.
When the instructions are enabled GCC defines the C
preprocessor symbol "__RX_ALLOW_STRING_INSNS__", otherwise it
defines the symbol "__RX_DISALLOW_STRING_INSNS__".
-mjsr
-mno-jsr
Use only (or not only) "JSR" instructions to access
functions. This option can be used when code size exceeds
the range of "BSR" instructions. Note that -mno-jsr
does not
mean to not use "JSR" but instead means that any type of
branch may be used.
Note: The generic GCC command-line option -ffixed-
reg has special
significance to the RX port when used with the "interrupt"
function attribute. This attribute indicates a function intended
to process fast interrupts. GCC ensures that it only uses the
registers "r10", "r11", "r12" and/or "r13" and only provided that
the normal use of the corresponding registers have been
restricted via the -ffixed-
reg or -mint-register
command-line
options.