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