When you run gcc, you can use command-line options to choose machine-specific details. For information on all the gcc command-line options, see GNU CC Command Options in Using GNU CC in GNUPro Compiler Tools. There are a great many compiler options for specific MIPS targets. The following documentation discusses some of them. For instance, options for architecture and code generation (described in GCC options for architecture and code generation for MIPS) are for all MIPS targets.
Note:
The compiler options, -mips2,
-mips3
and -mips4,
cannot be used on the MIPS R3000.
gcc options for architecture and code generation for MIPS
The following options for architecture and code generation can be used on all MIPS targets.
-g
The compiler debugging
option ‘-g’
is essential to see interspersed high-level source statements, since without
de-bugging information the assembler cannot tie most of the generated code
to lines of the original source file.
-mcpu=r3000
-mcpu=cputype
Since most
IDT boards are based on the MIPS R3000, the de-fault for this particular
configuration is ‘-mcpu=r3000’.
In the general case, use this option on any MIPS platform to assume the
defaults for the machine type cputype
when scheduling instructions. The default cputype
on other MIPS configurations is default,
which picks the longest cycle times for any of the machines, in order that
the code run at reasonable rates on any MIPS CPU. Other choices for cputype
are r2000,
r3000,
r4000,
r6000,
r4400,
r4600,
r4650,
r8000,
and orion.
While picking a specific cputype
will schedule things appropriately for that particular chip, the compiler
will not generate any code that does not meet level 1 of the MIPS ISA (Instruction
Set Architecture) unless you use the -mips2,
-mips3,
or mips4
switch.
-mips1
Generate code
that meets level 1 of the MIPS ISA.
-mips2
Generate code
that meets level 2 of the MIPS ISA.
-mips3
Generate code
that meets level 3 of the MIPS ISA.
-mips4
Generate code
that meets level 4 of the MIPS ISA.
-meb
Generate big endian
code.
-mel
Generate little
endian code.
-mad
Generate multiply-add
instructions, which are part of the MIPS 4650.
-m4650
Generate multiply-add
instructions along with single-float code.
-mfp64
Select the 64-bit
floating point register size.
-mfp32
Select the 32-bit
floating point register size.
-mgp64
Select the 64-bit
general purpose register size.
-mfp32
Select the 32-bit
general purpose register size.
-mlong64
Make long integers
64 bits long, not the default of 32 bits long. This works only if you’re
generating 64-bit code.
-G num
Put global
and static items less than or equal to num
bytes into the small ‘.data’
or ‘.bss’
sections instead of into the normal ‘.data’
and ‘.bss’
sections. This allows the assembler to emit one-word memory reference instructions
based on the global pointer (gp
or $28),instead
of on the normal two words used. By default, num
is 8.
When you specify another value, gcc
also passes the ‘-G
num’ switch
to the assembler and linker.
gcc options for floating point for MIPS
The following options select software or hardware floating point.
-msoft-float
Generate output
containing library calls for floating point. The mips-idt-ecoff
configuration of libgcc
(an auxiliary library distributed with the compiler) include a collection
of subroutines to implement these library calls.
In particular, this gcc configuration generates subroutine calls compatible with the US Software GOFAST R3000 floating point library, giving you the opportunity to use either the libgcc implementation or the US Software version. IDT includes the GOFAST library in their IDT C 5.0 package; you can also order libraries separately from IDT as the IDT kit of how to use gcc to link with the GOFAST library.
To use the ‘libgcc’ version, you need nothing special; gcc links with libgcc automatically after all other object files and libraries.
Because the calling convention for MIPS architectures depends on whether or not hardware floating-point is installed, ‘-msoft-float’ has one further effect: gcc looks for sub-routine libraries in a subdirectory, ‘soft-float’, for any library directory in your search path. (Note: This does not apply to directories specified using the ‘-l’ option.) With the GNUPro Toolkit, you can select the standard libraries as usual with the options, ‘-lc’ or ‘-lm’, because the soft-float versions are installed in the default library search paths.
Warning:
Treat ‘-msoft-float’
as an all or nothing proposition. If you compile any program’s module
with ‘-msoft-float’,
it’s safest to compile all modules of the program that way—and it’s essential
to use this option when you link.
-mhard-float
Generate output
containing floating point instructions, and use the corresponding MIPS
calling convention. This is the default.
-msingle-float
Generate code for a target that only has support for single floating point
values, such as the MIPS 4650.
Floating point subroutines
Two kinds of floating point subroutines are useful with gcc.