-->
Page 193
_margcount | Generate code which puts an argument count in the word preceding each argument list. Some nonportable Convex and VAX programs need this word. (Debuggers don't, except for functions with variable-length argument lists; this information is in the symbol table.) |
_mnoargcount | Omit the argument count word. This is the default if you use the unmodified sources. |
These _m options are defined for the AMD Am29000:
_mdw | Generate code that assumes the DW bit is set, that is, that byte and half-word operations are directly supported by the hardware. This is the default. |
_mnodw | Generate code that assumes the DW bit is not set. |
_mbw | Generate code that assumes the system supports byte and halfword write operations. This is the default. |
_mnbw | Generate code that assumes the systems does not support byte and halfword write operations. This implies _mnodw. |
_msmall | Use a small memory model that assumes that all function addresses are either within a single 256KB segment or at an absolute address of less than 256K. This allows the call instruction to be used instead of a const, consth, calli sequence. |
_mlarge | Do not assume that the call instruction can be used; this is the default. |
_m29050 | Generate code for the Am29050. |
_m29000 | Generate code for the Am29000. This is the default. |
_mkernel_registers |
Generate references to registers
gr64_gr95 instead of gr96_gr127. This option can be used
when compiling kernel code that wants a set of global registers disjoint from that used by
user-mode code. Note that when this option is used, register names in _f flags must use the normal, user-mode, names. |
_muser_registers | Use the normal set of global registers, gr96_gr127. This is the default. |
_mstack_check | Insert a call to msp check after each stack adjustment. This is often used for kernel code. |
These _m options are defined for Motorola 88K architectures:
_m88000 | Generate code that works well on both the m88100 and the m88110. |
_m88100 | Generate code that works best for the m88100, but that also runs on the m88110. |
_m88110 | Generate code that works best for the m88110, and may not run on the m88100. |
_midentify_revision | Include an ident directive in the assembler output recording the source filename, compiler name and version, timestamp, and compilation flags used. |
_mno_underscores | In assembler output, emit symbol names without adding an underscore character at the beginning of each name. The default is to use an underscore as prefix on each name. |
_mcheck_zero_division | Early models of the 88K architecture had problems with division by zero; in particular, many of |
_mno_check_zero_division |
them didn't trap. Use these options to avoid including (or to include explicitly) additional
code to detect division by zero and signal an exception. All
gcc configurations for the 88K use _mcheck_zero_division by default. |
_mocs_debug_info | Include (or omit) additional debugging information (about registers used in each stack frame) |
_mno_ocs_debug_info | as specified in the 88Open Object Compatibility Standard, OCS. This extra information is not needed by GDB. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is to include this information; other 88K configurations omit this information by default. |
_mocs_frame_position | Force (or do not require) register values to be stored in a particular place in stack frames, as |
_mno_ocs_frame_position | specified in OCS. The DG/UX, Delta88 SVr3.2, and BCS configurations use _mocs_frame_ position; other 88K configurations have the default _mno_ocs_ frame_position. |
_moptimize_arg_area | Control how to store function arguments in stack frames. _moptimize_arg_area saves space, but |
_mno_optimize_arg_area | may break some debuggers (not GDB). _mno_optimize_arg_area conforms better to standards. By default gcc does not optimize the argument area. |
Page 194
_mshort_data_num |
Generate smaller data references by making them relative to
r0, which allows loading a value using a single instruction (rather than the usual two). You control which data references
are affected by specifying num with this option. For example, if you specify
_mshort_data_512,
then the data references affected are those involving displacements of less than 512 bytes. _mshort_data-num is not effective for num greater than 64K. |
_mserialize-volatile | Do, or do not, generate code to guarantee sequential consistency of volatile memory references. |
_mno-serialize-volatile |
GNU CC always guarantees consistency by default, for the preferred processor submodel.
How this is done depends on the submodel.
The m88100 processor does not reorder memory references and so always provides
sequential consistency. If you use _m88100, GNU CC does not generate any special instructions
for sequential consistency. The order of memory references made by the m88110 processor does not always match the order of the instructions requesting those references. In particular, a load instruction may execute before a preceding store instruction. Such reordering violates sequential consistency of volatile memory references, when there are multiple processors. When you use _m88000 or _m88110, GNU CC generates special instructions when appropriate, to force execution in the proper order. The extra code generated to guarantee consistency may affect the performance of your application. If you know that you can safely forgo this guarantee, you may use the option _mno-serialize-volatile. If you use the _m88100 option but require sequential consistency when running on the m88110 processor, you should use _mserialize-volatile. |
_msvr4, _msvr3 |
Turn on (_msvr4) or off
(_msvr3) compiler extensions related to System V release 4 (SVr4).
This controls the following: Which variant of the assembler syntax to emit (which you can select independently using _mversion_03.00). _msvr4 makes the C preprocessor recognize #pragma weak. _msvr4 makes gcc issue additional declaration directives used in SVr4. _msvr3 is the default for all m88K configurations except the SVr4 configuration. |
_mtrap_large_shift | Include code to detect bit-shifts of more than 31 bits; respectively, trap such shifts or emit code |
_mhandle_large_shift | to handle them properly. By default, gcc makes no special provision for large bit shifts. |
_muse_div_instruction | Very early models of the 88K architecture didn't have a divide instruction, so gcc avoids that instruction by default. Use this option to specify that it's safe to use the divide instruction. |
_mversion_03.00 | In the DG/UX configuration, there are two flavors of SVr4. This option modifies _msvr4 to select whether the hybrid-COFF or real-ELF flavor is used. All other configurations ignore this option. |
_mwarn_passed_structs | Warn when a function passes a struct as an argument or result. Structure-passing conventions have changed during the evolution of the C language, and are often the source of portability problems. By default, gcc issues no such warning. |
These options are defined for the IBM RS6000:
_mfp_in_toc | Control whether or not floating-point constants go in the table of contents (TOC), a table of |
_mno_fp_in_toc | all global variable and function addresses. By default gcc puts floating-point constants there; if the TOC overflows, _mno_fp_in_toc will reduce the size of the TOC, which may avoid the overflow. |
These _m options are defined for the IBM RT PC:
_min_line_mul | Use an inline code sequence for integer multiplies. This is the default. |
_mcall_lib_mul | Call lmul$$ for integer multiples. |
_mfull_fp_blocks | Generate full-size floating-point data blocks, including the minimum amount of scratch space recommended by IBM. This is the default. |