isa_abi_headache
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:5k
源码类别:

数学计算

开发平台:

Unix_Linux

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