-->

Previous | Table of Contents | Next

Page 198

These _m options are defined for the DEC Alpha implementations:

_mno-soft-float Use (do not use) the hardware floating-point instructions for floating-point operations. When
_msoft-float _msoft-float is specified, functions in libgcc1.c will be used to perform floating-point operations. Unless they are replaced by routines that emulate the floating-point operations, or compiled in such a way as to call such emulations routines, these routines will issue floating-point operations. If you are compiling for an Alpha without floating-point operations, you must ensure that the library is built so as not to call them.
Note that Alpha implementations without floating-point operations are required to have floating-point registers.
_mfp-reg, _mno-fp-regs Generate code that uses (does not use) the floating-point register set. _mno-fp-regs implies _msoft-float. If the floating-point register set is not used, floating-point operands are passed in integer registers as if they were integers and floating-point results are passed in $0 instead of $f0. This is a nonstandard calling sequence, so any function with a floating-point argument or return value called by code compiled with _mno-fp-regs must also be compiled with that option.
A typical use of this option is building a kernel that does not use, and hence need not save and restore, any floating-point registers.

These additional options are available on System V Release 4 for compatibility with other compilers on those systems:

_G On SVr4 systems, gcc accepts the option _G (and passes it to the system linker), for compatibility with other compilers. However, we suggest you use _symbolic or _shared as appropriate, instead of supplying linker options on the gcc command line.
_Qy Identify the versions of each tool used by the compiler, in an .ident assembler directive in the output.
_Qn Refrain from adding .ident directives to the output file (this is the default).
_YP,dirs Search the directories dirs, and no others, for libraries specified with _l. You can separate directory entries in dirs from one another with colons.
_Ym,dir Look in the directory dir to find the M4 preprocessor. The assembler uses this option.

CODE GENERATION OPTIONS

These machine-independent options control the interface conventions used in code generation.

Most of them begin with _f. These options have both positive and negative forms; the negative form of _ffoo would be _fno_foo. In the following table, only one of the forms is listed—the one which is not the default. You can figure out the other form by either removing no_ or adding it.

_fnonnull_objects Assume that objects reached through references are not null (C++ only). Normally, GNU C++ makes conservative assumptions about objects reached through references. For example, the compiler must check that a is not null in code like the following:
obj &a = g (); a.f (2);
Checking that references of this sort have nonnull values requires extra code, however, and it is unnecessary for many programs. You can use _fnonnull-objects to omit the checks for null, if your program doesn't require checking.
_fpcc_struct_return Use the same convention for returning struct and union values that is used by the usual C compiler on your system. This convention is less efficient for small structures, and on many machines it fails to be reentrant; but it has the advantage of allowing intercallability between gcc-compiled code and pcc-compiled code.
_freg_struct_return Use the convention that struct and union values are returned in registers when possible. This is more efficient for small structures than _fpcc_struct_return. If you specify neither _fpcc_struct_return nor _freg_struct_return, GNU CC defaults to whichever convention is standard for the target. If there is no standard convention, GNU CC defaults to _fpcc_struct_return.

Page 199

_fshort_enums Allocate to an enum type only as many bytes as it needs for the declared range of possible values. Specifically, the enum type will be equivalent to the smallest integer type that has enough room.
_fshort_double Use the same size for double as for float.
_fshared_data Requests that the data and non-const variables of this compilation be shared data rather than private data. The distinction makes sense only on certain operating systems, where shared data is shared between processes running the same program, while private data exists in one copy per process.
_fno_common Allocate even uninitialized global variables in the bss section of the object file, rather than generating them as common blocks. This has the effect that if the same variable is declared (without extern) in two different compilations, you will get an error when you link them. The only reason this might be useful is if you want to verify that the program will work on other systems which always work this way.
_fno_ident Ignore the #ident directive.
_fno_gnu_linker Do not output global initializations (such as C++ constructors and destructors) in the form used by the GNU linker (on systems where the GNU linker is the standard method of handling them). Use this option when you want to use a non-GNU linker, which also requires using the collect2 program to make sure the system linker includes constructors and destructors. (collect2 is included in the GNU CC distribution.) For systems that must use collect2, the compiler driver gcc is configured to do this automatically.
_finhibit-size-directive Don't output a .size assembler directive, or anything else that would cause trouble if the function is split in the middle, and the two halves are placed at locations far apart in memory. This option is used when compiling crtstuff.c; you should not need to use it for anything else.
_fverbose-asm Put extra commentary information in the generated assembly code to make it more readable. This option is generally only of use to those who actually need to read the generated assembly code (perhaps while debugging the compiler itself).
_fvolatile Consider all memory references through pointers to be volatile.
_fvolatile_global Consider all memory references to extern and global data items to be volatile.
_fpic If supported for the target machines, generate position-independent code, suitable for use in a shared library.
_fPIC If supported for the target machine, emit position-independent code, suitable for dynamic linking, even if branches need large displacements.
_ffixed_reg Treat the register named reg as a fixed register; generated code should never refer to it (except perhaps as a stack pointer, frame pointer, or in some other fixed role). reg must be the name of a register. The register names accepted are machine-specific and are defined in the REGISTER_NAMES macro in the machine description macro file. This flag does not have a negative form, because it specifies a three-way choice.
_fcall_used_reg Treat the register named reg as an allocable register that is clobbered by function calls. It may be allocated for temporaries or variables that do not live across a call. Functions compiled this way will not save and restore the register reg. Use of this flag for a register that has a fixed pervasive role in the machine's execution model, such as the stack pointer or frame pointer, will produce disastrous results.
This flag does not have a negative form, because it specifies a three-way choice.
_fcall_saved_reg Treat the register named reg as an allocable register saved by functions. It may be allocated even for temporaries or variables that live across a call. Functions compiled this way will save and restore the register reg if they use it.
Use of this flag for a register that has a fixed pervasive role in the machine's execution model, such as the stack pointer or frame pointer, will produce disastrous results. A different sort of disaster will result from the use of this flag for a register in which function values may be returned.
This flag does not have a negative form, because it specifies a three-way choice.

Previous | Table of Contents | Next