HPPA Options (Using the GNU Compiler Collection (GCC))

#### 3.20.20 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.

`-matomic-libcalls` ¶
`-mno-atomic-libcalls`

  Generate libcalls for atomic loads and stores when sync libcalls are disabled. This option is enabled by default. It only affects the generation of atomic libcalls by the HPPA backend.

  Both the sync and `libatomic` libcall implementations use locking. As a result, processor stores are not atomic with respect to other atomic operations. Processor loads up to DImode are atomic with respect to other atomic operations provided they are implemented as a single access.

  The PA-RISC architecture does not support any atomic operations in hardware except for the `ldcw` instruction. Thus, all atomic support is implemented using sync and atomic libcalls. Sync libcall support is in `libgcc.a`. Atomic libcall support is in `libatomic`.

  This option generates `__atomic_exchange` calls for atomic stores. It also provides special handling for atomic DImode accesses on 32-bit targets.

`-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.

`-mcoherent-ldcw` ¶

  Use ldcw/ldcd coherent cache-control hint.

`-mdisable-fpregs` ¶

  Disable floating-point registers. Equivalent to `-msoft-float`.

`-mdisable-indexing` ¶

  Prevent the compiler from using indexing address modes. This avoids some rather obscure problems when compiling MIG generated code under MACH.

`-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.

`-mgas` ¶

  Enable the use of assembler directives only GAS understands.

`-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*`’.

`-mlinker-opt` ¶

  Enable the optimization pass in the HP-UX linker. Note this makes symbolic debugging impossible.

`-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. Sibling calls 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.

`-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.

`-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.

`-mordered` ¶

  Assume memory references are ordered and barriers are not needed.

`-mportable-runtime` ¶

  Use the portable calling conventions proposed by HP for ELF systems.

`-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`’.

`-msio` ¶
`-mwsio`

  The `-msio` generates 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.

`-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.

`-msoft-mult` ¶

  Use software integer multiplication.

  This disables the use of the `xmpyu` instruction.

`-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.

  `-munix=93` provides the same predefines as GCC 3.3 and 3.4. `-munix=95` provides additional predefines for `XOPEN_UNIX` and `_XOPEN_SOURCE_EXTENDED`, and the startfile `unix95.o`. `-munix=98` provides additional predefines for `_XOPEN_UNIX`, `_XOPEN_SOURCE_EXTENDED`, `_INCLUDE__STDC_A1_SOURCE` and `_INCLUDE_XOPEN_SOURCE_500`, and the startfile `unix98.o`.

  It is important to note that this option changes the interfaces for various library routines. It also affects the operational behavior of the C library. Thus, extreme care is needed in using this option.

  Library code that is intended to operate with more than one UNIX standard must test, set and restore the variable `__xpg4_extended_mask` as appropriate. Most GNU software doesn’t provide this capability.

`-nolibdld` ¶

  Suppress the generation of link options to search `libdld.sl` when the `-static` option is specified on HP-UX 10 and later.

`-static` ¶

  The HP-UX C library implementation of `setlocale` has a dependency on `libdld.sl`. There isn’t an archive version of `libdld.sl`. Thus, when the `-static` option is specified, special link options are needed to resolve this dependency.

  On HP-UX 10 and later, the GCC driver adds the necessary options to link with `libdld.sl` when the `-static` option is specified. This causes the resulting binary to be dynamic. On the 64-bit port, the linkers generate dynamic binaries by default in any case. The `-nolibdld` option can be used to prevent the GCC driver from adding these link options.

`-threads` ¶

  Add support for multithreading with the dce thread library under HP-UX. This option sets flags for both the preprocessor and linker.