X32 is an ABI for amd64/x86_64 CPUs using 32-bit integers, longs and pointers. The purpose is to combine the smaller memory and cache footprint from 32-bit data types with the larger register set of x86_64.
There are three principal use cases:
- vserver hosting (memory bound)
- netbooks/tablets (low memory, want performance)
- scientific tasks (want every % of performance)
Compared to amd64, x32 offers significant memory savings, often on the order of 30%, and modest efficiency gains. The 64-bit registers can make computation more efficient. Since 8 additional registers available there is less pressure compared to i386/i686.
Compared to i386, speed increases are more pronounced, especially in code that's under register pressure or operates on 64-bit or floating-point variables. It also avoids i386's penalty for PIC code, where EBX is essentially reserved for the
Global Offset Table (GOT).