| www.delorie.com/gnu/docs/gmp/gmp_6.html | search |
![]() Buy GNU books! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ABI (Application Binary Interface) refers to the calling conventions between functions, meaning what registers are used and what sizes the various C data types are. ISA (Instruction Set Architecture) refers to the instructions and registers a CPU has available.
Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI defined, the
latter for compatibility with older CPUs in the family. GMP supports some
CPUs like this in both ABIs. In fact within GMP `ABI' means a
combination of chip ABI, plus how GMP chooses to use it. For example in some
32-bit ABIs, GMP may support a limb as either a 32-bit long or a 64-bit
long long.
By default GMP chooses the best ABI available for a given system, and this generally gives significantly greater speed. But an ABI can be chosen explicitly to make GMP compatible with other libraries, or particular application requirements. For example,
./configure ABI=32 |
In all cases it's vital that all object code used in a given program is compiled for the same ABI.
Usually a limb is implemented as a long. When a long long limb
is used this is encoded in the generated `gmp.h'. This is convenient for
applications, but it does mean that `gmp.h' will vary, and can't be just
copied around. `gmp.h' remains compiler independent though, since all
compilers for a particular ABI will be expected to use the same limb type.
Currently no attempt is made to follow whatever conventions a system has for
installing library or header files built for a particular ABI. This will
probably only matter when installing multiple builds of GMP, and it might be
as simple as configuring with a special `libdir', or it might require
more than that. Note that builds for different ABIs need to done separately,
with a fresh ./configure and make each.
The 2.0w ABI uses 64-bit limbs and pointers and is available on HP-UX 11 or up
when using cc. gcc support for this is in progress.
Applications must be compiled with
cc +DD64 |
The 2.0n ABI means the 32-bit HPPA 1.0 ABI but with a 64-bit limb using
long long. This is available on HP-UX 10 or up when using
cc. No gcc support is planned for this. Applications
must be compiled with
cc +DA2.0 +e |
HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit HPPA 1.0 ABI. No special compiler options are needed for applications.
All three ABIs are available for CPUs `hppa2.0w' and `hppa2.0', but for CPU `hppa2.0n' only 2.0n or 1.0 are allowed.
IRIX 6 supports the n32 and 64 ABIs and always has a 64-bit MIPS 3 or better
CPU. In both these ABIs GMP uses a 64-bit limb. A new enough gcc
is required (2.95 for instance).
The n32 ABI is 32-bit pointers and integers, but with a 64-bit limb using a
long long. Applications must be compiled with
gcc -mabi=n32 cc -n32 |
The 64-bit ABI is 64-bit pointers and integers. Applications must be compiled with
gcc -mabi=64 cc -64 |
Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have the necessary support for n32 or 64 and so only gets a 32-bit limb and the MIPS 2 code.
The AIX 64 ABI uses 64-bit limbs and pointers and is available on systems `*-*-aix*'. Applications must be compiled (and linked) with
gcc -maix64 xlc -q64 |
This is the basic 32-bit PowerPC ABI. No special compiler options are needed for applications.
The 64-bit V9 ABI is available on Solaris 2.7 and up and GNU/Linux. GCC 2.95
or up, or Sun cc is required. Applications must be compiled with
gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9 cc -xarch=v9 |
On Solaris 2.6 and earlier, and on Solaris 2.7 with the kernel in 32-bit mode, only the plain V8 32-bit ABI can be used, since the kernel doesn't save all registers. GMP still uses as much of the V9 ISA as it can in these circumstances. No special compiler options are required for applications, though using something like the following requesting V9 code within the V8 ABI is recommended.
gcc -mv8plus cc -xarch=v8plus |
gcc 2.8 and earlier only supports `-mv8' though.
Don't be confused by the names of these sparc `-m' and `-x' options, they're called `arch' but they effectively control the ABI.
On Solaris 2.7 with the kernel in 32-bit-mode, a normal native build will reject `ABI=64' because the resulting executables won't run. `ABI=64' can still be built if desired by making it look like a cross-compile, for example
./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64 |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |