x32 psABI Support

Machine architectures have their own application binary interface (ABI). An ABI defines how the toolchain builds applications. It defines, among other things, how parameters are passed to functions (via registers/stack), how parameters are cleaned from the stack (by caller/callee), where return values are placed, and how exceptions propagate.

The x32 psABI is a native 32-bit processor-specific ABI for Intel® 64 (x86-64) architecture. The Linux* kernel v3.6 supports x32 psABI. ABI support on Linux is enabled by setting CONFIG_X86_X32=y in the .config file.

Using the x32 psABI allows programs to run in the 64-bit mode while using 32-bit pointers, thereby reducing memory footprint and file size, as a result of which programs may run faster. In other words, using this ABI may bring significant performance gain for many applications in terms of extra registers available on 64-bit processors without the size (cache) penalty of using 64-bit pointers. However, programs will be limited to 4GB virtual address space (not all applications require more than 4 GB memory space).

The compiler conforms to the x32 psABI to generate code that follows the specifications enumerated by the ABI. View or download the latest, updated x32 psABI PDF document from this site: https://sites.google.com/site/x32abi/documents.

Options to Enforce x32 psABI Support

The compiler supports calling convention changes as a result of pointer-size reduction on 64-bit architectures. The following options are implemented to enforce x32 psABI support:

  • The -mx32 compiler option to generate x32-compatible object files.

  • The -qmx32 option for xiar/xild utilities to define the format of the object files as compatible with x32 psABI.

Additional Predefined Macros for x32 psABI Support

The bi-endian compiler supports the following predefined macros for x32 psABI support. The compiler also includes predefined macros specified by the ISO/ANSI standard.

Macro Description

_ILP32

__ILP32__

Defined as '1'.

Note

Available only for compilations targeting Intel® 64 architecture with x32 psABI support.

Compatible Libraries for x32 psABI Support

The following libraries are compatible with x32 psABI:

  • Common libraries:

    libbfp754.a
    libintlc.so libintlc.so.5
    libdecimal.a
    libimf.a libimf.so
    libipgo.a
    libirc.a libirc.so
    libirc_s.a
    libirng.a libirng.so
    libpdbx.a libpdbx.so libpdbx.so.5
    libpdbxinst.a
    libsvml.a libsvml.so

    Many routines in the libirc or svml libraries are more highly optimized for Intel microprocessors than for non-Intel microprocessors.

  • Bi-endian specific libraries:

    datainit-dynrunb.o
    datainit-dynrunb-pie.o
    datainit-dynrunbS.o
    datainit-dynrune.o
    libbedatainit.a libbedatainit.so libbedatainit.so.5

Features not Supported Using x32 psABI

When you use x32 psABI, the following bi-endian compiler features are not supported:

  • OpenMP*
  • Pointer checker
  • Intel® Cilk™ Plus

    Note

    However, SIMD-enabled functions, which are part of Intel® Cilk™ Plus, are supported.

Optimization Notice

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804

See Also

For more complete information about compiler optimizations, see our Optimization Notice.