configure.in
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:115k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. dnl  Process this file with autoconf to produce a configure script.
  2. define(GMP_COPYRIGHT,[[
  3. Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
  4. 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
  5. This file is part of the GNU MP Library.
  6. The GNU MP Library is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU Lesser General Public License as published
  8. by the Free Software Foundation; either version 3 of the License, or (at
  9. your option) any later version.
  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. You should have received a copy of the GNU Lesser General Public License
  15. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  16. ]])
  17. AC_COPYRIGHT(GMP_COPYRIGHT)
  18. AH_TOP(/*GMP_COPYRIGHT*/)
  19. AC_REVISION($Revision$)
  20. AC_PREREQ(2.59)
  21. AC_INIT(GNU MP, GMP_VERSION, gmp-bugs@gmplib.org, gmp)
  22. AC_CONFIG_SRCDIR(gmp-impl.h)
  23. m4_pattern_forbid([^[ t]*GMP_])
  24. m4_pattern_allow(GMP_LDFLAGS)
  25. m4_pattern_allow(GMP_LIMB_BITS)
  26. m4_pattern_allow(GMP_MPARAM_H_SUGGEST)
  27. m4_pattern_allow(GMP_NAIL_BITS)
  28. m4_pattern_allow(GMP_NUMB_BITS)
  29. # If --target is not used then $target_alias is empty, but if say
  30. # "./configure athlon-pc-freebsd3.5" is used, then all three of
  31. # $build_alias, $host_alias and $target_alias are set to
  32. # "athlon-pc-freebsd3.5".
  33. #
  34. if test -n "$target_alias" && test "$target_alias" != "$host_alias"; then
  35.   AC_MSG_ERROR([--target is not appropriate for GMP
  36. Use --build=CPU-VENDOR-OS if you need to specify your CPU and/or system
  37. explicitly.  Use --host if cross-compiling (see "Installing GMP" in the
  38. manual for more on this).])
  39. fi
  40. GMP_INIT(config.m4)
  41. AC_CANONICAL_HOST
  42. dnl  Automake "no-dependencies" is used because include file dependencies
  43. dnl  are not useful to us.  Pretty much everything depends just on gmp.h,
  44. dnl  gmp-impl.h and longlong.h, and yet only rarely does everything need to
  45. dnl  be rebuilt for changes to those files.
  46. dnl
  47. dnl  "no-dependencies" also helps with the way we're setup to run
  48. dnl  AC_PROG_CXX only conditionally.  If dependencies are used then recent
  49. dnl  automake (eg 1.7.2) appends an AM_CONDITIONAL to AC_PROG_CXX, and then
  50. dnl  gets upset if it's not actually executed.
  51. dnl
  52. dnl  Note that there's a copy of these options in the top-level Makefile.am,
  53. dnl  so update there too if changing anything.
  54. dnl
  55. AM_INIT_AUTOMAKE([1.8 gnu no-dependencies $(top_builddir)/ansi2knr])
  56. AM_CONFIG_HEADER(config.h:config.in)
  57. AM_MAINTAINER_MODE
  58. AC_ARG_ENABLE(assert,
  59. AC_HELP_STRING([--enable-assert],[enable ASSERT checking [[default=no]]]),
  60. [case $enableval in
  61. yes|no) ;;
  62. *) AC_MSG_ERROR([bad value $enableval for --enable-assert, need yes or no]) ;;
  63. esac],
  64. [enable_assert=no])
  65. if test "$enable_assert" = "yes"; then
  66.   AC_DEFINE(WANT_ASSERT,1,
  67.   [Define to 1 to enable ASSERT checking, per --enable-assert])
  68.   want_assert_01=1
  69. else
  70.   want_assert_01=0
  71. fi
  72. GMP_DEFINE_RAW(["define(<WANT_ASSERT>,$want_assert_01)"])
  73. AC_ARG_ENABLE(alloca,
  74. AC_HELP_STRING([--enable-alloca],[how to get temp memory [[default=reentrant]]]),
  75. [case $enableval in
  76. alloca|malloc-reentrant|malloc-notreentrant) ;;
  77. yes|no|reentrant|notreentrant) ;;
  78. debug) ;;
  79. *)
  80.   AC_MSG_ERROR([bad value $enableval for --enable-alloca, need one of:
  81. yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug]) ;;
  82. esac],
  83. [enable_alloca=reentrant])
  84. # IMPROVE ME: The default for C++ is disabled.  The tests currently
  85. # performed below for a working C++ compiler are not particularly strong,
  86. # and in general can't be expected to get the right setup on their own.  The
  87. # most significant problem is getting the ABI the same.  Defaulting CXXFLAGS
  88. # to CFLAGS takes only a small step towards this.  It's also probably worth
  89. # worrying whether the C and C++ runtimes from say gcc and a vendor C++ can
  90. # work together.  Some rather broken C++ installations were encountered
  91. # during testing, and though such things clearly aren't GMP's problem, if
  92. # --enable-cxx=detect were to be the default then some careful checks of
  93. # which, if any, C++ compiler on the system is up to scratch would be
  94. # wanted.
  95. #
  96. AC_ARG_ENABLE(cxx,
  97. AC_HELP_STRING([--enable-cxx],[enable C++ support [[default=no]]]),
  98. [case $enableval in
  99. yes|no|detect) ;;
  100. *) AC_MSG_ERROR([bad value $enableval for --enable-cxx, need yes/no/detect]) ;;
  101. esac],
  102. [enable_cxx=no])
  103. AC_ARG_ENABLE(fft,
  104. AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [[default=yes]]]),
  105. [case $enableval in
  106. yes|no) ;;
  107. *) AC_MSG_ERROR([bad value $enableval for --enable-fft, need yes or no]) ;;
  108. esac],
  109. [enable_fft=yes])
  110. if test "$enable_fft" = "yes"; then
  111.   AC_DEFINE(WANT_FFT,1,
  112.   [Define to 1 to enable FFTs for multiplication, per --enable-fft])
  113. fi
  114. AC_ARG_ENABLE(old-fft-full,
  115. AC_HELP_STRING([--enable-old-fft-full],[enable old mpn_mul_fft_full for multiplication [[default=no]]]),
  116. [case $enableval in
  117. yes|no) ;;
  118. *) AC_MSG_ERROR([bad value $enableval for --enable-old-fft-full, need yes or no]) ;;
  119. esac],
  120. [enable_old_fft_full=no])
  121. if test "$enable_old_fft_full" = "yes"; then
  122.   AC_DEFINE(WANT_OLD_FFT_FULL,1,
  123.   [Define to 1 to enable old mpn_mul_fft_full for multiplication, per --enable-old-fft-full])
  124. fi
  125. AC_ARG_ENABLE(mpbsd,
  126. AC_HELP_STRING([--enable-mpbsd],
  127.                [build Berkeley MP compatibility library [[default=no]]]),
  128. [case $enableval in
  129. yes|no) ;;
  130. *) AC_MSG_ERROR([bad value $enableval for --enable-mpbsd, need yes or no]) ;;
  131. esac],
  132. [enable_mpbsd=no])
  133. AM_CONDITIONAL(WANT_MPBSD, test "$enable_mpbsd" = "yes")
  134. AC_ARG_ENABLE(nails,
  135. AC_HELP_STRING([--enable-nails],[use nails on limbs [[default=no]]]),
  136. [case $enableval in
  137. [yes|no|[02468]|[0-9][02468]]) ;;
  138. [*[13579]])
  139.   AC_MSG_ERROR([bad value $enableval for --enable-nails, only even nail sizes supported]) ;;
  140. *)
  141.   AC_MSG_ERROR([bad value $enableval for --enable-nails, need yes/no/number]) ;;
  142. esac],
  143. [enable_nails=no])
  144. case $enable_nails in
  145. yes) GMP_NAIL_BITS=2 ;;
  146. no)  GMP_NAIL_BITS=0 ;;
  147. *)   GMP_NAIL_BITS=$enable_nails ;;
  148. esac
  149. AC_SUBST(GMP_NAIL_BITS)
  150. AC_ARG_ENABLE(profiling,
  151. AC_HELP_STRING([--enable-profiling],
  152.                [build with profiler support [[default=no]]]),
  153. [case $enableval in
  154. no|prof|gprof|instrument) ;;
  155. *) AC_MSG_ERROR([bad value $enableval for --enable-profiling, need no/prof/gprof/instrument]) ;;
  156. esac],
  157. [enable_profiling=no])
  158. case $enable_profiling in
  159.   prof)
  160.     AC_DEFINE(WANT_PROFILING_PROF, 1,
  161.               [Define to 1 if --enable-profiling=prof])
  162.     ;;
  163.   gprof)
  164.     AC_DEFINE(WANT_PROFILING_GPROF, 1,
  165.               [Define to 1 if --enable-profiling=gprof])
  166.     ;;
  167.   instrument)
  168.     AC_DEFINE(WANT_PROFILING_INSTRUMENT, 1,
  169.               [Define to 1 if --enable-profiling=instrument])
  170.     ;;
  171. esac
  172. GMP_DEFINE_RAW(["define(<WANT_PROFILING>,<`$enable_profiling'>)"])
  173. # -fomit-frame-pointer is incompatible with -pg on some chips
  174. if test "$enable_profiling" = gprof; then
  175.   fomit_frame_pointer=
  176. else
  177.   fomit_frame_pointer="-fomit-frame-pointer"
  178. fi
  179. AC_ARG_WITH(readline,
  180. AC_HELP_STRING([--with-readline],
  181.                [readline support in calc demo program [[default=detect]]]),
  182. [case $withval in
  183. yes|no|detect) ;;
  184. *) AC_MSG_ERROR([bad value $withval for --with-readline, need yes/no/detect]) ;;
  185. esac],
  186. [with_readline=detect])
  187. AC_ARG_ENABLE(fat,
  188. AC_HELP_STRING([--enable-fat],
  189.                [build a fat binary on systems that support it [[default=no]]]),
  190. [case $enableval in
  191. yes|no) ;;
  192. *) AC_MSG_ERROR([bad value $enableval for --enable-fat, need yes or no]) ;;
  193. esac],
  194. [enable_fat=no])
  195. AC_ARG_ENABLE(minithres,
  196. AC_HELP_STRING([--enable-minithres],
  197.                [choose minimal thresholds for testing [[default=no]]]),
  198. [case $enableval in
  199. yes|no) ;;
  200. *) AC_MSG_ERROR([bad value $enableval for --enable-minithres, need yes or no]) ;;
  201. esac],
  202. [enable_minithres=no])
  203. tmp_host=`echo $host_cpu | sed 's/./_/'`
  204. AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_$tmp_host)
  205. GMP_DEFINE_RAW("define_not_for_expansion(`HAVE_HOST_CPU_$tmp_host')", POST)
  206. dnl  The HAVE_HOST_CPU_ list here only needs to have entries for those which
  207. dnl  are going to be tested, not everything that can possibly be selected.
  208. dnl
  209. dnl  The HAVE_HOST_CPU_FAMILY_ list similarly, and note that the AC_DEFINEs
  210. dnl  for these are under the cpu specific setups below.
  211. AH_VERBATIM([HAVE_HOST_CPU_1],
  212. [/* Define one of these to 1 for the host CPU family.
  213.    If your CPU is not in any of these families, leave all undefined.
  214.    For an AMD64 chip, define "x86" in ABI=32, but not in ABI=64. */
  215. #undef HAVE_HOST_CPU_FAMILY_alpha
  216. #undef HAVE_HOST_CPU_FAMILY_m68k
  217. #undef HAVE_HOST_CPU_FAMILY_power
  218. #undef HAVE_HOST_CPU_FAMILY_powerpc
  219. #undef HAVE_HOST_CPU_FAMILY_x86
  220. #undef HAVE_HOST_CPU_FAMILY_x86_64
  221. /* Define one of the following to 1 for the host CPU, as per the output of
  222.    ./config.guess.  If your CPU is not listed here, leave all undefined.  */
  223. #undef HAVE_HOST_CPU_alphaev67
  224. #undef HAVE_HOST_CPU_alphaev68
  225. #undef HAVE_HOST_CPU_alphaev7
  226. #undef HAVE_HOST_CPU_m68020
  227. #undef HAVE_HOST_CPU_m68030
  228. #undef HAVE_HOST_CPU_m68040
  229. #undef HAVE_HOST_CPU_m68060
  230. #undef HAVE_HOST_CPU_m68360
  231. #undef HAVE_HOST_CPU_powerpc604
  232. #undef HAVE_HOST_CPU_powerpc604e
  233. #undef HAVE_HOST_CPU_powerpc750
  234. #undef HAVE_HOST_CPU_powerpc7400
  235. #undef HAVE_HOST_CPU_supersparc
  236. #undef HAVE_HOST_CPU_i386
  237. #undef HAVE_HOST_CPU_i586
  238. #undef HAVE_HOST_CPU_i686
  239. #undef HAVE_HOST_CPU_pentium
  240. #undef HAVE_HOST_CPU_pentiummmx
  241. #undef HAVE_HOST_CPU_pentiumpro
  242. #undef HAVE_HOST_CPU_pentium2
  243. #undef HAVE_HOST_CPU_pentium3])
  244. # Table of compilers, options, and mpn paths.  This code has various related
  245. # purposes
  246. #
  247. #   - better default CC/CFLAGS selections than autoconf otherwise gives
  248. #   - default CC/CFLAGS selections for extra CPU types specific to GMP
  249. #   - a few tests for known bad compilers
  250. #   - choice of ABIs on suitable systems
  251. #   - selection of corresponding mpn search path
  252. #
  253. # After GMP specific searches and tests, the standard autoconf AC_PROG_CC is
  254. # called.  User selections of CC etc are respected.
  255. #
  256. # Care is taken not to use macros like AC_TRY_COMPILE during the GMP
  257. # pre-testing, since they of course depend on AC_PROG_CC, and also some of
  258. # them cache their results, which is not wanted.
  259. #
  260. # The ABI selection mechanism is unique to GMP.  All that reaches autoconf
  261. # is a different selection of CC/CFLAGS according to the best ABI the system
  262. # supports, and/or what the user selects.  Naturally the mpn assembler code
  263. # selected is very dependent on the ABI.
  264. #
  265. # The closest the standard tools come to a notion of ABI is something like
  266. # "sparc64" which encodes a CPU and an ABI together.  This doesn't seem to
  267. # scale well for GMP, where exact CPU types like "ultrasparc2" are wanted,
  268. # separate from the ABI used on them.
  269. #
  270. #
  271. # The variables set here are
  272. #
  273. #   cclist              the compiler choices
  274. #   xx_cflags           flags for compiler xx
  275. #   xx_cflags_maybe     flags for compiler xx, if they work
  276. #   xx_cppflags         cpp flags for compiler xx
  277. #   xx_cflags_optlist   list of sets of optional flags
  278. #   xx_cflags_yyy       set yyy of optional flags for compiler xx
  279. #   xx_ldflags          -Wc,-foo flags for libtool linking with compiler xx
  280. #   ar_flags            extra flags for $AR
  281. #   nm_flags            extra flags for $NM
  282. #   limb                limb size, can be "longlong"
  283. #   path                mpn search path
  284. #   extra_functions     extra mpn functions
  285. #   fat_path            fat binary mpn search path [if fat binary desired]
  286. #   fat_functions       fat functions
  287. #   fat_thresholds      fat thresholds
  288. #
  289. # Suppose xx_cflags_optlist="arch", then flags from $xx_cflags_arch are
  290. # tried, and the first flag that works will be used.  An optlist like "arch
  291. # cpu optimize" can be used to get multiple independent sets of flags tried.
  292. # The first that works from each will be used.  If no flag in a set works
  293. # then nothing from that set is added.
  294. #
  295. # For multiple ABIs, the scheme extends as follows.
  296. #
  297. #   abilist               set of ABI choices
  298. #   cclist_aa             compiler choices in ABI aa
  299. #   xx_aa_cflags          flags for xx in ABI aa
  300. #   xx_aa_cflags_maybe    flags for xx in ABI aa, if they work
  301. #   xx_aa_cppflags        cpp flags for xx in ABI aa
  302. #   xx_aa_cflags_optlist  list of sets of optional flags in ABI aa
  303. #   xx_aa_cflags_yyy      set yyy of optional flags for compiler xx in ABI aa
  304. #   xx_aa_ldflags         -Wc,-foo flags for libtool linking
  305. #   ar_aa_flags           extra flags for $AR in ABI aa
  306. #   nm_aa_flags           extra flags for $NM in ABI aa
  307. #   limb_aa               limb size in ABI aa, can be "longlong"
  308. #   path_aa               mpn search path in ABI aa
  309. #   extra_functions_aa    extra mpn functions in ABI aa
  310. #
  311. # As a convenience, the unadorned xx_cflags (etc) are used for the last ABI
  312. # in ablist, if an xx_aa_cflags for that ABI isn't given.  For example if
  313. # abilist="64 32" then $cc_64_cflags will be used for the 64-bit ABI, but
  314. # for the 32-bit either $cc_32_cflags or $cc_cflags is used, whichever is
  315. # defined.  This makes it easy to add some 64-bit compilers and flags to an
  316. # unadorned 32-bit set.
  317. #
  318. # limb=longlong (or limb_aa=longlong) applies to all compilers within that
  319. # ABI.  It won't work to have some needing long long and some not, since a
  320. # single instantiated gmp.h will be used by both.
  321. #
  322. # SPEED_CYCLECOUNTER, cyclecounter_size and CALLING_CONVENTIONS_OBJS are
  323. # also set here, with an ABI suffix.
  324. #
  325. #
  326. #
  327. # A table-driven approach like this to mapping cpu type to good compiler
  328. # options is a bit of a maintenance burden, but there's not much uniformity
  329. # between options specifications on different compilers.  Some sort of
  330. # separately updatable tool might be cute.
  331. #
  332. # The use of lots of variables like this, direct and indirect, tends to
  333. # obscure when and how various things are done, but unfortunately it's
  334. # pretty much the only way.  If shell subroutines were portable then actual
  335. # code like "if this .. do that" could be written, but attempting the same
  336. # with full copies of GMP_PROG_CC_WORKS etc expanded at every point would
  337. # hugely bloat the output.
  338. AC_ARG_VAR(ABI, [desired ABI (for processors supporting more than one ABI)])
  339. # abilist needs to be non-empty, "standard" is just a generic name here
  340. abilist="standard"
  341. # FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring
  342. # c89 over cc here.  But note that on HP-UX c89 provides a castrated
  343. # environment, and would want to be excluded somehow.  Maybe
  344. # AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and
  345. # we don't need to worry.
  346. #
  347. cclist="gcc cc"
  348. gcc_cflags="-O2 -pedantic"
  349. gcc_64_cflags="-O2 -pedantic"
  350. cc_cflags="-O"
  351. cc_64_cflags="-O"
  352. SPEED_CYCLECOUNTER_OBJ=
  353. cyclecounter_size=2
  354. AC_SUBST(HAVE_HOST_CPU_FAMILY_power,  0)
  355. AC_SUBST(HAVE_HOST_CPU_FAMILY_powerpc,0)
  356. case $host in
  357.   a29k*-*-*)
  358.     path="a29k"
  359.     ;;
  360.   alpha*-*-*)
  361.     AC_DEFINE(HAVE_HOST_CPU_FAMILY_alpha)
  362.     case $host_cpu in
  363.       alphaev5* | alphapca5*)
  364.        path="alpha/ev5 alpha" ;;
  365.       alphaev67 | alphaev68 | alphaev7*)
  366.         path="alpha/ev67 alpha/ev6 alpha" ;;
  367.       alphaev6)
  368. path="alpha/ev6 alpha" ;;
  369.       *)
  370.         path="alpha" ;;
  371.     esac
  372.     extra_functions="cntlz"
  373.     gcc_cflags_optlist="asm cpu oldas" # need asm ahead of cpu, see below
  374.     gcc_cflags_oldas="-Wa,-oldas"     # see GMP_GCC_WA_OLDAS.
  375.     # gcc 2.7.2.3 doesn't know any -mcpu= for alpha, apparently.
  376.     # gcc 2.95 knows -mcpu= ev4, ev5, ev56, pca56, ev6.
  377.     # gcc 3.0 adds nothing.
  378.     # gcc 3.1 adds ev45, ev67 (but ev45 is the same as ev4).
  379.     # gcc 3.2 adds nothing.
  380.     #
  381.     # gcc version "2.9-gnupro-99r1" under "-O2 -mcpu=ev6" strikes internal
  382.     # compiler errors too easily and is rejected by GMP_PROG_CC_WORKS.  Each
  383.     # -mcpu=ev6 below has a fallback to -mcpu=ev56 for this reason.
  384.     #
  385.     case $host_cpu in
  386.       alpha)        gcc_cflags_cpu="-mcpu=ev4" ;;
  387.       alphaev5)     gcc_cflags_cpu="-mcpu=ev5" ;;
  388.       alphaev56)    gcc_cflags_cpu="-mcpu=ev56" ;;
  389.       alphapca56 | alphapca57)
  390.                     gcc_cflags_cpu="-mcpu=pca56" ;;
  391.       alphaev6)     gcc_cflags_cpu="-mcpu=ev6 -mcpu=ev56" ;;
  392.       alphaev67 | alphaev68 | alphaev7*)
  393.                     gcc_cflags_cpu="-mcpu=ev67 -mcpu=ev6 -mcpu=ev56" ;;
  394.     esac
  395.     # gcc version "2.9-gnupro-99r1" on alphaev68-dec-osf5.1 has been seen
  396.     # accepting -mcpu=ev6, but not putting the assembler in the right mode
  397.     # for what it produces.  We need to do this for it, and need to do it
  398.     # before testing the -mcpu options.
  399.     #
  400.     # On old versions of gcc, which don't know -mcpu=, we believe an
  401.     # explicit -Wa,-mev5 etc will be necessary to put the assembler in
  402.     # the right mode for our .asm files and longlong.h asm blocks.
  403.     #
  404.     # On newer versions of gcc, when -mcpu= is known, we must give a -Wa
  405.     # which is at least as high as the code gcc will generate.  gcc
  406.     # establishes what it needs with a ".arch" directive, our command line
  407.     # option seems to override that.
  408.     #
  409.     # gas prior to 2.14 doesn't accept -mev67, but -mev6 seems enough for
  410.     # ctlz and cttz (in 2.10.0 at least).
  411.     #
  412.     # OSF `as' accepts ev68 but stupidly treats it as ev4.  -arch only seems
  413.     # to affect insns like ldbu which are expanded as macros when necessary.
  414.     # Insns like ctlz which were never available as macros are always
  415.     # accepted and always generate their plain code.
  416.     #
  417.     case $host_cpu in
  418.       alpha)        gcc_cflags_asm="-Wa,-arch,ev4 -Wa,-mev4" ;;
  419.       alphaev5)     gcc_cflags_asm="-Wa,-arch,ev5 -Wa,-mev5" ;;
  420.       alphaev56)    gcc_cflags_asm="-Wa,-arch,ev56 -Wa,-mev56" ;;
  421.       alphapca56 | alphapca57)
  422.                     gcc_cflags_asm="-Wa,-arch,pca56 -Wa,-mpca56" ;;
  423.       alphaev6)     gcc_cflags_asm="-Wa,-arch,ev6 -Wa,-mev6" ;;
  424.       alphaev67 | alphaev68 | alphaev7*)
  425.                     gcc_cflags_asm="-Wa,-arch,ev67 -Wa,-mev67 -Wa,-arch,ev6 -Wa,-mev6" ;;
  426.     esac
  427.     # It might be better to ask "cc" whether it's Cray C or DEC C,
  428.     # instead of relying on the OS part of $host.  But it's hard to
  429.     # imagine either of those compilers anywhere except their native
  430.     # systems.
  431.     #
  432.     GMP_INCLUDE_MPN(alpha/alpha-defs.m4)
  433.     case $host in
  434.       *-cray-unicos*)
  435.         cc_cflags="-O" # no -g, it silently disables all optimizations
  436.         GMP_INCLUDE_MPN(alpha/unicos.m4)
  437.         # Don't perform any assembly syntax tests on this beast.
  438.         gmp_asm_syntax_testing=no
  439.         ;;
  440.       *-*-osf*)
  441.         GMP_INCLUDE_MPN(alpha/default.m4)
  442.         cc_cflags=""
  443.         cc_cflags_optlist="opt cpu"
  444.         # not sure if -fast works on old versions, so make it optional
  445. cc_cflags_opt="-fast -O2"
  446. # DEC C V5.9-005 knows ev4, ev5, ev56, pca56, ev6.
  447. # Compaq C V6.3-029 adds ev67.
  448. #
  449. case $host_cpu in
  450.   alpha)       cc_cflags_cpu="-arch~ev4~-tune~ev4" ;;
  451.   alphaev5)    cc_cflags_cpu="-arch~ev5~-tune~ev5" ;;
  452.   alphaev56)   cc_cflags_cpu="-arch~ev56~-tune~ev56" ;;
  453.   alphapca56 | alphapca57)
  454.             cc_cflags_cpu="-arch~pca56~-tune~pca56" ;;
  455.   alphaev6)    cc_cflags_cpu="-arch~ev6~-tune~ev6" ;;
  456.   alphaev67 | alphaev68 | alphaev7*)
  457.             cc_cflags_cpu="-arch~ev67~-tune~ev67 -arch~ev6~-tune~ev6" ;;
  458. esac
  459.         ;;
  460.       *)
  461.         GMP_INCLUDE_MPN(alpha/default.m4)
  462.         ;;
  463.     esac
  464.     case $host in
  465.       *-*-unicos*)
  466.         # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes
  467.         ;;
  468.       *)
  469.         SPEED_CYCLECOUNTER_OBJ=alpha.lo
  470.         cyclecounter_size=1 ;;
  471.     esac
  472.     ;;
  473.   # Cray vector machines.
  474.   # This must come after alpha* so that we can recognize present and future
  475.   # vector processors with a wildcard.
  476.   *-cray-unicos*)
  477.     gmp_asm_syntax_testing=no
  478.     cclist="cc"
  479.     # We used to have -hscalar0 here as a workaround for miscompilation of
  480.     # mpz/import.c, but let's hope Cray fixes their bugs instead, since
  481.     # -hscalar0 causes disastrously poor code to be generated.
  482.     cc_cflags="-O3 -hnofastmd -htask0 -Wa,-B"
  483.     path="cray"
  484.     ;;
  485.   arm*-*-*)
  486.     path="arm"
  487.     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
  488.     gcc_testlist="gcc-arm-umodsi"
  489.     GMP_INCLUDE_MPN(arm/arm-defs.m4)
  490.     ;;
  491.   clipper*-*-*)
  492.     path="clipper"
  493.     ;;
  494.   # Fujitsu
  495.   [f30[01]-fujitsu-sysv*])
  496.     cclist="gcc vcc"
  497.     # FIXME: flags for vcc?
  498.     vcc_cflags="-g"
  499.     path="fujitsu"
  500.     ;;
  501.   hppa*-*-*)
  502.     # HP cc (the one sold separately) is K&R by default, but AM_C_PROTOTYPES
  503.     # will add "-Ae", or "-Aa -D_HPUX_SOURCE", to put it into ansi mode, if
  504.     # possible.
  505.     #
  506.     # gcc for hppa 2.0 can be built either for 2.0n (32-bit) or 2.0w
  507.     # (64-bit), but not both, so there's no option to choose the desired
  508.     # mode, we must instead detect which of the two it is.  This is done by
  509.     # checking sizeof(long), either 4 or 8 bytes respectively.  Do this in
  510.     # ABI=1.0 too, in case someone tries to build that with a 2.0w gcc.
  511.     #
  512.     gcc_cflags_optlist="arch"
  513.     gcc_testlist="sizeof-long-4"
  514.     SPEED_CYCLECOUNTER_OBJ=hppa.lo
  515.     cyclecounter_size=1
  516.     # FIXME: For hppa2.0*, path should be "pa32/hppa2_0 pa32/hppa1_1 pa32".
  517.     # (Can't remember why this isn't done already, have to check what .asm
  518.     # files are available in each and how they run on a typical 2.0 cpu.)
  519.     #
  520.     case $host_cpu in
  521.       hppa1.0*)    path="pa32" ;;
  522.       hppa7000*)   path="pa32/hppa1_1 pa32" ;;
  523.       hppa2.0* | hppa64)
  524.                    path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;;
  525.       *)           # default to 7100
  526.                    path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;;
  527.     esac
  528.     # gcc 2.7.2.3 knows -mpa-risc-1-0 and -mpa-risc-1-1
  529.     # gcc 2.95 adds -mpa-risc-2-0, plus synonyms -march=1.0, 1.1 and 2.0
  530.     #
  531.     # We don't use -mpa-risc-2-0 in ABI=1.0 because 64-bit registers may not
  532.     # be saved by the kernel on an old system.  Actually gcc (as of 3.2)
  533.     # only adds a few float instructions with -mpa-risc-2-0, so it would
  534.     # probably be safe, but let's not take the chance.  In any case, a
  535.     # configuration like --host=hppa2.0 ABI=1.0 is far from optimal.
  536.     #
  537.     case $host_cpu in
  538.       hppa1.0*)           gcc_cflags_arch="-mpa-risc-1-0" ;;
  539.       *)                  # default to 7100
  540.                           gcc_cflags_arch="-mpa-risc-1-1" ;;
  541.     esac
  542.     case $host_cpu in
  543.       hppa1.0*)    cc_cflags="+O2" ;;
  544.       *)           # default to 7100
  545.                    cc_cflags="+DA1.1 +O2" ;;
  546.     esac
  547.     case $host in
  548.       hppa2.0*-*-* | hppa64-*-*)
  549. cclist_20n="gcc cc"
  550.         abilist="2.0n 1.0"
  551.         path_20n="pa64"
  552. limb_20n=longlong
  553.         any_20n_testlist="sizeof-long-4"
  554.         SPEED_CYCLECOUNTER_OBJ_20n=hppa2.lo
  555.         cyclecounter_size_20n=2
  556.         # -mpa-risc-2-0 is only an optional flag, in case an old gcc is
  557.         # used.  Assembler support for 2.0 is essential though, for our asm
  558.         # files.
  559. gcc_20n_cflags="-O2"
  560. gcc_20n_cflags_optlist="arch"
  561.         gcc_20n_cflags_arch="-mpa-risc-2-0 -mpa-risc-1-1"
  562.         gcc_20n_testlist="sizeof-long-4 hppa-level-2.0"
  563.         cc_20n_cflags="+DA2.0 +e +O2 -Wl,+vnocompatwarnings"
  564.         cc_20n_testlist="hpc-hppa-2-0"
  565. # ABI=2.0w is available for hppa2.0w and hppa2.0, but not for
  566. # hppa2.0n, on the assumption that that the latter indicates a
  567. # desire for ABI=2.0n.
  568. case $host in
  569.         hppa2.0n-*-*) ;;
  570.         *)
  571.           # HPUX 10 and earlier cannot run 2.0w.  Not sure about other
  572.           # systems (GNU/Linux for instance), but lets assume they're ok.
  573.           case $host in
  574.             [*-*-hpux[1-9] | *-*-hpux[1-9].* | *-*-hpux10 | *-*-hpux10.*]) ;;
  575.             *)    abilist="2.0w $abilist" ;;
  576.           esac
  577.           cclist_20w="gcc cc"
  578.   gcc_20w_cflags="-O2 -mpa-risc-2-0"
  579.           cc_20w_cflags="+DD64 +O2"
  580.           cc_20w_testlist="hpc-hppa-2-0"
  581.           path_20w="pa64"
  582.   any_20w_testlist="sizeof-long-8"
  583.           SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo
  584.           cyclecounter_size_20w=2
  585.   ;;
  586.         esac
  587.         ;;
  588.     esac
  589.     ;;
  590.   i960*-*-*)
  591.     path="i960"
  592.     ;;
  593.   IA64_PATTERN)
  594.     abilist="64"
  595.     GMP_INCLUDE_MPN(ia64/ia64-defs.m4)
  596.     SPEED_CYCLECOUNTER_OBJ=ia64.lo
  597.     case $host_cpu in
  598.       itanium)   path="ia64/itanium  ia64" ;;
  599.       itanium2)  path="ia64/itanium2 ia64" ;;
  600.       *)         path="ia64" ;;
  601.     esac
  602.     gcc_64_cflags_optlist="tune"
  603.     gcc_32_cflags_optlist=$gcc_64_cflags_optlist
  604.     # gcc pre-release 3.4 adds -mtune itanium and itanium2
  605.     case $host_cpu in
  606.       itanium)   gcc_cflags_tune="-mtune=itanium" ;;
  607.       itanium2)  gcc_cflags_tune="-mtune=itanium2" ;;
  608.     esac
  609.     case $host in
  610.       *-*-linux*)
  611. cclist="gcc icc"
  612. icc_cflags="-no-gcc"
  613. icc_cflags_optlist="opt"
  614. # Don't use -O3, it is for "large data sets" and also miscompiles GMP.
  615. # But icc miscompiles GMP at any optimization level, at higher levels
  616. # it miscompiles more files...
  617. icc_cflags_opt="-O2 -O1"
  618. ;;
  619.       *-*-hpux*)
  620.         # HP cc sometimes gets internal errors if the optimization level is
  621.         # too high.  GMP_PROG_CC_WORKS detects this, the "_opt" fallbacks
  622.         # let us use whatever seems to work.
  623.         #
  624.         abilist="32 64"
  625.         cclist_32="gcc cc"
  626.         path_32="ia64"
  627.         cc_32_cflags=""
  628.         cc_32_cflags_optlist="opt"
  629.         cc_32_cflags_opt="+O3 +O2 +O1"
  630.         gcc_32_cflags="-milp32 -O2"
  631.         limb_32=longlong
  632.         SPEED_CYCLECOUNTER_OBJ_32=ia64.lo
  633.         cyclecounter_size_32=2
  634.         # Must have +DD64 in CPPFLAGS to get the right __LP64__ for headers,
  635.         # but also need it in CFLAGS for linking programs, since automake
  636.         # only uses CFLAGS when linking, not CPPFLAGS.
  637.         # FIXME: Maybe should use cc_64_ldflags for this, but that would
  638.         # need GMP_LDFLAGS used consistently by all the programs.
  639.         #
  640.         cc_64_cflags="+DD64"
  641.         cc_64_cppflags="+DD64"
  642.         cc_64_cflags_optlist="opt"
  643.         cc_64_cflags_opt="+O3 +O2 +O1"
  644.         gcc_64_cflags="$gcc_64_cflags -mlp64"
  645.         ;;
  646.     esac
  647.     ;;
  648.   # Motorola 68k
  649.   #
  650.   M68K_PATTERN)
  651.     AC_DEFINE(HAVE_HOST_CPU_FAMILY_m68k)
  652.     GMP_INCLUDE_MPN(m68k/m68k-defs.m4)
  653.     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
  654.     gcc_cflags_optlist="arch"
  655.     # gcc 2.7.2 knows -m68000, -m68020, -m68030, -m68040.
  656.     # gcc 2.95 adds -mcpu32, -m68060.
  657.     # FIXME: Maybe "-m68020 -mnobitfield" would suit cpu32 on 2.7.2.
  658.     #
  659.     case $host_cpu in
  660.     m68020)  gcc_cflags_arch="-m68020" ;;
  661.     m68030)  gcc_cflags_arch="-m68030" ;;
  662.     m68040)  gcc_cflags_arch="-m68040" ;;
  663.     m68060)  gcc_cflags_arch="-m68060 -m68000" ;;
  664.     m68360)  gcc_cflags_arch="-mcpu32 -m68000" ;;
  665.     *)       gcc_cflags_arch="-m68000" ;;
  666.     esac
  667.     # FIXME: m68k/mc68020 looks like it's ok for cpu32, but this wants to be
  668.     # tested.  Will need to introduce an m68k/cpu32 if m68k/mc68020 ever uses
  669.     # the bitfield instructions.
  670.     case $host_cpu in
  671.     [m680[234]0 | m68360])  path="m68k/mc68020 m68k" ;;
  672.     *)                      path="m68k" ;;
  673.     esac
  674.     ;;
  675.   # Motorola 88k
  676.   m88k*-*-*)
  677.     path="m88k"
  678.     ;;
  679.   m88110*-*-*)
  680.     gcc_cflags="$gcc_cflags -m88110"
  681.     path="m88k/mc88110 m88k"
  682.     ;;
  683.   # National Semiconductor 32k
  684.   ns32k*-*-*)
  685.     path="ns32k"
  686.     ;;
  687.   # IRIX 5 and earlier can only run 32-bit o32.
  688.   #
  689.   # IRIX 6 and up always has a 64-bit mips CPU can run n32 or 64.  n32 is
  690.   # preferred over 64, but only because that's been the default in past
  691.   # versions of GMP.  The two are equally efficient.
  692.   #
  693.   # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not
  694.   # supporting n32 or 64.
  695.   #
  696.   # For reference, libtool (eg. 1.5.6) recognises the n32 ABI and knows the
  697.   # right options to use when linking (both cc and gcc), so no need for
  698.   # anything special from us.
  699.   #
  700.   mips*-*-*)
  701.     abilist="o32"
  702.     gcc_cflags_optlist="abi"
  703.     gcc_cflags_abi="-mabi=32"
  704.     gcc_testlist="gcc-mips-o32"
  705.     path="mips32"
  706.     cc_cflags="-O2 -o32"   # no -g, it disables all optimizations
  707.     # this suits both mips32 and mips64
  708.     GMP_INCLUDE_MPN(mips32/mips-defs.m4)
  709.     case $host in
  710.       [mips64*-*-* | mips*-*-irix[6789]*])
  711.         abilist="n32 64 o32"
  712.         cclist_n32="gcc cc"
  713.         gcc_n32_cflags="-O2 -mabi=n32"
  714.         cc_n32_cflags="-O2 -n32" # no -g, it disables all optimizations
  715.         limb_n32=longlong
  716.         path_n32="mips64"
  717.         cclist_64="gcc cc"
  718.         gcc_64_cflags="$gcc_64_cflags -mabi=64"
  719.         gcc_64_ldflags="-Wc,-mabi=64"
  720.         cc_64_cflags="-O2 -64" # no -g, it disables all optimizations
  721.         cc_64_ldflags="-Wc,-64"
  722.         path_64="mips64"
  723.         ;;
  724.     esac
  725.     ;;
  726.   # Darwin (powerpc-apple-darwin1.3) has it's hacked gcc installed as cc.
  727.   # Our usual "gcc in disguise" detection means gcc_cflags etc here gets
  728.   # used.
  729.   #
  730.   # The darwin pre-compiling preprocessor is disabled with -no-cpp-precomp
  731.   # since it doesn't like "__attribute__ ((mode (SI)))" etc in gmp-impl.h,
  732.   # and so always ends up running the plain preprocessor anyway.  This could
  733.   # be done in CPPFLAGS rather than CFLAGS, but there's not many places
  734.   # preprocessing is done separately, and this is only a speedup, the normal
  735.   # preprocessor gets run if there's any problems.
  736.   #
  737.   # We used to use -Wa,-mppc with gcc, but can't remember exactly why.
  738.   # Presumably it was for old versions of gcc where -mpowerpc doesn't put
  739.   # the assembler in the right mode.  In any case -Wa,-mppc is not good, for
  740.   # instance -mcpu=604 makes recent gcc use -m604 to get access to the
  741.   # "fsel" instruction, but a -Wa,-mppc overrides that, making code that
  742.   # comes out with fsel fail.
  743.   #
  744.   # (Note also that the darwin assembler doesn't accept "-mppc", so any
  745.   # -Wa,-mppc was used only if it worked.  The right flag on darwin would be
  746.   # "-arch ppc" or some such, but that's already the default.)
  747.   #
  748.   [powerpc*-*-* | power[3-9]-*-*])
  749.     AC_DEFINE(HAVE_HOST_CPU_FAMILY_powerpc)
  750.     HAVE_HOST_CPU_FAMILY_powerpc=1
  751.     abilist="32"
  752.     cclist="gcc cc"
  753.     cc_cflags="-O2"
  754.     gcc_cflags="$gcc_cflags -mpowerpc"
  755.     gcc_cflags_optlist="precomp subtype asm cpu"
  756.     gcc_cflags_precomp="-no-cpp-precomp"
  757.     gcc_cflags_subtype="-force_cpusubtype_ALL" # for vmx on darwin
  758.     gcc_cflags_asm=""
  759.     gcc_cflags_cpu=""
  760.     vmx_path=""
  761.     # grab this object, though it's not a true cycle counter routine
  762.     SPEED_CYCLECOUNTER_OBJ=powerpc.lo
  763.     cyclecounter_size=0
  764.     case $host_cpu in
  765.       powerpc740 | powerpc750)
  766.         path="powerpc32/750 powerpc32" ;;
  767.       powerpc7400 | powerpc7410)
  768.         path="powerpc32/vmx powerpc32/750 powerpc32" ;;
  769.       [powerpc74[45]?])
  770.         path="powerpc32/vmx powerpc32" ;;
  771.       *)
  772.         path="powerpc32" ;;
  773.     esac
  774.     # gcc 2.7.2 knows -mcpu=403, 601, 603, 604.
  775.     # gcc 2.95 adds 401, 505, 602, 603e, ec603e, 604e, 620, 740, 750,
  776.     #   801, 821, 823, 860.
  777.     # gcc 3.0 adds 630, rs64a.
  778.     # gcc 3.1 adds 405, 7400, 7450.
  779.     # gcc 3.2 adds nothing.
  780.     # gcc 3.3 adds power3, power4, 8540.  power3 seems to be a synonym for 630.
  781.     # gcc pre-release 3.4 adds 405fp, 440, 440fp, 970.
  782.     #
  783.     # FIXME: The way 603e falls back to 603 for gcc 2.7.2 should be
  784.     # done for all the others too.  But what would be the correct
  785.     # arrangements?
  786.     #
  787.     case $host_cpu in
  788.       powerpc401)   gcc_cflags_cpu="-mcpu=401" ;;
  789.       powerpc403)   gcc_cflags_cpu="-mcpu=403" ;;
  790.       powerpc405)   gcc_cflags_cpu="-mcpu=405" ;;
  791.       powerpc505)   gcc_cflags_cpu="-mcpu=505" ;;
  792.       powerpc601)   gcc_cflags_cpu="-mcpu=601" ;;
  793.       powerpc602)   gcc_cflags_cpu="-mcpu=602" ;;
  794.       powerpc603)   gcc_cflags_cpu="-mcpu=603" ;;
  795.       powerpc603e)  gcc_cflags_cpu="-mcpu=603e -mcpu=603" ;;
  796.       powerpc604)   gcc_cflags_cpu="-mcpu=604" ;;
  797.       powerpc604e)  gcc_cflags_cpu="-mcpu=604e -mcpu=604" ;;
  798.       powerpc620)   gcc_cflags_cpu="-mcpu=620" ;;
  799.       powerpc630)   gcc_cflags_cpu="-mcpu=630"
  800.     cpu_path="p3" ;;
  801.       powerpc740)   gcc_cflags_cpu="-mcpu=740" ;;
  802.       powerpc7400 | powerpc7410)
  803.     gcc_cflags_asm="-Wa,-maltivec"
  804.     gcc_cflags_cpu="-mcpu=7400 -mcpu=750" ;;
  805.       [powerpc74[45]?])
  806.     gcc_cflags_asm="-Wa,-maltivec"
  807.     gcc_cflags_cpu="-mcpu=7450" ;;
  808.       powerpc750)   gcc_cflags_cpu="-mcpu=750" ;;
  809.       powerpc801)   gcc_cflags_cpu="-mcpu=801" ;;
  810.       powerpc821)   gcc_cflags_cpu="-mcpu=821" ;;
  811.       powerpc823)   gcc_cflags_cpu="-mcpu=823" ;;
  812.       powerpc860)   gcc_cflags_cpu="-mcpu=860" ;;
  813.       powerpc970)   gcc_cflags_cpu="-mtune=970"
  814.     vmx_path="powerpc64/vmx"
  815.     cpu_path="p4" ;;
  816.       power4)     gcc_cflags_cpu="-mtune=power4"
  817.     cpu_path="p4" ;;
  818.       power5)     gcc_cflags_cpu="-mtune=power5 -mtune=power4"
  819.     cpu_path="p5 p4" ;;
  820.       power6)     gcc_cflags_cpu="-mtune=power6"
  821.     cpu_path="p6" ;;
  822.     esac
  823.     case $host in
  824.       *-*-aix*)
  825.         cclist="gcc xlc cc"
  826.         xlc_cflags="-O2 -qmaxmem=20000"
  827.         xlc_cflags_optlist="arch"
  828.         # xlc (what version?) knows -qarch=ppc, ppcgr, 601, 602, 603, 604,
  829.         # 403, rs64a
  830.         # -qarch=ppc is needed, so ensure everything falls back to that.
  831.         # FIXME: Perhaps newer versions know more flavours.
  832.         #
  833. case $host_cpu in
  834.   powerpc403)   xlc_cflags_arch="-qarch=403 -qarch=ppc" ;;
  835.   powerpc601)   xlc_cflags_arch="-qarch=601 -qarch=ppc" ;;
  836.   powerpc602)   xlc_cflags_arch="-qarch=602 -qarch=ppc" ;;
  837.   powerpc603)   xlc_cflags_arch="-qarch=603 -qarch=ppc" ;;
  838.   powerpc603e)  xlc_cflags_arch="-qarch=603 -qarch=ppc" ;;
  839.   powerpc604)   xlc_cflags_arch="-qarch=604 -qarch=ppc" ;;
  840.   powerpc604e)  xlc_cflags_arch="-qarch=604 -qarch=ppc" ;;
  841.   *)            xlc_cflags_arch="-qarch=ppc" ;;
  842.         esac
  843.         ;;
  844.     esac
  845.     case $host in
  846.       POWERPC64_PATTERN)
  847.         case $host in
  848.           *-*-aix*)
  849.             # On AIX a true 64-bit ABI is available.
  850.             # Need -Wc to pass object type flags through to the linker.
  851.             abilist="aix64 $abilist"
  852.             cclist_aix64="gcc xlc"
  853.             gcc_aix64_cflags="-O2 -maix64 -mpowerpc64"
  854.             gcc_aix64_cflags_optlist="cpu"
  855.     gcc_aix64_ldflags="-Wc,-maix64"
  856.             xlc_aix64_cflags="-O2 -q64 -qtune=pwr3 -qmaxmem=20000"
  857.     xlc_aix64_ldflags="-Wc,-q64"
  858.             # Must indicate object type to ar and nm
  859.     ar_aix64_flags="-X64"
  860.     nm_aix64_flags="-X64"
  861.     path_aix64=""
  862.     for i in $cpu_path; do path_aix64="${path_aix64}powerpc64/mode64/$i "; done
  863.             path_aix64="${path_aix64}powerpc64/mode64 $vmx_path powerpc64"
  864.             # grab this object, though it's not a true cycle counter routine
  865.             SPEED_CYCLECOUNTER_OBJ_aix64=powerpc64.lo
  866.             cyclecounter_size_aix64=0
  867.             ;;
  868.           *-*-darwin*)
  869.             # On Darwin we can use 64-bit instructions with a longlong limb,
  870.             # but the chip still in 32-bit mode.
  871.             # In theory this can be used on any OS which knows how to save
  872.             # 64-bit registers in a context switch.
  873.             #
  874.             # Note that we must use -mpowerpc64 with gcc, since the
  875.             # longlong.h macros expect limb operands in a single 64-bit
  876.             # register, not two 32-bit registers as would be given for a
  877.             # long long without -mpowerpc64.  In theory we could detect and
  878.             # accommodate both styles, but the proper 64-bit registers will
  879.             # be fastest and are what we really want to use.
  880.             #
  881.     # One would think -mpowerpc64 would set the assembler in the right
  882.     # mode to handle 64-bit instructions.  But for that, also
  883.     # -force_cpusubtype_ALL is needed.
  884.     #
  885.     # Do not use -fast for Darwin, it actually adds options
  886.     # incompatible with a shared library.
  887.     #
  888.     abilist="mode64 mode32 $abilist"
  889.     gcc_cflags_opt="-O3 -O2 -O1" # will this become used?
  890.     cclist_mode32="gcc"
  891.     gcc_mode32_cflags="-mpowerpc64"
  892.     gcc_mode32_cflags_optlist="subtype cpu opt"
  893.     gcc_mode32_cflags_subtype="-force_cpusubtype_ALL"
  894.     gcc_mode32_cflags_opt="-O3 -O2 -O1"
  895.     path_mode32="powerpc64/mode32 $vmx_path powerpc64"
  896.     limb_mode32=longlong
  897.     cclist_mode64="gcc"
  898.     gcc_mode64_cflags="-m64"
  899.     gcc_mode64_cflags_optlist="cpu opt"
  900.     gcc_mode64_cflags_opt="-O3 -O2 -O1"
  901.     path_mode64=""
  902.     for i in $cpu_path; do path_mode64="${path_mode64}powerpc64/mode64/$i "; done
  903.     path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
  904.             SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo
  905.             cyclecounter_size_mode64=0
  906.     any_mode64_testlist="sizeof-long-8"
  907.     ;;
  908.   *-*-linux* | *-*-*bsd*)
  909.     # On GNU/Linux, assume the processor is in 64-bit mode.  Some
  910.     # environments have a gcc that is always in 64-bit mode, while
  911.     # others require -m64, hence the use of cflags_maybe.  The
  912.     # sizeof-long-8 test checks the mode is right (for the no option
  913.     # case).
  914.             #
  915.             # -mpowerpc64 is not used, since it should be the default in
  916.             # 64-bit mode.  (We need its effect for the various longlong.h
  917.             # asm macros to be right of course.)
  918.             #
  919.             # gcc64 was an early port of gcc to 64-bit mode, but should be
  920.             # obsolete before too long.  We prefer plain gcc when it knows
  921.             # 64-bits.
  922.     #
  923.     abilist="mode64 mode32 $abilist"
  924.     cclist_mode32="gcc"
  925.     gcc_mode32_cflags="-mpowerpc64"
  926.     gcc_mode32_cflags_optlist="cpu opt"
  927.     gcc_mode32_cflags_opt="-O3 -O2 -O1"
  928.     path_mode32="powerpc64/mode32 $vmx_path powerpc64"
  929.     limb_mode32=longlong
  930.     cclist_mode64="gcc gcc64"
  931.     gcc_mode64_cflags_maybe="-m64"
  932.     gcc_mode64_cflags_optlist="cpu opt"
  933.     gcc_mode64_cflags_opt="-O3 -O2 -O1"
  934.     path_mode64=""
  935.     for i in $cpu_path; do path_mode64="${path_mode64}powerpc64/mode64/$i "; done
  936.     path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
  937.             SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo
  938.             cyclecounter_size_mode64=0
  939.     any_mode64_testlist="sizeof-long-8"
  940.     ;;
  941.         esac
  942.         ;;
  943.     esac
  944.     ;;
  945.   # POWER
  946.   [power-*-* | power[12]-*-* | power2sc-*-*])
  947.     AC_DEFINE(HAVE_HOST_CPU_FAMILY_power)
  948.     HAVE_HOST_CPU_FAMILY_power=1
  949.     cclist="gcc"
  950.     extra_functions="udiv_w_sdiv"
  951.     path="power"
  952.     # gcc 2.7.2 knows rios1, rios2, rsc
  953.     #
  954.     # -mcpu=rios2 can tickle an AIX assembler bug (see GMP_PROG_CC_WORKS) so
  955.     # there needs to be a fallback to just -mpower.
  956.     #
  957.     gcc_cflags_optlist="cpu"
  958.     case $host in
  959.       power-*-*)    gcc_cflags_cpu="-mcpu=power -mpower" ;;
  960.       power1-*-*)   gcc_cflags_cpu="-mcpu=rios1 -mpower" ;;
  961.       power2-*-*)   gcc_cflags_cpu="-mcpu=rios2 -mpower" ;;
  962.       power2sc-*-*) gcc_cflags_cpu="-mcpu=rsc   -mpower" ;;
  963.     esac
  964.     case $host in
  965.     *-*-aix*)
  966.       cclist="gcc xlc"
  967.       xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000"
  968.       ;;
  969.     esac
  970.     ;;
  971.   pyramid-*-*)
  972.     path="pyr"
  973.     ;;
  974.   # IBM s/370 and similar
  975.   [s3[6-9]0*-*-*])
  976.     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
  977.     path="s390"
  978.     extra_functions="udiv_w_sdiv"
  979.     ;;
  980.   sh-*-*)   path="sh" ;;
  981.   sh2-*-*)  path="sh/sh2 sh" ;;
  982.   *sparc*-*-*)
  983.     # sizeof(long)==4 or 8 is tested, to ensure we get the right ABI.  We've
  984.     # had various bug reports where users have set CFLAGS for their desired
  985.     # mode, but not set our ABI.  For some reason it's sparc where this
  986.     # keeps coming up, presumably users there are accustomed to driving the
  987.     # compiler mode that way.  The effect of our testlist setting is to
  988.     # reject ABI=64 in favour of ABI=32 if the user has forced the flags to
  989.     # 32-bit mode.
  990.     #
  991.     abilist="32"
  992.     cclist="gcc acc cc"
  993.     any_testlist="sizeof-long-4"
  994.     GMP_INCLUDE_MPN(sparc32/sparc-defs.m4)
  995.     case $host_cpu in
  996.       sparcv8 | microsparc | turbosparc)
  997.         path="sparc32/v8 sparc32" ;;
  998.       supersparc)
  999.         path="sparc32/v8/supersparc sparc32/v8 sparc32" ;;
  1000.       sparc64 | sparcv9* | ultrasparc*)
  1001.         path="sparc32/v9 sparc32/v8 sparc32" ;;
  1002.       *)
  1003.         path="sparc32" ;;
  1004.     esac
  1005.     # gcc 2.7.2 doesn't know about v9 and doesn't pass -xarch=v8plus to the
  1006.     # assembler.  Add it explicitly since the solaris assembler won't accept
  1007.     # our sparc32/v9 asm code without it.  gas accepts -xarch=v8plus too, so
  1008.     # it can be in the cflags unconditionally (though gas doesn't need it).
  1009.     #
  1010.     # gcc -m32 is needed to force 32-bit mode on a dual-ABI system, but past
  1011.     # gcc doesn't know that flag, hence cflags_maybe.  Note that -m32 cannot
  1012.     # be done through the optlist since the plain cflags would be run first
  1013.     # and we don't want to require the default mode (whatever it is) works.
  1014.     #
  1015.     # Note it's gcc_32_cflags_maybe and not gcc_cflags_maybe because the
  1016.     # latter would be used in the 64-bit ABI on systems like "*bsd" where
  1017.     # abilist="64" only.
  1018.     #
  1019.     case $host_cpu in
  1020.       sparc64 | sparcv9* | ultrasparc*)
  1021.         gcc_cflags="$gcc_cflags -Wa,-xarch=v8plus" ;;
  1022.       *)
  1023.         gcc_cflags="$gcc_cflags" ;;
  1024.     esac
  1025.     gcc_32_cflags_maybe="-m32"
  1026.     gcc_cflags_optlist="cpu"
  1027.     # gcc 2.7.2 knows -mcypress, -msupersparc, -mv8, -msparclite.
  1028.     # gcc 2.95 knows -mcpu= v7, hypersparc, sparclite86x, f930, f934,
  1029.     #   sparclet, tsc701, v9, ultrasparc.  A warning is given that the
  1030.     #   plain -m forms will disappear.
  1031.     # gcc 3.0 adds nothing.
  1032.     # gcc 3.1 adds nothing.
  1033.     # gcc 3.2 adds nothing.
  1034.     # gcc 3.3 adds ultrasparc3.
  1035.     #
  1036.     case $host_cpu in
  1037.       supersparc)           gcc_cflags_cpu="-mcpu=supersparc -msupersparc" ;;
  1038.       sparcv8 | microsparc | turbosparc)
  1039.     gcc_cflags_cpu="-mcpu=v8 -mv8" ;;
  1040.       sparc64 | sparcv9*)   gcc_cflags_cpu="-mcpu=v9 -mv8" ;;
  1041.       ultrasparc3)          gcc_cflags_cpu="-mcpu=ultrasparc3 -mcpu=ultrasparc -mv8" ;;
  1042.       ultrasparc*)          gcc_cflags_cpu="-mcpu=ultrasparc -mv8" ;;
  1043.       *)                    gcc_cflags_cpu="-mcpu=v7 -mcypress" ;;
  1044.     esac
  1045.     # SunPRO cc and acc, and SunOS bundled cc
  1046.     case $host in
  1047.       *-*-solaris* | *-*-sunos*)
  1048. # Note no -g, it disables all optimizations.
  1049. cc_cflags=
  1050. cc_cflags_optlist="opt arch cpu"
  1051.         # SunOS cc doesn't know -xO4, fallback to -O2.
  1052. cc_cflags_opt="-xO4 -O2"
  1053.         # SunOS cc doesn't know -xarch, apparently always generating v7
  1054.         # code, so make this optional
  1055. case $host_cpu in
  1056.   sparcv8 | microsparc | supersparc | turbosparc)
  1057.       cc_cflags_arch="-xarch=v8" ;;
  1058.   sparc64 | sparcv9* | ultrasparc*)   cc_cflags_arch="-xarch=v8plus" ;;
  1059.   *)                                  cc_cflags_arch="-xarch=v7" ;;
  1060. esac
  1061.         # SunOS cc doesn't know -xchip and doesn't seem to have an equivalent.
  1062. # SunPRO cc 5 recognises -xchip=generic, old, super, super2, micro,
  1063. #   micro2, hyper, hyper2, powerup, ultra, ultra2, ultra2i.
  1064. # SunPRO cc 6 adds -xchip=ultra2e, ultra3cu.
  1065.         #
  1066. # FIXME: Which of ultra, ultra2 or ultra2i is the best fallback for
  1067. # ultrasparc3?
  1068. #
  1069. case $host_cpu in
  1070.   supersparc)   cc_cflags_cpu="-xchip=super" ;;
  1071.   microsparc)   cc_cflags_cpu="-xchip=micro" ;;
  1072.   turbosparc)   cc_cflags_cpu="-xchip=micro2" ;;
  1073.   ultrasparc)   cc_cflags_cpu="-xchip=ultra" ;;
  1074.   ultrasparc2)  cc_cflags_cpu="-xchip=ultra2" ;;
  1075.   ultrasparc2i) cc_cflags_cpu="-xchip=ultra2i" ;;
  1076.   ultrasparc3)  cc_cflags_cpu="-xchip=ultra3 -xchip=ultra" ;;
  1077.   *)            cc_cflags_cpu="-xchip=generic" ;;
  1078. esac
  1079.     esac
  1080.     case $host_cpu in
  1081.       sparc64 | sparcv9* | ultrasparc*)
  1082.         case $host in
  1083.           # Solaris 6 and earlier cannot run ABI=64 since it doesn't save
  1084.           # registers properly, so ABI=32 is left as the only choice.
  1085.           #
  1086.           [*-*-solaris2.[0-6] | *-*-solaris2.[0-6].*]) ;;
  1087.           # BSD sparc64 ports are 64-bit-only systems, so ABI=64 is the only
  1088.           # choice.  In fact they need no special compiler flags, gcc -m64
  1089.           # is the default, but it doesn't hurt to add it.  v9 CPUs always
  1090.           # use the sparc64 port, since the plain 32-bit sparc ports don't
  1091.           # run on a v9.
  1092.           #
  1093.           *-*-*bsd*) abilist="64" ;;
  1094.           # For all other systems, we try both 64 and 32.
  1095.           #
  1096.           # GNU/Linux sparc64 has only recently gained a 64-bit user mode.
  1097.           # In the past sparc64 meant a v9 cpu, but there were no 64-bit
  1098.           # operations in user mode.  We assume that if "gcc -m64" works
  1099.           # then the system is suitable.  Hopefully even if someone attempts
  1100.           # to put a new gcc and/or glibc on an old system it won't run.
  1101.           #
  1102.           *) abilist="64 32" ;;
  1103.         esac
  1104. case $host_cpu in
  1105.   ultrasparc | ultrasparc2 | ultrasparc2i)
  1106.     path_64="sparc64/ultrasparc12 sparc64" ;;
  1107.   ultrasparc3)
  1108.     path_64="sparc64/ultrasparc34 sparc64/ultrasparc12 sparc64" ;;
  1109.   *)
  1110.     path_64="sparc64"
  1111. esac
  1112.         cclist_64="gcc"
  1113.         any_64_testlist="sizeof-long-8"
  1114.         # gcc -mptr64 is probably implied by -m64, but we're not sure if
  1115.         # this was always so.  On Solaris in the past we always used both
  1116.         # "-m64 -mptr64".
  1117.         #
  1118.         # gcc -Wa,-xarch=v9 is thought to be necessary in some cases on
  1119.         # solaris, but it would seem likely that if gcc is going to generate
  1120.         # 64-bit code it will have to add that option itself where needed.
  1121.         # An extra copy of this option should be harmless though, but leave
  1122.         # it until we're sure.  (Might want -xarch=v9a or -xarch=v9b for the
  1123.         # higher cpu types instead.)
  1124.         #
  1125.         gcc_64_cflags="$gcc_64_cflags -m64 -mptr64"
  1126.         gcc_64_ldflags="-Wc,-m64"
  1127.         gcc_64_cflags_optlist="cpu"
  1128.         case $host in
  1129.           *-*-solaris*)
  1130.             # Sun cc.
  1131.             #
  1132.             # We used to have -fast and some fixup options here, but it
  1133.             # recurrently caused problems with miscompilation.  Of course,
  1134.             # -fast is documented as miscompiling things for the sake of speed.
  1135.             #
  1136.             cclist_64="$cclist_64 cc"
  1137.             cc_64_cflags="-xO3 -xarch=v9"
  1138.             cc_64_cflags_optlist="cpu"
  1139.             ;;
  1140.         esac
  1141.         # using the v9 %tick register
  1142.         SPEED_CYCLECOUNTER_OBJ_32=sparcv9.lo
  1143.         SPEED_CYCLECOUNTER_OBJ_64=sparcv9.lo
  1144.         cyclecounter_size_32=2
  1145.         cyclecounter_size_64=2
  1146.         ;;
  1147.     esac
  1148.     ;;
  1149.   # VAX
  1150.   vax*-*-*)
  1151.     # Currently gcc (version 3.0) on vax always uses a frame pointer
  1152.     # (config/vax/vax.h FRAME_POINTER_REQUIRED=1), so -fomit-frame-pointer
  1153.     # will be ignored.
  1154.     #
  1155.     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
  1156.     path="vax"
  1157.     extra_functions="udiv_w_sdiv"
  1158.     ;;
  1159.   # AMD and Intel x86 configurations, including AMD64
  1160.   #
  1161.   # Rumour has it gcc -O2 used to give worse register allocation than just
  1162.   # -O, but lets assume that's no longer true.
  1163.   #
  1164.   # -m32 forces 32-bit mode on a bi-arch 32/64 amd64 build of gcc.  -m64 is
  1165.   # the default in such a build (we think), so -m32 is essential for ABI=32.
  1166.   # This is, of course, done for any $host_cpu, not just x86_64, so we can
  1167.   # get such a gcc into the right mode to cross-compile to say i486-*-*.
  1168.   #
  1169.   # -m32 is not available in gcc 2.95 and earlier, hence cflags_maybe to use
  1170.   # it when it works.  We check sizeof(long)==4 to ensure we get the right
  1171.   # mode, in case -m32 has failed not because it's an old gcc, but because
  1172.   # it's a dual 32/64-bit gcc without a 32-bit libc, or whatever.
  1173.   #
  1174.   X86_PATTERN | X86_64_PATTERN)
  1175.     abilist="32"
  1176.     cclist="gcc icc cc"
  1177.     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
  1178.     gcc_32_cflags_maybe="-m32"
  1179.     icc_cflags="-no-gcc"
  1180.     icc_cflags_optlist="opt"
  1181.     icc_cflags_opt="-O3 -O2 -O1"
  1182.     any_32_testlist="sizeof-long-4"
  1183.     CALLING_CONVENTIONS_OBJS='x86call.lo x86check$U.lo'
  1184.     # Availability of rdtsc is checked at run-time.
  1185.     SPEED_CYCLECOUNTER_OBJ=pentium.lo
  1186.     # gcc 2.7.2 only knows i386 and i486, using -m386 or -m486.  These
  1187.     #     represent -mcpu= since -m486 doesn't generate 486 specific insns.
  1188.     # gcc 2.95 adds k6, pentium and pentiumpro, and takes -march= and -mcpu=.
  1189.     # gcc 3.0 adds athlon.
  1190.     # gcc 3.1 adds k6-2, k6-3, pentium-mmx, pentium2, pentium3, pentium4,
  1191.     #     athlon-tbird, athlon-4, athlon-xp, athlon-mp.
  1192.     # gcc 3.2 adds winchip2.
  1193.     # gcc 3.3 adds winchip-c6.
  1194.     # gcc 3.3.1 from mandrake adds k8 and knows -mtune.
  1195.     # gcc 3.4 adds c3, c3-2, k8, and deprecates -mcpu in favour of -mtune.
  1196.     #
  1197.     # In gcc 2.95.[0123], -march=pentiumpro provoked a stack slot bug in an
  1198.     # old version of mpz/powm.c.  Seems to be fine with the current code, so
  1199.     # no need for any restrictions on that option.
  1200.     #
  1201.     # -march=pentiumpro can fail if the assembler doesn't know "cmov"
  1202.     # (eg. solaris 2.8 native "as"), so always have -march=pentium after
  1203.     # that as a fallback.
  1204.     #
  1205.     # -march=pentium4 and -march=k8 enable SSE2 instructions, which may or
  1206.     # may not be supported by the assembler and/or the OS, and is bad in gcc
  1207.     # prior to 3.3.  The tests will reject these if no good, so fallbacks
  1208.     # like "-march=pentium4 -mno-sse2" are given to try also without SSE2.
  1209.     # Note the relevant -march types are listed in the optflags handling
  1210.     # below, be sure to update there if adding new types emitting SSE2.
  1211.     #
  1212.     # -mtune is used at the start of each cpu option list to give something
  1213.     # gcc 3.4 will use, thereby avoiding warnings from -mcpu.  -mcpu forms
  1214.     # are retained for use by prior gcc.  For example pentium has
  1215.     # "-mtune=pentium -mcpu=pentium ...", the -mtune is for 3.4 and the
  1216.     # -mcpu for prior.  If there's a brand new choice in 3.4 for a chip,
  1217.     # like k8 for x86_64, then it can be the -mtune at the start, no need to
  1218.     # duplicate anything.
  1219.     #
  1220.     gcc_cflags_optlist="cpu arch"
  1221.     case $host_cpu in
  1222.       i386*)
  1223.         gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386"
  1224.         gcc_cflags_arch="-march=i386"
  1225.         ;;
  1226.       i486*)
  1227.         gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486"
  1228.         gcc_cflags_arch="-march=i486"
  1229.         ;;
  1230.       i586 | pentium)
  1231.         gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486"
  1232.         gcc_cflags_arch="-march=pentium"
  1233.         ;;
  1234.       pentiummmx)
  1235.         gcc_cflags_cpu="-mtune=pentium-mmx -mcpu=pentium-mmx -mcpu=pentium -m486"
  1236.         gcc_cflags_arch="-march=pentium-mmx -march=pentium"
  1237.         ;;
  1238.       i686 | pentiumpro)
  1239.         gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486"
  1240.         gcc_cflags_arch="-march=pentiumpro -march=pentium"
  1241.         ;;
  1242.       pentium2)
  1243.         gcc_cflags_cpu="-mtune=pentium2 -mcpu=pentium2 -mcpu=pentiumpro -mcpu=i486 -m486"
  1244.         gcc_cflags_arch="-march=pentium2 -march=pentiumpro -march=pentium"
  1245.         ;;
  1246.       pentium3 | pentiumm)
  1247.         gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486"
  1248.         gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium"
  1249.         ;;
  1250.       k6)
  1251.         gcc_cflags_cpu="-mtune=k6 -mcpu=k6 -mcpu=i486 -m486"
  1252.         gcc_cflags_arch="-march=k6"
  1253.         ;;
  1254.       k62)
  1255.         gcc_cflags_cpu="-mtune=k6-2 -mcpu=k6-2 -mcpu=k6 -mcpu=i486 -m486"
  1256.         gcc_cflags_arch="-march=k6-2 -march=k6"
  1257.         ;;
  1258.       k63)
  1259.         gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486"
  1260.         gcc_cflags_arch="-march=k6-3 -march=k6"
  1261.         ;;
  1262.       geode)
  1263.         gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486"
  1264.         gcc_cflags_arch="-march=k6-3 -march=k6"
  1265.         ;;
  1266.       athlon)
  1267.         # Athlon instruction costs are close to P6 (3 cycle load latency,
  1268.         # 4-6 cycle mul, 40 cycle div, pairable adc, etc) so if gcc doesn't
  1269.         # know athlon (eg. 2.95.2 doesn't) then fall back on pentiumpro.
  1270.         gcc_cflags_cpu="-mtune=athlon -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486"
  1271.         gcc_cflags_arch="-march=athlon -march=pentiumpro -march=pentium"
  1272.         ;;
  1273.       i786 | pentium4)
  1274.         # pentiumpro is the primary fallback when gcc doesn't know pentium4.
  1275.         # This gets us cmov to eliminate branches.  Maybe "athlon" would be
  1276.         # a possibility on gcc 3.0.
  1277.         #
  1278.         gcc_cflags_cpu="-mtune=pentium4 -mcpu=pentium4 -mcpu=pentiumpro -mcpu=i486 -m486"
  1279.         gcc_cflags_arch="-march=pentium4 -march=pentium4~-mno-sse2 -march=pentiumpro -march=pentium"
  1280.         gcc_64_cflags_cpu="-mtune=nocona"
  1281.         ;;
  1282.       viac32)
  1283.         # Not sure of the best fallbacks here for -mcpu.
  1284.         # c3-2 has sse and mmx, so pentium3 is good for -march.
  1285.         gcc_cflags_cpu="-mtune=c3-2 -mcpu=c3-2 -mcpu=i486 -m486"
  1286.         gcc_cflags_arch="-march=c3-2 -march=pentium3 -march=pentiumpro -march=pentium"
  1287.         ;;
  1288.       viac3*)
  1289.         # Not sure of the best fallbacks here.
  1290.         gcc_cflags_cpu="-mtune=c3 -mcpu=c3 -mcpu=i486 -m486"
  1291.         gcc_cflags_arch="-march=c3 -march=pentium-mmx -march=pentium"
  1292.         ;;
  1293.       athlon64 | x86_64)
  1294.         gcc_cflags_cpu="-mtune=k8 -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486"
  1295.         gcc_cflags_arch="-march=k8 -march=k8~-mno-sse2 -march=athlon -march=pentiumpro -march=pentium"
  1296.         ;;
  1297.       core2 | corei)
  1298.         gcc_cflags_cpu="-mtune=core2 -mtune=k8"
  1299.         gcc_cflags_arch="-march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2"
  1300.         ;;
  1301.       atom)
  1302.         gcc_cflags_cpu="-mtune=atom -mtune=pentium3"
  1303.         gcc_cflags_arch="-march=atom -march=pentium3"
  1304.         ;;
  1305.       *)
  1306.         gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486"
  1307.         gcc_cflags_arch="-march=i486"
  1308.         ;;
  1309.     esac
  1310.     case $host_cpu in
  1311.       i386*)                path="x86" ;;
  1312.       i486*)                path="x86/i486 x86" ;;
  1313.       i586 | pentium)       path="x86/pentium x86" ;;
  1314.       pentiummmx)           path="x86/pentium/mmx x86/pentium x86" ;;
  1315.       i686 | pentiumpro)    path="x86/p6 x86" ;;
  1316.       pentium2)             path="x86/p6/mmx x86/p6 x86" ;;
  1317.       pentium3)             path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86";;
  1318.       pentiumm | core2 | corei)
  1319.                             path="x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86";;
  1320.       [k6[23]])             path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86" ;;
  1321.       k6)                   path="x86/k6/mmx x86/k6 x86" ;;
  1322.       geode)                path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86" ;;
  1323.       # we don't have any specific 32-bit code for athlon64/opteron, the
  1324.       # athlon code should be reasonable
  1325.       athlon | athlon64)    path="x86/k7/mmx x86/k7 x86" ;;
  1326.       i786 | pentium4)      path="x86/pentium4/sse2 x86/pentium4/mmx x86/pentium4 x86" ;;
  1327.       # VIA/Centaur processors, sold as CyrixIII and C3.
  1328.       viac32)               path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86";;
  1329.       viac3*)               path="x86/pentium/mmx x86/pentium x86";;
  1330.       atom)                 path="x86/atom x86" ;;
  1331.       *)                    path="x86" ;;
  1332.     esac
  1333.     case $host in
  1334.       X86_64_PATTERN)
  1335. cclist_64="gcc"
  1336. gcc_64_cflags="$gcc_64_cflags -m64"
  1337. gcc_64_cflags_optlist="cpu arch"
  1338. CALLING_CONVENTIONS_OBJS_64='amd64call.lo amd64check$U.lo'
  1339. SPEED_CYCLECOUNTER_OBJ_64=x86_64.lo
  1340. cyclecounter_size_64=2
  1341. abilist="64 32"
  1342. path_64="x86_64"
  1343. case $host_cpu in
  1344.   x86_64)
  1345.     ;;
  1346.   athlon64)
  1347.     path_64="x86_64/k8 $path_64"
  1348.     ;;
  1349.   pentium4)
  1350.     path_64="x86_64/pentium4 $path_64"
  1351.     ;;
  1352.   core2)
  1353.     path_64="x86_64/core2 $path_64"
  1354.     ;;
  1355.   corei)
  1356.     path_64="x86_64/corei x86_64/core2 $path_64"
  1357.     ;;
  1358.   atom)
  1359.     path_64="x86_64/atom $path_64"
  1360.     ;;
  1361.   nano)
  1362.     path_64="x86_64/nano $path_64"
  1363.     ;;
  1364. esac
  1365. case $host in
  1366.   *-*-solaris*)
  1367.     # Sun cc.
  1368.     cclist_64="$cclist_64 cc"
  1369.     cc_64_cflags="-xO3 -m64"
  1370.     ;;
  1371.   *-*-mingw*)
  1372.     limb_64=longlong
  1373.     path_64="" # Windows amd64 calling conventions are *different*
  1374.     # Silence many pedantic warnings for w64.  FIXME.
  1375.     gcc_64_cflags="$gcc_64_cflags -std=gnu99"
  1376.     ;;
  1377. esac
  1378. ;;
  1379.     esac
  1380.     ;;
  1381.   # FIXME: z8kx won't get through config.sub.  Could make 16 versus 32 bit
  1382.   # limb an ABI option perhaps.
  1383.   z8kx*-*-*)
  1384.     path="z8000x"
  1385.     extra_functions="udiv_w_sdiv"
  1386.     ;;
  1387.   z8k*-*-*)
  1388.     path="z8000"
  1389.     extra_functions="udiv_w_sdiv"
  1390.     ;;
  1391.   # Special CPU "none" selects generic C.  -DNO_ASM is used to disable gcc
  1392.   # asm blocks in longlong.h (since they're driven by cpp pre-defined
  1393.   # symbols like __alpha rather than the configured $host_cpu).
  1394.   #
  1395.   none-*-*)
  1396.     abilist="long longlong"
  1397.     cclist_long=$cclist
  1398.     gcc_long_cflags=$gcc_cflags
  1399.     gcc_long_cppflags="-DNO_ASM"
  1400.     cc_long_cflags=$cc_cflags
  1401.     cclist_longlong=$cclist
  1402.     gcc_longlong_cflags=$gcc_cflags
  1403.     gcc_longlong_cppflags="-DNO_ASM"
  1404.     cc_longlong_cflags=$cc_cflags
  1405.     limb_longlong=longlong
  1406.     ;;
  1407. esac
  1408. # mingw can be built by the cygwin gcc if -mno-cygwin is added.  For
  1409. # convenience add this automatically if it works.  Actual mingw gcc accepts
  1410. # -mno-cygwin too, but of course is the default.  mingw only runs on the
  1411. # x86s, but allow any CPU here so as to catch "none" too.
  1412. #
  1413. case $host in
  1414.   *-*-mingw*)
  1415.     gcc_cflags_optlist="$gcc_cflags_optlist nocygwin"
  1416.     gcc_cflags_nocygwin="-mno-cygwin"
  1417.     ;;
  1418. esac
  1419. CFLAGS_or_unset=${CFLAGS-'(unset)'}
  1420. CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'}
  1421. cat >&AC_FD_CC <<EOF
  1422. User:
  1423. ABI=$ABI
  1424. CC=$CC
  1425. CFLAGS=$CFLAGS_or_unset
  1426. CPPFLAGS=$CPPFLAGS_or_unset
  1427. MPN_PATH=$MPN_PATH
  1428. GMP:
  1429. abilist=$abilist
  1430. cclist=$cclist
  1431. EOF
  1432. test_CFLAGS=${CFLAGS+set}
  1433. test_CPPFLAGS=${CPPFLAGS+set}
  1434. for abi in $abilist; do
  1435.   abi_last="$abi"
  1436. done
  1437. # If the user specifies an ABI then it must be in $abilist, after that
  1438. # $abilist is restricted to just that choice.
  1439. #
  1440. if test -n "$ABI"; then
  1441.   found=no
  1442.   for abi in $abilist; do
  1443.     if test $abi = "$ABI"; then found=yes; break; fi
  1444.   done
  1445.   if test $found = no; then
  1446.     AC_MSG_ERROR([ABI=$ABI is not among the following valid choices: $abilist])
  1447.   fi
  1448.   abilist="$ABI"
  1449. fi
  1450. found_compiler=no
  1451. for abi in $abilist; do
  1452.   echo "checking ABI=$abi"
  1453.   # Suppose abilist="64 32", then for abi=64, will have abi1="_64" and
  1454.   # abi2="_64".  For abi=32, will have abi1="_32" and abi2="".  This is how
  1455.   # $gcc_cflags becomes a fallback for $gcc_32_cflags (the last in the
  1456.   # abilist), but there's no fallback for $gcc_64_cflags.
  1457.   #
  1458.   abi1=[`echo _$abi | sed 's/[.]//g'`]
  1459.   if test $abi = $abi_last; then abi2=; else abi2="$abi1"; fi
  1460.   # Compiler choices under this ABI
  1461.                               eval cclist_chosen="$cclist$abi1"
  1462.   test -n "$cclist_chosen" || eval cclist_chosen="$cclist$abi2"
  1463.   # If there's a user specified $CC then don't use a list for
  1464.   # $cclist_chosen, just a single value for $ccbase.
  1465.   #
  1466.   if test -n "$CC"; then
  1467.     # The first word of $CC, stripped of any directory.  For instance
  1468.     # CC="/usr/local/bin/gcc -pipe" will give "gcc".
  1469.     #
  1470.     for ccbase in $CC; do break; done
  1471.     ccbase=`echo $ccbase | sed 's:.*/::'`
  1472.     # If this $ccbase is in $cclist_chosen then it's a compiler we know and
  1473.     # we can do flags defaulting with it.  If not, then $cclist_chosen is
  1474.     # set to "unrecognised" so no default flags are used.
  1475.     #
  1476.     # "unrecognised" is used to avoid bad effects with eval if $ccbase has
  1477.     # non-symbol characters.  For instance ccbase=my+cc would end up with
  1478.     # something like cflags="$my+cc_cflags" which would give
  1479.     # cflags="+cc_cflags" rather than the intended empty string for an
  1480.     # unknown compiler.
  1481.     #
  1482.     found=unrecognised
  1483.     for i in $cclist_chosen; do
  1484.       if test "$ccbase" = $i; then
  1485.         found=$ccbase
  1486.         break
  1487.       fi
  1488.     done
  1489.     cclist_chosen=$found
  1490.   fi
  1491.   for ccbase in $cclist_chosen; do
  1492.     # When cross compiling, look for a compiler with the $host_alias as a
  1493.     # prefix, the same way that AC_CHECK_TOOL does.  But don't do this to a
  1494.     # user-selected $CC.
  1495.     #
  1496.     # $cross_compiling will be yes/no/maybe at this point.  Do the host
  1497.     # prefixing for "maybe" as well as "yes".
  1498.     #
  1499.     if test "$cross_compiling" != no && test -z "$CC"; then
  1500.       cross_compiling_prefix="${host_alias}-"
  1501.     fi
  1502.     for ccprefix in $cross_compiling_prefix ""; do
  1503.       cc="$CC"
  1504.       test -n "$cc" || cc="$ccprefix$ccbase"
  1505.       # If the compiler is gcc but installed under another name, then change
  1506.       # $ccbase so as to use the flags we know for gcc.  This helps for
  1507.       # instance when specifying CC=gcc272 on Debian GNU/Linux, or the
  1508.       # native cc which is really gcc on NeXT or MacOS-X.
  1509.       #
  1510.       # FIXME: There's a slight misfeature here.  If cc is actually gcc but
  1511.       # gcc is not a known compiler under this $abi then we'll end up
  1512.       # testing it with no flags and it'll work, but chances are it won't be
  1513.       # in the right mode for the ABI we desire.  Let's quietly hope this
  1514.       # doesn't happen.
  1515.       #
  1516.       if test $ccbase != gcc; then
  1517.         GMP_PROG_CC_IS_GNU($cc,ccbase=gcc)
  1518.       fi
  1519.       # Similarly if the compiler is IBM xlc but invoked as cc or whatever
  1520.       # then change $ccbase and make the default xlc flags available.
  1521.       if test $ccbase != xlc; then
  1522.         GMP_PROG_CC_IS_XLC($cc,ccbase=xlc)
  1523.       fi
  1524.       # acc was Sun's first unbundled compiler back in the SunOS days, or
  1525.       # something like that, but today its man page says it's not meant to
  1526.       # be used directly (instead via /usr/ucb/cc).  The options are pretty
  1527.       # much the same as the main SunPRO cc, so share those configs.
  1528.       #
  1529.       case $host in
  1530.         *sparc*-*-solaris* | *sparc*-*-sunos*)
  1531.           if test "$ccbase" = acc; then ccbase=cc; fi ;;
  1532.       esac
  1533.       for tmp_cflags_maybe in yes no; do
  1534.                              eval cflags="$${ccbase}${abi1}_cflags"
  1535.         test -n "$cflags" || eval cflags="$${ccbase}${abi2}_cflags"
  1536. if test "$tmp_cflags_maybe" = yes; then
  1537.           # don't try cflags_maybe when the user set CFLAGS
  1538.           if test "$test_CFLAGS" = set; then continue; fi
  1539.                                      eval cflags_maybe="$${ccbase}${abi1}_cflags_maybe"
  1540.           test -n "$cflags_maybe" || eval cflags_maybe="$${ccbase}${abi2}_cflags_maybe"
  1541.           # don't try cflags_maybe if there's nothing set
  1542.           if test -z "$cflags_maybe"; then continue; fi
  1543.           cflags="$cflags_maybe $cflags"
  1544.         fi
  1545.         # Any user CFLAGS, even an empty string, takes precedence
  1546.         if test "$test_CFLAGS" = set; then cflags=$CFLAGS; fi
  1547.         # Any user CPPFLAGS, even an empty string, takes precedence
  1548.                                eval cppflags="$${ccbase}${abi1}_cppflags"
  1549.         test -n "$cppflags" || eval cppflags="$${ccbase}${abi2}_cppflags"
  1550.         if test "$test_CPPFLAGS" = set; then cppflags=$CPPFLAGS; fi
  1551.         # --enable-profiling adds -p/-pg even to user-specified CFLAGS.
  1552.         # This is convenient, but it's perhaps a bit naughty to modify user
  1553.         # CFLAGS.
  1554.         case "$enable_profiling" in
  1555.           prof)       cflags="$cflags -p" ;;
  1556.           gprof)      cflags="$cflags -pg" ;;
  1557.           instrument) cflags="$cflags -finstrument-functions" ;;
  1558.         esac
  1559.         GMP_PROG_CC_WORKS($cc $cflags $cppflags,,continue)
  1560.         # If we're supposed to be using a "long long" for a limb, check that
  1561.         # it works.
  1562.                                   eval limb_chosen="$limb$abi1"
  1563.         test -n "$limb_chosen" || eval limb_chosen="$limb$abi2"
  1564.         if test "$limb_chosen" = longlong; then
  1565.           GMP_PROG_CC_WORKS_LONGLONG($cc $cflags $cppflags,,continue)
  1566.         fi
  1567.         # The tests to perform on this $cc, if any
  1568.                                eval testlist="$${ccbase}${abi1}_testlist"
  1569.         test -n "$testlist" || eval testlist="$${ccbase}${abi2}_testlist"
  1570.         test -n "$testlist" || eval testlist="$any${abi1}_testlist"
  1571.         test -n "$testlist" || eval testlist="$any${abi2}_testlist"
  1572.         testlist_pass=yes
  1573.         for tst in $testlist; do
  1574.           case $tst in
  1575.           hpc-hppa-2-0)   GMP_HPC_HPPA_2_0($cc,,testlist_pass=no) ;;
  1576.           gcc-arm-umodsi) GMP_GCC_ARM_UMODSI($cc,,testlist_pass=no) ;;
  1577.           gcc-mips-o32)   GMP_GCC_MIPS_O32($cc,,testlist_pass=no) ;;
  1578.           hppa-level-2.0) GMP_HPPA_LEVEL_20($cc $cflags,,testlist_pass=no) ;;
  1579.           sizeof*)       GMP_C_TEST_SIZEOF($cc $cflags,$tst,,testlist_pass=no) ;;
  1580.           esac
  1581.           if test $testlist_pass = no; then break; fi
  1582.         done
  1583.         if test $testlist_pass = yes; then
  1584.           found_compiler=yes
  1585.           break
  1586.         fi
  1587.       done
  1588.       if test $found_compiler = yes; then break; fi
  1589.     done
  1590.     if test $found_compiler = yes; then break; fi
  1591.   done
  1592.   if test $found_compiler = yes; then break; fi
  1593. done
  1594. # If we recognised the CPU, as indicated by $path being set, then insist
  1595. # that we have a working compiler, either from our $cclist choices or from
  1596. # $CC.  We can't let AC_PROG_CC look around for a compiler because it might
  1597. # find one that we've rejected (for not supporting the modes our asm code
  1598. # demands, etc).
  1599. #
  1600. # If we didn't recognise the CPU (and this includes host_cpu=none), then
  1601. # fall through and let AC_PROG_CC look around for a compiler too.  This is
  1602. # mostly in the interests of following a standard autoconf setup, after all
  1603. # we've already tested cc and gcc adequately (hopefully).  As of autoconf
  1604. # 2.50 the only thing AC_PROG_CC really adds is a check for "cl" (Microsoft
  1605. # C on MS-DOS systems).
  1606. #
  1607. if test $found_compiler = no && test -n "$path"; then
  1608.   AC_MSG_ERROR([could not find a working compiler, see config.log for details])
  1609. fi
  1610. case $host in
  1611.   X86_PATTERN | X86_64_PATTERN)
  1612.     # If the user asked for a fat build, override the path and flags set above
  1613.     if test $enable_fat = yes; then
  1614.       gcc_cflags_cpu=""
  1615.       gcc_cflags_arch=""
  1616.       if test "$abi" = 32; then
  1617. extra_functions="$extra_functions fat fat_entry"
  1618. path="x86/fat x86"
  1619. fat_path="x86 x86/fat x86/i486
  1620.   x86/k6 x86/k6/mmx x86/k6/k62mmx
  1621.   x86/k7 x86/k7/mmx
  1622.   x86/pentium x86/pentium/mmx
  1623.   x86/p6 x86/p6/mmx x86/p6/p3mmx x86/p6/sse2
  1624.   x86/pentium4 x86/pentium4/mmx x86/pentium4/sse2"
  1625.       fi
  1626.       if test "$abi" = 64; then
  1627. gcc_64_cflags=""
  1628. extra_functions_64="$extra_functions_64 fat fat_entry"
  1629. path_64="x86_64/fat x86_64"
  1630. fat_path="x86_64 x86_64/fat x86_64/pentium4 x86_64/core2 x86_64/corei x86_64/atom x86_64/nano"
  1631.       fi
  1632.       fat_functions="add_n addmul_1 copyd copyi
  1633.      dive_1 diveby3 divrem_1 gcd_1 lshift
  1634.      mod_1 mod_34lsub1 mode1o mul_1 mul_basecase
  1635.      pre_divrem_1 pre_mod_1 rshift
  1636.      sqr_basecase sub_n submul_1"
  1637.       fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD
  1638.       SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD"
  1639.     fi
  1640.     ;;
  1641. esac
  1642. if test $found_compiler = yes; then
  1643.   # If we're creating CFLAGS, then look for optional additions.  If the user
  1644.   # set CFLAGS then leave it alone.
  1645.   #
  1646.   if test "$test_CFLAGS" != set; then
  1647.                           eval optlist="$${ccbase}${abi1}_cflags_optlist"
  1648.     test -n "$optlist" || eval optlist="$${ccbase}${abi2}_cflags_optlist"
  1649.     for opt in $optlist; do
  1650.                              eval optflags="$${ccbase}${abi1}_cflags_${opt}"
  1651.       test -n "$optflags" || eval optflags="$${ccbase}${abi2}_cflags_${opt}"
  1652.       test -n "$optflags" || eval optflags="$${ccbase}_cflags_${opt}"
  1653.       for flag in $optflags; do
  1654. # ~ represents a space in an option spec
  1655.         flag=`echo "$flag" | tr '~' ' '`
  1656.         case $flag in
  1657.           -march=pentium4 | -march=k8)
  1658.             # For -march settings which enable SSE2 we exclude certain bad
  1659.             # gcc versions and we need an OS knowing how to save xmm regs.
  1660.             #
  1661.             # This is only for ABI=32, any 64-bit gcc is good and any OS
  1662.             # knowing x86_64 will know xmm.
  1663.             #
  1664.             # -march=k8 was only introduced in gcc 3.3, so we shouldn't need
  1665.             # the GMP_GCC_PENTIUM4_SSE2 check (for gcc 3.2 and prior).  But
  1666.             # it doesn't hurt to run it anyway, sharing code with the
  1667.             # pentium4 case.
  1668.             #
  1669.             if test "$abi" = 32; then
  1670.               GMP_GCC_PENTIUM4_SSE2($cc $cflags $cppflags,, continue)
  1671.               GMP_OS_X86_XMM($cc $cflags $cppflags,, continue)
  1672.             fi
  1673.             ;;
  1674.           -no-cpp-precomp)
  1675.             # special check, avoiding a warning
  1676.             GMP_GCC_NO_CPP_PRECOMP($ccbase,$cc,$cflags,
  1677.                                    [cflags="$cflags $flag"
  1678.                                    break],
  1679.                                    [continue])
  1680.             ;;
  1681.           -Wa,-m*)
  1682.             case $host in
  1683.               alpha*-*-*)
  1684.                 GMP_GCC_WA_MCPU($cc $cflags, $flag, , [continue])
  1685.               ;;
  1686.             esac
  1687.             ;;
  1688.           -Wa,-oldas)
  1689.             GMP_GCC_WA_OLDAS($cc $cflags $cppflags,
  1690.                              [cflags="$cflags $flag"
  1691.                              break],
  1692.                              [continue])
  1693.             ;;
  1694.         esac
  1695.         GMP_PROG_CC_WORKS($cc $cflags $cppflags $flag,
  1696.           [cflags="$cflags $flag"
  1697.           break])
  1698.       done
  1699.     done
  1700.   fi
  1701.   ABI="$abi"
  1702.   CC="$cc"
  1703.   CFLAGS="$cflags"
  1704.   CPPFLAGS="$cppflags"
  1705.   # Could easily have this in config.h too, if desired.
  1706.   ABI_nodots=`echo $ABI | sed 's/./_/'`
  1707.   GMP_DEFINE_RAW("define_not_for_expansion(`HAVE_ABI_$ABI_nodots')", POST)
  1708.   # GMP_LDFLAGS substitution, selected according to ABI.
  1709.   # These are needed on libgmp.la and libmp.la, but currently not on
  1710.   # convenience libraries like tune/libspeed.la or mpz/libmpz.la.
  1711.   #
  1712.                             eval GMP_LDFLAGS="$${ccbase}${abi1}_ldflags"
  1713.   test -n "$GMP_LDFLAGS" || eval GMP_LDFLAGS="$${ccbase}${abi1}_ldflags"
  1714.   AC_SUBST(GMP_LDFLAGS)
  1715.   AC_SUBST(LIBGMP_LDFLAGS)
  1716.   AC_SUBST(LIBGMPXX_LDFLAGS)
  1717.   # extra_functions, selected according to ABI
  1718.                     eval tmp="$extra_functions$abi1"
  1719.   test -n "$tmp" || eval tmp="$extra_functions$abi2"
  1720.   extra_functions="$tmp"
  1721.   # Cycle counter, selected according to ABI.
  1722.   #
  1723.                     eval tmp="$SPEED_CYCLECOUNTER_OBJ$abi1"
  1724.   test -n "$tmp" || eval tmp="$SPEED_CYCLECOUNTER_OBJ$abi2"
  1725.   SPEED_CYCLECOUNTER_OBJ="$tmp"
  1726.                     eval tmp="$cyclecounter_size$abi1"
  1727.   test -n "$tmp" || eval tmp="$cyclecounter_size$abi2"
  1728.   cyclecounter_size="$tmp"
  1729.   if test -n "$SPEED_CYCLECOUNTER_OBJ"; then
  1730.     AC_DEFINE_UNQUOTED(HAVE_SPEED_CYCLECOUNTER, $cyclecounter_size,
  1731.     [Tune directory speed_cyclecounter, undef=none, 1=32bits, 2=64bits)])
  1732.   fi
  1733.   AC_SUBST(SPEED_CYCLECOUNTER_OBJ)
  1734.   # Calling conventions checking, selected according to ABI.
  1735.   #
  1736.                     eval tmp="$CALLING_CONVENTIONS_OBJS$abi1"
  1737.   test -n "$tmp" || eval tmp="$CALLING_CONVENTIONS_OBJS$abi2"
  1738.   CALLING_CONVENTIONS_OBJS="$tmp"
  1739.   if test -n "$CALLING_CONVENTIONS_OBJS"; then
  1740.     AC_DEFINE(HAVE_CALLING_CONVENTIONS,1,
  1741.     [Define to 1 if tests/libtests has calling conventions checking for the CPU])
  1742.   fi
  1743.   AC_SUBST(CALLING_CONVENTIONS_OBJS)
  1744. fi
  1745. # If the user gave an MPN_PATH, use that verbatim, otherwise choose
  1746. # according to the ABI and add "generic".
  1747. #
  1748. if test -n "$MPN_PATH"; then
  1749.   path="$MPN_PATH"
  1750. else
  1751.                     eval tmp="$path$abi1"
  1752.   test -n "$tmp" || eval tmp="$path$abi2"
  1753.   path="$tmp generic"
  1754. fi
  1755. # Long long limb setup for gmp.h.
  1756. case $limb_chosen in
  1757. longlong) DEFN_LONG_LONG_LIMB="#define _LONG_LONG_LIMB 1"    ;;
  1758. *)        DEFN_LONG_LONG_LIMB="/* #undef _LONG_LONG_LIMB */" ;;
  1759. esac
  1760. AC_SUBST(DEFN_LONG_LONG_LIMB)
  1761. # The C compiler and preprocessor, put into ANSI mode if possible.
  1762. AC_PROG_CC
  1763. AC_PROG_CC_STDC
  1764. AC_PROG_CPP
  1765. GMP_H_ANSI
  1766. # The C compiler on the build system, and associated tests.
  1767. GMP_PROG_CC_FOR_BUILD
  1768. GMP_PROG_CPP_FOR_BUILD
  1769. GMP_PROG_EXEEXT_FOR_BUILD
  1770. GMP_C_FOR_BUILD_ANSI
  1771. GMP_CHECK_LIBM_FOR_BUILD
  1772. # How to assemble, used with CFLAGS etc, see mpn/Makeasm.am.
  1773. # Using the compiler is a lot easier than figuring out how to invoke the
  1774. # assembler directly.
  1775. #
  1776. test -n "$CCAS" || CCAS="$CC -c"
  1777. AC_SUBST(CCAS)
  1778. # The C++ compiler, if desired.
  1779. want_cxx=no
  1780. if test $enable_cxx != no; then
  1781.   test_CXXFLAGS=${CXXFLAGS+set}
  1782.   AC_PROG_CXX
  1783.   echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC
  1784.   cxxflags_ac_prog_cxx=$CXXFLAGS
  1785.   cxxflags_list=ac_prog_cxx
  1786.   # If the user didn't specify $CXXFLAGS, then try $CFLAGS, with -g removed
  1787.   # if AC_PROG_CXX thinks that doesn't work.  $CFLAGS stands a good chance
  1788.   # of working, eg. on a GNU system where CC=gcc and CXX=g++.
  1789.   #
  1790.   if test "$test_CXXFLAGS" != set; then
  1791.     cxxflags_cflags=$CFLAGS
  1792.     cxxflags_list="cflags $cxxflags_list"
  1793.     if test "$ac_prog_cxx_g" = no; then
  1794.       cxxflags_cflags=`echo "$cxxflags_cflags" | sed -e 's/ -g //' -e 's/^-g //' -e 's/ -g$//'`
  1795.     fi
  1796.   fi
  1797.   # See if the C++ compiler works.  If the user specified CXXFLAGS then all
  1798.   # we're doing is checking whether AC_PROG_CXX succeeded, since it doesn't
  1799.   # give a fatal error, just leaves CXX set to a default g++.  If on the
  1800.   # other hand the user didn't specify CXXFLAGS then we get to try here our
  1801.   # $cxxflags_list alternatives.
  1802.   #
  1803.   # Automake includes $CPPFLAGS in a C++ compile, so we do the same here.
  1804.   #
  1805.   for cxxflags_choice in $cxxflags_list; do
  1806.     eval CXXFLAGS="$cxxflags_$cxxflags_choice"
  1807.     GMP_PROG_CXX_WORKS($CXX $CPPFLAGS $CXXFLAGS,
  1808.       [want_cxx=yes
  1809.       break])
  1810.   done
  1811.   # If --enable-cxx=yes but a C++ compiler can't be found, then abort.
  1812.   if test $want_cxx = no && test $enable_cxx = yes; then
  1813.     AC_MSG_ERROR([C++ compiler not available, see config.log for details])
  1814.   fi
  1815. fi
  1816. AM_CONDITIONAL(WANT_CXX, test $want_cxx = yes)
  1817. # FIXME: We're not interested in CXXCPP for ourselves, but if we don't do it
  1818. # here then AC_PROG_LIBTOOL will AC_REQUIRE it (via _LT_AC_TAGCONFIG) and
  1819. # hence execute it unconditionally, and that will fail if there's no C++
  1820. # compiler (and no generic /lib/cpp).
  1821. #
  1822. if test $want_cxx = yes; then
  1823.   AC_PROG_CXXCPP
  1824. fi
  1825. # Path setups for Cray, according to IEEE or CFP.  These must come after
  1826. # deciding the compiler.
  1827. #
  1828. GMP_CRAY_OPTIONS(
  1829.   [add_path="cray/ieee"],
  1830.   [add_path="cray/cfp"; extra_functions="mulwwc90"],
  1831.   [add_path="cray/cfp"; extra_functions="mulwwj90"])
  1832. if test -z "$MPN_PATH"; then
  1833.   path="$add_path $path"
  1834. fi
  1835. # For a nail build, also look in "nails" subdirectories.
  1836. #
  1837. if test $GMP_NAIL_BITS != 0 && test -z "$MPN_PATH"; then
  1838.   new_path=
  1839.   for i in $path; do
  1840.     case $i in
  1841.     generic) new_path="$new_path $i" ;;
  1842.     *)       new_path="$new_path $i/nails $i" ;;
  1843.     esac
  1844.   done
  1845.   path=$new_path
  1846. fi
  1847. # Put all directories into CPUVEC_list so as to get a full set of
  1848. # CPUVEC_SETUP_$tmp_suffix defines into config.h, even if some of them are
  1849. # empty because mmx and/or sse2 had to be dropped.
  1850. #
  1851. for i in $fat_path; do
  1852.   GMP_FAT_SUFFIX(tmp_suffix, $i)
  1853.   CPUVEC_list="$CPUVEC_list CPUVEC_SETUP_$tmp_suffix"
  1854. done
  1855. # If there's any sse2 or mmx in the path, check whether the assembler
  1856. # supports it, and remove if not.
  1857. #
  1858. # We only need this in ABI=32, for ABI=64 on x86_64 we can assume a new
  1859. # enough assembler.
  1860. #
  1861. case $host in
  1862.   X86_PATTERN | X86_64_PATTERN)
  1863.     if test "$ABI" = 32; then
  1864.       case "$path $fat_path" in
  1865.         *mmx*)   GMP_ASM_X86_MMX( , [GMP_STRIP_PATH(*mmx*)]) ;;
  1866.       esac
  1867.       case "$path $fat_path" in
  1868.         *sse2*)  GMP_ASM_X86_SSE2( , [GMP_STRIP_PATH(sse2)]) ;;
  1869.       esac
  1870.     fi
  1871.     ;;
  1872. esac
  1873. cat >&AC_FD_CC <<EOF
  1874. Decided:
  1875. ABI=$ABI
  1876. CC=$CC
  1877. CFLAGS=$CFLAGS
  1878. CPPFLAGS=$CPPFLAGS
  1879. GMP_LDFLAGS=$GMP_LDFLAGS
  1880. CXX=$CXX
  1881. CXXFLAGS=$CXXFLAGS
  1882. path=$path
  1883. EOF
  1884. echo "using ABI="$ABI""
  1885. echo "      CC="$CC""
  1886. echo "      CFLAGS="$CFLAGS""
  1887. echo "      CPPFLAGS="$CPPFLAGS""
  1888. if test $want_cxx = yes; then
  1889.   echo "      CXX="$CXX""
  1890.   echo "      CXXFLAGS="$CXXFLAGS""
  1891. fi
  1892. echo "      MPN_PATH="$path""
  1893. # Automake ansi2knr support.
  1894. AM_C_PROTOTYPES
  1895. CL_AS_NOEXECSTACK
  1896. GMP_PROG_AR
  1897. GMP_PROG_NM
  1898. case $host in
  1899.   # FIXME: On AIX 3 and 4, $libname.a is included in libtool
  1900.   # $library_names_spec, so libgmp.a becomes a symlink to libgmp.so, making
  1901.   # it impossible to build shared and static libraries simultaneously.
  1902.   # Disable shared libraries by default, but let the user override with
  1903.   # --enable-shared --disable-static.
  1904.   #
  1905.   # FIXME: This $libname.a problem looks like it might apply to *-*-amigaos*
  1906.   # and *-*-os2* too, but wait for someone to test this before worrying
  1907.   # about it.  If there is a problem then of course libtool is the right
  1908.   # place to fix it.
  1909.   #
  1910.   [*-*-aix[34]*])
  1911.     if test -z "$enable_shared"; then enable_shared=no; fi ;;
  1912. esac
  1913. # Configs for Windows DLLs.
  1914. AC_LIBTOOL_WIN32_DLL
  1915. AC_SUBST(LIBGMP_DLL,0)
  1916. case $host in
  1917.   *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
  1918.     # By default, build only static.
  1919.     if test -z "$enable_shared"; then
  1920.       enable_shared=no
  1921.     fi
  1922.     # Don't allow both static and DLL.
  1923.     if test "$enable_shared" != no && test "$enable_static" != no; then
  1924.       AC_MSG_ERROR([cannot build both static and DLL, since gmp.h is different for each.
  1925. Use "--disable-static --enable-shared" to build just a DLL.])
  1926.     fi
  1927.     # "-no-undefined" is required when building a DLL, see documentation on
  1928.     # AC_LIBTOOL_WIN32_DLL.
  1929.     #
  1930.     # "-Wl,--export-all-symbols" is a bit of a hack, it gets all libgmp and
  1931.     # libgmpxx functions and variables exported.  This is what libtool did
  1932.     # in the past, and it's convenient for us in the test programs.
  1933.     #
  1934.     # Maybe it'd be prudent to check for --export-all-symbols before using
  1935.     # it, but it seems to have been in ld since at least 2000, and there's
  1936.     # not really any alternative we want to take up at the moment.
  1937.     #
  1938.     # "-Wl,output-def" is used to get a .def file for use by MS lib to make
  1939.     # a .lib import library, described in the manual.  libgmp-3.dll.def
  1940.     # corresponds to the libmp-3.dll.def generated by libtool (as a result
  1941.     # of -export-symbols on that library).
  1942.     #
  1943.     # Incidentally, libtool does generate an import library libgmp.dll.a,
  1944.     # but it's "ar" format and cannot be used by the MS linker.  There
  1945.     # doesn't seem to be any GNU tool for generating or converting to .lib.
  1946.     #
  1947.     # FIXME: The .def files produced by -Wl,output-def include isascii,
  1948.     # iscsym, iscsymf and toascii, apparently because mingw ctype.h doesn't
  1949.     # inline isascii (used in gmp).  It gives an extern inline for
  1950.     # __isascii, but for some reason not the plain isascii.
  1951.     #
  1952.     if test "$enable_shared" = yes; then
  1953.       GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols"
  1954.       LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def"
  1955.       LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def"
  1956.       LIBGMP_DLL=1
  1957.     fi
  1958.     ;;
  1959. esac
  1960. # Ensure that $CONFIG_SHELL is available for AC_LIBTOOL_SYS_MAX_CMD_LEN.
  1961. # It's often set already by _LT_AC_PROG_ECHO_BACKSLASH or
  1962. # _AS_LINENO_PREPARE, but not always.
  1963. #
  1964. # The symptom of CONFIG_SHELL unset is some "expr" errors during the test,
  1965. # and an empty result.  This only happens when invoked as "sh configure",
  1966. # ie. no path, and can be seen for instance on ia64-*-hpux*.
  1967. #
  1968. # FIXME: Newer libtool should have it's own fix for this.
  1969. #
  1970. if test -z "$CONFIG_SHELL"; then
  1971.   CONFIG_SHELL=$SHELL
  1972. fi
  1973. # Enable CXX in libtool only if we want it, and never enable GCJ, nor RC on
  1974. # mingw and cygwin.  Under --disable-cxx this avoids some error messages
  1975. # from libtool arising from the fact we didn't actually run AC_PROG_CXX.
  1976. # Notice that any user-supplied --with-tags setting takes precedence.
  1977. #
  1978. # FIXME: Is this the right way to get this effect?  Very possibly not, but
  1979. # the current _LT_AC_TAGCONFIG doesn't really suggest an alternative.
  1980. #
  1981. if test "${with_tags+set}" != set; then
  1982.   if test $want_cxx = yes; then
  1983.     with_tags=CXX
  1984.   else
  1985.     with_tags=
  1986.   fi
  1987. fi
  1988. # The dead hand of AC_REQUIRE makes AC_PROG_LIBTOOL expand and execute
  1989. # AC_PROG_F77, even when F77 is not in the selected with_tags.  This is
  1990. # probably harmless, but it's unsightly and bloats our configure, so pretend
  1991. # AC_PROG_F77 has been expanded already.
  1992. #
  1993. # FIXME: Rumour has it libtool will one day provide a way for a configure.in
  1994. # to say what it wants from among supported languages etc.
  1995. #
  1996. AC_PROVIDE([AC_PROG_F77])
  1997. AC_PROG_LIBTOOL
  1998. # Generate an error here if attempting to build both shared and static when
  1999. # $libname.a is in $library_names_spec (as mentioned above), rather than
  2000. # wait for ar or ld to fail.
  2001. #
  2002. if test "$enable_shared" = yes && test "$enable_static" = yes; then
  2003.   case $library_names_spec in
  2004.     *libname.a*)
  2005.       AC_MSG_ERROR([cannot create both shared and static libraries on this system, --disable one of the two])
  2006.       ;;
  2007.   esac
  2008. fi
  2009. AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes)
  2010. # Many of these library and header checks are for the benefit of
  2011. # supplementary programs.  libgmp doesn't use anything too weird.
  2012. AC_HEADER_STDC
  2013. AC_HEADER_TIME
  2014. # Reasons for testing:
  2015. #   float.h - not in SunOS bundled cc
  2016. #   invent.h - IRIX specific
  2017. #   langinfo.h - X/Open standard only, not in djgpp for instance
  2018. #   locale.h - old systems won't have this
  2019. #   nl_types.h - X/Open standard only, not in djgpp for instance
  2020. #       (usually langinfo.h gives nl_item etc, but not on netbsd 1.4.1)
  2021. #   sys/attributes.h - IRIX specific
  2022. #   sys/iograph.h - IRIX specific
  2023. #   sys/mman.h - not in Cray Unicos
  2024. #   sys/param.h - not in mingw
  2025. #   sys/processor.h - solaris specific, though also present in macos
  2026. #   sys/pstat.h - HPUX specific
  2027. #   sys/resource.h - not in mingw
  2028. #   sys/sysctl.h - not in mingw
  2029. #   sys/sysinfo.h - OSF specific
  2030. #   sys/syssgi.h - IRIX specific
  2031. #   sys/systemcfg.h - AIX specific
  2032. #   sys/time.h - autoconf suggests testing, don't know anywhere without it
  2033. #   sys/times.h - not in mingw
  2034. #   machine/hal_sysinfo.h - OSF specific
  2035. #
  2036. # inttypes.h, stdint.h, unistd.h and sys/types.h are already in the autoconf
  2037. # default tests
  2038. #
  2039. AC_CHECK_HEADERS(fcntl.h float.h invent.h langinfo.h locale.h nl_types.h sys/attributes.h sys/iograph.h sys/mman.h sys/param.h sys/processor.h sys/pstat.h sys/sysinfo.h sys/syssgi.h sys/systemcfg.h sys/time.h sys/times.h)
  2040. # On SunOS, sys/resource.h needs sys/time.h (for struct timeval)
  2041. AC_CHECK_HEADERS(sys/resource.h,,,
  2042. [#if TIME_WITH_SYS_TIME
  2043. # include <sys/time.h>
  2044. # include <time.h>
  2045. #else
  2046. # if HAVE_SYS_TIME_H
  2047. #  include <sys/time.h>
  2048. # else
  2049. #  include <time.h>
  2050. # endif
  2051. #endif])
  2052. # On NetBSD and OpenBSD, sys/sysctl.h needs sys/param.h for various constants
  2053. AC_CHECK_HEADERS(sys/sysctl.h,,,
  2054. [#if HAVE_SYS_PARAM_H
  2055. # include <sys/param.h>
  2056. #endif])
  2057. # On OSF 4.0, <machine/hal_sysinfo.h> must have <sys/sysinfo.h> for ulong_t
  2058. AC_CHECK_HEADERS(machine/hal_sysinfo.h,,,
  2059. [#if HAVE_SYS_SYSINFO_H
  2060. # include <sys/sysinfo.h>
  2061. #endif])
  2062. # Reasons for testing:
  2063. #   optarg - not declared in mingw
  2064. #   fgetc, fscanf, ungetc, vfprintf - not declared in SunOS 4
  2065. #   sys_errlist, sys_nerr - not declared in SunOS 4
  2066. #
  2067. # optarg should be in unistd.h and the rest in stdio.h, both of which are
  2068. # in the autoconf default includes.
  2069. #
  2070. # sys_errlist and sys_nerr are supposed to be in <errno.h> on SunOS according
  2071. # to the man page (but aren't), in glibc they're in stdio.h.
  2072. #
  2073. AC_CHECK_DECLS([fgetc, fscanf, optarg, ungetc, vfprintf])
  2074. AC_CHECK_DECLS([sys_errlist, sys_nerr], , ,
  2075. [#include <stdio.h>
  2076. #include <errno.h>])
  2077. AC_TYPE_SIGNAL
  2078. # Reasons for testing:
  2079. #   intmax_t       - C99
  2080. #   long double    - not in the HP bundled K&R cc
  2081. #   long long      - only in reasonably recent compilers
  2082. #   ptrdiff_t      - seems to be everywhere, maybe don't need to check this
  2083. #   quad_t         - BSD specific
  2084. #   uint_least32_t - C99
  2085. #
  2086. # the default includes are sufficient for all these types
  2087. #
  2088. AC_CHECK_TYPES([intmax_t, long double, long long, ptrdiff_t, quad_t,
  2089. uint_least32_t, intptr_t])
  2090. AC_C_STRINGIZE
  2091. # FIXME: Really want #ifndef __cplusplus around the #define volatile
  2092. # replacement autoconf gives, since volatile is always available in C++.
  2093. # But we don't use it in C++ currently.
  2094. AC_C_VOLATILE
  2095. AC_C_RESTRICT
  2096. GMP_C_STDARG
  2097. GMP_C_ATTRIBUTE_CONST
  2098. GMP_C_ATTRIBUTE_MALLOC
  2099. GMP_C_ATTRIBUTE_MODE
  2100. GMP_C_ATTRIBUTE_NORETURN
  2101. GMP_H_EXTERN_INLINE
  2102. # from libtool
  2103. AC_CHECK_LIBM
  2104. AC_SUBST(LIBM)
  2105. GMP_FUNC_ALLOCA
  2106. GMP_OPTION_ALLOCA
  2107. GMP_H_HAVE_FILE
  2108. AC_C_BIGENDIAN(
  2109.   [AC_DEFINE(HAVE_LIMB_BIG_ENDIAN, 1)
  2110.    GMP_DEFINE_RAW("define_not_for_expansion(`HAVE_LIMB_BIG_ENDIAN')", POST)],
  2111.   [AC_DEFINE(HAVE_LIMB_LITTLE_ENDIAN, 1)
  2112.    GMP_DEFINE_RAW("define_not_for_expansion(`HAVE_LIMB_LITTLE_ENDIAN')", POST)
  2113.   ], [:])
  2114. AH_VERBATIM([HAVE_LIMB],
  2115. [/* Define one of these to 1 for the endianness of `mp_limb_t'.
  2116.    If the endianness is not a simple big or little, or you don't know what
  2117.    it is, then leave both undefined. */
  2118. #undef HAVE_LIMB_BIG_ENDIAN
  2119. #undef HAVE_LIMB_LITTLE_ENDIAN])
  2120. GMP_C_DOUBLE_FORMAT
  2121. # Reasons for testing:
  2122. #   alarm - not in mingw
  2123. #   attr_get - IRIX specific
  2124. #   clock_gettime - not in glibc 2.2.4, only very recent systems
  2125. #   cputime - not in glibc
  2126. #   getsysinfo - OSF specific
  2127. #   getrusage - not in mingw
  2128. #   gettimeofday - not in mingw
  2129. #   mmap - not in mingw, djgpp
  2130. #   nl_langinfo - X/Open standard only, not in djgpp for instance
  2131. #   obstack_vprintf - glibc specific
  2132. #   processor_info - solaris specific
  2133. #   pstat_getprocessor - HPUX specific (10.x and up)
  2134. #   raise - an ANSI-ism, though probably almost universal by now
  2135. #   read_real_time - AIX specific
  2136. #   sigaction - not in mingw
  2137. #   sigaltstack - not in mingw, or old AIX (reputedly)
  2138. #   sigstack - not in mingw
  2139. #   strerror - not in SunOS
  2140. #   strnlen - glibc extension (some other systems too)
  2141. #   syssgi - IRIX specific
  2142. #   times - not in mingw
  2143. #
  2144. # clock_gettime is in librt on *-*-osf5.1.  We could look for it
  2145. # there, but that's not worth bothering with unless it has a decent
  2146. # resolution (in a quick test clock_getres said only 1 millisecond).
  2147. #
  2148. # AC_FUNC_STRNLEN is not used because we don't want the AC_LIBOBJ
  2149. # replacement setups it gives.  It detects a faulty strnlen on AIX, but
  2150. # missing out on that test is ok since our only use of strnlen is in
  2151. # __gmp_replacement_vsnprintf which is not required on AIX since it has a
  2152. # vsnprintf.
  2153. #
  2154. AC_CHECK_FUNCS(alarm attr_get clock clock_gettime cputime getpagesize getrusage gettimeofday getsysinfo localeconv memset mmap mprotect nl_langinfo obstack_vprintf popen processor_info pstat_getprocessor raise read_real_time sigaction sigaltstack sigstack syssgi strchr strerror strnlen strtol strtoul sysconf sysctl sysctlbyname times)
  2155. GMP_FUNC_VSNPRINTF
  2156. GMP_FUNC_SSCANF_WRITABLE_INPUT
  2157. # Reasons for checking:
  2158. #   pst_processor psp_iticksperclktick - not in hpux 9
  2159. #
  2160. AC_CHECK_MEMBER(struct pst_processor.psp_iticksperclktick,
  2161.                 [AC_DEFINE(HAVE_PSP_ITICKSPERCLKTICK, 1,
  2162. [Define to 1 if <sys/pstat.h> `struct pst_processor' exists
  2163. and contains `psp_iticksperclktick'.])],,
  2164.                 [#include <sys/pstat.h>])
  2165. # C++ tests, when required
  2166. #
  2167. if test $enable_cxx = yes; then
  2168.   AC_LANG_PUSH(C++)
  2169.   # Reasons for testing:
  2170.   #   <sstream> - not in g++ 2.95.2
  2171.   #   std::locale - not in g++ 2.95.4
  2172.   #
  2173.   AC_CHECK_HEADERS([sstream])
  2174.   AC_CHECK_TYPES([std::locale],,,[#include <locale>])
  2175.   AC_LANG_POP(C++)
  2176. fi
  2177. # Pick the correct source files in $path and link them to mpn/.
  2178. # $gmp_mpn_functions lists all functions we need.
  2179. #
  2180. # The rule is to find a file with the function name and a .asm, .S,
  2181. # .s, or .c extension.  Certain multi-function files with special names
  2182. # can provide some functions too.  (mpn/Makefile.am passes
  2183. # -DOPERATION_<func> to get them to generate the right code.)
  2184. # Note: $gmp_mpn_functions must have mod_1 before pre_mod_1 so the former
  2185. #       can optionally provide the latter as an extra entrypoint.  Likewise
  2186. #       divrem_1 and pre_divrem_1.
  2187. gmp_mpn_functions_optional="umul udiv
  2188.   invert_limb sqr_diagonal
  2189.   mul_2 mul_3 mul_4
  2190.   addmul_2 addmul_3 addmul_4 addmul_5 addmul_6 addmul_7 addmul_8
  2191.   addlsh1_n sublsh1_n rsblsh1_n rsh1add_n rsh1sub_n
  2192.   addlsh2_n sublsh2_n rsblsh2_n
  2193.   addlsh_n sublsh_n rsblsh_n
  2194.   add_n_sub_n addaddmul_1msb0"
  2195. gmp_mpn_functions="$extra_functions    
  2196.   add add_1 add_n sub sub_1 sub_n neg com mul_1 addmul_1    
  2197.   submul_1 lshift rshift dive_1 diveby3 divis divrem divrem_1 divrem_2     
  2198.   fib2_ui mod_1 mod_34lsub1 mode1o pre_divrem_1 pre_mod_1 dump    
  2199.   mod_1_1 mod_1_2 mod_1_3 mod_1_4 lshiftc    
  2200.   mul mul_fft mul_n sqr mul_basecase sqr_basecase nussbaumer_mul    
  2201.   random random2 pow_1    
  2202.   rootrem sqrtrem get_str set_str scan0 scan1 popcount hamdist cmp    
  2203.   perfsqr perfpow    
  2204.   gcd_1 gcd gcdext_1 gcdext gcd_lehmer gcd_subdiv_step    
  2205.   gcdext_lehmer gcdext_subdiv_step    
  2206.   div_q tdiv_qr jacbase get_d    
  2207.   matrix22_mul hgcd2 hgcd mullo_n mullo_basecase    
  2208.   toom22_mul toom32_mul toom42_mul toom52_mul toom62_mul    
  2209.   toom33_mul toom43_mul toom53_mul toom63_mul    
  2210.   toom44_mul    
  2211.   toom6h_mul toom6_sqr toom8h_mul toom8_sqr    
  2212.   toom_couple_handling    
  2213.   toom2_sqr toom3_sqr toom4_sqr    
  2214.   toom_eval_dgr3_pm1 toom_eval_dgr3_pm2     
  2215.   toom_eval_pm1 toom_eval_pm2 toom_eval_pm2exp toom_eval_pm2rexp    
  2216.   toom_interpolate_5pts toom_interpolate_6pts toom_interpolate_7pts    
  2217.   toom_interpolate_8pts toom_interpolate_12pts toom_interpolate_16pts    
  2218.   invertappr invert binvert mulmod_bnm1 sqrmod_bnm1    
  2219.   sbpi1_div_q sbpi1_div_qr sbpi1_divappr_q    
  2220.   dcpi1_div_q dcpi1_div_qr dcpi1_divappr_q    
  2221.   mu_div_qr mu_divappr_q mu_div_q    
  2222.   bdiv_q_1    
  2223.   sbpi1_bdiv_q sbpi1_bdiv_qr    
  2224.   dcpi1_bdiv_q dcpi1_bdiv_qr    
  2225.   mu_bdiv_q mu_bdiv_qr    
  2226.   bdiv_q bdiv_qr    
  2227.   divexact bdiv_dbm1c redc_1 redc_2 redc_n powm powlo powm_sec subcnd_n    
  2228.   redc_1_sec trialdiv remove    
  2229.   and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n    
  2230.   copyi copyd zero    
  2231.   $gmp_mpn_functions_optional"
  2232. define(GMP_MULFUNC_CHOICES,
  2233. [# functions that can be provided by multi-function files
  2234. tmp_mulfunc=
  2235. case $tmp_fn in
  2236.   add_n|sub_n)       tmp_mulfunc="aors_n"    ;;
  2237.   addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;;
  2238.   popcount|hamdist)  tmp_mulfunc="popham"    ;;
  2239.   and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n)
  2240.                      tmp_mulfunc="logops_n"  ;;
  2241.   lshift|rshift)     tmp_mulfunc="lorrshift";;
  2242.   addlsh1_n)
  2243.      tmp_mulfunc="aorslsh1_n aorrlsh1_n";;
  2244.   sublsh1_n)
  2245.      tmp_mulfunc="aorslsh1_n sorrlsh1_n";;
  2246.   rsblsh1_n)
  2247.      tmp_mulfunc="aorrlsh1_n sorrlsh1_n";;
  2248.   addlsh2_n)
  2249.      tmp_mulfunc="aorslsh2_n aorrlsh2_n";;
  2250.   sublsh2_n)
  2251.      tmp_mulfunc="aorslsh2_n sorrlsh2_n";;
  2252.   rsblsh2_n)
  2253.      tmp_mulfunc="aorrlsh2_n sorrlsh2_n";;
  2254.   addlsh_n)
  2255.      tmp_mulfunc="aorslsh_n aorrlsh_n";;
  2256.   sublsh_n)
  2257.      tmp_mulfunc="aorslsh_n sorrlsh_n";;
  2258.   rsblsh_n)
  2259.      tmp_mulfunc="aorrlsh_n sorrlsh_n";;
  2260.   rsh1add_n|rsh1sub_n)
  2261.      tmp_mulfunc="rsh1aors_n";;
  2262. esac
  2263. ])
  2264. # the list of all object files used by mpn/Makefile.in and the
  2265. # top-level Makefile.in, respectively
  2266. mpn_objects=
  2267. mpn_objs_in_libgmp=
  2268. # links from the sources, to be removed by "make distclean"
  2269. gmp_srclinks=
  2270. # mpn_relative_top_srcdir is $top_srcdir, but for use from within the mpn
  2271. # build directory.  If $srcdir is relative then we use a relative path too,
  2272. # so the two trees can be moved together.
  2273. case $srcdir in
  2274.   [[\/]* | ?:[\/]*])  # absolute, as per autoconf
  2275.     mpn_relative_top_srcdir=$srcdir ;;
  2276.   *)                    # relative
  2277.     mpn_relative_top_srcdir=../$srcdir ;;
  2278. esac
  2279. define(MPN_SUFFIXES,[asm S s c])
  2280. dnl  Usage: GMP_FILE_TO_FUNCTION_BASE(func,file)
  2281. dnl
  2282. dnl  Set $func to the function base name for $file, eg. dive_1 gives
  2283. dnl  divexact_1.
  2284. dnl
  2285. define(GMP_FILE_TO_FUNCTION,
  2286. [case $$2 in
  2287.   dive_1) $1=divexact_1 ;;
  2288.   diveby3) $1=divexact_by3c ;;
  2289.   pre_divrem_1) $1=preinv_divrem_1 ;;
  2290.   mode1o) $1=modexact_1c_odd ;;
  2291.   pre_mod_1) $1=preinv_mod_1 ;;
  2292.   *) $1=$$2 ;;
  2293. esac
  2294. ])
  2295. # Fat binary setups.
  2296. #
  2297. # We proceed through each $fat_path directory, and look for $fat_function
  2298. # routines there.  Those found are incorporated in the build by generating a
  2299. # little mpn/<foo>.asm or mpn/<foo>.c file in the build directory, with
  2300. # suitable function renaming, and adding that to $mpn_objects (the same as a
  2301. # normal mpn file).
  2302. #
  2303. # fat.h is generated with macros to let internal calls to each $fat_function
  2304. # go directly through __gmpn_cpuvec, plus macros and declarations helping to
  2305. # setup that structure, on a per-directory basis ready for
  2306. # mpn/<cpu>/fat/fat.c.
  2307. #
  2308. # fat.h includes thresholds listed in $fat_thresholds, extracted from
  2309. # gmp-mparam.h in each directory.  An overall maximum for each threshold is
  2310. # established, for use in making fixed size arrays of temporary space.
  2311. # (Eg. MUL_TOOM33_THRESHOLD_LIMIT used by mpn/generic/mul.c.)
  2312. #
  2313. # It'd be possible to do some of this manually, but when there's more than a
  2314. # few functions and a few directories it becomes very tedious, and very
  2315. # prone to having some routine accidentally omitted.  On that basis it seems
  2316. # best to automate as much as possible, even if the code to do so is a bit
  2317. # ugly.
  2318. #
  2319. if test -n "$fat_path"; then
  2320.   # Usually the mpn build directory is created with mpn/Makefile
  2321.   # instantiation, but we want to write to it sooner.
  2322.   mkdir mpn 2>/dev/null
  2323.   echo "/* fat.h - setups for fat binaries." >fat.h
  2324.   echo "   Generated by configure - DO NOT EDIT.  */" >>fat.h
  2325.   AC_DEFINE(WANT_FAT_BINARY, 1, [Define to 1 when building a fat binary.])
  2326.   GMP_DEFINE(WANT_FAT_BINARY, yes)
  2327.   # Don't want normal copies of fat functions
  2328.   for tmp_fn in $fat_functions; do
  2329.     GMP_REMOVE_FROM_LIST(gmp_mpn_functions, $tmp_fn)
  2330.     GMP_REMOVE_FROM_LIST(gmp_mpn_functions_optional, $tmp_fn)
  2331.   done
  2332.   for tmp_fn in $fat_functions; do
  2333.     GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
  2334.     echo "
  2335. #ifndef OPERATION_$tmp_fn
  2336. #undef  mpn_$tmp_fbase
  2337. #define mpn_$tmp_fbase  (*__gmpn_cpuvec.$tmp_fbase)
  2338. #endif
  2339. DECL_$tmp_fbase (__MPN(${tmp_fbase}_init));" >>fat.h
  2340.     # encourage various macros to use fat functions
  2341.     AC_DEFINE_UNQUOTED(HAVE_NATIVE_$tmp_fbase)
  2342.   done
  2343.   echo "" >>fat.h
  2344.   echo "/* variable thresholds */" >>fat.h
  2345.   for tmp_tn in $fat_thresholds; do
  2346.     echo "#undef  $tmp_tn" >>fat.h
  2347.     echo "#define $tmp_tn  CPUVEC_THRESHOLD (`echo $tmp_tn | tr A-Z a-z`)" >>fat.h
  2348.   done
  2349.   echo "
  2350. /* Copy all fields into __gmpn_cpuvec.
  2351.    memcpy is not used because it might operate byte-wise (depending on its
  2352.    implementation), and we need the function pointer writes to be atomic.
  2353.    "volatile" discourages the compiler from trying to optimize this.  */
  2354. #define CPUVEC_INSTALL(vec) \
  2355.   do { \
  2356.     volatile struct cpuvec_t *p = &__gmpn_cpuvec; \" >>fat.h
  2357.   for tmp_fn in $fat_functions; do
  2358.     GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
  2359.     echo "    p->$tmp_fbase = vec.$tmp_fbase; \" >>fat.h
  2360.   done
  2361.   for tmp_tn in $fat_thresholds; do
  2362.     tmp_field_name=`echo $tmp_tn | tr A-Z a-z`
  2363.     echo "    p->$tmp_field_name = vec.$tmp_field_name; \" >>fat.h
  2364.   done
  2365.   echo "  } while (0)" >>fat.h
  2366.   echo "
  2367. /* A helper to check all fields are filled. */
  2368. #define ASSERT_CPUVEC(vec) \
  2369.   do { \" >>fat.h
  2370.   for tmp_fn in $fat_functions; do
  2371.     GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
  2372.     echo "    ASSERT (vec.$tmp_fbase != NULL); \" >>fat.h
  2373.   done
  2374.   for tmp_tn in $fat_thresholds; do
  2375.     tmp_field_name=`echo $tmp_tn | tr A-Z a-z`
  2376.     echo "    ASSERT (vec.$tmp_field_name != 0); \" >>fat.h
  2377.   done
  2378.   echo "  } while (0)" >>fat.h
  2379.   echo "
  2380. /* Call ITERATE(field) for each fat threshold field. */
  2381. #define ITERATE_FAT_THRESHOLDS() \
  2382.   do { \" >>fat.h
  2383.   for tmp_tn in $fat_thresholds; do
  2384.     tmp_field_name=`echo $tmp_tn | tr A-Z a-z`
  2385.     echo "    ITERATE ($tmp_tn, $tmp_field_name); \" >>fat.h
  2386.   done
  2387.   echo "  } while (0)" >>fat.h
  2388.   for tmp_dir in $fat_path; do
  2389.     CPUVEC_SETUP=
  2390.     THRESH_ASM_SETUP=
  2391.     echo "" >>fat.h
  2392.     GMP_FAT_SUFFIX(tmp_suffix, $tmp_dir)
  2393.     # In order to keep names unique on a DOS 8.3 filesystem, use a prefix
  2394.     # (rather than a suffix) for the generated file names, and abbreviate.
  2395.     case $tmp_suffix in
  2396.       pentium)       tmp_prefix=p   ;;
  2397.       pentium_mmx)   tmp_prefix=pm  ;;
  2398.       p6_mmx)        tmp_prefix=p2  ;;
  2399.       p6_p3mmx)      tmp_prefix=p3  ;;
  2400.       pentium4)      tmp_prefix=p4  ;;
  2401.       pentium4_mmx)  tmp_prefix=p4m ;;
  2402.       pentium4_sse2) tmp_prefix=p4s ;;
  2403.       k6_mmx)        tmp_prefix=k6m ;;
  2404.       k6_k62mmx)     tmp_prefix=k62 ;;
  2405.       k7_mmx)        tmp_prefix=k7m ;;
  2406.       *)             tmp_prefix=$tmp_suffix ;;
  2407.     esac
  2408.     # Extract desired thresholds from gmp-mparam.h file in this directory,
  2409.     # if present.
  2410.     tmp_mparam=$srcdir/mpn/$tmp_dir/gmp-mparam.h
  2411.     if test -f $tmp_mparam; then
  2412.       for tmp_tn in $fat_thresholds; do
  2413.         tmp_thresh=`sed -n "s/^#define $tmp_tn[  ]*\([0-9][0-9]*\).*$/\1/p" $tmp_mparam`
  2414.         if test -n "$tmp_thresh"; then
  2415.           THRESH_ASM_SETUP=["${THRESH_ASM_SETUP}define($tmp_tn,$tmp_thresh)
  2416. "]
  2417.           CPUVEC_SETUP="$CPUVEC_SETUP    decided_cpuvec.`echo $tmp_tn | tr A-Z a-z` = $tmp_thresh; \
  2418. "
  2419.           eval tmp_limit=$${tmp_tn}_LIMIT
  2420.           if test -z "$tmp_limit"; then
  2421.             tmp_limit=0
  2422.           fi
  2423.           if test $tmp_thresh -gt $tmp_limit; then
  2424.             eval ${tmp_tn}_LIMIT=$tmp_thresh
  2425.           fi
  2426.         fi
  2427.       done
  2428.     fi
  2429.     for tmp_fn in $fat_functions; do
  2430.       GMP_MULFUNC_CHOICES
  2431.       for tmp_base in $tmp_fn $tmp_mulfunc; do
  2432.         for tmp_ext in MPN_SUFFIXES; do
  2433.           tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext
  2434.           if test -f $tmp_file; then
  2435.             mpn_objects="$mpn_objects ${tmp_prefix}_$tmp_fn.lo"
  2436.             mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_prefix}_$tmp_fn.lo"
  2437.             GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
  2438.             # carry-in variant, eg. divrem_1c or modexact_1c_odd
  2439.             case $tmp_fbase in
  2440.               *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;;
  2441.               *)    tmp_fbasec=${tmp_fbase}c ;;
  2442.             esac
  2443.             # Create a little file doing an include from srcdir.  The
  2444.             # OPERATION and renamings aren't all needed all the time, but
  2445.             # they don't hurt if unused.
  2446.             #
  2447.             # FIXME: Should generate these via config.status commands.
  2448.             # Would need them all in one AC_CONFIG_COMMANDS though, since
  2449.             # that macro doesn't accept a set of separate commands generated
  2450.             # by shell code.
  2451.             #
  2452.             case $tmp_ext in
  2453.               asm)
  2454.                 # hide the d-n-l from autoconf's error checking
  2455.                 tmp_d_n_l=d""nl
  2456.                 echo ["$tmp_d_n_l  mpn_$tmp_fbase - from $tmp_dir directory for fat binary.
  2457. $tmp_d_n_l  Generated by configure - DO NOT EDIT.
  2458. define(OPERATION_$tmp_fn)
  2459. define(__gmpn_$tmp_fbase, __gmpn_${tmp_fbase}_$tmp_suffix)
  2460. define(__gmpn_$tmp_fbasec,__gmpn_${tmp_fbasec}_${tmp_suffix})
  2461. define(__gmpn_preinv_${tmp_fbase},__gmpn_preinv_${tmp_fbase}_${tmp_suffix})
  2462. $tmp_d_n_l  For k6 and k7 gcd_1 calling their corresponding mpn_modexact_1_odd
  2463. ifdef(`__gmpn_modexact_1_odd',,
  2464. `define(__gmpn_modexact_1_odd,__gmpn_modexact_1_odd_${tmp_suffix})')
  2465. $THRESH_ASM_SETUP
  2466. include][($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm)
  2467. "] >mpn/${tmp_prefix}_$tmp_fn.asm
  2468.                 ;;
  2469.               c)
  2470.                 echo ["/* mpn_$tmp_fbase - from $tmp_dir directory for fat binary.
  2471.    Generated by configure - DO NOT EDIT. */
  2472. #define OPERATION_$tmp_fn 1
  2473. #define __gmpn_$tmp_fbase           __gmpn_${tmp_fbase}_$tmp_suffix
  2474. #define __gmpn_$tmp_fbasec          __gmpn_${tmp_fbasec}_${tmp_suffix}
  2475. #define __gmpn_preinv_${tmp_fbase}  __gmpn_preinv_${tmp_fbase}_${tmp_suffix}
  2476. #include "$mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.c"
  2477. "] >mpn/${tmp_prefix}_$tmp_fn.c
  2478.                 ;;
  2479.             esac
  2480.             # Prototype, and append to CPUVEC_SETUP for this directory.
  2481.             echo "DECL_$tmp_fbase (__gmpn_${tmp_fbase}_$tmp_suffix);" >>fat.h
  2482.             CPUVEC_SETUP="$CPUVEC_SETUP    decided_cpuvec.$tmp_fbase = __gmpn_${tmp_fbase}_${tmp_suffix}; \
  2483. "
  2484.             # Ditto for any preinv variant (preinv_divrem_1, preinv_mod_1).
  2485.             if grep "^PROLOGUE(mpn_preinv_$tmp_fn)" $tmp_file >/dev/null; then
  2486.               echo "DECL_preinv_$tmp_fbase (__gmpn_preinv_${tmp_fbase}_$tmp_suffix);" >>fat.h
  2487.               CPUVEC_SETUP="$CPUVEC_SETUP    decided_cpuvec.preinv_$tmp_fbase = __gmpn_preinv_${tmp_fbase}_${tmp_suffix}; \
  2488. "
  2489.             fi
  2490.           fi
  2491.         done
  2492.       done
  2493.     done
  2494.     # Emit CPUVEC_SETUP for this directory
  2495.     echo "" >>fat.h
  2496.     echo "#define CPUVEC_SETUP_$tmp_suffix \" >>fat.h
  2497.     echo "  do { \" >>fat.h
  2498.     echo "$CPUVEC_SETUP  } while (0)" >>fat.h
  2499.   done
  2500.   # Emit threshold limits
  2501.   echo "" >>fat.h
  2502.   for tmp_tn in $fat_thresholds; do
  2503.     eval tmp_limit=$${tmp_tn}_LIMIT
  2504.     echo "#define ${tmp_tn}_LIMIT  $tmp_limit" >>fat.h
  2505.   done
  2506. fi
  2507. # Normal binary setups.
  2508. #
  2509. for tmp_ext in MPN_SUFFIXES; do
  2510.   eval found_$tmp_ext=no
  2511. done
  2512. for tmp_fn in $gmp_mpn_functions; do
  2513.   for tmp_ext in MPN_SUFFIXES; do
  2514.     test "$no_create" = yes || rm -f mpn/$tmp_fn.$tmp_ext
  2515.   done
  2516.   # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise
  2517.   # mpn_preinv_mod_1 by mod_1.asm.
  2518.   case $tmp_fn in
  2519.   pre_divrem_1)
  2520.     if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;;
  2521.   pre_mod_1)
  2522.     if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;;
  2523.   esac
  2524.   GMP_MULFUNC_CHOICES
  2525.   found=no
  2526.   for tmp_dir in $path; do
  2527.     for tmp_base in $tmp_fn $tmp_mulfunc; do
  2528.       for tmp_ext in MPN_SUFFIXES; do
  2529.         tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext
  2530.         if test -f $tmp_file; then
  2531.           # For a nails build, check if the file supports our nail bits.
  2532.           # Generic code always supports all nails.
  2533.           #
  2534.           # FIXME: When a multi-function file is selected to provide one of
  2535.           # the nails-neutral routines, like logops_n for and_n, the
  2536.           # PROLOGUE grepping will create HAVE_NATIVE_mpn_<foo> defines for
  2537.           # all functions in that file, even if they haven't all been
  2538.           # nailified.  Not sure what to do about this, it's only really a
  2539.           # problem for logops_n, and it's not too terrible to insist those
  2540.           # get nailified always.
  2541.           #
  2542.           if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then
  2543.             case $tmp_fn in
  2544.               and_n | ior_n | xor_n | andn_n | 
  2545.               copyi | copyd | 
  2546.               popcount | hamdist | 
  2547.               udiv | udiv_w_sdiv | umul | 
  2548.               cntlz | invert_limb)
  2549.                 # these operations are either unaffected by nails or defined
  2550.                 # to operate on full limbs
  2551.                 ;;
  2552.               *)
  2553.                 nails=[`sed -n 's/^[  ]*NAILS_SUPPORT((.*))/1/p' $tmp_file `]
  2554.                 for n in $nails; do
  2555.                   case $n in
  2556.                   *-*)
  2557.                     n_start=`echo "$n" | sed -n 's/(.*)-.*/1/p'`
  2558.                     n_end=`echo "$n" | sed -n 's/.*-(.*)/1/p'`
  2559.                     ;;
  2560.                   *)
  2561.                     n_start=$n
  2562.                     n_end=$n
  2563.                     ;;
  2564.                   esac
  2565.                   if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then
  2566.                     found=yes
  2567.                     break
  2568.                   fi
  2569.                 done
  2570.                 if test $found != yes; then
  2571.                   continue
  2572.                 fi
  2573.                 ;;
  2574.             esac
  2575.           fi
  2576.           found=yes
  2577.           eval found_$tmp_ext=yes
  2578.           if test $tmp_ext = c; then
  2579.             tmp_u='$U'
  2580.           else
  2581.             tmp_u=
  2582.           fi
  2583.           mpn_objects="$mpn_objects $tmp_fn$tmp_u.lo"
  2584.           mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/$tmp_fn$tmp_u.lo"
  2585.           AC_CONFIG_LINKS(mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext)
  2586.           gmp_srclinks="$gmp_srclinks mpn/$tmp_fn.$tmp_ext"
  2587.           # Duplicate AC_DEFINEs are harmless, so it doesn't matter
  2588.           # that multi-function files get grepped here repeatedly.
  2589.           # The PROLOGUE pattern excludes the optional second parameter.
  2590.           gmp_ep=[`
  2591.             sed -n 's/^[  ]*MULFUNC_PROLOGUE((.*))/1/p' $tmp_file ;
  2592.             sed -n 's/^[  ]*PROLOGUE(([^,]*).*)/1/p' $tmp_file
  2593.           `]
  2594.           for gmp_tmp in $gmp_ep; do
  2595.             AC_DEFINE_UNQUOTED(HAVE_NATIVE_$gmp_tmp)
  2596.             eval HAVE_NATIVE_$gmp_tmp=yes
  2597.           done
  2598.           case $tmp_fn in
  2599.           sqr_basecase) sqr_basecase_source=$tmp_file ;;
  2600.           esac
  2601.           break
  2602.         fi
  2603.       done
  2604.       if test $found = yes; then break ; fi
  2605.     done
  2606.     if test $found = yes; then break ; fi
  2607.   done
  2608.   if test $found = no; then
  2609.     for tmp_optional in $gmp_mpn_functions_optional; do
  2610.       if test $tmp_optional = $tmp_fn; then
  2611.         found=yes
  2612.       fi
  2613.     done
  2614.     if test $found = no; then
  2615.       AC_MSG_ERROR([no version of $tmp_fn found in path: $path])
  2616.     fi
  2617.   fi
  2618. done
  2619. # All cycle counters are .asm files currently
  2620. if test -n "$SPEED_CYCLECOUNTER_OBJ"; then
  2621.   found_asm=yes
  2622. fi
  2623. dnl  The following list only needs to have templates for those defines which
  2624. dnl  are going to be tested by the code, there's no need to have every
  2625. dnl  possible mpn routine.
  2626. AH_VERBATIM([HAVE_NATIVE],
  2627. [/* Define to 1 each of the following for which a native (ie. CPU specific)
  2628.     implementation of the corresponding routine exists.  */
  2629. #undef HAVE_NATIVE_mpn_add_n
  2630. #undef HAVE_NATIVE_mpn_add_n_sub_n
  2631. #undef HAVE_NATIVE_mpn_add_nc
  2632. #undef HAVE_NATIVE_mpn_addaddmul_1msb0
  2633. #undef HAVE_NATIVE_mpn_addlsh1_n
  2634. #undef HAVE_NATIVE_mpn_addlsh2_n
  2635. #undef HAVE_NATIVE_mpn_addlsh_n
  2636. #undef HAVE_NATIVE_mpn_addmul_1c
  2637. #undef HAVE_NATIVE_mpn_addmul_2
  2638. #undef HAVE_NATIVE_mpn_addmul_3
  2639. #undef HAVE_NATIVE_mpn_addmul_4
  2640. #undef HAVE_NATIVE_mpn_addmul_5
  2641. #undef HAVE_NATIVE_mpn_addmul_6
  2642. #undef HAVE_NATIVE_mpn_addmul_7
  2643. #undef HAVE_NATIVE_mpn_addmul_8
  2644. #undef HAVE_NATIVE_mpn_and_n
  2645. #undef HAVE_NATIVE_mpn_andn_n
  2646. #undef HAVE_NATIVE_mpn_bdiv_dbm1c
  2647. #undef HAVE_NATIVE_mpn_bdiv_q_1
  2648. #undef HAVE_NATIVE_mpn_pi1_bdiv_q_1
  2649. #undef HAVE_NATIVE_mpn_com
  2650. #undef HAVE_NATIVE_mpn_copyd
  2651. #undef HAVE_NATIVE_mpn_copyi
  2652. #undef HAVE_NATIVE_mpn_divexact_1
  2653. #undef HAVE_NATIVE_mpn_divexact_by3c
  2654. #undef HAVE_NATIVE_mpn_divrem_1
  2655. #undef HAVE_NATIVE_mpn_divrem_1c
  2656. #undef HAVE_NATIVE_mpn_divrem_2
  2657. #undef HAVE_NATIVE_mpn_gcd_1
  2658. #undef HAVE_NATIVE_mpn_hamdist
  2659. #undef HAVE_NATIVE_mpn_invert_limb
  2660. #undef HAVE_NATIVE_mpn_ior_n
  2661. #undef HAVE_NATIVE_mpn_iorn_n
  2662. #undef HAVE_NATIVE_mpn_lshift
  2663. #undef HAVE_NATIVE_mpn_lshiftc
  2664. #undef HAVE_NATIVE_mpn_lshsub_n
  2665. #undef HAVE_NATIVE_mpn_mod_1
  2666. #undef HAVE_NATIVE_mpn_mod_1_1p
  2667. #undef HAVE_NATIVE_mpn_mod_1c
  2668. #undef HAVE_NATIVE_mpn_mod_1s_2p
  2669. #undef HAVE_NATIVE_mpn_mod_1s_4p
  2670. #undef HAVE_NATIVE_mpn_mod_34lsub1
  2671. #undef HAVE_NATIVE_mpn_modexact_1_odd
  2672. #undef HAVE_NATIVE_mpn_modexact_1c_odd
  2673. #undef HAVE_NATIVE_mpn_mul_1
  2674. #undef HAVE_NATIVE_mpn_mul_1c
  2675. #undef HAVE_NATIVE_mpn_mul_2
  2676. #undef HAVE_NATIVE_mpn_mul_3
  2677. #undef HAVE_NATIVE_mpn_mul_4
  2678. #undef HAVE_NATIVE_mpn_mul_basecase
  2679. #undef HAVE_NATIVE_mpn_nand_n
  2680. #undef HAVE_NATIVE_mpn_nior_n
  2681. #undef HAVE_NATIVE_mpn_popcount
  2682. #undef HAVE_NATIVE_mpn_preinv_divrem_1
  2683. #undef HAVE_NATIVE_mpn_preinv_mod_1
  2684. #undef HAVE_NATIVE_mpn_redc_1
  2685. #undef HAVE_NATIVE_mpn_redc_2
  2686. #undef HAVE_NATIVE_mpn_rsblsh1_n
  2687. #undef HAVE_NATIVE_mpn_rsblsh2_n
  2688. #undef HAVE_NATIVE_mpn_rsblsh_n
  2689. #undef HAVE_NATIVE_mpn_rsh1add_n
  2690. #undef HAVE_NATIVE_mpn_rsh1add_nc
  2691. #undef HAVE_NATIVE_mpn_rsh1sub_n
  2692. #undef HAVE_NATIVE_mpn_rsh1sub_nc
  2693. #undef HAVE_NATIVE_mpn_rshift
  2694. #undef HAVE_NATIVE_mpn_sqr_basecase
  2695. #undef HAVE_NATIVE_mpn_sqr_diagonal
  2696. #undef HAVE_NATIVE_mpn_sub_n
  2697. #undef HAVE_NATIVE_mpn_sub_nc
  2698. #undef HAVE_NATIVE_mpn_sublsh1_n
  2699. #undef HAVE_NATIVE_mpn_sublsh2_n
  2700. #undef HAVE_NATIVE_mpn_sublsh_n
  2701. #undef HAVE_NATIVE_mpn_submul_1c
  2702. #undef HAVE_NATIVE_mpn_udiv_qrnnd
  2703. #undef HAVE_NATIVE_mpn_udiv_qrnnd_r
  2704. #undef HAVE_NATIVE_mpn_umul_ppmm
  2705. #undef HAVE_NATIVE_mpn_umul_ppmm_r
  2706. #undef HAVE_NATIVE_mpn_xor_n
  2707. #undef HAVE_NATIVE_mpn_xnor_n])
  2708. # Don't demand an m4 unless it's actually needed.
  2709. if test $found_asm = yes; then
  2710.   GMP_PROG_M4
  2711.   GMP_M4_M4WRAP_SPURIOUS
  2712. else
  2713.   M4=m4-not-needed
  2714. fi
  2715. # Only do the GMP_ASM checks if there's a .S or .asm wanting them.
  2716. if test $found_asm = no && test $found_S = no; then
  2717.   gmp_asm_syntax_testing=no
  2718. fi
  2719. if test "$gmp_asm_syntax_testing" != no; then
  2720.   GMP_ASM_TEXT
  2721.   GMP_ASM_DATA
  2722.   GMP_ASM_LABEL_SUFFIX
  2723.   GMP_ASM_GLOBL
  2724.   GMP_ASM_GLOBL_ATTR
  2725.   GMP_ASM_UNDERSCORE
  2726.   GMP_ASM_RODATA
  2727.   GMP_ASM_TYPE
  2728.   GMP_ASM_SIZE
  2729.   GMP_ASM_LSYM_PREFIX
  2730.   GMP_ASM_W32
  2731.   GMP_ASM_ALIGN_LOG
  2732.   case $host in
  2733.     hppa*-*-*)
  2734.       # for both pa32 and pa64
  2735.       GMP_INCLUDE_MPN(pa32/pa-defs.m4)
  2736.       ;;
  2737.     IA64_PATTERN)
  2738.       GMP_ASM_IA64_ALIGN_OK
  2739.       ;;
  2740.     M68K_PATTERN)
  2741.       GMP_ASM_M68K_INSTRUCTION
  2742.       GMP_ASM_M68K_ADDRESSING
  2743.       GMP_ASM_M68K_BRANCHES
  2744.       ;;
  2745.     [powerpc*-*-* | power[3-9]-*-*])
  2746.       GMP_ASM_POWERPC_PIC_ALWAYS
  2747.       GMP_ASM_POWERPC_R_REGISTERS
  2748.       GMP_INCLUDE_MPN(powerpc32/powerpc-defs.m4)
  2749.       case $host in
  2750.         *-*-aix*)
  2751.   case $ABI in
  2752.     64 | aix64)  GMP_INCLUDE_MPN(powerpc64/aix.m4) ;;
  2753.             *)           GMP_INCLUDE_MPN(powerpc32/aix.m4) ;;
  2754.           esac
  2755.           ;;
  2756.         *-*-linux* | *-*-*bsd*)
  2757.   case $ABI in
  2758.     mode64)      GMP_INCLUDE_MPN(powerpc64/elf.m4) ;;
  2759.     mode32 | 32) GMP_INCLUDE_MPN(powerpc32/elf.m4) ;;
  2760.           esac
  2761.           ;;
  2762.         *-*-darwin*)
  2763.   case $ABI in
  2764.     mode64)      GMP_INCLUDE_MPN(powerpc64/darwin.m4) ;;
  2765.     mode32 | 32) GMP_INCLUDE_MPN(powerpc32/darwin.m4) ;;
  2766.           esac
  2767.           ;;
  2768.         *)
  2769.   # Assume unrecognized operating system is the powerpc eABI
  2770.           GMP_INCLUDE_MPN(powerpc32/eabi.m4)
  2771.   ;;
  2772.       esac
  2773.       ;;
  2774.     power*-*-aix*)
  2775.       GMP_INCLUDE_MPN(powerpc32/aix.m4)
  2776.       ;;
  2777.     sparcv9*-*-* | ultrasparc*-*-* | sparc64-*-*)
  2778.       case $ABI in
  2779.         64)
  2780.           GMP_ASM_SPARC_REGISTER
  2781.           ;;
  2782.       esac
  2783.       ;;
  2784.     X86_PATTERN | X86_64_PATTERN)
  2785.       GMP_ASM_ALIGN_FILL_0x90
  2786.       case $ABI in
  2787.         32)
  2788.           GMP_INCLUDE_MPN(x86/x86-defs.m4)
  2789.           AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86)
  2790.           GMP_ASM_COFF_TYPE
  2791.           GMP_ASM_X86_GOT_UNDERSCORE
  2792.           GMP_ASM_X86_SHLDL_CL
  2793.   case $enable_profiling in
  2794.     prof | gprof)  GMP_ASM_X86_MCOUNT ;;
  2795.   esac
  2796.   case $host in
  2797.     *-*-darwin*)
  2798.       GMP_INCLUDE_MPN(x86/darwin.m4) ;;
  2799.   esac
  2800.           ;;
  2801.         64)
  2802.           GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4)
  2803.           AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86_64)
  2804.   case $host in
  2805.     *-*-darwin*)
  2806.       GMP_INCLUDE_MPN(x86_64/darwin.m4) ;;
  2807.   esac
  2808.           ;;
  2809.       esac
  2810.       ;;
  2811.   esac
  2812. fi
  2813. # For --enable-minithres, prepend "minithres" to path so that its special
  2814. # gmp-mparam.h will be used.
  2815. if test $enable_minithres = yes; then
  2816.   path="minithres $path"
  2817. fi
  2818. # Create link for gmp-mparam.h.
  2819. gmp_mparam_source=
  2820. for gmp_mparam_dir in $path; do
  2821.   test "$no_create" = yes || rm -f gmp-mparam.h
  2822.   tmp_file=$srcdir/mpn/$gmp_mparam_dir/gmp-mparam.h
  2823.   if test -f $tmp_file; then
  2824.     AC_CONFIG_LINKS(gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h)
  2825.     gmp_srclinks="$gmp_srclinks gmp-mparam.h"
  2826.     gmp_mparam_source=$tmp_file
  2827.     break
  2828.   fi
  2829. done
  2830. if test -z "$gmp_mparam_source"; then
  2831.   AC_MSG_ERROR([no version of gmp-mparam.h found in path: $path])
  2832. fi
  2833. # For a helpful message from tune/tuneup.c
  2834. gmp_mparam_suggest=$gmp_mparam_source
  2835. if test "$gmp_mparam_dir" = generic; then
  2836.   for i in $path; do break; done
  2837.   if test "$i" != generic; then
  2838.     gmp_mparam_suggest="new file $srcdir/mpn/$i/gmp-mparam.h"
  2839.   fi
  2840. fi
  2841. AC_DEFINE_UNQUOTED(GMP_MPARAM_H_SUGGEST, "$gmp_mparam_source",
  2842. [The gmp-mparam.h file (a string) the tune program should suggest updating.])
  2843. # Copy any SQR_TOOM2_THRESHOLD from gmp-mparam.h to config.m4.
  2844. # Some versions of sqr_basecase.asm use this.
  2845. # Fat binaries do this on a per-file basis, so skip in that case.
  2846. #
  2847. if test -z "$fat_path"; then
  2848.   tmp_gmp_karatsuba_sqr_threshold=`sed -n 's/^#define SQR_TOOM2_THRESHOLD[  ]*([0-9][0-9]*).*$/1/p' $gmp_mparam_source`
  2849.   if test -n "$tmp_gmp_karatsuba_sqr_threshold"; then
  2850.     GMP_DEFINE_RAW(["define(<SQR_TOOM2_THRESHOLD>,<$tmp_gmp_karatsuba_sqr_threshold>)"])
  2851.   fi
  2852. fi
  2853. # Sizes of some types, needed at preprocessing time.
  2854. #
  2855. # FIXME: The assumption that GMP_LIMB_BITS is 8*sizeof(mp_limb_t) might
  2856. # be slightly rash, but it's true everywhere we know of and ought to be true
  2857. # of any sensible system.  In a generic C build, grepping LONG_BIT out of
  2858. # <limits.h> might be an alternative, for maximum portability.
  2859. #
  2860. AC_CHECK_SIZEOF(void *)
  2861. AC_CHECK_SIZEOF(unsigned short)
  2862. AC_CHECK_SIZEOF(unsigned)
  2863. AC_CHECK_SIZEOF(unsigned long)
  2864. AC_CHECK_SIZEOF(mp_limb_t, , GMP_INCLUDE_GMP_H)
  2865. if test "$ac_cv_sizeof_mp_limb_t" = 0; then
  2866.   AC_MSG_ERROR([Oops, mp_limb_t doesn't seem to work])
  2867. fi
  2868. AC_SUBST(GMP_LIMB_BITS, `expr 8 * $ac_cv_sizeof_mp_limb_t`)
  2869. GMP_DEFINE_RAW(["define(<SIZEOF_UNSIGNED>,<$ac_cv_sizeof_unsigned>)"])
  2870. # Check compiler limb size matches gmp-mparam.h
  2871. #
  2872. # FIXME: Some of the cycle counter objects in the tune directory depend on
  2873. # the size of ulong, it'd be possible to check that here, though a mismatch
  2874. # probably wouldn't want to be fatal, none of the libgmp assembler code
  2875. # depends on ulong.
  2876. #
  2877. mparam_bits=[`sed -n 's/^#define GMP_LIMB_BITS[  ][  ]*([0-9]*).*$/1/p' $gmp_mparam_source`]
  2878. if test -n "$mparam_bits" && test "$mparam_bits" -ne $GMP_LIMB_BITS; then
  2879.   if test "$test_CFLAGS" = set; then
  2880.     AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code
  2881. in this configuration expects $mparam_bits bits.
  2882. You appear to have set $CFLAGS, perhaps you also need to tell GMP the
  2883. intended ABI, see "ABI and ISA" in the manual.])
  2884.   else
  2885.     AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code
  2886. in this configuration expects $mparam_bits bits.])
  2887.   fi
  2888. fi
  2889. GMP_DEFINE_RAW(["define(<GMP_LIMB_BITS>,$GMP_LIMB_BITS)"])
  2890. GMP_DEFINE_RAW(["define(<GMP_NAIL_BITS>,$GMP_NAIL_BITS)"])
  2891. GMP_DEFINE_RAW(["define(<GMP_NUMB_BITS>,eval(GMP_LIMB_BITS-GMP_NAIL_BITS))"])
  2892. # Exclude the mpn random functions from mpbsd since that would drag in the
  2893. # top-level rand things, all of which are unnecessary for libmp.  There's
  2894. # other unnecessary objects too actually, if we could be bothered figuring
  2895. # out exactly which they are.
  2896. #
  2897. mpn_objs_in_libmp=
  2898. for i in $mpn_objs_in_libgmp; do
  2899.   case $i in
  2900.   *random*) ;;
  2901.   *) mpn_objs_in_libmp="$mpn_objs_in_libmp $i" ;;
  2902.   esac
  2903. done
  2904. AC_SUBST(mpn_objs_in_libmp)
  2905. AC_SUBST(mpn_objects)
  2906. AC_SUBST(mpn_objs_in_libgmp)
  2907. AC_SUBST(gmp_srclinks)
  2908. # A recompiled sqr_basecase for use in the tune program, if necessary.
  2909. TUNE_SQR_OBJ=
  2910. test -d tune || mkdir tune
  2911. case $sqr_basecase_source in
  2912.   *.asm)
  2913.     sqr_max=[`sed -n 's/^def...(SQR_TOOM2_THRESHOLD_MAX, *([0-9]*))/1/p' $sqr_basecase_source`]
  2914.     if test -n "$sqr_max"; then
  2915.       TUNE_SQR_OBJ=sqr_asm.o
  2916.       AC_DEFINE_UNQUOTED(TUNE_SQR_TOOM2_MAX,$sqr_max,
  2917.       [Maximum size the tune program can test for SQR_TOOM2_THRESHOLD])
  2918.     fi
  2919.     cat >tune/sqr_basecase.c <<EOF
  2920. /* not sure that an empty file can compile, so put in a dummy */
  2921. int sqr_basecase_dummy;
  2922. EOF
  2923.     ;;
  2924.   *.c)
  2925.     TUNE_SQR_OBJ=
  2926.     AC_DEFINE(TUNE_SQR_TOOM2_MAX,SQR_TOOM2_MAX_GENERIC)
  2927.     cat >tune/sqr_basecase.c <<EOF
  2928. #define TUNE_PROGRAM_BUILD 1
  2929. #define TUNE_PROGRAM_BUILD_SQR 1
  2930. #include "mpn/sqr_basecase.c"
  2931. EOF
  2932.     ;;
  2933. esac
  2934. AC_SUBST(TUNE_SQR_OBJ)
  2935. # Configs for demos/pexpr.c.
  2936. #
  2937. AC_CONFIG_FILES(demos/pexpr-config.h:demos/pexpr-config-h.in)
  2938. GMP_SUBST_CHECK_FUNCS(clock, cputime, getrusage, gettimeofday, sigaction, sigaltstack, sigstack)
  2939. GMP_SUBST_CHECK_HEADERS(sys/resource.h)
  2940. AC_CHECK_TYPES([stack_t], HAVE_STACK_T_01=1, HAVE_STACK_T_01=0,
  2941.                [#include <signal.h>])
  2942. AC_SUBST(HAVE_STACK_T_01)
  2943. # Configs for demos/calc directory
  2944. #
  2945. # AC_SUBST+AC_CONFIG_FILES is used for calc-config.h, rather than AC_DEFINE+
  2946. # AC_CONFIG_HEADERS, since with the latter automake (1.8) will then put the
  2947. # directory (ie. demos/calc) into $(DEFAULT_INCLUDES) for every Makefile.in,
  2948. # which would look very strange.
  2949. #
  2950. # -lcurses is required by libreadline.  On a typical SVR4 style system this
  2951. # normally doesn't have to be given explicitly, since libreadline.so will
  2952. # have a NEEDED record for it.  But if someone for some reason is using only
  2953. # a static libreadline.a then we must give -lcurses.  Readline (as of
  2954. # version 4.3) doesn't use libtool, so we can't rely on a .la to cover
  2955. # necessary dependencies.
  2956. #
  2957. # On a couple of systems we've seen libreadline available, but the headers
  2958. # not in the default include path, so check for readline/readline.h.  We've
  2959. # also seen readline/history.h missing, not sure if that's just a broken
  2960. # install or a very old version, but check that too.
  2961. #
  2962. AC_CONFIG_FILES(demos/calc/calc-config.h:demos/calc/calc-config-h.in)
  2963. LIBCURSES=
  2964. if test $with_readline != no; then
  2965.   AC_CHECK_LIB(ncurses, tputs, [LIBCURSES=-lncurses],
  2966.     [AC_CHECK_LIB(curses, tputs, [LIBCURSES=-lcurses])])
  2967. fi
  2968. AC_SUBST(LIBCURSES)
  2969. use_readline=$with_readline
  2970. if test $with_readline = detect; then
  2971.   use_readline=no
  2972.   AC_CHECK_LIB(readline, readline,
  2973.     [AC_CHECK_HEADER(readline/readline.h,
  2974.       [AC_CHECK_HEADER(readline/history.h, use_readline=yes)])],
  2975.     , $LIBCURSES)
  2976.   AC_MSG_CHECKING(readline detected)
  2977.   AC_MSG_RESULT($use_readline)
  2978. fi
  2979. if test $use_readline = yes; then
  2980.   AC_SUBST(WITH_READLINE_01, 1)
  2981.   AC_SUBST(LIBREADLINE, -lreadline)
  2982. else
  2983.   WITH_READLINE_01=0
  2984. fi
  2985. AC_PROG_YACC
  2986. AM_PROG_LEX
  2987. # Configs for demos/expr directory
  2988. #
  2989. # Libtool already runs an AC_CHECK_TOOL for ranlib, but we give
  2990. # AC_PROG_RANLIB anyway since automake is supposed to complain if it's not
  2991. # called.  (Automake 1.8.4 doesn't, at least not when the only library is in
  2992. # an EXTRA_LIBRARIES.)
  2993. #
  2994. AC_PROG_RANLIB
  2995. # Create config.m4.
  2996. GMP_FINISH
  2997. # Create Makefiles
  2998. # FIXME: Upcoming version of autoconf/automake may not like broken lines.
  2999. #        Right now automake isn't accepting the new AC_CONFIG_FILES scheme.
  3000. AC_OUTPUT(Makefile
  3001.   mpbsd/Makefile mpf/Makefile mpn/Makefile mpq/Makefile
  3002.   mpz/Makefile printf/Makefile scanf/Makefile cxx/Makefile
  3003.   tests/Makefile tests/devel/Makefile tests/mpbsd/Makefile
  3004.   tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile
  3005.   tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile
  3006.   tests/cxx/Makefile
  3007.   doc/Makefile tune/Makefile
  3008.   demos/Makefile demos/calc/Makefile demos/expr/Makefile
  3009.   gmp.h:gmp-h.in mp.h:mp-h.in)