Home | History | Annotate | Line # | Download | only in doc
      1 Copyright 2000 Free Software Foundation, Inc.
      2 
      3 This file is part of the GNU MP Library.
      4 
      5 The GNU MP Library is free software; you can redistribute it and/or modify
      6 it under the terms of either:
      7 
      8   * the GNU Lesser General Public License as published by the Free
      9     Software Foundation; either version 3 of the License, or (at your
     10     option) any later version.
     11 
     12 or
     13 
     14   * the GNU General Public License as published by the Free Software
     15     Foundation; either version 2 of the License, or (at your option) any
     16     later version.
     17 
     18 or both in parallel, as here.
     19 
     20 The GNU MP Library is distributed in the hope that it will be useful, but
     21 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     22 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     23 for more details.
     24 
     25 You should have received copies of the GNU General Public License and the
     26 GNU Lesser General Public License along with the GNU MP Library.  If not,
     27 see https://www.gnu.org/licenses/.
     28 
     29 
     30 
     31 
     32 Terms Used In This Document:
     33   ISA = Instruction Set Architecture.   The instructions the current
     34         processor provides.
     35   ABI = Application Binary Interface.  Specifies calling convention,
     36         type sizes, etc.
     37   AR64 = Arithmetic operations are 64-bit using 64-bit instructions
     38 	 (E.g., addition, subtraction, load, store, of 64-bit integer types
     39 	 are done with single instructions, not 32 bits at a time.)
     40   Environment = The operating system and compiler.
     41 
     42 GMP is a very complex package to build since its speed is very
     43 sensitive to the ISA and ABI.  For example, if the ISA provides 64-bit
     44 instructions, it is crucial that GMP is configured to use them.
     45 
     46 Most environments that run on a 64-bit ISA provide more than one ABI.
     47 Typically one of the supported ABI's is a backward compatible 32-bit
     48 ABI, and one ABI provides 64-bit addressing and `long' (sometimes
     49 known as LP64).  But a few environments (IRIX, HP-UX) provide
     50 intermediate ABI's using 32-bit addressing but allow efficient 64-bit
     51 operations through a `long long' type.  For the latter to be useful to
     52 GMP, the ABI must allow operations using the native 64-bit
     53 instructions provided by the ISA, and allow passing of 64-bit
     54 quantities atomically.
     55 
     56 The ABI is typically chosen by means of command line options to the
     57 compiler tools (gcc, cc, c89, nm, ar, ld, as).  Different environments
     58 use different defaults, but as of this writing (May 2000) the
     59 dominating default is to the plain 32-bit ABI in its most arcane form.
     60 
     61 The GMP 3.0.x approach was to compile using the ABI that gives the
     62 best performance.  That places the burden on users to pass special
     63 options to the compiler when they compile their GMP applications.
     64 That approach has its advantages and disadvantages.  The main
     65 advantage is that users don't unknowingly get bad GMP performance.
     66 The main disadvantage is that users' compiles (actually links) will
     67 fail unless they pass special compiler options.
     68 
     69 ** SPARC
     70 
     71 System vendors often confuse ABI, ISA, and implementation.  The worst
     72 case is Solaris, were the unbundled compiler confuses ISA and ABI, and
     73 the options have very confusing names.
     74 
     75      option		interpretation
     76      ======		==============
     77 cc   -xarch=v8plus	ISA=sparcv9, ABI=V8plus (PTR=32, see below)
     78 gcc  -mv8plus		ISA=sparcv9, ABI=V8plus (see below)
     79 cc   -xarch=v9		ISA=sparcv9, ABI=V9 (implying AR=64, PTR=64)
     80 
     81 It's hard to believe, but the option v8plus really means ISA=V9!
     82 
     83 Solaris releases prior to version 7 running on a V9 CPU fails to
     84 save/restore the upper 32 bits of the `i' and `l' registers.  The
     85 `v8plus' option generates code that use as many V9 features as
     86 possible under such circumstances.
     87 
     88 ** MIPS
     89 
     90 The IRIX 6 compilers gets things right.  They have a clear
     91 understanding of the differences between ABI and ISA.  The option
     92 names are descriptive.
     93 
     94      option		interpretation
     95      ======		==============
     96 cc   -n32		ABI=n32 (implying AR=64, PTR=32)
     97 gcc  -mabi=n32		ABI=n32 (implying AR=64, PTR=32)
     98 cc   -64		ABI=64 (implying AR=64, PTR=64)
     99 gcc  -mabi=64		ABI=64 (implying AR=64, PTR=64)
    100 cc   -mips3		ISA=mips3
    101 gcc  -mips3		ISA=mips3
    102 cc   -mips4		ISA=mips4
    103 gcc  -mips4		ISA=mips4
    104 
    105 ** HP-PA
    106 
    107 HP-UX is somewhat weird, but not as broken as Solaris.
    108 
    109      option		interpretation
    110      ======		==============
    111 cc   +DA2.0		ABI=32bit (implying AR=64, PTR=32)
    112 cc   +DD64		ABI=64bit (implying AR=64, PTR=64)
    113 
    114 Code performing 64-bit arithmetic in the HP-UX 32-bit is not
    115 compatible with the 64-bit ABI; the former has a calling convention
    116 that passes/returns 64-bit integer quantities as two 32-bit chunks.
    117 
    118 ** PowerPC
    119 
    120 While the PowerPC ABI's are capable of supporting 64-bit
    121 registers/operations, the compilers under AIX are similar to Solaris'
    122 cc in that they don't currently provide any 32-bit addressing with
    123 64-bit arithmetic.
    124 
    125      option			interpretation
    126      ======			==============
    127 cc   -q64			ABI=64bit (implying AR=64, PTR=64)
    128 gcc  -maix64 -mpowerpc64	ABI=64bit (implying AR=64, PTR=64)
    129