7.8.3.1 Optimization

  • -mfast-float

    Enable fast floating-point library. It is enabled by default if the -funsafe-math-optimizations switch is specified.

  • -funsafe-math-optimizations

    Allow optimizations for floating-point arithmetic that (a) assume that arguments and results are valid and (b) may violate IEEE or ANSI standards. When used at link-time, it may include libraries or start-up files that change the default FPU control word or similar optimizations. This option is not turned on by any ‘-O’ option since it can result in incorrect output for programs depending on an exact implementation of IEEE or ISO rules/specifications for math functions. However, it may yield faster code for programs not requiring these specifications. Enables ‘-fno-signed-zeros’, ‘-fno-trapping-math’, ‘-fassociative-math’, and ‘-freciprocal-math’. The default is ‘-fno-unsafe-math-optimizations’.

  • -ffast-math

    This option causes the preprocessor macro __FAST_MATH__ to be defined. This option is not turned on by any ‘-O’ option since it can result in incorrect output for programs depending on an exact implementation of IEEE or ISO rules/specifications for math functions. It may, however, yield faster code for programs that do not require the ensure of these specifications. It sets ‘-fno-math-errno’, ‘-funsafe-math-optimizations’, ‘-ffinite-math-only’, ‘-fno-rounding-math’, ‘-fno-signaling-nans’, and ‘-fcx-limited-range’.

  • -fpic

    Generate position-independent code (PIC) suitable for use in a shared library if supported for the target machine. Such code accesses all constant addresses through a global offset table (GOT). The dynamic loader resolves the GOT entries when the program starts (the dynamic loader is not part of GCC; it is part of the operating system). If the GOT size for the linked executable exceeds a machine-specific maximum size, you get an error message from the linker indicating that ‘-fpic’ does not work; in that case, recompile with ‘-fPIC’ instead. (These maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 386 has no such limit.) Position-independent code requires special support and, therefore, works only on certain machines. For the 386, GCC supports PIC for System V but not for the Sun 386i. Code generated for the IBM RS/6000 is always position-independent. When this flag is set, the macros __pic__ and __PIC__ are defined to 1.

  • -Wl,--direct-data

    Allow direct data references when optimizing. To enable the linker to convert an lda.w into an immediate move instruction, i.e., linker relaxing, the option ‘—direct-data’ must be given to the linker.