neulab/tldr huggingface dataset:
"__WITH_LIBF7_LIBGCC__" "__WITH_LIBF7_MATH__" "__WITH_LIBF7_MATH_SYMBOLS__" Reflects the "--with-libf7={libgcc|math|math-symbols}" configure option ("https://gcc.gnu.org/install/configure.html#avr").
Blackfin Options
-mcpu=cpu[-sirevision] Specifies the name of the target Blackfin processor.  Currently, cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m, bf547m, bf548m, bf549m, bf561, bf592.
The optional sirevision specifies the silicon revision of the target Blackfin processor.  Any workarounds available for the targeted silicon revision are enabled.  If sirevision is none, no workarounds are enabled.  If sirevision is any, all workarounds for the targeted processor are enabled.  The "__SILICON_REVISION__" macro is defined to two hexadecimal digits representing the major and minor numbers in the silicon revision.  If sirevision is none, the "__SILICON_REVISION__" is not defined.  If sirevision is any, the "__SILICON_REVISION__" is defined to be 0xffff.  If this optional sirevision is not used, GCC assumes the latest known silicon revision of the targeted Blackfin processor.
GCC defines a preprocessor macro for the specified cpu.  For the bfin-elf toolchain, this option causes the hardware BSP provided by libgloss to be linked in if -msim is not given.
Without this option, bf532 is used as the processor by default.
Note that support for bf561 is incomplete.  For bf561, only the preprocessor macro is defined.
-msim Specifies that the program will be run on the simulator.  This causes the simulator BSP provided by libgloss to be linked in.  This option has effect only for bfin-elf toolchain.  Certain other options, such as -mid-shared-library and -mfdpic, imply -msim.
-momit-leaf-frame-pointer Don't keep the frame pointer in a register for leaf functions.  This avoids the instructions to save, set up and restore frame pointers and makes an extra register available in leaf functions.
-mspecld-anomaly When enabled, the compiler ensures that the generated code does not contain speculative loads after jump instructions. If this option is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
-mno-specld-anomaly Don't generate extra code to prevent speculative loads from occurring.
-mcsync-anomaly When enabled, the compiler ensures that the generated code does not contain CSYNC or SSYNC instructions too soon after conditional branches.  If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS" is defined.
-mno-csync-anomaly Don't generate extra code to prevent CSYNC or SSYNC instructions from occurring too soon after a conditional branch.
-mlow64k When enabled, the compiler is free to take advantage of the knowledge that the entire program fits into the low 64k of memory.
-mno-low64k Assume that the program is arbitrarily large.  This is the default.
-mstack-check-l1 Do stack checking using information placed into L1 scratchpad memory by the uClinux kernel.
-mid-shared-library Generate code that supports shared libraries via the library ID method.  This allows for execute in place and shared libraries in an environment without virtual memory management.  This option implies -fPIC.  With a bfin-elf target, this option implies -msim.
-mno-id-shared-library Generate code that doesn't assume ID-based shared libraries are being used.  This is the default.
-mleaf-id-shared-library Generate code that supports shared libraries via the library ID method, but assumes that this library or executable won't link against any other ID shared libraries.  That allows the compiler to use faster code for jumps and calls.
-mno-leaf-id-shared-library Do not assume that the code being compiled won't link against any ID shared libraries.  Slower code is generated for jump and call insns.
-mshared-library-id=n Specifies the identification number of the ID-based shared library being compiled.  Specifying a value of 0 generates more compact code; specifying other values forces the allocation of that number to the current library but is no more space- or time-efficient than omitting this option.
-msep-data Generate code that allows the data segment to be located in a different area of memory from the text segment.  This allows for execute in place in an environment without virtual memory management by eliminating relocations against the text section.
-mno-sep-data Generate code that assumes that the data segment follows the text segment.  This is the default.
-mlong-calls -mno-long-calls Tells the compiler to perform function calls by first loading the address of the function into a register and then performing a subroutine call on this register.  This switch is needed if the target function lies outside of the 24-bit addressing range of the offset-based version of subroutine call instruction.
This feature is not enabled by default.  Specifying -mno-long-calls restores the default behavior.  Note these switches have no effect on how the compiler generates code to handle function calls via function pointers.
-mfast-fp Link with the fast floating-point library. This library relaxes some of the IEEE floating-point standard's rules for checking inputs against Not-a-Number (NAN), in the interest of performance.
-minline-plt Enable inlining of PLT entries in function calls to functions that are not known to bind locally.  It has no effect without -mfdpic.
-mmulticore Build a standalone application for multicore Blackfin processors. This option causes proper start files and link scripts supporting multicore to be used, and defines the macro "__BFIN_MULTICORE".  It can only be used with -mcpu=bf561[-sirevision].
This option can be used with -mcorea or -mcoreb, which selects the one-application-per-core programming model.  Without -mcorea or -mcoreb, the single-application/dual-core programming model is used. In this model, the main function of Core B should be named as "coreb_main".
If this option is not used, the single-core application programming model is used.
-mcorea Build a standalone application for Core A of BF561 when using the one-application-per-core programming model. Proper start files and link scripts are used to support Core A, and the macro "__BFIN_COREA" is defined.  This option can only be used in conjunction with -mmulticore.
-mcoreb Build a standalone application for Core B of BF561 when using the one-application-per-core programming model. Proper start files and link scripts are used to support Core B, and the macro "__BFIN_COREB" is defined. When this option is used, "coreb_main" should be used instead of "main".  This option can only be used in conjunction with -mmulticore.
-msdram Build a standalone application for SDRAM. Proper start files and link scripts are used to put the application into SDRAM, and the macro "__BFIN_SDRAM" is defined.  The loader should initialize SDRAM before loading the application.
-micplb Assume that ICPLBs are enabled at run time.  This has an effect on certain anomaly workarounds.  For Linux targets, the default is to assume ICPLBs are enabled; for standalone applications the default is off.
C6X Options
-march=name This specifies the name of the target architecture.  GCC uses this name to determine what kind of instructions it can emit when generating assembly code.  Permissible names are: c62x, c64x, c64x+, c67x, c67x+, c674x.
-mbig-endian Generate code for a big-endian target.
-mlittle-endian Generate code for a little-endian target.  This is the default.
-msim Choose startup files and linker script suitable for the simulator.
-msdata=default Put small global and static data in the ".neardata" section, which is pointed to by register "B14".  Put small uninitialized global and static data in the ".bss" section, which is adjacent to the ".neardata" section.  Put small read-only data into the ".rodata" section.  The corresponding sections used for large pieces of data are ".fardata", ".far" and ".const".
-msdata=all Put all data, not just small objects, into the sections reserved for small data, and use addressing relative to the "B14" register to access them.
-msdata=none Make no use of the sections reserved for small data, and use absolute addresses to access all data.  Put all initialized global and static data in the ".fardata" section, and all uninitialized data in the ".far" section.  Put all constant data into the ".const" section.
CRIS Options
These options are defined specifically for the CRIS ports.
-march=architecture-type -mcpu=architecture-type Generate code for the specified architecture.  The choices for architecture-type are v3, v8 and v10 for respectively ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is v0 except for cris-axis- linux-gnu, where the default is v10.
-mtune=architecture-type Tune to architecture-type everything applicable about the generated code, except for the ABI and the set of available instructions.  The choices for architecture-type are the same as for -march=architecture-type.
-mmax-stack-frame=n Warn when the stack frame of a function exceeds n bytes.
-metrax4 -metrax100 The options -metrax4 and -metrax100 are synonyms for -march=v3 and -march=v8 respectively.
-mmul-bug-workaround -mno-mul-bug-workaround Work around a bug in the "muls" and "mulu" instructions for CPU models where it applies.  This option is active by default.
-mpdebug Enable CRIS-specific verbose debug-related information in the assembly code.  This option also has the effect of turning off the #NO_APP formatted-code indicator to the assembler at the beginning of the assembly file.
-mcc-init Do not use condition-code results from previous instruction; always emit compare and test instructions before use of condition codes.
-mno-side-effects Do not emit instructions with side effects in addressing modes other than post-increment.
-mstack-align -mno-stack-align -mdata-align -mno-data-align -mconst-align -mno-const-align These options (no- options) arrange (eliminate arrangements) for the stack frame, individual data and constants to be aligned for the maximum single data access size for the chosen CPU model.  The default is to arrange for 32-bit alignment.  ABI details such as structure layout are not affected by these options.
-m32-bit -m16-bit -m8-bit Similar to the stack- data- and const-align options above, these options arrange for stack frame, writable data and constants to all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit alignment.
-mno-prologue-epilogue -mprologue-epilogue With -mno-prologue-epilogue, the normal function prologue and epilogue which set up the stack frame are omitted and no return instructions or return sequences are generated in the code.  Use this option only together with visual inspection of the compiled code: no warnings or errors are generated when call-saved registers must be saved, or storage for local variables needs to be allocated.
-mno-gotplt -mgotplt With -fpic and -fPIC, don't generate (do generate) instruction sequences that load addresses for functions from the PLT part of the GOT rather than (traditional on other architectures) calls to the PLT.  The default is -mgotplt.
-melf Legacy no-op option only recognized with the cris-axis-elf and cris- axis-linux-gnu targets.
-mlinux Legacy no-op option only recognized with the cris-axis-linux-gnu target.
-sim This option, recognized for the cris-axis-elf, arranges to link with input-output functions from a simulator library.  Code, initialized data and zero-initialized data are allocated consecutively.
-sim2 Like -sim, but pass linker options to locate initialized data at 0x40000000 and zero-initialized data at 0x80000000.
CR16 Options
These options are defined specifically for the CR16 ports.
-mmac Enable the use of multiply-accumulate instructions. Disabled by default.
-mcr16cplus -mcr16c Generate code for CR16C or CR16C+ architecture. CR16C+ architecture is default.
-msim Links the library libsim.a which is in compatible with simulator. Applicable to ELF compiler only.
-mint32 Choose integer type as 32-bit wide.
-mbit-ops Generates "sbit"/"cbit" instructions for bit manipulations.
-mdata-model=model Choose a data model. The choices for model are near, far or medium. medium is default.  However, far is not valid with -mcr16c, as the CR16C architecture does not support the far data model.
C-SKY Options
GCC supports these options when compiling for C-SKY V2 processors.
-march=arch Specify the C-SKY target architecture.  Valid values for arch are: ck801, ck802, ck803, ck807, and ck810.  The default is ck810.
-mcpu=cpu Specify the C-SKY target processor.  Valid values for cpu are: ck801, ck801t, ck802, ck802t, ck802j, ck803, ck803h, ck803t, ck803ht, ck803f, ck803fh, ck803e, ck803eh, ck803et, ck803eht, ck803ef, ck803efh, ck803ft, ck803eft, ck803efht, ck803r1, ck803hr1, ck803tr1, ck803htr1, ck803fr1, ck803fhr1, ck803er1, ck803ehr1, ck803etr1, ck803ehtr1, ck803efr1, ck803efhr1, ck803ftr1, ck803eftr1, ck803efhtr1, ck803s, ck803st, ck803se, ck803sf, ck803sef, ck803seft, ck807e, ck807ef, ck807, ck807f, ck810e, ck810et, ck810ef, ck810eft, ck810, ck810v, ck810f, ck810t, ck810fv, ck810tv, ck810ft, and ck810ftv.
-mbig-endian -EB -mlittle-endian -EL Select big- or little-endian code.  The default is little-endian.
-mhard-float -msoft-float Select hardware or software floating-point implementations.  The default is soft float.
-mdouble-float -mno-double-float When -mhard-float is in effect, enable generation of double-precision float instructions.  This is the default except when compiling for CK803.
-mfdivdu -mno-fdivdu When -mhard-float is in effect, enable generation of "frecipd", "fsqrtd", and "fdivd" instructions.  This is the default except when compiling for CK803.
-mfpu=fpu Select the floating-point processor.  This option can only be used with -mhard-float.  Values for fpu are fpv2_sf (equivalent to -mno-double-float -mno-fdivdu), fpv2 (-mdouble-float -mno-divdu), and fpv2_divd (-mdouble-float -mdivdu).
-melrw -mno-elrw Enable the extended "lrw" instruction.  This option defaults to on for CK801 and off otherwise.
-mistack -mno-istack Enable interrupt stack instructions; the default is off.
The -mistack option is required to handle the "interrupt" and "isr" function attributes.
-mmp Enable multiprocessor instructions; the default is off.
-mcp Enable coprocessor instructions; the default is off.
-mcache Enable coprocessor instructions; the default is off.
-msecurity Enable C-SKY security instructions; the default is off.
-mtrust Enable C-SKY trust instructions; the default is off.
-mdsp -medsp -mvdsp Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions, respectively.  All of these options default to off.
-mdiv -mno-div Generate divide instructions.  Default is off.
-msmart -mno-smart Generate code for Smart Mode, using only registers numbered 0-7 to allow use of 16-bit instructions.  This option is ignored for CK801 where this is the required behavior, and it defaults to on for CK802. For other targets, the default is off.
-mhigh-registers -mno-high-registers Generate code using the high registers numbered 16-31.  This option is not supported on CK801, CK802, or CK803, and is enabled by default for other processors.
-manchor -mno-anchor Generate code using global anchor symbol addresses.
-mpushpop -mno-pushpop Generate code using "push" and "pop" instructions.  This option defaults to on.
-mmultiple-stld -mstm -mno-multiple-stld -mno-stm Generate code using "stm" and "ldm" instructions.  This option isn't supported on CK801 but is enabled by default on other processors.
-mconstpool -mno-constpool Create constant pools in the compiler instead of deferring it to the assembler.  This option is the default and required for correct code generation on CK801 and CK802, and is optional on other processors.
-mstack-size -mno-stack-size Emit ".stack_size" directives for each function in the assembly output.  This option defaults to off.
-mccrt -mno-ccrt Generate code for the C-SKY compiler runtime instead of libgcc.  This option defaults to off.
-mbranch-cost=n Set the branch costs to roughly "n" instructions.  The default is 1.
-msched-prolog -mno-sched-prolog Permit scheduling of function prologue and epilogue sequences.  Using this option can result in code that is not compliant with the C-SKY V2 ABI prologue requirements and that cannot be debugged or backtraced.  It is disabled by default.
-msim Links the library libsemi.a which is in compatible with simulator. Applicable to ELF compiler only.
Darwin Options
These options are defined for all architectures running the Darwin operating system.
FSF GCC on Darwin does not create "fat" object files; it creates an object file for the single architecture that GCC was built to target. Apple's GCC on Darwin does create "fat" files if multiple -arch options are used; it does so by running the compiler or linker multiple times and joining the results together with lipo.
The subtype of the file created (like ppc7400 or ppc970 or i686) is determined by the flags that specify the ISA that GCC is targeting, like -mcpu or -march.  The -force_cpusubtype_ALL option can be used to override this.
The Darwin tools vary in their behavior when presented with an ISA mismatch.  The assembler, as, only permits instructions to be used that are valid for the subtype of the file it is generating, so you cannot put 64-bit instructions in a ppc750 object file.  The linker for shared libraries, /usr/bin/libtool, fails and prints an error if asked to create a shared library with a less restrictive subtype than its input files (for instance, trying to put a ppc970 object file in a ppc7400 library). The linker for executables, ld, quietly gives the executable the most restrictive subtype of any of its input files.
-Fdir Add the framework directory dir to the head of the list of directories to be searched for header files.  These directories are interleaved with those specified by -I options and are scanned in a left-to-right order.
A framework directory is a directory with frameworks in it.  A framework is a directory with a Headers and/or PrivateHeaders directory contained directly in it that ends in .framework.  The name of a framework is the name of this directory excluding the .framework.  Headers associated with the framework are found in one of those two directories, with Headers being searched first.  A subframework is a framework directory that is in a framework's Frameworks directory.  Includes of subframework headers can only appear in a header of a framework that contains the subframework, or in a sibling subframework header.  Two subframeworks are siblings if they occur in the same framework.  A subframework should not have the same name as a framework; a warning is issued if this is violated. Currently a subframework cannot have subframeworks; in the future, the mechanism may be extended to support this.  The standard frameworks can be found in /System/Library/Frameworks and /Library/Frameworks.  An example include looks like "#include <Framework/header.h>", where Framework denotes the name of the framework and header.h is found in the PrivateHeaders or Headers directory.
-iframeworkdir Like -F except the directory is a treated as a system directory.  The main difference between this -iframework and -F is that with -iframework the compiler does not warn about constructs contained within header files found via dir.  This option is valid only for the C family of languages.
-gused Emit debugging information for symbols that are used.  For stabs debugging format, this enables -feliminate-unused-debug-symbols. This is by default ON.
-gfull Emit debugging information for all symbols and types.
-mmacosx-version-min=version The earliest version of MacOS X that this executable will run on is version.  Typical values of version include 10.1, 10.2, and 10.3.9.
If the compiler was built to use the system's headers by default, then the default for this option is the system version on which the compiler is running, otherwise the default is to make choices that are compatible with as many systems and code bases as possible.
-mkernel Enable kernel development mode.  The -mkernel option sets -static, -fno-common, -fno-use-cxa-atexit, -fno-exceptions, -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti where applicable.  This mode also sets -mno-altivec, -msoft-float, -fno-builtin and -mlong-branch for PowerPC targets.
-mone-byte-bool Override the defaults for "bool" so that "sizeof(bool)==1".  By default "sizeof(bool)" is 4 when compiling for Darwin/PowerPC and 1 when compiling for Darwin/x86, so this option has no effect on x86.
Warning: The -mone-byte-bool switch causes GCC to generate code that is not binary compatible with code generated without that switch. Using this switch may require recompiling all other modules in a program, including system libraries.  Use this switch to conform to a non-default data model.
-mfix-and-continue -ffix-and-continue -findirect-data Generate code suitable for fast turnaround development, such as to allow GDB to dynamically load .o files into already-running programs. -findirect-data and -ffix-and-continue are provided for backwards compatibility.
-all_load Loads all members of static archive libraries.  See man ld(1) for more information.
-arch_errors_fatal Cause the errors having to do with files that have the wrong architecture to be fatal.
-bind_at_load Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.
-bundle Produce a Mach-o bundle format file.  See man ld(1) for more information.
-bundle_loader executable This option specifies the executable that will load the build output file being linked.  See man ld(1) for more information.
-dynamiclib When passed this option, GCC produces a dynamic library instead of an executable when linking, using the Darwin libtool command.
-force_cpusubtype_ALL This causes GCC's output file to have the ALL subtype, instead of one controlled by the -mcpu or -march option.
-allowable_client  client_name -client_name -compatibility_version -current_version -dead_strip -dependency-file -dylib_file -dylinker_install_name -dynamic -exported_symbols_list -filelist -flat_namespace -force_flat_namespace -headerpad_max_install_names -image_base -init -install_name -keep_private_externs -multi_module -multiply_defined -multiply_defined_unused -noall_load -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind -noseglinkedit -pagezero_size -prebind -prebind_all_twolevel_modules -private_bundle -read_only_relocs -sectalign -sectobjectsymbols -whyload -seg1addr -sectcreate -sectobjectsymbols -sectorder -segaddr -segs_read_only_addr -segs_read_write_addr -seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr -segs_read_write_addr -single_module -static -sub_library -sub_umbrella -twolevel_namespace -umbrella -undefined -unexported_symbols_list -weak_reference_mismatches -whatsloaded These options are passed to the Darwin linker.  The Darwin linker man page describes them in detail.
DEC Alpha Options
These -m options are defined for the DEC Alpha implementations:
-mno-soft-float -msoft-float Use (do not use) the hardware floating-point instructions for floating-point operations.  When -msoft-float is specified, functions in libgcc.a are 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 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 non-standard 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.
-mieee The Alpha architecture implements floating-point hardware optimized for maximum performance.  It is mostly compliant with the IEEE floating-point standard.  However, for full compliance, software assistance is required.  This option generates code fully IEEE- compliant code except that the inexact-flag is not maintained (see below).  If this option is turned on, the preprocessor macro "_IEEE_FP" is defined during compilation.  The resulting code is less efficient but is able to correctly support denormalized numbers and exceptional IEEE values such as not-a-number and plus/minus infinity. Other Alpha compilers call this option -ieee_with_no_inexact.
-mieee-with-inexact This is like -mieee except the generated code also maintains the IEEE inexact-flag.  Turning on this option causes the generated code to implement fully-compliant IEEE math.  In addition to "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.  On some Alpha implementations the resulting code may execute significantly slower than the code generated by default.  Since there is very little code that depends on the inexact-flag, you should normally not specify this option.  Other Alpha compilers call this option -ieee_with_inexact.
-mfp-trap-mode=trap-mode This option controls what floating-point related traps are enabled. Other Alpha compilers call this option -fptm trap-mode.  The trap mode can be set to one of four values:
n   This is the default (normal) setting.  The only traps that are enabled are the ones that cannot be disabled in software (e.g., division by zero trap).
u   In addition to the traps enabled by n, underflow traps are enabled as well.
su  Like u, but the instructions are marked to be safe for software completion (see Alpha architecture manual for details).
sui Like su, but inexact traps are enabled as well.
-mfp-rounding-mode=rounding-mode Selects the IEEE rounding mode.  Other Alpha compilers call this option -fprm rounding-mode.  The rounding-mode can be one of:
n   Normal IEEE rounding mode.  Floating-point numbers are rounded towards the nearest machine number or towards the even machine number in case of a tie.
m   Round towards minus infinity.
c   Chopped rounding mode.  Floating-point numbers are rounded towards zero.
d   Dynamic rounding mode.  A field in the floating-point control register (fpcr, see Alpha architecture reference manual) controls the rounding mode in effect.  The C library initializes this register for rounding towards plus infinity.  Thus, unless your program modifies the fpcr, d corresponds to round towards plus infinity.
-mtrap-precision=trap-precision In the Alpha architecture, floating-point traps are imprecise.  This means without software assistance it is impossible to recover from a floating trap and program execution normally needs to be terminated. GCC can generate code that can assist operating system trap handlers in determining the exact location that caused a floating-point trap. Depending on the requirements of an application, different levels of precisions can be selected:
p   Program precision.  This option is the default and means a trap handler can only identify which program caused a floating-point exception.
f   Function precision.  The trap handler can determine the function that caused a floating-point exception.
i   Instruction precision.  The trap handler can determine the exact instruction that caused a floating-point exception.
Other Alpha compilers provide the equivalent options called -scope_safe and -resumption_safe.
-mieee-conformant This option marks the generated code as IEEE conformant.  You must not use this option unless you also specify -mtrap-precision=i and either -mfp-trap-mode=su or -mfp-trap-mode=sui.  Its only effect is to emit the line .eflag 48 in the function prologue of the generated assembly file.
-mbuild-constants Normally GCC examines a 32- or 64-bit integer constant to see if it can construct it from smaller constants in two or three instructions. If it cannot, it outputs the constant as a literal and generates code to load it from the data segment at run time.
Use this option to require GCC to construct all integer constants using code, even if it takes more instructions (the maximum is six).
You typically use this option to build a shared library dynamic loader.  Itself a shared library, it must relocate itself in memory before it can find the variables and constants in its own data segment.
-mbwx -mno-bwx -mcix -mno-cix -mfix -mno-fix -mmax -mno-max Indicate whether GCC should generate code to use the optional BWX, CIX, FIX and MAX instruction sets.  The default is to use the instruction sets supported by the CPU type specified via -mcpu= option or that of the CPU on which GCC was built if none is specified.
-mfloat-vax -mfloat-ieee Generate code that uses (does not use) VAX F and G floating-point arithmetic instead of IEEE single and double precision.
-mexplicit-relocs -mno-explicit-relocs Older Alpha assemblers provided no way to generate symbol relocations except via assembler macros.  Use of these macros does not allow optimal instruction scheduling.  GNU binutils as of version 2.12 supports a new syntax that allows the compiler to explicitly mark which relocations should apply to which instructions.  This option is mostly useful for debugging, as GCC detects the capabilities of the assembler when it is built and sets the default accordingly.
-msmall-data -mlarge-data When -mexplicit-relocs is in effect, static data is accessed via gp- relative relocations.  When -msmall-data is used, objects 8 bytes long or smaller are placed in a small data area (the ".sdata" and ".sbss" sections) and are accessed via 16-bit relocations off of the $gp register.  This limits the size of the small data area to 64KB, but allows the variables to be directly accessed via a single instruction.
The default is -mlarge-data.  With this option the data area is limited to just below 2GB.  Programs that require more than 2GB of data must use "malloc" or "mmap" to allocate the data in the heap instead of in the program's data segment.
When generating code for shared libraries, -fpic implies -msmall-data and -fPIC implies -mlarge-data.
-msmall-text -mlarge-text When -msmall-text is used, the compiler assumes that the code of the entire program (or shared library) fits in 4MB, and is thus reachable with a branch instruction.  When -msmall-data is used, the compiler can assume that all local symbols share the same $gp value, and thus reduce the number of instructions required for a function call from 4 to 1.
The default is -mlarge-text.
-mcpu=cpu_type Set the instruction set and instruction scheduling parameters for machine type cpu_type.  You can specify either the EV style name or the corresponding chip number.  GCC supports scheduling parameters for the EV4, EV5 and EV6 family of processors and chooses the default values for the instruction set from the processor you specify.  If you do not specify a processor type, GCC defaults to the processor on which the compiler was built.
Supported values for cpu_type are
ev4 ev45 21064 Schedules as an EV4 and has no instruction set extensions.
ev5 21164 Schedules as an EV5 and has no instruction set extensions.
ev56 21164a Schedules as an EV5 and supports the BWX extension.
pca56 21164pc 21164PC Schedules as an EV5 and supports the BWX and MAX extensions.
ev6 21264 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
ev67 21264a Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
Native toolchains also support the value native, which selects the best architecture option for the host processor.  -mcpu=native has no effect if GCC does not recognize the processor.
-mtune=cpu_type Set only the instruction scheduling parameters for machine type cpu_type.  The instruction set is not changed.
Native toolchains also support the value native, which selects the best architecture option for the host processor.  -mtune=native has no effect if GCC does not recognize the processor.
-mmemory-latency=time Sets the latency the scheduler should assume for typical memory references as seen by the application.  This number is highly dependent on the memory access patterns used by the application and the size of the external cache on the machine.
Valid options for time are
number A decimal number representing clock cycles.
L1 L2 L3 main The compiler contains estimates of the number of clock cycles for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches (also called Dcache, Scache, and Bcache), as well as to main memory. Note that L3 is only valid for EV5.
eBPF Options
-mframe-limit=bytes This specifies the hard limit for frame sizes, in bytes.  Currently, the value that can be specified should be less than or equal to 32767.  Defaults to whatever limit is imposed by the version of the Linux kernel targeted.
-mkernel=version This specifies the minimum version of the kernel that will run the compiled program.  GCC uses this version to determine which instructions to use, what kernel helpers to allow, etc.  Currently, version can be one of 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 4.10, 4.11, 4.12, 4.13, 4.14, 4.15, 4.16, 4.17, 4.18, 4.19, 4.20, 5.0, 5.1, 5.2, latest and native.
-mxbpf Generate code for an expanded version of BPF, which relaxes some of the restrictions imposed by the BPF architecture:
-<Save and restore callee-saved registers at function entry and> exit, respectively.
FR30 Options
These options are defined specifically for the FR30 port.
-msmall-model Use the small address space model.  This can produce smaller code, but it does assume that all symbolic values and addresses fit into a 20-bit range.
-mno-lsim Assume that runtime support has been provided and so there is no need to include the simulator library (libsim.a) on the linker command line.
FT32 Options
These options are defined specifically for the FT32 port.
-msim Specifies that the program will be run on the simulator.  This causes an alternate runtime startup and library to be linked.  You must not use this option when generating programs that will run on real hardware; you must provide your own runtime library for whatever I/O functions are needed.
-mlra Enable Local Register Allocation.  This is still experimental for FT32, so by default the compiler uses standard reload.
-mnodiv Do not use div and mod instructions.
-mft32b Enable use of the extended instructions of the FT32B processor.
-mcompress Compress all code using the Ft32B code compression scheme.
-mnopm Do not generate code that reads program memory.
FRV Options
-mgpr-32 Only use the first 32 general-purpose registers.
-mgpr-64 Use all 64 general-purpose registers.
-mfpr-32 Use only the first 32 floating-point registers.
-mfpr-64 Use all 64 floating-point registers.
-mhard-float Use hardware instructions for floating-point operations.
-msoft-float Use library routines for floating-point operations.
-malloc-cc Dynamically allocate condition code registers.
-mfixed-cc Do not try to dynamically allocate condition code registers, only use "icc0" and "fcc0".
-mdword Change ABI to use double word insns.
-mno-dword Do not use double word instructions.
-mdouble Use floating-point double instructions.
-mno-double Do not use floating-point double instructions.
-mmedia Use media instructions.
-mno-media Do not use media instructions.
-mmuladd Use multiply and add/subtract instructions.
-mno-muladd Do not use multiply and add/subtract instructions.
-mfdpic Select the FDPIC ABI, which uses function descriptors to represent pointers to functions.  Without any PIC/PIE-related options, it implies -fPIE.  With -fpic or -fpie, it assumes GOT entries and small data are within a 12-bit range from the GOT base address; with -fPIC or -fPIE, GOT offsets are computed with 32 bits.  With a bfin-elf target, this option implies -msim.
-minline-plt Enable inlining of PLT entries in function calls to functions that are not known to bind locally.  It has no effect without -mfdpic. It's enabled by default if optimizing for speed and compiling for shared libraries (i.e., -fPIC or -fpic), or when an optimization option such as -O3 or above is present in the command line.
-mTLS Assume a large TLS segment when generating thread-local code.
-mtls Do not assume a large TLS segment when generating thread-local code.
-mgprel-ro Enable the use of "GPREL" relocations in the FDPIC ABI for data that is known to be in read-only sections.  It's enabled by default, except for -fpic or -fpie: even though it may help make the global offset table smaller, it trades 1 instruction for 4.  With -fPIC or -fPIE, it trades 3 instructions for 4, one of which may be shared by multiple symbols, and it avoids the need for a GOT entry for the referenced symbol, so it's more likely to be a win.  If it is not, -mno-gprel-ro can be used to disable it.
-multilib-library-pic Link with the (library, not FD) pic libraries.  It's implied by -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic.  You should never have to use it explicitly.
-mlinked-fp Follow the EABI requirement of always creating a frame pointer whenever a stack frame is allocated.  This option is enabled by default and can be disabled with -mno-linked-fp.
-mlong-calls Use indirect addressing to call functions outside the current compilation unit.  This allows the functions to be placed anywhere within the 32-bit address space.
-malign-labels Try to align labels to an 8-byte boundary by inserting NOPs into the previous packet.  This option only has an effect when VLIW packing is enabled.  It doesn't create new packets; it merely adds NOPs to existing ones.
-mlibrary-pic Generate position-independent EABI code.
-macc-4 Use only the first four media accumulator registers.
-macc-8 Use all eight media accumulator registers.
-mpack Pack VLIW instructions.
-mno-pack Do not pack VLIW instructions.
-mno-eflags Do not mark ABI switches in e_flags.
-mcond-move Enable the use of conditional-move instructions (default).
This switch is mainly for debugging the compiler and will likely be removed in a future version.
-mno-cond-move Disable the use of conditional-move instructions.
-mscc Enable the use of conditional set instructions (default).
-mno-scc Disable the use of conditional set instructions.
-mcond-exec Enable the use of conditional execution (default).
-mno-cond-exec Disable the use of conditional execution.
-mvliw-branch Run a pass to pack branches into VLIW instructions (default).
-mno-vliw-branch Do not run a pass to pack branches into VLIW instructions.
-mmulti-cond-exec Enable optimization of "&&" and "||" in conditional execution (default).
-mno-multi-cond-exec Disable optimization of "&&" and "||" in conditional execution.
-mnested-cond-exec Enable nested conditional execution optimizations (default).
-mno-nested-cond-exec Disable nested conditional execution optimizations.
-moptimize-membar This switch removes redundant "membar" instructions from the compiler-generated code.  It is enabled by default.
-mno-optimize-membar This switch disables the automatic removal of redundant "membar" instructions from the generated code.
-mtomcat-stats Cause gas to print out tomcat statistics.
-mcpu=cpu Select the processor type for which to generate code.  Possible values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300 and simple.
GNU/Linux Options
These -m options are defined for GNU/Linux targets:
-mglibc Use the GNU C library.  This is the default except on *-*-linux-*uclibc*, *-*-linux-*musl* and *-*-linux-*android* targets.
-muclibc Use uClibc C library.  This is the default on *-*-linux-*uclibc* targets.
-mmusl Use the musl C library.  This is the default on *-*-linux-*musl* targets.
-mbionic Use Bionic C library.  This is the default on *-*-linux-*android* targets.
-mandroid Compile code compatible with Android platform.  This is the default on *-*-linux-*android* targets.
When compiling, this option enables -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.  When linking, this option makes the GCC driver pass Android-specific options to the linker.  Finally, this option causes the preprocessor macro "__ANDROID__" to be defined.
-tno-android-cc Disable compilation effects of -mandroid, i.e., do not enable -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
-tno-android-ld Disable linking effects of -mandroid, i.e., pass standard Linux linking options to the linker.
H8/300 Options
These -m options are defined for the H8/300 implementations:
-mrelax Shorten some address references at link time, when possible; uses the linker option -relax.
-mh Generate code for the H8/300H.
-ms Generate code for the H8S.
-mn Generate code for the H8S and H8/300H in the normal mode.  This switch must be used either with -mh or -ms.
-ms2600 Generate code for the H8S/2600.  This switch must be used with -ms.
-mexr Extended registers are stored on stack before execution of function with monitor attribute. Default option is -mexr.  This option is valid only for H8S targets.
-mno-exr Extended registers are not stored on stack before execution of function with monitor attribute. Default option is -mno-exr.  This option is valid only for H8S targets.
-mint32 Make "int" data 32 bits by default.
-malign-300 On the H8/300H and H8S, use the same alignment rules as for the H8/300.  The default for the H8/300H and H8S is to align longs and floats on 4-byte boundaries.  -malign-300 causes them to be aligned on 2-byte boundaries.  This option has no effect on the H8/300.
HPPA Options
These -m options are defined for the HPPA family of computers:
-march=architecture-type Generate code for the specified architecture.  The choices for architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for PA 2.0 processors.  Refer to /usr/lib/sched.models on an HP-UX system to determine the proper architecture option for your machine.  Code compiled for lower numbered architectures runs on higher numbered architectures, but not the other way around.
-mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
-mcaller-copies The caller copies function arguments passed by hidden reference. This option should be used with care as it is not compatible with the default 32-bit runtime.  However, only aggregates larger than eight bytes are passed by hidden reference and the option provides better compatibility with OpenMP.
-mjump-in-delay This option is ignored and provided for compatibility purposes only.
-mdisable-fpregs Prevent floating-point registers from being used in any manner.  This is necessary for compiling kernels that perform lazy context switching of floating-point registers.  If you use this option and attempt to perform floating-point operations, the compiler aborts.
-mdisable-indexing Prevent the compiler from using indexing address modes.  This avoids some rather obscure problems when compiling MIG generated code under MACH.
-mno-space-regs Generate code that assumes the target has no space registers.  This allows GCC to generate faster indirect calls and use unscaled index address modes.
Such code is suitable for level 0 PA systems and kernels.
-mfast-indirect-calls Generate code that assumes calls never cross space boundaries.  This allows GCC to emit code that performs faster indirect calls.
This option does not work in the presence of shared libraries or nested functions.
-mfixed-range=register-range Generate code treating the given register range as fixed registers. A fixed register is one that the register allocator cannot use.  This is useful when compiling kernel code.  A register range is specified as two registers separated by a dash.  Multiple register ranges can be specified separated by a comma.
-mlong-load-store Generate 3-instruction load and store sequences as sometimes required by the HP-UX 10 linker.  This is equivalent to the +k option to the HP compilers.
-mportable-runtime Use the portable calling conventions proposed by HP for ELF systems.
-mgas Enable the use of assembler directives only GAS understands.
-mschedule=cpu-type Schedule code according to the constraints for the machine type cpu- type.  The choices for cpu-type are 700 7100, 7100LC, 7200, 7300 and 8000.  Refer to /usr/lib/sched.models on an HP-UX system to determine the proper scheduling option for your machine.  The default scheduling is 8000.
-mlinker-opt Enable the optimization pass in the HP-UX linker.  Note this makes symbolic debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9 linkers in which they give bogus error messages when linking some programs.
-msoft-float Generate output containing library calls for floating point. Warning: the requisite libraries are not available for all HPPA targets.  Normally the facilities of the machine's usual C compiler are used, but this cannot be done directly in cross-compilation.  You must make your own arrangements to provide suitable library functions for cross-compilation.
-msoft-float changes the calling convention in the output file; therefore, it is only useful if you compile all of a program with this option.  In particular, you need to compile libgcc.a, the library that comes with GCC, with -msoft-float in order for this to work.
-msio Generate the predefine, "_SIO", for server IO.  The default is -mwsio.  This generates the predefines, "__hp9000s700", "__hp9000s700__" and "_WSIO", for workstation IO.  These options are available under HP-UX and HI-UX.
-mgnu-ld Use options specific to GNU ld.  This passes -shared to ld when building a shared library.  It is the default when GCC is configured, explicitly or implicitly, with the GNU linker.  This option does not affect which ld is called; it only changes what parameters are passed to that ld.  The ld that is called is determined by the --with-ld configure option, GCC's program search path, and finally by the user's PATH.  The linker used by GCC can be printed using which `gcc -print-prog-name=ld`.  This option is only available on the 64-bit HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
-mhp-ld Use options specific to HP ld.  This passes -b to ld when building a shared library and passes +Accept TypeMismatch to ld on all links. It is the default when GCC is configured, explicitly or implicitly, with the HP linker.  This option does not affect which ld is called; it only changes what parameters are passed to that ld.  The ld that is called is determined by the --with-ld configure option, GCC's program search path, and finally by the user's PATH.  The linker used by GCC can be printed using which `gcc -print-prog-name=ld`.  This option is only available on the 64-bit HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
-mlong-calls Generate code that uses long call sequences.  This ensures that a call is always able to reach linker generated stubs.  The default is to generate long calls only when the distance from the call site to the beginning of the function or translation unit, as the case may be, exceeds a predefined limit set by the branch type being used. The limits for normal calls are 7,600,000 and 240,000 bytes, respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at 240,000 bytes.
Distances are measured from the beginning of functions when using the -ffunction-sections option, or when using the -mgas and -mno-portable-runtime options together under HP-UX with the SOM linker.
It is normally not desirable to use this option as it degrades performance.  However, it may be useful in large applications, particularly when partial linking is used to build the application.
The types of long calls used depends on the capabilities of the assembler and linker, and the type of code being generated.  The impact on systems that support long absolute calls, and long pic symbol-difference or pc-relative calls should be relatively small. However, an indirect call is used on 32-bit ELF systems in pic code and it is quite long.
-munix=unix-std Generate compiler predefines and select a startfile for the specified UNIX standard.  The choices for unix-std are 93, 95 and 98.  93 is supported on all HP-UX versions.  95 is available on HP-UX 10.10 and later.  98 is available on HP-UX 11.11 and later.  The default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to 11.00, and 98 for HP-UX 11.11 and later.