miniupnpd 1.9 (20160113)
[tomato.git] / release / src / router / gmp / configure.ac
blob64b2c50957f1e04887eb3c6293d8ac5123174bbb
1 dnl  Process this file with autoconf to produce a configure script.
4 define(GMP_COPYRIGHT,[[
6 Copyright 1996-2014 Free Software Foundation, Inc.
8 This file is part of the GNU MP Library.
10 The GNU MP Library is free software; you can redistribute it and/or modify
11 it under the terms of either:
13   * the GNU Lesser General Public License as published by the Free
14     Software Foundation; either version 3 of the License, or (at your
15     option) any later version.
19   * the GNU General Public License as published by the Free Software
20     Foundation; either version 2 of the License, or (at your option) any
21     later version.
23 or both in parallel, as here.
25 The GNU MP Library is distributed in the hope that it will be useful, but
26 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
27 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
28 for more details.
30 You should have received copies of the GNU General Public License and the
31 GNU Lesser General Public License along with the GNU MP Library.  If not,
32 see https://www.gnu.org/licenses/.
33 ]])
35 AC_COPYRIGHT(GMP_COPYRIGHT)
36 AH_TOP(/*GMP_COPYRIGHT*/)
38 AC_REVISION($Revision$)
39 AC_PREREQ(2.59)
40 AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html], gmp)
41 AC_CONFIG_SRCDIR(gmp-impl.h)
42 m4_pattern_forbid([^[ \t]*GMP_])
43 m4_pattern_allow(GMP_LDFLAGS)
44 m4_pattern_allow(GMP_LIMB_BITS)
45 m4_pattern_allow(GMP_MPARAM_H_SUGGEST)
46 m4_pattern_allow(GMP_NAIL_BITS)
47 m4_pattern_allow(GMP_NUMB_BITS)
48 m4_pattern_allow(GMP_NONSTD_ABI)
49 m4_pattern_allow(GMP_CPU_TYPE)
51 # If --target is not used then $target_alias is empty, but if say
52 # "./configure athlon-pc-freebsd3.5" is used, then all three of
53 # $build_alias, $host_alias and $target_alias are set to
54 # "athlon-pc-freebsd3.5".
56 if test -n "$target_alias" && test "$target_alias" != "$host_alias"; then
57   AC_MSG_ERROR([--target is not appropriate for GMP
58 Use --build=CPU-VENDOR-OS if you need to specify your CPU and/or system
59 explicitly.  Use --host if cross-compiling (see "Installing GMP" in the
60 manual for more on this).])
63 GMP_INIT(config.m4)
65 AC_CANONICAL_HOST
67 dnl  Automake "no-dependencies" is used because include file dependencies
68 dnl  are not useful to us.  Pretty much everything depends just on gmp.h,
69 dnl  gmp-impl.h and longlong.h, and yet only rarely does everything need to
70 dnl  be rebuilt for changes to those files.
71 dnl
72 dnl  "no-dependencies" also helps with the way we're setup to run
73 dnl  AC_PROG_CXX only conditionally.  If dependencies are used then recent
74 dnl  automake (eg 1.7.2) appends an AM_CONDITIONAL to AC_PROG_CXX, and then
75 dnl  gets upset if it's not actually executed.
76 dnl
77 dnl  Note that there's a copy of these options in the top-level Makefile.am,
78 dnl  so update there too if changing anything.
79 dnl
80 AM_INIT_AUTOMAKE([1.8 gnu no-dependencies])
81 AC_CONFIG_HEADERS(config.h:config.in)
82 AM_MAINTAINER_MODE
85 AC_ARG_ENABLE(assert,
86 AC_HELP_STRING([--enable-assert],[enable ASSERT checking [[default=no]]]),
87 [case $enableval in
88 yes|no) ;;
89 *) AC_MSG_ERROR([bad value $enableval for --enable-assert, need yes or no]) ;;
90 esac],
91 [enable_assert=no])
93 if test "$enable_assert" = "yes"; then
94   AC_DEFINE(WANT_ASSERT,1,
95   [Define to 1 to enable ASSERT checking, per --enable-assert])
96   want_assert_01=1
97 else
98   want_assert_01=0
100 GMP_DEFINE_RAW(["define(<WANT_ASSERT>,$want_assert_01)"])
103 AC_ARG_ENABLE(alloca,
104 AC_HELP_STRING([--enable-alloca],[how to get temp memory [[default=reentrant]]]),
105 [case $enableval in
106 alloca|malloc-reentrant|malloc-notreentrant) ;;
107 yes|no|reentrant|notreentrant) ;;
108 debug) ;;
110   AC_MSG_ERROR([bad value $enableval for --enable-alloca, need one of:
111 yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug]) ;;
112 esac],
113 [enable_alloca=reentrant])
116 # IMPROVE ME: The default for C++ is disabled.  The tests currently
117 # performed below for a working C++ compiler are not particularly strong,
118 # and in general can't be expected to get the right setup on their own.  The
119 # most significant problem is getting the ABI the same.  Defaulting CXXFLAGS
120 # to CFLAGS takes only a small step towards this.  It's also probably worth
121 # worrying whether the C and C++ runtimes from say gcc and a vendor C++ can
122 # work together.  Some rather broken C++ installations were encountered
123 # during testing, and though such things clearly aren't GMP's problem, if
124 # --enable-cxx=detect were to be the default then some careful checks of
125 # which, if any, C++ compiler on the system is up to scratch would be
126 # wanted.
128 AC_ARG_ENABLE(cxx,
129 AC_HELP_STRING([--enable-cxx],[enable C++ support [[default=no]]]),
130 [case $enableval in
131 yes|no|detect) ;;
132 *) AC_MSG_ERROR([bad value $enableval for --enable-cxx, need yes/no/detect]) ;;
133 esac],
134 [enable_cxx=no])
137 AC_ARG_ENABLE(assembly,
138 AC_HELP_STRING([--enable-assembly],[enable the use of assembly loops [[default=yes]]]),
139 [case $enableval in
140 yes|no) ;;
141 *) AC_MSG_ERROR([bad value $enableval for --enable-assembly, need yes or no]) ;;
142 esac],
143 [enable_assembly=yes])
145 if test "$enable_assembly" = "yes"; then
146   AC_DEFINE(WANT_ASSEMBLY,1,
147   [Defined to 1 as per --enable-assembly])
151 AC_ARG_ENABLE(fft,
152 AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [[default=yes]]]),
153 [case $enableval in
154 yes|no) ;;
155 *) AC_MSG_ERROR([bad value $enableval for --enable-fft, need yes or no]) ;;
156 esac],
157 [enable_fft=yes])
159 if test "$enable_fft" = "yes"; then
160   AC_DEFINE(WANT_FFT,1,
161   [Define to 1 to enable FFTs for multiplication, per --enable-fft])
165 AC_ARG_ENABLE(old-fft-full,
166 AC_HELP_STRING([--enable-old-fft-full],[enable old mpn_mul_fft_full for multiplication [[default=no]]]),
167 [case $enableval in
168 yes|no) ;;
169 *) AC_MSG_ERROR([bad value $enableval for --enable-old-fft-full, need yes or no]) ;;
170 esac],
171 [enable_old_fft_full=no])
173 if test "$enable_old_fft_full" = "yes"; then
174   AC_DEFINE(WANT_OLD_FFT_FULL,1,
175   [Define to 1 to enable old mpn_mul_fft_full for multiplication, per --enable-old-fft-full])
179 AC_ARG_ENABLE(nails,
180 AC_HELP_STRING([--enable-nails],[use nails on limbs [[default=no]]]),
181 [case $enableval in
182 [yes|no|[02468]|[0-9][02468]]) ;;
183 [*[13579]])
184   AC_MSG_ERROR([bad value $enableval for --enable-nails, only even nail sizes supported]) ;;
186   AC_MSG_ERROR([bad value $enableval for --enable-nails, need yes/no/number]) ;;
187 esac],
188 [enable_nails=no])
190 case $enable_nails in
191 yes) GMP_NAIL_BITS=2 ;;
192 no)  GMP_NAIL_BITS=0 ;;
193 *)   GMP_NAIL_BITS=$enable_nails ;;
194 esac
195 AC_SUBST(GMP_NAIL_BITS)
198 AC_ARG_ENABLE(profiling,
199 AC_HELP_STRING([--enable-profiling],
200                [build with profiler support [[default=no]]]),
201 [case $enableval in
202 no|prof|gprof|instrument) ;;
203 *) AC_MSG_ERROR([bad value $enableval for --enable-profiling, need no/prof/gprof/instrument]) ;;
204 esac],
205 [enable_profiling=no])
207 case $enable_profiling in
208   prof)
209     AC_DEFINE(WANT_PROFILING_PROF, 1,
210               [Define to 1 if --enable-profiling=prof])
211     ;;
212   gprof)
213     AC_DEFINE(WANT_PROFILING_GPROF, 1,
214               [Define to 1 if --enable-profiling=gprof])
215     ;;
216   instrument)
217     AC_DEFINE(WANT_PROFILING_INSTRUMENT, 1,
218               [Define to 1 if --enable-profiling=instrument])
219     ;;
220 esac
222 GMP_DEFINE_RAW(["define(<WANT_PROFILING>,<\`$enable_profiling'>)"])
224 # -fomit-frame-pointer is incompatible with -pg on some chips
225 if test "$enable_profiling" = gprof; then
226   fomit_frame_pointer=
227 else
228   fomit_frame_pointer="-fomit-frame-pointer"
232 AC_ARG_WITH(readline,
233 AC_HELP_STRING([--with-readline],
234                [readline support in calc demo program [[default=detect]]]),
235 [case $withval in
236 yes|no|detect) ;;
237 *) AC_MSG_ERROR([bad value $withval for --with-readline, need yes/no/detect]) ;;
238 esac],
239 [with_readline=detect])
242 AC_ARG_ENABLE(fat,
243 AC_HELP_STRING([--enable-fat],
244                [build a fat binary on systems that support it [[default=no]]]),
245 [case $enableval in
246 yes|no) ;;
247 *) AC_MSG_ERROR([bad value $enableval for --enable-fat, need yes or no]) ;;
248 esac],
249 [enable_fat=no])
252 AC_ARG_ENABLE(minithres,
253 AC_HELP_STRING([--enable-minithres],
254                [choose minimal thresholds for testing [[default=no]]]),
255 [case $enableval in
256 yes|no) ;;
257 *) AC_MSG_ERROR([bad value $enableval for --enable-minithres, need yes or no]) ;;
258 esac],
259 [enable_minithres=no])
262 AC_ARG_ENABLE(fake-cpuid,
263 AC_HELP_STRING([--enable-fake-cpuid],[enable GMP_CPU_TYPE faking cpuid [[default=no]]]),
264 [case $enableval in
265 yes|no) ;;
266 *) AC_MSG_ERROR([bad value $enableval for --enable-fake-cpuid, need yes or no]) ;;
267 esac],
268 [enable_fake_cpuid=no])
270 if test "$enable_fake_cpuid" = "yes"; then
271   AC_DEFINE(WANT_FAKE_CPUID,1,
272   [Define to 1 to enable GMP_CPU_TYPE faking cpuid, per --enable-fake-cpuid])
276 if test $enable_fat = yes && test $enable_assembly = no ; then
277   AC_MSG_ERROR([when doing a fat build, disabling assembly will not work])
280 if test $enable_fake_cpuid = yes && test $enable_fat = no ; then
281   AC_MSG_ERROR([--enable-fake-cpuid requires --enable-fat])
285 tmp_host=`echo $host_cpu | sed 's/\./_/'`
286 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_$tmp_host)
287 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_HOST_CPU_$tmp_host')", POST)
289 dnl  The HAVE_HOST_CPU_ list here only needs to have entries for those which
290 dnl  are going to be tested, not everything that can possibly be selected.
292 dnl  The HAVE_HOST_CPU_FAMILY_ list similarly, and note that the AC_DEFINEs
293 dnl  for these are under the cpu specific setups below.
295 AH_VERBATIM([HAVE_HOST_CPU_1],
296 [/* Define one of these to 1 for the host CPU family.
297    If your CPU is not in any of these families, leave all undefined.
298    For an AMD64 chip, define "x86" in ABI=32, but not in ABI=64. */
299 #undef HAVE_HOST_CPU_FAMILY_alpha
300 #undef HAVE_HOST_CPU_FAMILY_m68k
301 #undef HAVE_HOST_CPU_FAMILY_power
302 #undef HAVE_HOST_CPU_FAMILY_powerpc
303 #undef HAVE_HOST_CPU_FAMILY_x86
304 #undef HAVE_HOST_CPU_FAMILY_x86_64
306 /* Define one of the following to 1 for the host CPU, as per the output of
307    ./config.guess.  If your CPU is not listed here, leave all undefined.  */
308 #undef HAVE_HOST_CPU_alphaev67
309 #undef HAVE_HOST_CPU_alphaev68
310 #undef HAVE_HOST_CPU_alphaev7
311 #undef HAVE_HOST_CPU_m68020
312 #undef HAVE_HOST_CPU_m68030
313 #undef HAVE_HOST_CPU_m68040
314 #undef HAVE_HOST_CPU_m68060
315 #undef HAVE_HOST_CPU_m68360
316 #undef HAVE_HOST_CPU_powerpc604
317 #undef HAVE_HOST_CPU_powerpc604e
318 #undef HAVE_HOST_CPU_powerpc750
319 #undef HAVE_HOST_CPU_powerpc7400
320 #undef HAVE_HOST_CPU_supersparc
321 #undef HAVE_HOST_CPU_i386
322 #undef HAVE_HOST_CPU_i586
323 #undef HAVE_HOST_CPU_i686
324 #undef HAVE_HOST_CPU_pentium
325 #undef HAVE_HOST_CPU_pentiummmx
326 #undef HAVE_HOST_CPU_pentiumpro
327 #undef HAVE_HOST_CPU_pentium2
328 #undef HAVE_HOST_CPU_pentium3
329 #undef HAVE_HOST_CPU_s390_z900
330 #undef HAVE_HOST_CPU_s390_z990
331 #undef HAVE_HOST_CPU_s390_z9
332 #undef HAVE_HOST_CPU_s390_z10
333 #undef HAVE_HOST_CPU_s390_z196
335 /* Define to 1 iff we have a s390 with 64-bit registers.  */
336 #undef HAVE_HOST_CPU_s390_zarch])
339 # Table of compilers, options, and mpn paths.  This code has various related
340 # purposes
342 #   - better default CC/CFLAGS selections than autoconf otherwise gives
343 #   - default CC/CFLAGS selections for extra CPU types specific to GMP
344 #   - a few tests for known bad compilers
345 #   - choice of ABIs on suitable systems
346 #   - selection of corresponding mpn search path
348 # After GMP specific searches and tests, the standard autoconf AC_PROG_CC is
349 # called.  User selections of CC etc are respected.
351 # Care is taken not to use macros like AC_TRY_COMPILE during the GMP
352 # pre-testing, since they of course depend on AC_PROG_CC, and also some of
353 # them cache their results, which is not wanted.
355 # The ABI selection mechanism is unique to GMP.  All that reaches autoconf
356 # is a different selection of CC/CFLAGS according to the best ABI the system
357 # supports, and/or what the user selects.  Naturally the mpn assembler code
358 # selected is very dependent on the ABI.
360 # The closest the standard tools come to a notion of ABI is something like
361 # "sparc64" which encodes a CPU and an ABI together.  This doesn't seem to
362 # scale well for GMP, where exact CPU types like "ultrasparc2" are wanted,
363 # separate from the ABI used on them.
366 # The variables set here are
368 #   cclist              the compiler choices
369 #   xx_cflags           flags for compiler xx
370 #   xx_cflags_maybe     flags for compiler xx, if they work
371 #   xx_cppflags         cpp flags for compiler xx
372 #   xx_cflags_optlist   list of sets of optional flags
373 #   xx_cflags_yyy       set yyy of optional flags for compiler xx
374 #   xx_ldflags          -Wc,-foo flags for libtool linking with compiler xx
375 #   ar_flags            extra flags for $AR
376 #   nm_flags            extra flags for $NM
377 #   limb                limb size, can be "longlong"
378 #   path                mpn search path
379 #   extra_functions     extra mpn functions
380 #   fat_path            fat binary mpn search path [if fat binary desired]
381 #   fat_functions       fat functions
382 #   fat_thresholds      fat thresholds
384 # Suppose xx_cflags_optlist="arch", then flags from $xx_cflags_arch are
385 # tried, and the first flag that works will be used.  An optlist like "arch
386 # cpu optimize" can be used to get multiple independent sets of flags tried.
387 # The first that works from each will be used.  If no flag in a set works
388 # then nothing from that set is added.
390 # For multiple ABIs, the scheme extends as follows.
392 #   abilist               set of ABI choices
393 #   cclist_aa             compiler choices in ABI aa
394 #   xx_aa_cflags          flags for xx in ABI aa
395 #   xx_aa_cflags_maybe    flags for xx in ABI aa, if they work
396 #   xx_aa_cppflags        cpp flags for xx in ABI aa
397 #   xx_aa_cflags_optlist  list of sets of optional flags in ABI aa
398 #   xx_aa_cflags_yyy      set yyy of optional flags for compiler xx in ABI aa
399 #   xx_aa_ldflags         -Wc,-foo flags for libtool linking
400 #   ar_aa_flags           extra flags for $AR in ABI aa
401 #   nm_aa_flags           extra flags for $NM in ABI aa
402 #   limb_aa               limb size in ABI aa, can be "longlong"
403 #   path_aa               mpn search path in ABI aa
404 #   extra_functions_aa    extra mpn functions in ABI aa
406 # As a convenience, the unadorned xx_cflags (etc) are used for the last ABI
407 # in ablist, if an xx_aa_cflags for that ABI isn't given.  For example if
408 # abilist="64 32" then $cc_64_cflags will be used for the 64-bit ABI, but
409 # for the 32-bit either $cc_32_cflags or $cc_cflags is used, whichever is
410 # defined.  This makes it easy to add some 64-bit compilers and flags to an
411 # unadorned 32-bit set.
413 # limb=longlong (or limb_aa=longlong) applies to all compilers within that
414 # ABI.  It won't work to have some needing long long and some not, since a
415 # single instantiated gmp.h will be used by both.
417 # SPEED_CYCLECOUNTER, cyclecounter_size and CALLING_CONVENTIONS_OBJS are
418 # also set here, with an ABI suffix.
422 # A table-driven approach like this to mapping cpu type to good compiler
423 # options is a bit of a maintenance burden, but there's not much uniformity
424 # between options specifications on different compilers.  Some sort of
425 # separately updatable tool might be cute.
427 # The use of lots of variables like this, direct and indirect, tends to
428 # obscure when and how various things are done, but unfortunately it's
429 # pretty much the only way.  If shell subroutines were portable then actual
430 # code like "if this .. do that" could be written, but attempting the same
431 # with full copies of GMP_PROG_CC_WORKS etc expanded at every point would
432 # hugely bloat the output.
435 AC_ARG_VAR(ABI, [desired ABI (for processors supporting more than one ABI)])
437 # abilist needs to be non-empty, "standard" is just a generic name here
438 abilist="standard"
440 # FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring
441 # c89 over cc here.  But note that on HP-UX c89 provides a castrated
442 # environment, and would want to be excluded somehow.  Maybe
443 # AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and
444 # we don't need to worry.
446 cclist="gcc cc"
448 gcc_cflags="-O2 -pedantic"
449 gcc_64_cflags="-O2 -pedantic"
450 cc_cflags="-O"
451 cc_64_cflags="-O"
453 SPEED_CYCLECOUNTER_OBJ=
454 cyclecounter_size=2
456 AC_SUBST(HAVE_HOST_CPU_FAMILY_power,  0)
457 AC_SUBST(HAVE_HOST_CPU_FAMILY_powerpc,0)
459 case $host in
461   alpha*-*-*)
462     AC_DEFINE(HAVE_HOST_CPU_FAMILY_alpha)
463     case $host_cpu in
464       alphaev5* | alphapca5*)
465         path="alpha/ev5 alpha" ;;
466       alphaev67 | alphaev68 | alphaev7*)
467         path="alpha/ev67 alpha/ev6 alpha" ;;
468       alphaev6)
469         path="alpha/ev6 alpha" ;;
470       *)
471         path="alpha" ;;
472     esac
473     if test "$enable_assembly" = "yes" ; then
474        extra_functions="cntlz"
475     fi
476     gcc_cflags_optlist="asm cpu oldas" # need asm ahead of cpu, see below
477     gcc_cflags_maybe="-mieee"
478     gcc_cflags_oldas="-Wa,-oldas"     # see GMP_GCC_WA_OLDAS.
480     # gcc 2.7.2.3 doesn't know any -mcpu= for alpha, apparently.
481     # gcc 2.95 knows -mcpu= ev4, ev5, ev56, pca56, ev6.
482     # gcc 3.0 adds nothing.
483     # gcc 3.1 adds ev45, ev67 (but ev45 is the same as ev4).
484     # gcc 3.2 adds nothing.
485     #
486     # gcc version "2.9-gnupro-99r1" under "-O2 -mcpu=ev6" strikes internal
487     # compiler errors too easily and is rejected by GMP_PROG_CC_WORKS.  Each
488     # -mcpu=ev6 below has a fallback to -mcpu=ev56 for this reason.
489     #
490     case $host_cpu in
491       alpha)        gcc_cflags_cpu="-mcpu=ev4" ;;
492       alphaev5)     gcc_cflags_cpu="-mcpu=ev5" ;;
493       alphaev56)    gcc_cflags_cpu="-mcpu=ev56" ;;
494       alphapca56 | alphapca57)
495                     gcc_cflags_cpu="-mcpu=pca56" ;;
496       alphaev6)     gcc_cflags_cpu="-mcpu=ev6 -mcpu=ev56" ;;
497       alphaev67 | alphaev68 | alphaev7*)
498                     gcc_cflags_cpu="-mcpu=ev67 -mcpu=ev6 -mcpu=ev56" ;;
499     esac
501     # gcc version "2.9-gnupro-99r1" on alphaev68-dec-osf5.1 has been seen
502     # accepting -mcpu=ev6, but not putting the assembler in the right mode
503     # for what it produces.  We need to do this for it, and need to do it
504     # before testing the -mcpu options.
505     #
506     # On old versions of gcc, which don't know -mcpu=, we believe an
507     # explicit -Wa,-mev5 etc will be necessary to put the assembler in
508     # the right mode for our .asm files and longlong.h asm blocks.
509     #
510     # On newer versions of gcc, when -mcpu= is known, we must give a -Wa
511     # which is at least as high as the code gcc will generate.  gcc
512     # establishes what it needs with a ".arch" directive, our command line
513     # option seems to override that.
514     #
515     # gas prior to 2.14 doesn't accept -mev67, but -mev6 seems enough for
516     # ctlz and cttz (in 2.10.0 at least).
517     #
518     # OSF `as' accepts ev68 but stupidly treats it as ev4.  -arch only seems
519     # to affect insns like ldbu which are expanded as macros when necessary.
520     # Insns like ctlz which were never available as macros are always
521     # accepted and always generate their plain code.
522     #
523     case $host_cpu in
524       alpha)        gcc_cflags_asm="-Wa,-arch,ev4 -Wa,-mev4" ;;
525       alphaev5)     gcc_cflags_asm="-Wa,-arch,ev5 -Wa,-mev5" ;;
526       alphaev56)    gcc_cflags_asm="-Wa,-arch,ev56 -Wa,-mev56" ;;
527       alphapca56 | alphapca57)
528                     gcc_cflags_asm="-Wa,-arch,pca56 -Wa,-mpca56" ;;
529       alphaev6)     gcc_cflags_asm="-Wa,-arch,ev6 -Wa,-mev6" ;;
530       alphaev67 | alphaev68 | alphaev7*)
531                     gcc_cflags_asm="-Wa,-arch,ev67 -Wa,-mev67 -Wa,-arch,ev6 -Wa,-mev6" ;;
532     esac
534     # It might be better to ask "cc" whether it's Cray C or DEC C,
535     # instead of relying on the OS part of $host.  But it's hard to
536     # imagine either of those compilers anywhere except their native
537     # systems.
538     #
539     GMP_INCLUDE_MPN(alpha/alpha-defs.m4)
540     case $host in
541       *-cray-unicos*)
542         cc_cflags="-O"          # no -g, it silently disables all optimizations
543         GMP_INCLUDE_MPN(alpha/unicos.m4)
544         # Don't perform any assembly syntax tests on this beast.
545         gmp_asm_syntax_testing=no
546         ;;
547       *-*-osf*)
548         GMP_INCLUDE_MPN(alpha/default.m4)
549         cc_cflags=""
550         cc_cflags_optlist="opt cpu"
552         # not sure if -fast works on old versions, so make it optional
553         cc_cflags_opt="-fast -O2"
555         # DEC C V5.9-005 knows ev4, ev5, ev56, pca56, ev6.
556         # Compaq C V6.3-029 adds ev67.
557         #
558         case $host_cpu in
559           alpha)       cc_cflags_cpu="-arch~ev4~-tune~ev4" ;;
560           alphaev5)    cc_cflags_cpu="-arch~ev5~-tune~ev5" ;;
561           alphaev56)   cc_cflags_cpu="-arch~ev56~-tune~ev56" ;;
562           alphapca56 | alphapca57)
563             cc_cflags_cpu="-arch~pca56~-tune~pca56" ;;
564           alphaev6)    cc_cflags_cpu="-arch~ev6~-tune~ev6" ;;
565           alphaev67 | alphaev68 | alphaev7*)
566             cc_cflags_cpu="-arch~ev67~-tune~ev67 -arch~ev6~-tune~ev6" ;;
567         esac
568         ;;
569       *)
570         GMP_INCLUDE_MPN(alpha/default.m4)
571         ;;
572     esac
574     case $host in
575       *-*-unicos*)
576         # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes
577         ;;
578       *)
579         SPEED_CYCLECOUNTER_OBJ=alpha.lo
580         cyclecounter_size=1 ;;
581     esac
582     ;;
585   # Cray vector machines.
586   # This must come after alpha* so that we can recognize present and future
587   # vector processors with a wildcard.
588   *-cray-unicos*)
589     gmp_asm_syntax_testing=no
590     cclist="cc"
591     # We used to have -hscalar0 here as a workaround for miscompilation of
592     # mpz/import.c, but let's hope Cray fixes their bugs instead, since
593     # -hscalar0 causes disastrously poor code to be generated.
594     cc_cflags="-O3 -hnofastmd -htask0 -Wa,-B"
595     path="cray"
596     ;;
599   arm64*-*-* | aarch64*-*-*)
600     path="arm64"
601     ;;
604   arm*-*-*)
605     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
606     gcc_cflags_optlist="arch neon tune"
607     gcc_cflags_maybe="-marm"
608     gcc_testlist="gcc-arm-umodsi"
609     GMP_INCLUDE_MPN(arm/arm-defs.m4)
610     CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo'
612     # FIXME: We make mandatory compiler options optional here.  We should
613     # either enforce them, or organise to strip paths as the corresponding
614     # options fail.
615     case $host_cpu in
616       armsa1 | arm9tdmi | armv4*)
617         path="arm"
618         gcc_cflags_arch="-march=armv4"
619         ;;
620       armxscale | arm9te | arm10 | armv5*)
621         path="arm/v5 arm"
622         gcc_cflags_arch="-march=armv5"
623         ;;
624       arm11mpcore | arm1136 | arm1176 | armv6*)
625         path="arm/v6 arm/v5 arm"
626         gcc_cflags_arch="-march=armv6"
627         ;;
628       arm1156)
629         path="arm/v6t2 arm/v6 arm/v5 arm"
630         gcc_cflags_arch="-march=armv6t2"
631         ;;
632       armcortexa5 | armv7a*)
633         path="arm/v6t2 arm/v6 arm/v5 arm"
634         gcc_cflags_arch="-march=armv7-a"
635         ;;
636       armcortexa8)
637         path="arm/v6t2 arm/v6 arm/v5 arm"
638         gcc_cflags_arch="-march=armv7-a"
639         gcc_cflags_tune="-mtune=cortex-a8"
640         ;;
641       armcortexa8neon)
642         path="arm/v6t2 arm/v6 arm/v5 arm/neon arm"
643         gcc_cflags_arch="-march=armv7-a"
644         gcc_cflags_neon="-mfpu=neon"
645         gcc_cflags_tune="-mtune=cortex-a8"
646         ;;
647       armcortexa9)
648         path="arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm"
649         gcc_cflags_arch="-march=armv7-a"
650         gcc_cflags_tune="-mtune=cortex-a9"
651         ;;
652       armcortexa9neon)
653         path="arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm/neon arm"
654         gcc_cflags_arch="-march=armv7-a"
655         gcc_cflags_neon="-mfpu=neon"
656         gcc_cflags_tune="-mtune=cortex-a9"
657         ;;
658       armcortexa15)
659         path="arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm"
660         gcc_cflags_arch="-march=armv7-a"
661         gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9"
662         ;;
663       armcortexa15neon)
664         path="arm/v7a/cora15/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm/neon arm"
665         gcc_cflags_arch="-march=armv7-a"
666         gcc_cflags_neon="-mfpu=neon"
667         gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9"
668         ;;
669       *)
670         path="arm"
671         ;;
672     esac
673     ;;
676   # Fujitsu
677   [f30[01]-fujitsu-sysv*])
678     cclist="gcc vcc"
679     # FIXME: flags for vcc?
680     vcc_cflags="-g"
681     path="fujitsu"
682     ;;
685   hppa*-*-*)
686     # HP cc (the one sold separately) is K&R by default, but AM_C_PROTOTYPES
687     # will add "-Ae", or "-Aa -D_HPUX_SOURCE", to put it into ansi mode, if
688     # possible.
689     #
690     # gcc for hppa 2.0 can be built either for 2.0n (32-bit) or 2.0w
691     # (64-bit), but not both, so there's no option to choose the desired
692     # mode, we must instead detect which of the two it is.  This is done by
693     # checking sizeof(long), either 4 or 8 bytes respectively.  Do this in
694     # ABI=1.0 too, in case someone tries to build that with a 2.0w gcc.
695     #
696     gcc_cflags_optlist="arch"
697     gcc_testlist="sizeof-long-4"
698     SPEED_CYCLECOUNTER_OBJ=hppa.lo
699     cyclecounter_size=1
701     # FIXME: For hppa2.0*, path should be "pa32/hppa2_0 pa32/hppa1_1 pa32".
702     # (Can't remember why this isn't done already, have to check what .asm
703     # files are available in each and how they run on a typical 2.0 cpu.)
704     #
705     case $host_cpu in
706       hppa1.0*)    path="pa32" ;;
707       hppa7000*)   path="pa32/hppa1_1 pa32" ;;
708       hppa2.0* | hppa64)
709                    path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;;
710       *)           # default to 7100
711                    path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;;
712     esac
714     # gcc 2.7.2.3 knows -mpa-risc-1-0 and -mpa-risc-1-1
715     # gcc 2.95 adds -mpa-risc-2-0, plus synonyms -march=1.0, 1.1 and 2.0
716     #
717     # We don't use -mpa-risc-2-0 in ABI=1.0 because 64-bit registers may not
718     # be saved by the kernel on an old system.  Actually gcc (as of 3.2)
719     # only adds a few float instructions with -mpa-risc-2-0, so it would
720     # probably be safe, but let's not take the chance.  In any case, a
721     # configuration like --host=hppa2.0 ABI=1.0 is far from optimal.
722     #
723     case $host_cpu in
724       hppa1.0*)           gcc_cflags_arch="-mpa-risc-1-0" ;;
725       *)                  # default to 7100
726                           gcc_cflags_arch="-mpa-risc-1-1" ;;
727     esac
729     case $host_cpu in
730       hppa1.0*)    cc_cflags="+O2" ;;
731       *)           # default to 7100
732                    cc_cflags="+DA1.1 +O2" ;;
733     esac
735     case $host in
736       hppa2.0*-*-* | hppa64-*-*)
737         cclist_20n="gcc cc"
738         abilist="2.0n 1.0"
739         path_20n="pa64"
740         limb_20n=longlong
741         any_20n_testlist="sizeof-long-4"
742         SPEED_CYCLECOUNTER_OBJ_20n=hppa2.lo
743         cyclecounter_size_20n=2
745         # -mpa-risc-2-0 is only an optional flag, in case an old gcc is
746         # used.  Assembler support for 2.0 is essential though, for our asm
747         # files.
748         gcc_20n_cflags="$gcc_cflags"
749         gcc_20n_cflags_optlist="arch"
750         gcc_20n_cflags_arch="-mpa-risc-2-0 -mpa-risc-1-1"
751         gcc_20n_testlist="sizeof-long-4 hppa-level-2.0"
753         cc_20n_cflags="+DA2.0 +e +O2 -Wl,+vnocompatwarnings"
754         cc_20n_testlist="hpc-hppa-2-0"
756         # ABI=2.0w is available for hppa2.0w and hppa2.0, but not for
757         # hppa2.0n, on the assumption that that the latter indicates a
758         # desire for ABI=2.0n.
759         case $host in
760         hppa2.0n-*-*) ;;
761         *)
762           # HPUX 10 and earlier cannot run 2.0w.  Not sure about other
763           # systems (GNU/Linux for instance), but lets assume they're ok.
764           case $host in
765             [*-*-hpux[1-9] | *-*-hpux[1-9].* | *-*-hpux10 | *-*-hpux10.*]) ;;
766             [*-*-linux*])  abilist="1.0" ;; # due to linux permanent kernel bug
767             *)    abilist="2.0w $abilist" ;;
768           esac
770           cclist_20w="gcc cc"
771           gcc_20w_cflags="$gcc_cflags -mpa-risc-2-0"
772           cc_20w_cflags="+DD64 +O2"
773           cc_20w_testlist="hpc-hppa-2-0"
774           path_20w="pa64"
775           any_20w_testlist="sizeof-long-8"
776           SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo
777           cyclecounter_size_20w=2
778           ;;
779         esac
780         ;;
781     esac
782     ;;
785   IA64_PATTERN)
786     abilist="64"
787     GMP_INCLUDE_MPN(ia64/ia64-defs.m4)
788     SPEED_CYCLECOUNTER_OBJ=ia64.lo
789     any_32_testlist="sizeof-long-4"
791     case $host_cpu in
792       itanium)   path="ia64/itanium  ia64" ;;
793       itanium2)  path="ia64/itanium2 ia64" ;;
794       *)         path="ia64" ;;
795     esac
797     gcc_64_cflags_optlist="tune"
798     gcc_32_cflags_optlist=$gcc_64_cflags_optlist
800     # gcc pre-release 3.4 adds -mtune itanium and itanium2
801     case $host_cpu in
802       itanium)   gcc_cflags_tune="-mtune=itanium" ;;
803       itanium2)  gcc_cflags_tune="-mtune=itanium2" ;;
804     esac
806     case $host in
807       *-*-linux*)
808         cclist="gcc icc"
809         icc_cflags="-no-gcc"
810         icc_cflags_optlist="opt"
811         # Don't use -O3, it is for "large data sets" and also miscompiles GMP.
812         # But icc miscompiles GMP at any optimization level, at higher levels
813         # it miscompiles more files...
814         icc_cflags_opt="-O2 -O1"
815         ;;
817       *-*-hpux*)
818         # HP cc sometimes gets internal errors if the optimization level is
819         # too high.  GMP_PROG_CC_WORKS detects this, the "_opt" fallbacks
820         # let us use whatever seems to work.
821         #
822         abilist="32 64"
823         any_64_testlist="sizeof-long-8"
825         cclist_32="gcc cc"
826         path_32="ia64"
827         cc_32_cflags=""
828         cc_32_cflags_optlist="opt"
829         cc_32_cflags_opt="+O3 +O2 +O1"
830         gcc_32_cflags="$gcc_cflags -milp32"
831         limb_32=longlong
832         SPEED_CYCLECOUNTER_OBJ_32=ia64.lo
833         cyclecounter_size_32=2
835         # Must have +DD64 in CPPFLAGS to get the right __LP64__ for headers,
836         # but also need it in CFLAGS for linking programs, since automake
837         # only uses CFLAGS when linking, not CPPFLAGS.
838         # FIXME: Maybe should use cc_64_ldflags for this, but that would
839         # need GMP_LDFLAGS used consistently by all the programs.
840         #
841         cc_64_cflags="+DD64"
842         cc_64_cppflags="+DD64"
843         cc_64_cflags_optlist="opt"
844         cc_64_cflags_opt="+O3 +O2 +O1"
845         gcc_64_cflags="$gcc_cflags -mlp64"
846         ;;
847     esac
848     ;;
851   # Motorola 68k
852   #
853   M68K_PATTERN)
854     AC_DEFINE(HAVE_HOST_CPU_FAMILY_m68k)
855     GMP_INCLUDE_MPN(m68k/m68k-defs.m4)
856     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
857     gcc_cflags_optlist="arch"
859     # gcc 2.7.2 knows -m68000, -m68020, -m68030, -m68040.
860     # gcc 2.95 adds -mcpu32, -m68060.
861     # FIXME: Maybe "-m68020 -mnobitfield" would suit cpu32 on 2.7.2.
862     #
863     case $host_cpu in
864     m68020)  gcc_cflags_arch="-m68020" ;;
865     m68030)  gcc_cflags_arch="-m68030" ;;
866     m68040)  gcc_cflags_arch="-m68040" ;;
867     m68060)  gcc_cflags_arch="-m68060 -m68000" ;;
868     m68360)  gcc_cflags_arch="-mcpu32 -m68000" ;;
869     *)       gcc_cflags_arch="-m68000" ;;
870     esac
872     # FIXME: m68k/mc68020 looks like it's ok for cpu32, but this wants to be
873     # tested.  Will need to introduce an m68k/cpu32 if m68k/mc68020 ever uses
874     # the bitfield instructions.
875     case $host_cpu in
876     [m680[234]0 | m68360])  path="m68k/mc68020 m68k" ;;
877     *)                      path="m68k" ;;
878     esac
879     ;;
882   # Motorola 88k
883   m88k*-*-*)
884     path="m88k"
885     ;;
886   m88110*-*-*)
887     gcc_cflags="$gcc_cflags -m88110"
888     path="m88k/mc88110 m88k"
889     ;;
892   # IRIX 5 and earlier can only run 32-bit o32.
893   #
894   # IRIX 6 and up always has a 64-bit mips CPU can run n32 or 64.  n32 is
895   # preferred over 64, but only because that's been the default in past
896   # versions of GMP.  The two are equally efficient.
897   #
898   # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not
899   # supporting n32 or 64.
900   #
901   # For reference, libtool (eg. 1.5.6) recognises the n32 ABI and knows the
902   # right options to use when linking (both cc and gcc), so no need for
903   # anything special from us.
904   #
905   mips*-*-*)
906     abilist="o32"
907     gcc_cflags_optlist="abi"
908     gcc_cflags_abi="-mabi=32"
909     gcc_testlist="gcc-mips-o32"
910     path="mips32"
911     cc_cflags="-O2 -o32"   # no -g, it disables all optimizations
912     # this suits both mips32 and mips64
913     GMP_INCLUDE_MPN(mips32/mips-defs.m4)
915     case $host in
916       [mips64*-*-* | mips*-*-irix[6789]*])
917         abilist="n32 64 o32"
919         cclist_n32="gcc cc"
920         gcc_n32_cflags="$gcc_cflags -mabi=n32"
921         cc_n32_cflags="-O2 -n32"        # no -g, it disables all optimizations
922         limb_n32=longlong
923         path_n32="mips64"
925         cclist_64="gcc cc"
926         gcc_64_cflags="$gcc_cflags -mabi=64"
927         gcc_64_ldflags="-Wc,-mabi=64"
928         cc_64_cflags="-O2 -64"          # no -g, it disables all optimizations
929         cc_64_ldflags="-Wc,-64"
930         path_64="mips64"
931         ;;
932     esac
933     ;;
936   # Darwin (powerpc-apple-darwin1.3) has it's hacked gcc installed as cc.
937   # Our usual "gcc in disguise" detection means gcc_cflags etc here gets
938   # used.
939   #
940   # The darwin pre-compiling preprocessor is disabled with -no-cpp-precomp
941   # since it doesn't like "__attribute__ ((mode (SI)))" etc in gmp-impl.h,
942   # and so always ends up running the plain preprocessor anyway.  This could
943   # be done in CPPFLAGS rather than CFLAGS, but there's not many places
944   # preprocessing is done separately, and this is only a speedup, the normal
945   # preprocessor gets run if there's any problems.
946   #
947   # We used to use -Wa,-mppc with gcc, but can't remember exactly why.
948   # Presumably it was for old versions of gcc where -mpowerpc doesn't put
949   # the assembler in the right mode.  In any case -Wa,-mppc is not good, for
950   # instance -mcpu=604 makes recent gcc use -m604 to get access to the
951   # "fsel" instruction, but a -Wa,-mppc overrides that, making code that
952   # comes out with fsel fail.
953   #
954   # (Note also that the darwin assembler doesn't accept "-mppc", so any
955   # -Wa,-mppc was used only if it worked.  The right flag on darwin would be
956   # "-arch ppc" or some such, but that's already the default.)
957   #
958   [powerpc*-*-* | power[3-9]-*-*])
959     AC_DEFINE(HAVE_HOST_CPU_FAMILY_powerpc)
960     HAVE_HOST_CPU_FAMILY_powerpc=1
961     abilist="32"
962     cclist="gcc cc"
963     cc_cflags="-O2"
964     gcc_32_cflags="$gcc_cflags -mpowerpc"
965     gcc_cflags_optlist="precomp subtype asm cpu"
966     gcc_cflags_precomp="-no-cpp-precomp"
967     gcc_cflags_subtype="-force_cpusubtype_ALL"  # for vmx on darwin
968     gcc_cflags_asm=""
969     gcc_cflags_cpu=""
970     vmx_path=""
972     # grab this object, though it's not a true cycle counter routine
973     SPEED_CYCLECOUNTER_OBJ=powerpc.lo
974     cyclecounter_size=0
976     case $host_cpu in
977       powerpc740 | powerpc750)
978         path="powerpc32/750 powerpc32" ;;
979       powerpc7400 | powerpc7410)
980         path="powerpc32/vmx powerpc32/750 powerpc32" ;;
981       [powerpc74[45]?])
982         path="powerpc32/vmx powerpc32" ;;
983       *)
984         path="powerpc32" ;;
985     esac
987     case $host_cpu in
988       powerpc401)   gcc_cflags_cpu="-mcpu=401" ;;
989       powerpc403)   gcc_cflags_cpu="-mcpu=403"
990                     xlc_cflags_arch="-qarch=403 -qarch=ppc" ;;
991       powerpc405)   gcc_cflags_cpu="-mcpu=405" ;;
992       powerpc505)   gcc_cflags_cpu="-mcpu=505" ;;
993       powerpc601)   gcc_cflags_cpu="-mcpu=601"
994                     xlc_cflags_arch="-qarch=601 -qarch=ppc" ;;
995       powerpc602)   gcc_cflags_cpu="-mcpu=602"
996                     xlc_cflags_arch="-qarch=602 -qarch=ppc" ;;
997       powerpc603)   gcc_cflags_cpu="-mcpu=603"
998                     xlc_cflags_arch="-qarch=603 -qarch=ppc" ;;
999       powerpc603e)  gcc_cflags_cpu="-mcpu=603e -mcpu=603"
1000                     xlc_cflags_arch="-qarch=603 -qarch=ppc" ;;
1001       powerpc604)   gcc_cflags_cpu="-mcpu=604"
1002                     xlc_cflags_arch="-qarch=604 -qarch=ppc" ;;
1003       powerpc604e)  gcc_cflags_cpu="-mcpu=604e -mcpu=604"
1004                     xlc_cflags_arch="-qarch=604 -qarch=ppc" ;;
1005       powerpc620)   gcc_cflags_cpu="-mcpu=620" ;;
1006       powerpc630)   gcc_cflags_cpu="-mcpu=630"
1007                     xlc_cflags_arch="-qarch=pwr3"
1008                     cpu_path="p3 p3-p7" ;;
1009       powerpc740)   gcc_cflags_cpu="-mcpu=740" ;;
1010       powerpc7400 | powerpc7410)
1011                     gcc_cflags_asm="-Wa,-maltivec"
1012                     gcc_cflags_cpu="-mcpu=7400 -mcpu=750" ;;
1013       [powerpc74[45]?])
1014                     gcc_cflags_asm="-Wa,-maltivec"
1015                     gcc_cflags_cpu="-mcpu=7450" ;;
1016       powerpc750)   gcc_cflags_cpu="-mcpu=750" ;;
1017       powerpc801)   gcc_cflags_cpu="-mcpu=801" ;;
1018       powerpc821)   gcc_cflags_cpu="-mcpu=821" ;;
1019       powerpc823)   gcc_cflags_cpu="-mcpu=823" ;;
1020       powerpc860)   gcc_cflags_cpu="-mcpu=860" ;;
1021       powerpc970)   gcc_cflags_cpu="-mtune=970"
1022                     xlc_cflags_arch="-qarch=970 -qarch=pwr3"
1023                     vmx_path="powerpc64/vmx"
1024                     cpu_path="p4 p3-p7" ;;
1025       power4)       gcc_cflags_cpu="-mtune=power4"
1026                     xlc_cflags_arch="-qarch=pwr4"
1027                     cpu_path="p4 p3-p7" ;;
1028       power5)       gcc_cflags_cpu="-mtune=power5 -mtune=power4"
1029                     xlc_cflags_arch="-qarch=pwr5"
1030                     cpu_path="p5 p4 p3-p7" ;;
1031       power6)       gcc_cflags_cpu="-mtune=power6"
1032                     xlc_cflags_arch="-qarch=pwr6"
1033                     cpu_path="p6 p3-p7" ;;
1034       power7)       gcc_cflags_cpu="-mtune=power7 -mtune=power5"
1035                     xlc_cflags_arch="-qarch=pwr7 -qarch=pwr5"
1036                     cpu_path="p7 p5 p4 p3-p7" ;;
1037     esac
1039     case $host in
1040       *-*-aix*)
1041         cclist="gcc xlc cc"
1042         gcc_32_cflags_maybe="-maix32"
1043         xlc_cflags="-O2 -qmaxmem=20000"
1044         xlc_cflags_optlist="arch"
1045         xlc_32_cflags_maybe="-q32"
1046         ar_32_flags="-X32"
1047         nm_32_flags="-X32"
1048     esac
1050     case $host in
1051       POWERPC64_PATTERN)
1052         case $host in
1053           *-*-aix*)
1054             # On AIX a true 64-bit ABI is available.
1055             # Need -Wc to pass object type flags through to the linker.
1056             abilist="mode64 $abilist"
1057             cclist_mode64="gcc xlc"
1058             gcc_mode64_cflags="$gcc_cflags -maix64 -mpowerpc64"
1059             gcc_mode64_cflags_optlist="cpu"
1060             gcc_mode64_ldflags="-Wc,-maix64"
1061             xlc_mode64_cflags="-O2 -q64 -qmaxmem=20000"
1062             xlc_mode64_cflags_optlist="arch"
1063             xlc_mode64_ldflags="-Wc,-q64"
1064             # Must indicate object type to ar and nm
1065             ar_mode64_flags="-X64"
1066             nm_mode64_flags="-X64"
1067             path_mode64=""
1068             p=""
1069             for i in $cpu_path
1070               do path_mode64="${path_mode64}powerpc64/mode64/$i "
1071                  path_mode64="${path_mode64}powerpc64/$i "
1072                  p="${p} powerpc32/$i "
1073               done
1074             path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
1075             path="$p $path"
1076             # grab this object, though it's not a true cycle counter routine
1077             SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo
1078             cyclecounter_size_mode64=0
1079             ;;
1080           *-*-darwin*)
1081             # On Darwin we can use 64-bit instructions with a longlong limb,
1082             # but the chip still in 32-bit mode.
1083             # In theory this can be used on any OS which knows how to save
1084             # 64-bit registers in a context switch.
1085             #
1086             # Note that we must use -mpowerpc64 with gcc, since the
1087             # longlong.h macros expect limb operands in a single 64-bit
1088             # register, not two 32-bit registers as would be given for a
1089             # long long without -mpowerpc64.  In theory we could detect and
1090             # accommodate both styles, but the proper 64-bit registers will
1091             # be fastest and are what we really want to use.
1092             #
1093             # One would think -mpowerpc64 would set the assembler in the right
1094             # mode to handle 64-bit instructions.  But for that, also
1095             # -force_cpusubtype_ALL is needed.
1096             #
1097             # Do not use -fast for Darwin, it actually adds options
1098             # incompatible with a shared library.
1099             #
1100             abilist="mode64 mode32 $abilist"
1101             gcc_32_cflags_maybe="-m32"
1102             gcc_cflags_opt="-O3 -O2 -O1"        # will this become used?
1103             cclist_mode32="gcc"
1104             gcc_mode32_cflags_maybe="-m32"
1105             gcc_mode32_cflags="-mpowerpc64"
1106             gcc_mode32_cflags_optlist="subtype cpu opt"
1107             gcc_mode32_cflags_subtype="-force_cpusubtype_ALL"
1108             gcc_mode32_cflags_opt="-O3 -O2 -O1"
1109             limb_mode32=longlong
1110             cclist_mode64="gcc"
1111             gcc_mode64_cflags="-m64"
1112             gcc_mode64_cflags_optlist="cpu opt"
1113             gcc_mode64_cflags_opt="-O3 -O2 -O1"
1114             path_mode64=""
1115             path_mode32=""
1116             p=""
1117             for i in $cpu_path
1118               do path_mode64="${path_mode64}powerpc64/mode64/$i "
1119                  path_mode64="${path_mode64}powerpc64/$i "
1120                  path_mode32="${path_mode32}powerpc64/mode32/$i "
1121                  path_mode32="${path_mode32}powerpc64/$i "
1122                  p="${p} powerpc32/$i "
1123               done
1124             path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
1125             path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64"
1126             path="$p $path"
1127             SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo
1128             cyclecounter_size_mode64=0
1129             any_mode64_testlist="sizeof-long-8"
1130             ;;
1131           *-*-linux* | *-*-*bsd*)
1132             # On GNU/Linux, assume the processor is in 64-bit mode.  Some
1133             # environments have a gcc that is always in 64-bit mode, while
1134             # others require -m64, hence the use of cflags_maybe.  The
1135             # sizeof-long-8 test checks the mode is right (for the no option
1136             # case).
1137             #
1138             # -mpowerpc64 is not used, since it should be the default in
1139             # 64-bit mode.  (We need its effect for the various longlong.h
1140             # asm macros to be right of course.)
1141             #
1142             # gcc64 was an early port of gcc to 64-bit mode, but should be
1143             # obsolete before too long.  We prefer plain gcc when it knows
1144             # 64-bits.
1145             #
1146             abilist="mode64 mode32 $abilist"
1147             gcc_32_cflags_maybe="-m32"
1148             cclist_mode32="gcc"
1149             gcc_mode32_cflags_maybe="-m32"
1150             gcc_mode32_cflags="-mpowerpc64"
1151             gcc_mode32_cflags_optlist="cpu opt"
1152             gcc_mode32_cflags_opt="-O3 -O2 -O1"
1153             limb_mode32=longlong
1154             cclist_mode64="gcc gcc64"
1155             gcc_mode64_cflags_maybe="-m64"
1156             gcc_mode64_cflags_optlist="cpu opt"
1157             gcc_mode64_cflags_opt="-O3 -O2 -O1"
1158             path_mode64=""
1159             path_mode32=""
1160             p=""
1161             for i in $cpu_path
1162               do path_mode64="${path_mode64}powerpc64/mode64/$i "
1163                  path_mode64="${path_mode64}powerpc64/$i "
1164                  path_mode32="${path_mode32}powerpc64/mode32/$i "
1165                  path_mode32="${path_mode32}powerpc64/$i "
1166                  p="${p} powerpc32/$i "
1167               done
1168             path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
1169             path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64"
1170             path="$p $path"
1171             SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo
1172             cyclecounter_size_mode64=0
1173             any_mode64_testlist="sizeof-long-8"
1174             ;;
1175         esac
1176         ;;
1177     esac
1178     ;;
1181   # POWER 32-bit
1182   [power-*-* | power[12]-*-* | power2sc-*-*])
1183     AC_DEFINE(HAVE_HOST_CPU_FAMILY_power)
1184     HAVE_HOST_CPU_FAMILY_power=1
1185     cclist="gcc"
1186     extra_functions="udiv_w_sdiv"
1187     path="power"
1189     # gcc 2.7.2 knows rios1, rios2, rsc
1190     #
1191     # -mcpu=rios2 can tickle an AIX assembler bug (see GMP_PROG_CC_WORKS) so
1192     # there needs to be a fallback to just -mpower.
1193     #
1194     gcc_cflags_optlist="cpu"
1195     case $host in
1196       power-*-*)    gcc_cflags_cpu="-mcpu=power -mpower" ;;
1197       power1-*-*)   gcc_cflags_cpu="-mcpu=rios1 -mpower" ;;
1198       power2-*-*)   gcc_cflags_cpu="-mcpu=rios2 -mpower" ;;
1199       power2sc-*-*) gcc_cflags_cpu="-mcpu=rsc   -mpower" ;;
1200     esac
1201     case $host in
1202     *-*-aix*)
1203       cclist="gcc xlc"
1204       xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000"
1205       ;;
1206     esac
1207     ;;
1210   # IBM System/390 and z/Architecture
1211   S390_PATTERN | S390X_PATTERN)
1212     abilist="32"
1213     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
1214     gcc_cflags_optlist="arch"
1215     path="s390_32"
1216     extra_functions="udiv_w_sdiv"
1217     gcc_32_cflags_maybe="-m31"
1219     case $host_cpu in
1220       s390)
1221         ;;
1222       z900 | z900esa)
1223         cpu="z900"
1224         gccarch="$cpu"
1225         path="s390_32/esame/$cpu s390_32/esame s390_32"
1226         gcc_cflags_arch="-march=$gccarch"
1227         AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu)
1228         AC_DEFINE(HAVE_HOST_CPU_s390_zarch)
1229         extra_functions=""
1230         ;;
1231       z990 | z990esa)
1232         cpu="z990"
1233         gccarch="$cpu"
1234         path="s390_32/esame/$cpu s390_32/esame s390_32"
1235         gcc_cflags_arch="-march=$gccarch"
1236         AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu)
1237         AC_DEFINE(HAVE_HOST_CPU_s390_zarch)
1238         extra_functions=""
1239         ;;
1240       z9 | z9esa)
1241         cpu="z9"
1242         gccarch="z9-109"
1243         path="s390_32/esame/$cpu s390_32/esame s390_32"
1244         gcc_cflags_arch="-march=$gccarch"
1245         AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu)
1246         AC_DEFINE(HAVE_HOST_CPU_s390_zarch)
1247         extra_functions=""
1248         ;;
1249       z10 | z10esa)
1250         cpu="z10"
1251         gccarch="z10"
1252         path="s390_32/esame/$cpu s390_32/esame s390_32"
1253         gcc_cflags_arch="-march=$gccarch"
1254         AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu)
1255         AC_DEFINE(HAVE_HOST_CPU_s390_zarch)
1256         extra_functions=""
1257         ;;
1258       z196 | z196esa)
1259         cpu="z196"
1260         gccarch="z196"
1261         path="s390_32/esame/$cpu s390_32/esame s390_32"
1262         gcc_cflags_arch="-march=$gccarch"
1263         AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu)
1264         AC_DEFINE(HAVE_HOST_CPU_s390_zarch)
1265         extra_functions=""
1266         ;;
1267       esac
1269     case $host in
1270       S390X_PATTERN)
1271         abilist="64 32"
1272         cclist_64="gcc"
1273         gcc_64_cflags_optlist="arch"
1274         gcc_64_cflags="$gcc_cflags -m64"
1275         path_64="s390_64/$host_cpu s390_64"
1276         extra_functions=""
1277         ;;
1278       esac
1279     ;;
1282   sh-*-*)   path="sh" ;;
1283   [sh[2-4]-*-*])  path="sh/sh2 sh" ;;
1286   *sparc*-*-*)
1287     # sizeof(long)==4 or 8 is tested, to ensure we get the right ABI.  We've
1288     # had various bug reports where users have set CFLAGS for their desired
1289     # mode, but not set our ABI.  For some reason it's sparc where this
1290     # keeps coming up, presumably users there are accustomed to driving the
1291     # compiler mode that way.  The effect of our testlist setting is to
1292     # reject ABI=64 in favour of ABI=32 if the user has forced the flags to
1293     # 32-bit mode.
1294     #
1295     abilist="32"
1296     cclist="gcc acc cc"
1297     any_testlist="sizeof-long-4"
1298     GMP_INCLUDE_MPN(sparc32/sparc-defs.m4)
1300     case $host_cpu in
1301       sparcv8 | microsparc | turbosparc)
1302         path="sparc32/v8 sparc32" ;;
1303       supersparc)
1304         path="sparc32/v8/supersparc sparc32/v8 sparc32" ;;
1305       [sparc64 | sparcv9* | ultrasparc | ultrasparc[234]*])
1306         path="sparc32/v9 sparc32/v8 sparc32" ;;
1307       [ultrasparct[12345]])
1308         path="sparc32/ultrasparct1 sparc32/v8 sparc32" ;;
1309       *)
1310         path="sparc32" ;;
1311     esac
1313     # gcc 2.7.2 doesn't know about v9 and doesn't pass -xarch=v8plus to the
1314     # assembler.  Add it explicitly since the solaris assembler won't accept
1315     # our sparc32/v9 asm code without it.  gas accepts -xarch=v8plus too, so
1316     # it can be in the cflags unconditionally (though gas doesn't need it).
1317     #
1318     # gcc -m32 is needed to force 32-bit mode on a dual-ABI system, but past
1319     # gcc doesn't know that flag, hence cflags_maybe.  Note that -m32 cannot
1320     # be done through the optlist since the plain cflags would be run first
1321     # and we don't want to require the default mode (whatever it is) works.
1322     #
1323     # Note it's gcc_32_cflags_maybe and not gcc_cflags_maybe because the
1324     # latter would be used in the 64-bit ABI on systems like "*bsd" where
1325     # abilist="64" only.
1326     #
1327     gcc_32_cflags_maybe="-m32"
1328     gcc_cflags_optlist="cpu asm"
1330     # gcc 2.7.2 knows -mcypress, -msupersparc, -mv8, -msparclite.
1331     # gcc 2.95 knows -mcpu= v7, hypersparc, sparclite86x, f930, f934,
1332     #   sparclet, tsc701, v9, ultrasparc.  A warning is given that the
1333     #   plain -m forms will disappear.
1334     # gcc 3.3 adds ultrasparc3.
1335     #
1336     case $host_cpu in
1337       supersparc*)
1338                         gcc_cflags_cpu="-mcpu=supersparc -msupersparc"
1339                         gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";;
1340       sparcv8 | microsparc* | turbosparc | hypersparc*)
1341                         gcc_cflags_cpu="-mcpu=v8 -mv8"
1342                         gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";;
1343       sparc64 | sparcv9*)
1344                         gcc_cflags_cpu="-mcpu=v9"
1345                         gcc_32_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8plus"
1346                         gcc_64_cflags_asm="-Wa,-Av9 -Wa,-xarch=v9";;
1347       ultrasparc1 | ultrasparc2*)
1348                         gcc_cflags_cpu="-mcpu=ultrasparc -mcpu=v9"
1349                         gcc_32_cflags_asm="-Wa,-Av8plusa -Wa,-xarch=v8plusa"
1350                         gcc_64_cflags_asm="-Wa,-Av9a -Wa,-xarch=v9a";;
1351       [ultrasparc[34]])
1352                         gcc_cflags_cpu="-mcpu=ultrasparc3 -mcpu=ultrasparc -mcpu=v9"
1353                         gcc_32_cflags_asm="-Wa,-Av8plusb -Wa,-xarch=v8plusb"
1354                         gcc_64_cflags_asm="-Wa,-Av9b -Wa,-xarch=v9b";;
1355       [ultrasparct[12]])
1356                         gcc_cflags_cpu="-mcpu=niagara -mcpu=v9"
1357                         gcc_32_cflags_asm="-Wa,-Av8plusc -Wa,-xarch=v8plusc"
1358                         gcc_64_cflags_asm="-Wa,-Av9c -Wa,-xarch=v9c";;
1359       ultrasparct3)
1360                         gcc_cflags_cpu="-mcpu=niagara3 -mcpu=niagara -mcpu=v9"
1361                         gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd"
1362                         gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";;
1363       ultrasparct4)
1364                         gcc_cflags_cpu="-mcpu=niagara4 -mcpu=niagara3 -mcpu=niagara -mcpu=v9"
1365                         gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd"
1366                         gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";;
1367       *)
1368                         gcc_cflags_cpu="-mcpu=v7 -mcypress"
1369                         gcc_cflags_asm="";;
1370     esac
1372     # SunPRO cc and acc, and SunOS bundled cc
1373     case $host in
1374       *-*-solaris* | *-*-sunos*)
1375         # Note no -g, it disables all optimizations.
1376         cc_cflags=
1377         cc_cflags_optlist="opt arch cpu"
1379         # SunOS cc doesn't know -xO4, fallback to -O2.
1380         cc_cflags_opt="-xO4 -O2"
1382         # SunOS cc doesn't know -xarch, apparently always generating v7
1383         # code, so make this optional
1384         case $host_cpu in
1385           sparcv8 | microsparc* | supersparc* | turbosparc | hypersparc*)
1386                         cc_cflags_arch="-xarch=v8";;
1387           [ultrasparct[345]])
1388                         cc_cflags_arch="-xarch=v8plusd" ;;
1389           sparc64 | sparcv9* | ultrasparc*)
1390                         cc_cflags_arch="-xarch=v8plus" ;;
1391           *)
1392                         cc_cflags_arch="-xarch=v7" ;;
1393         esac
1395         # SunOS cc doesn't know -xchip and doesn't seem to have an equivalent.
1396         # SunPRO cc 5 recognises -xchip=generic, old, super, super2, micro,
1397         #   micro2, hyper, hyper2, powerup, ultra, ultra2, ultra2i.
1398         # SunPRO cc 6 adds -xchip=ultra2e, ultra3cu.
1399         #
1400         case $host_cpu in
1401           supersparc*)  cc_cflags_cpu="-xchip=super" ;;
1402           microsparc*)  cc_cflags_cpu="-xchip=micro" ;;
1403           turbosparc)   cc_cflags_cpu="-xchip=micro2" ;;
1404           hypersparc*)  cc_cflags_cpu="-xchip=hyper" ;;
1405           ultrasparc)   cc_cflags_cpu="-xchip=ultra" ;;
1406           ultrasparc2)  cc_cflags_cpu="-xchip=ultra2 -xchip=ultra" ;;
1407           ultrasparc2i) cc_cflags_cpu="-xchip=ultra2i -xchip=ultra2 -xchip=ultra" ;;
1408           ultrasparc3)  cc_cflags_cpu="-xchip=ultra3 -xchip=ultra" ;;
1409           ultrasparc4)  cc_cflags_cpu="-xchip=ultra4 -xchip=ultra3 -xchip=ultra" ;;
1410           ultrasparct1) cc_cflags_cpu="-xchip=ultraT1" ;;
1411           ultrasparct2) cc_cflags_cpu="-xchip=ultraT2 -xchip=ultraT1" ;;
1412           ultrasparct3) cc_cflags_cpu="-xchip=ultraT3 -xchip=ultraT2" ;;
1413           ultrasparct4) cc_cflags_cpu="-xchip=T4" ;;
1414           ultrasparct5) cc_cflags_cpu="-xchip=T5 -xchip=T4" ;;
1415           *)            cc_cflags_cpu="-xchip=generic" ;;
1416         esac
1417     esac
1419     case $host_cpu in
1420       sparc64 | sparcv9* | ultrasparc*)
1421         case $host in
1422           # Solaris 6 and earlier cannot run ABI=64 since it doesn't save
1423           # registers properly, so ABI=32 is left as the only choice.
1424           #
1425           [*-*-solaris2.[0-6] | *-*-solaris2.[0-6].*]) ;;
1427           # BSD sparc64 ports are 64-bit-only systems, so ABI=64 is the only
1428           # choice.  In fact they need no special compiler flags, gcc -m64
1429           # is the default, but it doesn't hurt to add it.  v9 CPUs always
1430           # use the sparc64 port, since the plain 32-bit sparc ports don't
1431           # run on a v9.
1432           #
1433           *-*-*bsd*) abilist="64" ;;
1435           # For all other systems, we try both 64 and 32.
1436           #
1437           # GNU/Linux sparc64 has only recently gained a 64-bit user mode.
1438           # In the past sparc64 meant a v9 cpu, but there were no 64-bit
1439           # operations in user mode.  We assume that if "gcc -m64" works
1440           # then the system is suitable.  Hopefully even if someone attempts
1441           # to put a new gcc and/or glibc on an old system it won't run.
1442           #
1443           *) abilist="64 32" ;;
1444         esac
1446         case $host_cpu in
1447           ultrasparc | ultrasparc2 | ultrasparc2i)
1448             path_64="sparc64/ultrasparc1234 sparc64" ;;
1449           [ultrasparc[34]])
1450             path_64="sparc64/ultrasparc34 sparc64/ultrasparc1234 sparc64" ;;
1451           [ultrasparct[12]])
1452             path_64="sparc64/ultrasparct1 sparc64" ;;
1453           [ultrasparct[345]])
1454             path_64="sparc64/ultrasparct3 sparc64" ;;
1455           *)
1456             path_64="sparc64"
1457         esac
1459         cclist_64="gcc"
1460         any_64_testlist="sizeof-long-8"
1462         # gcc -mptr64 is probably implied by -m64, but we're not sure if
1463         # this was always so.  On Solaris in the past we always used both
1464         # "-m64 -mptr64".
1465         #
1466         # gcc -Wa,-xarch=v9 is thought to be necessary in some cases on
1467         # solaris, but it would seem likely that if gcc is going to generate
1468         # 64-bit code it will have to add that option itself where needed.
1469         # An extra copy of this option should be harmless though, but leave
1470         # it until we're sure.  (Might want -xarch=v9a or -xarch=v9b for the
1471         # higher cpu types instead.)
1472         #
1473         gcc_64_cflags="$gcc_cflags -m64 -mptr64"
1474         gcc_64_ldflags="-Wc,-m64"
1475         gcc_64_cflags_optlist="cpu asm"
1477         case $host in
1478           *-*-solaris*)
1479             # Sun cc.
1480             #
1481             # We used to have -fast and some fixup options here, but it
1482             # recurrently caused problems with miscompilation.  Of course,
1483             # -fast is documented as miscompiling things for the sake of speed.
1484             #
1485             cclist_64="$cclist_64 cc"
1486             cc_64_cflags_optlist="cpu"
1487             case $host_cpu in
1488               [ultrasparct[345]])
1489                 cc_64_cflags="$cc_64_cflags -xO3 -xarch=v9d" ;;
1490               *)
1491                 cc_64_cflags="-xO3 -xarch=v9" ;;
1492             esac
1493             ;;
1494         esac
1496         # using the v9 %tick register
1497         SPEED_CYCLECOUNTER_OBJ_32=sparcv9.lo
1498         SPEED_CYCLECOUNTER_OBJ_64=sparcv9.lo
1499         cyclecounter_size_32=2
1500         cyclecounter_size_64=2
1501         ;;
1502     esac
1503     ;;
1506   # VAX
1507   vax*-*-*elf*)
1508     # Use elf conventions (i.e., '%' register prefix, no global prefix)
1509     #
1510     GMP_INCLUDE_MPN(vax/elf.m4)
1511     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
1512     path="vax"
1513     extra_functions="udiv_w_sdiv"
1514     ;;
1515   vax*-*-*)
1516     # Default to aout conventions (i.e., no register prefix, '_' global prefix)
1517     #
1518     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
1519     path="vax"
1520     extra_functions="udiv_w_sdiv"
1521     ;;
1524   # AMD and Intel x86 configurations, including AMD64
1525   #
1526   # Rumour has it gcc -O2 used to give worse register allocation than just
1527   # -O, but lets assume that's no longer true.
1528   #
1529   # -m32 forces 32-bit mode on a bi-arch 32/64 amd64 build of gcc.  -m64 is
1530   # the default in such a build (we think), so -m32 is essential for ABI=32.
1531   # This is, of course, done for any $host_cpu, not just x86_64, so we can
1532   # get such a gcc into the right mode to cross-compile to say i486-*-*.
1533   #
1534   # -m32 is not available in gcc 2.95 and earlier, hence cflags_maybe to use
1535   # it when it works.  We check sizeof(long)==4 to ensure we get the right
1536   # mode, in case -m32 has failed not because it's an old gcc, but because
1537   # it's a dual 32/64-bit gcc without a 32-bit libc, or whatever.
1538   #
1539   X86_PATTERN | X86_64_PATTERN)
1540     abilist="32"
1541     cclist="gcc icc cc"
1542     gcc_cflags="$gcc_cflags $fomit_frame_pointer"
1543     gcc_32_cflags_maybe="-m32"
1544     icc_cflags="-no-gcc"
1545     icc_cflags_optlist="opt"
1546     icc_cflags_opt="-O3 -O2 -O1"
1547     any_32_testlist="sizeof-long-4"
1548     CALLING_CONVENTIONS_OBJS='x86call.lo x86check$U.lo'
1550     # Availability of rdtsc is checked at run-time.
1551     SPEED_CYCLECOUNTER_OBJ=pentium.lo
1553     # gcc 2.7.2 only knows i386 and i486, using -m386 or -m486.  These
1554     #     represent -mcpu= since -m486 doesn't generate 486 specific insns.
1555     # gcc 2.95 adds k6, pentium and pentiumpro, and takes -march= and -mcpu=.
1556     # gcc 3.0 adds athlon.
1557     # gcc 3.1 adds k6-2, k6-3, pentium-mmx, pentium2, pentium3, pentium4,
1558     #     athlon-tbird, athlon-4, athlon-xp, athlon-mp.
1559     # gcc 3.2 adds winchip2.
1560     # gcc 3.3 adds winchip-c6.
1561     # gcc 3.3.1 from mandrake adds k8 and knows -mtune.
1562     # gcc 3.4 adds c3, c3-2, k8, and deprecates -mcpu in favour of -mtune.
1563     #
1564     # In gcc 2.95.[0123], -march=pentiumpro provoked a stack slot bug in an
1565     # old version of mpz/powm.c.  Seems to be fine with the current code, so
1566     # no need for any restrictions on that option.
1567     #
1568     # -march=pentiumpro can fail if the assembler doesn't know "cmov"
1569     # (eg. solaris 2.8 native "as"), so always have -march=pentium after
1570     # that as a fallback.
1571     #
1572     # -march=pentium4 and -march=k8 enable SSE2 instructions, which may or
1573     # may not be supported by the assembler and/or the OS, and is bad in gcc
1574     # prior to 3.3.  The tests will reject these if no good, so fallbacks
1575     # like "-march=pentium4 -mno-sse2" are given to try also without SSE2.
1576     # Note the relevant -march types are listed in the optflags handling
1577     # below, be sure to update there if adding new types emitting SSE2.
1578     #
1579     # -mtune is used at the start of each cpu option list to give something
1580     # gcc 3.4 will use, thereby avoiding warnings from -mcpu.  -mcpu forms
1581     # are retained for use by prior gcc.  For example pentium has
1582     # "-mtune=pentium -mcpu=pentium ...", the -mtune is for 3.4 and the
1583     # -mcpu for prior.  If there's a brand new choice in 3.4 for a chip,
1584     # like k8 for x86_64, then it can be the -mtune at the start, no need to
1585     # duplicate anything.
1586     #
1587     gcc_cflags_optlist="cpu arch"
1588     case $host_cpu in
1589       i386*)
1590         gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386"
1591         gcc_cflags_arch="-march=i386"
1592         path="x86"
1593         ;;
1594       i486*)
1595         gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486"
1596         gcc_cflags_arch="-march=i486"
1597         path="x86/i486 x86"
1598         ;;
1599       i586 | pentium)
1600         gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486"
1601         gcc_cflags_arch="-march=pentium"
1602         path="x86/pentium x86"
1603         ;;
1604       pentiummmx)
1605         gcc_cflags_cpu="-mtune=pentium-mmx -mcpu=pentium-mmx -mcpu=pentium -m486"
1606         gcc_cflags_arch="-march=pentium-mmx -march=pentium"
1607         path="x86/pentium/mmx x86/pentium x86/mmx x86"
1608         ;;
1609       i686 | pentiumpro)
1610         gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486"
1611         gcc_cflags_arch="-march=pentiumpro -march=pentium"
1612         path="x86/p6 x86"
1613         ;;
1614       pentium2)
1615         gcc_cflags_cpu="-mtune=pentium2 -mcpu=pentium2 -mcpu=pentiumpro -mcpu=i486 -m486"
1616         gcc_cflags_arch="-march=pentium2 -march=pentiumpro -march=pentium"
1617         path="x86/p6/mmx x86/p6 x86/mmx x86"
1618         ;;
1619       pentium3)
1620         gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486"
1621         gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium"
1622         path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1623         ;;
1624       pentiumm)
1625         gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486"
1626         gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium"
1627         path="x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1628         ;;
1629       k6)
1630         gcc_cflags_cpu="-mtune=k6 -mcpu=k6 -mcpu=i486 -m486"
1631         gcc_cflags_arch="-march=k6"
1632         path="x86/k6/mmx x86/k6 x86/mmx x86"
1633         ;;
1634       k62)
1635         gcc_cflags_cpu="-mtune=k6-2 -mcpu=k6-2 -mcpu=k6 -mcpu=i486 -m486"
1636         gcc_cflags_arch="-march=k6-2 -march=k6"
1637         path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86"
1638         ;;
1639       k63)
1640         gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486"
1641         gcc_cflags_arch="-march=k6-3 -march=k6"
1642         path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86"
1643         ;;
1644       geode)
1645         gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486"
1646         gcc_cflags_arch="-march=k6-3 -march=k6"
1647         path="x86/geode x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86"
1648         ;;
1649       athlon)
1650         # Athlon instruction costs are close to P6 (3 cycle load latency,
1651         # 4-6 cycle mul, 40 cycle div, pairable adc, etc) so if gcc doesn't
1652         # know athlon (eg. 2.95.2 doesn't) then fall back on pentiumpro.
1653         gcc_cflags_cpu="-mtune=athlon -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486"
1654         gcc_cflags_arch="-march=athlon -march=pentiumpro -march=pentium"
1655         path="x86/k7/mmx x86/k7 x86/mmx x86"
1656         ;;
1657       i786 | pentium4)
1658         # pentiumpro is the primary fallback when gcc doesn't know pentium4.
1659         # This gets us cmov to eliminate branches.  Maybe "athlon" would be
1660         # a possibility on gcc 3.0.
1661         #
1662         gcc_cflags_cpu="-mtune=pentium4 -mcpu=pentium4 -mcpu=pentiumpro -mcpu=i486 -m486"
1663         gcc_cflags_arch="-march=pentium4 -march=pentium4~-mno-sse2 -march=pentiumpro -march=pentium"
1664         gcc_64_cflags_cpu="-mtune=nocona"
1665         path="x86/pentium4/sse2 x86/pentium4/mmx x86/pentium4 x86/mmx x86"
1666         path_64="x86_64/pentium4 x86_64"
1667         ;;
1668       viac32)
1669         # Not sure of the best fallbacks here for -mcpu.
1670         # c3-2 has sse and mmx, so pentium3 is good for -march.
1671         gcc_cflags_cpu="-mtune=c3-2 -mcpu=c3-2 -mcpu=i486 -m486"
1672         gcc_cflags_arch="-march=c3-2 -march=pentium3 -march=pentiumpro -march=pentium"
1673         path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1674         ;;
1675       viac3*)
1676         # Not sure of the best fallbacks here.
1677         gcc_cflags_cpu="-mtune=c3 -mcpu=c3 -mcpu=i486 -m486"
1678         gcc_cflags_arch="-march=c3 -march=pentium-mmx -march=pentium"
1679         path="x86/pentium/mmx x86/pentium x86/mmx x86"
1680         ;;
1681       athlon64 | k8 | x86_64)
1682         gcc_cflags_cpu="-mtune=k8 -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486"
1683         gcc_cflags_arch="-march=k8 -march=k8~-mno-sse2 -march=athlon -march=pentiumpro -march=pentium"
1684         path="x86/k8 x86/k7/mmx x86/k7 x86/mmx x86"
1685         path_64="x86_64/k8 x86_64"
1686         ;;
1687       k10)
1688         gcc_cflags_cpu="-mtune=amdfam10 -mtune=k8"
1689         gcc_cflags_arch="-march=amdfam10 -march=k8 -march=k8~-mno-sse2"
1690         path="x86/k10 x86/k8 x86/k7/mmx x86/k7 x86/mmx x86"
1691         path_64="x86_64/k10 x86_64/k8 x86_64"
1692         ;;
1693       bobcat)
1694         gcc_cflags_cpu="-mtune=btver1 -mtune=amdfam10 -mtune=k8"
1695         gcc_cflags_arch="-march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2"
1696         path="x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86"
1697         path_64="x86_64/bobcat x86_64/k10 x86_64/k8 x86_64"
1698         ;;
1699       jaguar)
1700         gcc_cflags_cpu="-mtune=btver2 -mtune=btver1 -mtune=amdfam10 -mtune=k8"
1701         gcc_cflags_arch="-march=btver2 -march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2"
1702         path="x86/jaguar x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86"
1703         path_64="x86_64/jaguar x86_64/bobcat x86_64/k10 x86_64/k8 x86_64"
1704         ;;
1705       bulldozer | bd1)
1706         gcc_cflags_cpu="-mtune=bdver1 -mtune=amdfam10 -mtune=k8"
1707         gcc_cflags_arch="-march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2"
1708         path="x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86"
1709         path_64="x86_64/bd1 x86_64/k10 x86_64/k8 x86_64"
1710         ;;
1711       piledriver | bd2)
1712         gcc_cflags_cpu="-mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8"
1713         gcc_cflags_arch="-march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2"
1714         path="x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86"
1715         path_64="x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64"
1716         ;;
1717       steamroller | bd3)
1718         gcc_cflags_cpu="-mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8"
1719         gcc_cflags_arch="-march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2"
1720         path="x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86"
1721         path_64="x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64"
1722         ;;
1723       excavator | bd4)
1724         gcc_cflags_cpu="-mtune=bdver4 -mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8"
1725         gcc_cflags_arch="-march=bdver4 -march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2"
1726         path="x86/bd4 x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86"
1727         path_64="x86_64/bd4 x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64"
1728         ;;
1729       core2)
1730         gcc_cflags_cpu="-mtune=core2 -mtune=k8"
1731         gcc_cflags_arch="-march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2"
1732         path="x86/core2 x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1733         path_64="x86_64/core2 x86_64"
1734        ;;
1735       corei | coreinhm | coreiwsm)
1736         gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8"
1737         gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2"
1738         path="x86/coreinhm x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1739         path_64="x86_64/coreinhm x86_64/core2 x86_64"
1740         ;;
1741       coreisbr)
1742         gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8"
1743         gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2"
1744         path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1745         path_64="x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64"
1746         ;;
1747       coreihwl)
1748         gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8"
1749         gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2"
1750         path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1751         path_64="x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64"
1752         ;;
1753       coreibwl)
1754         gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8"
1755         gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2"
1756         path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86"
1757         path_64="x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64"
1758         # extra_functions_64="missing"   # enable for bmi2/adx simulation
1759         ;;
1760       atom)
1761         gcc_cflags_cpu="-mtune=atom -mtune=pentium3"
1762         gcc_cflags_arch="-march=atom -march=pentium3"
1763         path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86"
1764         path_64="x86_64/atom x86_64"
1765         ;;
1766       nano)
1767         gcc_cflags_cpu="-mtune=nano"
1768         gcc_cflags_arch="-march=nano"
1769         path="x86/nano x86/mmx x86"
1770         path_64="x86_64/nano x86_64"
1771         ;;
1772       *)
1773         gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486"
1774         gcc_cflags_arch="-march=i486"
1775         path="x86"
1776         path_64="x86_64"
1777         ;;
1778     esac
1780     case $host in
1781       X86_64_PATTERN)
1782         cclist_64="gcc cc"
1783         gcc_64_cflags="$gcc_cflags -m64"
1784         gcc_64_cflags_optlist="cpu arch"
1785         CALLING_CONVENTIONS_OBJS_64='amd64call.lo amd64check$U.lo'
1786         SPEED_CYCLECOUNTER_OBJ_64=x86_64.lo
1787         cyclecounter_size_64=2
1789         cclist_x32="gcc cc"
1790         gcc_x32_cflags="$gcc_cflags -mx32"
1791         gcc_x32_cflags_optlist="$gcc_64_cflags_optlist"
1792         CALLING_CONVENTIONS_OBJS_x32="$CALLING_CONVENTIONS_OBJS_64"
1793         SPEED_CYCLECOUNTER_OBJ_x32="$SPEED_CYCLECOUNTER_OBJ_64"
1794         cyclecounter_size_x32="$cyclecounter_size_64"
1795         path_x32="$path_64"
1796         limb_x32=longlong
1797         any_x32_testlist="sizeof-long-4"
1799         abilist="64 x32 32"
1800         if test "$enable_assembly" = "yes" ; then
1801             extra_functions_64="$extra_functions_64 invert_limb_table"
1802             extra_functions_x32=$extra_functions_64
1803         fi
1805         case $host in
1806           *-*-solaris*)
1807             # Sun cc.
1808             cc_64_cflags="-xO3 -m64"
1809             ;;
1810           *-*-mingw* | *-*-cygwin)
1811             limb_64=longlong
1812             CALLING_CONVENTIONS_OBJS_64=""
1813             AC_DEFINE(HOST_DOS64,1,[Define to 1 for Windos/64])
1814             GMP_NONSTD_ABI_64=DOS64
1815             ;;
1816         esac
1817         ;;
1818     esac
1819     ;;
1822   # Special CPU "none" used to select generic C, now this is obsolete.
1823   none-*-*)
1824     enable_assembly=no
1825     AC_MSG_WARN([the \"none\" host is obsolete, use --disable-assembly])
1826     ;;
1828 esac
1830 # mingw can be built by the cygwin gcc if -mno-cygwin is added.  For
1831 # convenience add this automatically if it works.  Actual mingw gcc accepts
1832 # -mno-cygwin too, but of course is the default.  mingw only runs on the
1833 # x86s, but allow any CPU here so as to catch "none" too.
1835 case $host in
1836   *-*-mingw*)
1837     gcc_cflags_optlist="$gcc_cflags_optlist nocygwin"
1838     gcc_cflags_nocygwin="-mno-cygwin"
1839     ;;
1840 esac
1843 CFLAGS_or_unset=${CFLAGS-'(unset)'}
1844 CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'}
1846 cat >&AC_FD_CC <<EOF
1847 User:
1848 ABI=$ABI
1849 CC=$CC
1850 CFLAGS=$CFLAGS_or_unset
1851 CPPFLAGS=$CPPFLAGS_or_unset
1852 MPN_PATH=$MPN_PATH
1853 GMP:
1854 abilist=$abilist
1855 cclist=$cclist
1859 test_CFLAGS=${CFLAGS+set}
1860 test_CPPFLAGS=${CPPFLAGS+set}
1862 for abi in $abilist; do
1863   abi_last="$abi"
1864 done
1866 # If the user specifies an ABI then it must be in $abilist, after that
1867 # $abilist is restricted to just that choice.
1869 if test -n "$ABI"; then
1870   found=no
1871   for abi in $abilist; do
1872     if test $abi = "$ABI"; then found=yes; break; fi
1873   done
1874   if test $found = no; then
1875     AC_MSG_ERROR([ABI=$ABI is not among the following valid choices: $abilist])
1876   fi
1877   abilist="$ABI"
1880 found_compiler=no
1882 for abi in $abilist; do
1884   echo "checking ABI=$abi"
1886   # Suppose abilist="64 32", then for abi=64, will have abi1="_64" and
1887   # abi2="_64".  For abi=32, will have abi1="_32" and abi2="".  This is how
1888   # $gcc_cflags becomes a fallback for $gcc_32_cflags (the last in the
1889   # abilist), but there's no fallback for $gcc_64_cflags.
1890   #
1891   abi1=[`echo _$abi | sed 's/[.]//g'`]
1892   if test $abi = $abi_last; then abi2=; else abi2="$abi1"; fi
1894   # Compiler choices under this ABI
1895                               eval cclist_chosen=\"\$cclist$abi1\"
1896   test -n "$cclist_chosen" || eval cclist_chosen=\"\$cclist$abi2\"
1898   # If there's a user specified $CC then don't use a list for
1899   # $cclist_chosen, just a single value for $ccbase.
1900   #
1901   if test -n "$CC"; then
1903     # The first word of $CC, stripped of any directory.  For instance
1904     # CC="/usr/local/bin/gcc -pipe" will give "gcc".
1905     #
1906     for ccbase in $CC; do break; done
1907     ccbase=`echo $ccbase | sed 's:.*/::'`
1909     # If this $ccbase is in $cclist_chosen then it's a compiler we know and
1910     # we can do flags defaulting with it.  If not, then $cclist_chosen is
1911     # set to "unrecognised" so no default flags are used.
1912     #
1913     # "unrecognised" is used to avoid bad effects with eval if $ccbase has
1914     # non-symbol characters.  For instance ccbase=my+cc would end up with
1915     # something like cflags="$my+cc_cflags" which would give
1916     # cflags="+cc_cflags" rather than the intended empty string for an
1917     # unknown compiler.
1918     #
1919     found=unrecognised
1920     for i in $cclist_chosen; do
1921       if test "$ccbase" = $i; then
1922         found=$ccbase
1923         break
1924       fi
1925     done
1926     cclist_chosen=$found
1927   fi
1929   for ccbase in $cclist_chosen; do
1931     # When cross compiling, look for a compiler with the $host_alias as a
1932     # prefix, the same way that AC_CHECK_TOOL does.  But don't do this to a
1933     # user-selected $CC.
1934     #
1935     # $cross_compiling will be yes/no/maybe at this point.  Do the host
1936     # prefixing for "maybe" as well as "yes".
1937     #
1938     if test "$cross_compiling" != no && test -z "$CC"; then
1939       cross_compiling_prefix="${host_alias}-"
1940     fi
1942     for ccprefix in $cross_compiling_prefix ""; do
1944       cc="$CC"
1945       test -n "$cc" || cc="$ccprefix$ccbase"
1947       # If the compiler is gcc but installed under another name, then change
1948       # $ccbase so as to use the flags we know for gcc.  This helps for
1949       # instance when specifying CC=gcc272 on Debian GNU/Linux, or the
1950       # native cc which is really gcc on NeXT or MacOS-X.
1951       #
1952       # FIXME: There's a slight misfeature here.  If cc is actually gcc but
1953       # gcc is not a known compiler under this $abi then we'll end up
1954       # testing it with no flags and it'll work, but chances are it won't be
1955       # in the right mode for the ABI we desire.  Let's quietly hope this
1956       # doesn't happen.
1957       #
1958       if test $ccbase != gcc; then
1959         GMP_PROG_CC_IS_GNU($cc,ccbase=gcc)
1960       fi
1962       # Similarly if the compiler is IBM xlc but invoked as cc or whatever
1963       # then change $ccbase and make the default xlc flags available.
1964       if test $ccbase != xlc; then
1965         GMP_PROG_CC_IS_XLC($cc,ccbase=xlc)
1966       fi
1968       # acc was Sun's first unbundled compiler back in the SunOS days, or
1969       # something like that, but today its man page says it's not meant to
1970       # be used directly (instead via /usr/ucb/cc).  The options are pretty
1971       # much the same as the main SunPRO cc, so share those configs.
1972       #
1973       case $host in
1974         *sparc*-*-solaris* | *sparc*-*-sunos*)
1975           if test "$ccbase" = acc; then ccbase=cc; fi ;;
1976       esac
1978       for tmp_cflags_maybe in yes no; do
1979                              eval cflags=\"\$${ccbase}${abi1}_cflags\"
1980         test -n "$cflags" || eval cflags=\"\$${ccbase}${abi2}_cflags\"
1982         if test "$tmp_cflags_maybe" = yes; then
1983           # don't try cflags_maybe when the user set CFLAGS
1984           if test "$test_CFLAGS" = set; then continue; fi
1985                                      eval cflags_maybe=\"\$${ccbase}${abi1}_cflags_maybe\"
1986           test -n "$cflags_maybe" || eval cflags_maybe=\"\$${ccbase}${abi2}_cflags_maybe\"
1987           # don't try cflags_maybe if there's nothing set
1988           if test -z "$cflags_maybe"; then continue; fi
1989           cflags="$cflags_maybe $cflags"
1990         fi
1992         # Any user CFLAGS, even an empty string, takes precedence
1993         if test "$test_CFLAGS" = set; then cflags=$CFLAGS; fi
1995         # Any user CPPFLAGS, even an empty string, takes precedence
1996                                eval cppflags=\"\$${ccbase}${abi1}_cppflags\"
1997         test -n "$cppflags" || eval cppflags=\"\$${ccbase}${abi2}_cppflags\"
1998         if test "$test_CPPFLAGS" = set; then cppflags=$CPPFLAGS; fi
2000         # --enable-profiling adds -p/-pg even to user-specified CFLAGS.
2001         # This is convenient, but it's perhaps a bit naughty to modify user
2002         # CFLAGS.
2003         case "$enable_profiling" in
2004           prof)       cflags="$cflags -p" ;;
2005           gprof)      cflags="$cflags -pg" ;;
2006           instrument) cflags="$cflags -finstrument-functions" ;;
2007         esac
2009         GMP_PROG_CC_WORKS($cc $cflags $cppflags,,continue)
2011         # If we're supposed to be using a "long long" for a limb, check that
2012         # it works.
2013                                   eval limb_chosen=\"\$limb$abi1\"
2014         test -n "$limb_chosen" || eval limb_chosen=\"\$limb$abi2\"
2015         if test "$limb_chosen" = longlong; then
2016           GMP_PROG_CC_WORKS_LONGLONG($cc $cflags $cppflags,,continue)
2017         fi
2019         # The tests to perform on this $cc, if any
2020                                eval testlist=\"\$${ccbase}${abi1}_testlist\"
2021         test -n "$testlist" || eval testlist=\"\$${ccbase}${abi2}_testlist\"
2022         test -n "$testlist" || eval testlist=\"\$any${abi1}_testlist\"
2023         test -n "$testlist" || eval testlist=\"\$any${abi2}_testlist\"
2025         testlist_pass=yes
2026         for tst in $testlist; do
2027           case $tst in
2028           hpc-hppa-2-0)   GMP_HPC_HPPA_2_0($cc,,testlist_pass=no) ;;
2029           gcc-arm-umodsi) GMP_GCC_ARM_UMODSI($cc,,testlist_pass=no) ;;
2030           gcc-mips-o32)   GMP_GCC_MIPS_O32($cc,,testlist_pass=no) ;;
2031           hppa-level-2.0) GMP_HPPA_LEVEL_20($cc $cflags,,testlist_pass=no) ;;
2032           sizeof*)       GMP_C_TEST_SIZEOF($cc $cflags,$tst,,testlist_pass=no) ;;
2033           esac
2034           if test $testlist_pass = no; then break; fi
2035         done
2037         if test $testlist_pass = yes; then
2038           found_compiler=yes
2039           break
2040         fi
2041       done
2043       if test $found_compiler = yes; then break; fi
2044     done
2046     if test $found_compiler = yes; then break; fi
2047   done
2049   if test $found_compiler = yes; then break; fi
2050 done
2053 # If we recognised the CPU, as indicated by $path being set, then insist
2054 # that we have a working compiler, either from our $cclist choices or from
2055 # $CC.  We can't let AC_PROG_CC look around for a compiler because it might
2056 # find one that we've rejected (for not supporting the modes our asm code
2057 # demands, etc).
2059 # If we didn't recognise the CPU (and this includes host_cpu=none), then
2060 # fall through and let AC_PROG_CC look around for a compiler too.  This is
2061 # mostly in the interests of following a standard autoconf setup, after all
2062 # we've already tested cc and gcc adequately (hopefully).  As of autoconf
2063 # 2.50 the only thing AC_PROG_CC really adds is a check for "cl" (Microsoft
2064 # C on MS-DOS systems).
2066 if test $found_compiler = no && test -n "$path"; then
2067   AC_MSG_ERROR([could not find a working compiler, see config.log for details])
2070 case $host in
2071   X86_PATTERN | X86_64_PATTERN)
2072     # If the user asked for a fat build, override the path and flags set above
2073     if test $enable_fat = yes; then
2074       gcc_cflags_cpu=""
2075       gcc_cflags_arch=""
2077       fat_functions="add_n addmul_1 bdiv_dbm1c com cnd_add_n cnd_sub_n
2078                      copyd copyi dive_1 divrem_1
2079                      gcd_1 lshift lshiftc mod_1 mod_1_1 mod_1_1_cps mod_1_2
2080                      mod_1_2_cps mod_1_4 mod_1_4_cps mod_34lsub1 mode1o mul_1
2081                      mul_basecase mullo_basecase pre_divrem_1 pre_mod_1 redc_1
2082                      redc_2 rshift sqr_basecase sub_n submul_1"
2084       if test "$abi" = 32; then
2085         extra_functions="$extra_functions fat fat_entry"
2086         path="x86/fat x86"
2087         fat_path="x86 x86/fat x86/i486
2088                   x86/k6 x86/k6/mmx x86/k6/k62mmx
2089                   x86/k7 x86/k7/mmx
2090                   x86/k8 x86/k10 x86/bobcat
2091                   x86/pentium x86/pentium/mmx
2092                   x86/p6 x86/p6/mmx x86/p6/p3mmx x86/p6/sse2
2093                   x86/pentium4 x86/pentium4/mmx x86/pentium4/sse2
2094                   x86/core2 x86/coreinhm x86/coreisbr
2095                   x86/atom x86/atom/mmx x86/atom/sse2 x86/nano"
2096       fi
2098       if test "$abi" = 64; then
2099         gcc_64_cflags=""
2100         extra_functions_64="$extra_functions_64 fat fat_entry"
2101         path_64="x86_64/fat x86_64"
2102         fat_path="x86_64 x86_64/fat
2103                   x86_64/k8 x86_64/k10 x86_64/bd1 x86_64/bobcat
2104                   x86_64/pentium4 x86_64/core2 x86_64/coreinhm x86_64/coreisbr
2105                   x86_64/coreihwl x86_64/atom x86_64/nano"
2106         fat_functions="$fat_functions addmul_2 addlsh1_n addlsh2_n sublsh1_n"
2107       fi
2109       fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD
2110                       SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD
2111                       BMOD_1_TO_MOD_1_THRESHOLD"
2112     fi
2113     ;;
2114 esac
2117 if test $found_compiler = yes; then
2119   # If we're creating CFLAGS, then look for optional additions.  If the user
2120   # set CFLAGS then leave it alone.
2121   #
2122   if test "$test_CFLAGS" != set; then
2123                           eval optlist=\"\$${ccbase}${abi1}_cflags_optlist\"
2124     test -n "$optlist" || eval optlist=\"\$${ccbase}${abi2}_cflags_optlist\"
2126     for opt in $optlist; do
2127                              eval optflags=\"\$${ccbase}${abi1}_cflags_${opt}\"
2128       test -n "$optflags" || eval optflags=\"\$${ccbase}${abi2}_cflags_${opt}\"
2129       test -n "$optflags" || eval optflags=\"\$${ccbase}_cflags_${opt}\"
2131       for flag in $optflags; do
2133         # ~ represents a space in an option spec
2134         flag=`echo "$flag" | tr '~' ' '`
2136         case $flag in
2137           -march=pentium4 | -march=k8)
2138             # For -march settings which enable SSE2 we exclude certain bad
2139             # gcc versions and we need an OS knowing how to save xmm regs.
2140             #
2141             # This is only for ABI=32, any 64-bit gcc is good and any OS
2142             # knowing x86_64 will know xmm.
2143             #
2144             # -march=k8 was only introduced in gcc 3.3, so we shouldn't need
2145             # the GMP_GCC_PENTIUM4_SSE2 check (for gcc 3.2 and prior).  But
2146             # it doesn't hurt to run it anyway, sharing code with the
2147             # pentium4 case.
2148             #
2149             if test "$abi" = 32; then
2150               GMP_GCC_PENTIUM4_SSE2($cc $cflags $cppflags,, continue)
2151               GMP_OS_X86_XMM($cc $cflags $cppflags,, continue)
2152             fi
2153             ;;
2154           -no-cpp-precomp)
2155             # special check, avoiding a warning
2156             GMP_GCC_NO_CPP_PRECOMP($ccbase,$cc,$cflags,
2157                                    [cflags="$cflags $flag"
2158                                    break],
2159                                    [continue])
2160             ;;
2161           -Wa,-m*)
2162             case $host in
2163               alpha*-*-*)
2164                 GMP_GCC_WA_MCPU($cc $cflags, $flag, , [continue])
2165               ;;
2166             esac
2167             ;;
2168           -Wa,-oldas)
2169             GMP_GCC_WA_OLDAS($cc $cflags $cppflags,
2170                              [cflags="$cflags $flag"
2171                              break],
2172                              [continue])
2173             ;;
2174         esac
2176         GMP_PROG_CC_WORKS($cc $cflags $cppflags $flag,
2177           [cflags="$cflags $flag"
2178           break])
2179       done
2180     done
2181   fi
2183   ABI="$abi"
2184   CC="$cc"
2185   CFLAGS="$cflags"
2186   CPPFLAGS="$cppflags"
2187   eval GMP_NONSTD_ABI=\"\$GMP_NONSTD_ABI_$ABI\"
2189   # Could easily have this in config.h too, if desired.
2190   ABI_nodots=`echo $ABI | sed 's/\./_/'`
2191   GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_ABI_$ABI_nodots')", POST)
2194   # GMP_LDFLAGS substitution, selected according to ABI.
2195   # These are needed on libgmp.la and libmp.la, but currently not on
2196   # convenience libraries like tune/libspeed.la or mpz/libmpz.la.
2197   #
2198                             eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\"
2199   test -n "$GMP_LDFLAGS" || eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\"
2200   AC_SUBST(GMP_LDFLAGS)
2201   AC_SUBST(LIBGMP_LDFLAGS)
2202   AC_SUBST(LIBGMPXX_LDFLAGS)
2204   # extra_functions, selected according to ABI
2205                     eval tmp=\"\$extra_functions$abi1\"
2206   test -n "$tmp" || eval tmp=\"\$extra_functions$abi2\"
2207   extra_functions="$tmp"
2210   # Cycle counter, selected according to ABI.
2211   #
2212                     eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi1\"
2213   test -n "$tmp" || eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi2\"
2214   SPEED_CYCLECOUNTER_OBJ="$tmp"
2215                     eval tmp=\"\$cyclecounter_size$abi1\"
2216   test -n "$tmp" || eval tmp=\"\$cyclecounter_size$abi2\"
2217   cyclecounter_size="$tmp"
2219   if test -n "$SPEED_CYCLECOUNTER_OBJ"; then
2220     AC_DEFINE_UNQUOTED(HAVE_SPEED_CYCLECOUNTER, $cyclecounter_size,
2221     [Tune directory speed_cyclecounter, undef=none, 1=32bits, 2=64bits)])
2222   fi
2223   AC_SUBST(SPEED_CYCLECOUNTER_OBJ)
2226   # Calling conventions checking, selected according to ABI.
2227   #
2228                     eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi1\"
2229   test -n "$tmp" || eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi2\"
2230   if test "$enable_assembly" = "yes"; then
2231      CALLING_CONVENTIONS_OBJS="$tmp"
2232   else
2233      CALLING_CONVENTIONS_OBJS=""
2234   fi
2236   if test -n "$CALLING_CONVENTIONS_OBJS"; then
2237     AC_DEFINE(HAVE_CALLING_CONVENTIONS,1,
2238     [Define to 1 if tests/libtests has calling conventions checking for the CPU])
2239   fi
2240   AC_SUBST(CALLING_CONVENTIONS_OBJS)
2245 # If the user gave an MPN_PATH, use that verbatim, otherwise choose
2246 # according to the ABI and add "generic".
2248 if test -n "$MPN_PATH"; then
2249   path="$MPN_PATH"
2250 else
2251                     eval tmp=\"\$path$abi1\"
2252   test -n "$tmp" || eval tmp=\"\$path$abi2\"
2253   path="$tmp generic"
2257 # Long long limb setup for gmp.h.
2258 case $limb_chosen in
2259 longlong) DEFN_LONG_LONG_LIMB="#define _LONG_LONG_LIMB 1"    ;;
2260 *)        DEFN_LONG_LONG_LIMB="/* #undef _LONG_LONG_LIMB */" ;;
2261 esac
2262 AC_SUBST(DEFN_LONG_LONG_LIMB)
2265 # The C compiler and preprocessor, put into ANSI mode if possible.
2266 AC_PROG_CC
2267 AC_PROG_CC_STDC
2268 AC_PROG_CPP
2271 # The C compiler on the build system, and associated tests.
2272 GMP_PROG_CC_FOR_BUILD
2273 GMP_PROG_CPP_FOR_BUILD
2274 GMP_PROG_EXEEXT_FOR_BUILD
2275 GMP_C_FOR_BUILD_ANSI
2276 GMP_CHECK_LIBM_FOR_BUILD
2279 # How to assemble, used with CFLAGS etc, see mpn/Makeasm.am.
2280 # Using the compiler is a lot easier than figuring out how to invoke the
2281 # assembler directly.
2283 test -n "$CCAS" || CCAS="$CC -c"
2284 AC_SUBST(CCAS)
2287 # The C++ compiler, if desired.
2288 want_cxx=no
2289 if test $enable_cxx != no; then
2290   test_CXXFLAGS=${CXXFLAGS+set}
2291   AC_PROG_CXX
2293   echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC
2294   cxxflags_ac_prog_cxx=$CXXFLAGS
2295   cxxflags_list=ac_prog_cxx
2297   # If the user didn't specify $CXXFLAGS, then try $CFLAGS, with -g removed
2298   # if AC_PROG_CXX thinks that doesn't work.  $CFLAGS stands a good chance
2299   # of working, eg. on a GNU system where CC=gcc and CXX=g++.
2300   #
2301   if test "$test_CXXFLAGS" != set; then
2302     cxxflags_cflags=$CFLAGS
2303     cxxflags_list="cflags $cxxflags_list"
2304     if test "$ac_prog_cxx_g" = no; then
2305       cxxflags_cflags=`echo "$cxxflags_cflags" | sed -e 's/ -g //' -e 's/^-g //' -e 's/ -g$//'`
2306     fi
2307   fi
2309   # See if the C++ compiler works.  If the user specified CXXFLAGS then all
2310   # we're doing is checking whether AC_PROG_CXX succeeded, since it doesn't
2311   # give a fatal error, just leaves CXX set to a default g++.  If on the
2312   # other hand the user didn't specify CXXFLAGS then we get to try here our
2313   # $cxxflags_list alternatives.
2314   #
2315   # Automake includes $CPPFLAGS in a C++ compile, so we do the same here.
2316   #
2317   for cxxflags_choice in $cxxflags_list; do
2318     eval CXXFLAGS=\"\$cxxflags_$cxxflags_choice\"
2319     GMP_PROG_CXX_WORKS($CXX $CPPFLAGS $CXXFLAGS,
2320       [want_cxx=yes
2321       break])
2322   done
2324   # If --enable-cxx=yes but a C++ compiler can't be found, then abort.
2325   if test $want_cxx = no && test $enable_cxx = yes; then
2326     AC_MSG_ERROR([C++ compiler not available, see config.log for details])
2327   fi
2330 AM_CONDITIONAL(WANT_CXX, test $want_cxx = yes)
2332 # FIXME: We're not interested in CXXCPP for ourselves, but if we don't do it
2333 # here then AC_PROG_LIBTOOL will AC_REQUIRE it (via _LT_AC_TAGCONFIG) and
2334 # hence execute it unconditionally, and that will fail if there's no C++
2335 # compiler (and no generic /lib/cpp).
2337 if test $want_cxx = yes; then
2338   AC_PROG_CXXCPP
2342 # Path setups for Cray, according to IEEE or CFP.  These must come after
2343 # deciding the compiler.
2345 GMP_CRAY_OPTIONS(
2346   [add_path="cray/ieee"],
2347   [add_path="cray/cfp"; extra_functions="mulwwc90"],
2348   [add_path="cray/cfp"; extra_functions="mulwwj90"])
2351 if test -z "$MPN_PATH"; then
2352   path="$add_path $path"
2355 # For a nail build, also look in "nails" subdirectories.
2357 if test $GMP_NAIL_BITS != 0 && test -z "$MPN_PATH"; then
2358   new_path=
2359   for i in $path; do
2360     case $i in
2361     generic) new_path="$new_path $i" ;;
2362     *)       new_path="$new_path $i/nails $i" ;;
2363     esac
2364   done
2365   path=$new_path
2369 # Put all directories into CPUVEC_list so as to get a full set of
2370 # CPUVEC_SETUP_$tmp_suffix defines into config.h, even if some of them are
2371 # empty because mmx and/or sse2 had to be dropped.
2373 for i in $fat_path; do
2374   GMP_FAT_SUFFIX(tmp_suffix, $i)
2375   CPUVEC_list="$CPUVEC_list CPUVEC_SETUP_$tmp_suffix"
2376 done
2379 # If there's any sse2 or mmx in the path, check whether the assembler
2380 # supports it, and remove if not.
2382 # We only need this in ABI=32, for ABI=64 on x86_64 we can assume a new
2383 # enough assembler.
2385 case $host in
2386   X86_PATTERN | X86_64_PATTERN)
2387     if test "$ABI" = 32; then
2388       case "$path $fat_path" in
2389         *mmx*)   GMP_ASM_X86_MMX( , [GMP_STRIP_PATH(*mmx*)]) ;;
2390       esac
2391       case "$path $fat_path" in
2392         *sse2*)  GMP_ASM_X86_SSE2( , [GMP_STRIP_PATH(sse2)]) ;;
2393       esac
2394     fi
2395     case "$path $fat_path" in
2396       *mulx*)  GMP_ASM_X86_MULX( , [GMP_STRIP_PATH(mulx)]) ;;
2397     esac
2398     case "$path $fat_path" in
2399       *adx*)   GMP_ASM_X86_ADX( , [GMP_STRIP_PATH(adx)]) ;;
2400     esac
2401     ;;
2402 esac
2405 if test "$enable_assembly" = "no"; then
2406   path="generic"
2407   CFLAGS="$CFLAGS -DNO_ASM"
2408 #  for abi in $abilist; do
2409 #    eval unset "path_\$abi"
2410 #    eval gcc_${abi}_cflags=\"\$gcc_${abi}_cflags -DNO_ASM\"
2411 #  done
2415 cat >&AC_FD_CC <<EOF
2416 Decided:
2417 ABI=$ABI
2418 CC=$CC
2419 CFLAGS=$CFLAGS
2420 CPPFLAGS=$CPPFLAGS
2421 GMP_LDFLAGS=$GMP_LDFLAGS
2422 CXX=$CXX
2423 CXXFLAGS=$CXXFLAGS
2424 path=$path
2426 echo "using ABI=\"$ABI\""
2427 echo "      CC=\"$CC\""
2428 echo "      CFLAGS=\"$CFLAGS\""
2429 echo "      CPPFLAGS=\"$CPPFLAGS\""
2430 if test $want_cxx = yes; then
2431   echo "      CXX=\"$CXX\""
2432   echo "      CXXFLAGS=\"$CXXFLAGS\""
2434 echo "      MPN_PATH=\"$path\""
2437 CL_AS_NOEXECSTACK
2439 GMP_PROG_AR
2440 GMP_PROG_NM
2442 case $host in
2443   # FIXME: On AIX 3 and 4, $libname.a is included in libtool
2444   # $library_names_spec, so libgmp.a becomes a symlink to libgmp.so, making
2445   # it impossible to build shared and static libraries simultaneously.
2446   # Disable shared libraries by default, but let the user override with
2447   # --enable-shared --disable-static.
2448   #
2449   # FIXME: This $libname.a problem looks like it might apply to *-*-amigaos*
2450   # and *-*-os2* too, but wait for someone to test this before worrying
2451   # about it.  If there is a problem then of course libtool is the right
2452   # place to fix it.
2453   #
2454   [*-*-aix[34]*])
2455     if test -z "$enable_shared"; then enable_shared=no; fi ;;
2456 esac
2459 # Configs for Windows DLLs.
2461 AC_LIBTOOL_WIN32_DLL
2463 AC_SUBST(LIBGMP_DLL,0)
2464 case $host in
2465   *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
2466     # By default, build only static.
2467     if test -z "$enable_shared"; then
2468       enable_shared=no
2469     fi
2470     # Don't allow both static and DLL.
2471     if test "$enable_shared" != no && test "$enable_static" != no; then
2472       AC_MSG_ERROR([cannot build both static and DLL, since gmp.h is different for each.
2473 Use "--disable-static --enable-shared" to build just a DLL.])
2474     fi
2476     # "-no-undefined" is required when building a DLL, see documentation on
2477     # AC_LIBTOOL_WIN32_DLL.
2478     #
2479     # "-Wl,--export-all-symbols" is a bit of a hack, it gets all libgmp and
2480     # libgmpxx functions and variables exported.  This is what libtool did
2481     # in the past, and it's convenient for us in the test programs.
2482     #
2483     # Maybe it'd be prudent to check for --export-all-symbols before using
2484     # it, but it seems to have been in ld since at least 2000, and there's
2485     # not really any alternative we want to take up at the moment.
2486     #
2487     # "-Wl,output-def" is used to get a .def file for use by MS lib to make
2488     # a .lib import library, described in the manual.  libgmp-3.dll.def
2489     # corresponds to the libmp-3.dll.def generated by libtool (as a result
2490     # of -export-symbols on that library).
2491     #
2492     # Incidentally, libtool does generate an import library libgmp.dll.a,
2493     # but it's "ar" format and cannot be used by the MS linker.  There
2494     # doesn't seem to be any GNU tool for generating or converting to .lib.
2495     #
2496     # FIXME: The .def files produced by -Wl,output-def include isascii,
2497     # iscsym, iscsymf and toascii, apparently because mingw ctype.h doesn't
2498     # inline isascii (used in gmp).  It gives an extern inline for
2499     # __isascii, but for some reason not the plain isascii.
2500     #
2501     if test "$enable_shared" = yes; then
2502       GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols"
2503       LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def"
2504       LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def"
2505       LIBGMP_DLL=1
2506     fi
2507     ;;
2508 esac
2511 # Ensure that $CONFIG_SHELL is available for AC_LIBTOOL_SYS_MAX_CMD_LEN.
2512 # It's often set already by _LT_AC_PROG_ECHO_BACKSLASH or
2513 # _AS_LINENO_PREPARE, but not always.
2515 # The symptom of CONFIG_SHELL unset is some "expr" errors during the test,
2516 # and an empty result.  This only happens when invoked as "sh configure",
2517 # ie. no path, and can be seen for instance on ia64-*-hpux*.
2519 # FIXME: Newer libtool should have it's own fix for this.
2521 if test -z "$CONFIG_SHELL"; then
2522   CONFIG_SHELL=$SHELL
2525 # Enable CXX in libtool only if we want it, and never enable GCJ, nor RC on
2526 # mingw and cygwin.  Under --disable-cxx this avoids some error messages
2527 # from libtool arising from the fact we didn't actually run AC_PROG_CXX.
2528 # Notice that any user-supplied --with-tags setting takes precedence.
2530 # FIXME: Is this the right way to get this effect?  Very possibly not, but
2531 # the current _LT_AC_TAGCONFIG doesn't really suggest an alternative.
2533 if test "${with_tags+set}" != set; then
2534   if test $want_cxx = yes; then
2535     with_tags=CXX
2536   else
2537     with_tags=
2538   fi
2541 # The dead hand of AC_REQUIRE makes AC_PROG_LIBTOOL expand and execute
2542 # AC_PROG_F77, even when F77 is not in the selected with_tags.  This is
2543 # probably harmless, but it's unsightly and bloats our configure, so pretend
2544 # AC_PROG_F77 has been expanded already.
2546 # FIXME: Rumour has it libtool will one day provide a way for a configure.in
2547 # to say what it wants from among supported languages etc.
2549 #AC_PROVIDE([AC_PROG_F77])
2551 AC_PROG_LIBTOOL
2553 # Generate an error here if attempting to build both shared and static when
2554 # $libname.a is in $library_names_spec (as mentioned above), rather than
2555 # wait for ar or ld to fail.
2557 if test "$enable_shared" = yes && test "$enable_static" = yes; then
2558   case $library_names_spec in
2559     *libname.a*)
2560       AC_MSG_ERROR([cannot create both shared and static libraries on this system, --disable one of the two])
2561       ;;
2562   esac
2565 AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes)
2568 # Many of these library and header checks are for the benefit of
2569 # supplementary programs.  libgmp doesn't use anything too weird.
2571 AC_HEADER_STDC
2572 AC_HEADER_TIME
2574 # Reasons for testing:
2575 #   float.h - not in SunOS bundled cc
2576 #   invent.h - IRIX specific
2577 #   langinfo.h - X/Open standard only, not in djgpp for instance
2578 #   locale.h - old systems won't have this
2579 #   nl_types.h - X/Open standard only, not in djgpp for instance
2580 #       (usually langinfo.h gives nl_item etc, but not on netbsd 1.4.1)
2581 #   sys/attributes.h - IRIX specific
2582 #   sys/iograph.h - IRIX specific
2583 #   sys/mman.h - not in Cray Unicos
2584 #   sys/param.h - not in mingw
2585 #   sys/processor.h - solaris specific, though also present in macos
2586 #   sys/pstat.h - HPUX specific
2587 #   sys/resource.h - not in mingw
2588 #   sys/sysctl.h - not in mingw
2589 #   sys/sysinfo.h - OSF specific
2590 #   sys/syssgi.h - IRIX specific
2591 #   sys/systemcfg.h - AIX specific
2592 #   sys/time.h - autoconf suggests testing, don't know anywhere without it
2593 #   sys/times.h - not in mingw
2594 #   machine/hal_sysinfo.h - OSF specific
2596 # inttypes.h, stdint.h, unistd.h and sys/types.h are already in the autoconf
2597 # default tests
2599 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)
2601 # On SunOS, sys/resource.h needs sys/time.h (for struct timeval)
2602 AC_CHECK_HEADERS(sys/resource.h,,,
2603 [#if TIME_WITH_SYS_TIME
2604 # include <sys/time.h>
2605 # include <time.h>
2606 #else
2607 # if HAVE_SYS_TIME_H
2608 #  include <sys/time.h>
2609 # else
2610 #  include <time.h>
2611 # endif
2612 #endif])
2614 # On NetBSD and OpenBSD, sys/sysctl.h needs sys/param.h for various constants
2615 AC_CHECK_HEADERS(sys/sysctl.h,,,
2616 [#if HAVE_SYS_PARAM_H
2617 # include <sys/param.h>
2618 #endif])
2620 # On OSF 4.0, <machine/hal_sysinfo.h> must have <sys/sysinfo.h> for ulong_t
2621 AC_CHECK_HEADERS(machine/hal_sysinfo.h,,,
2622 [#if HAVE_SYS_SYSINFO_H
2623 # include <sys/sysinfo.h>
2624 #endif])
2626 # Reasons for testing:
2627 #   optarg - not declared in mingw
2628 #   fgetc, fscanf, ungetc, vfprintf - not declared in SunOS 4
2629 #   sys_errlist, sys_nerr - not declared in SunOS 4
2631 # optarg should be in unistd.h and the rest in stdio.h, both of which are
2632 # in the autoconf default includes.
2634 # sys_errlist and sys_nerr are supposed to be in <errno.h> on SunOS according
2635 # to the man page (but aren't), in glibc they're in stdio.h.
2637 AC_CHECK_DECLS([fgetc, fscanf, optarg, ungetc, vfprintf])
2638 AC_CHECK_DECLS([sys_errlist, sys_nerr], , ,
2639 [#include <stdio.h>
2640 #include <errno.h>])
2642 AC_TYPE_SIGNAL
2644 # Reasons for testing:
2645 #   intmax_t       - C99
2646 #   long double    - not in the HP bundled K&R cc
2647 #   long long      - only in reasonably recent compilers
2648 #   ptrdiff_t      - seems to be everywhere, maybe don't need to check this
2649 #   quad_t         - BSD specific
2650 #   uint_least32_t - C99
2652 # the default includes are sufficient for all these types
2654 AC_CHECK_TYPES([intmax_t, long double, long long, ptrdiff_t, quad_t,
2655                 uint_least32_t, intptr_t])
2657 AC_C_STRINGIZE
2659 # FIXME: Really want #ifndef __cplusplus around the #define volatile
2660 # replacement autoconf gives, since volatile is always available in C++.
2661 # But we don't use it in C++ currently.
2662 AC_C_VOLATILE
2664 AC_C_RESTRICT
2666 # GMP_C_STDARG
2667 GMP_C_ATTRIBUTE_CONST
2668 GMP_C_ATTRIBUTE_MALLOC
2669 GMP_C_ATTRIBUTE_MODE
2670 GMP_C_ATTRIBUTE_NORETURN
2672 GMP_H_EXTERN_INLINE
2674 # from libtool
2675 AC_CHECK_LIBM
2676 AC_SUBST(LIBM)
2678 GMP_FUNC_ALLOCA
2679 GMP_OPTION_ALLOCA
2681 GMP_H_HAVE_FILE
2683 AC_C_BIGENDIAN(
2684   [AC_DEFINE(HAVE_LIMB_BIG_ENDIAN, 1)
2685    GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_BIG_ENDIAN')", POST)],
2686   [AC_DEFINE(HAVE_LIMB_LITTLE_ENDIAN, 1)
2687    GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_LITTLE_ENDIAN')", POST)
2688   ], [:])
2689 AH_VERBATIM([HAVE_LIMB],
2690 [/* Define one of these to 1 for the endianness of `mp_limb_t'.
2691    If the endianness is not a simple big or little, or you don't know what
2692    it is, then leave both undefined. */
2693 #undef HAVE_LIMB_BIG_ENDIAN
2694 #undef HAVE_LIMB_LITTLE_ENDIAN])
2696 GMP_C_DOUBLE_FORMAT
2699 # Reasons for testing:
2700 #   alarm - not in mingw
2701 #   attr_get - IRIX specific
2702 #   clock_gettime - not in glibc 2.2.4, only very recent systems
2703 #   cputime - not in glibc
2704 #   getsysinfo - OSF specific
2705 #   getrusage - not in mingw
2706 #   gettimeofday - not in mingw
2707 #   mmap - not in mingw, djgpp
2708 #   nl_langinfo - X/Open standard only, not in djgpp for instance
2709 #   obstack_vprintf - glibc specific
2710 #   processor_info - solaris specific
2711 #   pstat_getprocessor - HPUX specific (10.x and up)
2712 #   raise - an ANSI-ism, though probably almost universal by now
2713 #   read_real_time - AIX specific
2714 #   sigaction - not in mingw
2715 #   sigaltstack - not in mingw, or old AIX (reputedly)
2716 #   sigstack - not in mingw
2717 #   strerror - not in SunOS
2718 #   strnlen - glibc extension (some other systems too)
2719 #   syssgi - IRIX specific
2720 #   times - not in mingw
2722 # AC_FUNC_STRNLEN is not used because we don't want the AC_LIBOBJ
2723 # replacement setups it gives.  It detects a faulty strnlen on AIX, but
2724 # missing out on that test is ok since our only use of strnlen is in
2725 # __gmp_replacement_vsnprintf which is not required on AIX since it has a
2726 # vsnprintf.
2728 AC_CHECK_FUNCS(alarm attr_get clock 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)
2730 # clock_gettime is in librt on *-*-osf5.1 and on glibc, so att -lrt to
2731 # TUNE_LIBS if needed. On linux (tested on x86_32, 2.6.26),
2732 # clock_getres reports ns accuracy, while in a quick test on osf
2733 # clock_getres said only 1 millisecond.
2735 old_LIBS="$LIBS"
2736 AC_SEARCH_LIBS(clock_gettime, rt, [
2737   AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define to 1 if you have the `clock_gettime' function])])
2738 TUNE_LIBS="$LIBS"
2739 LIBS="$old_LIBS"
2741 AC_SUBST(TUNE_LIBS)
2743 GMP_FUNC_VSNPRINTF
2744 GMP_FUNC_SSCANF_WRITABLE_INPUT
2746 # Reasons for checking:
2747 #   pst_processor psp_iticksperclktick - not in hpux 9
2749 AC_CHECK_MEMBER(struct pst_processor.psp_iticksperclktick,
2750                 [AC_DEFINE(HAVE_PSP_ITICKSPERCLKTICK, 1,
2751 [Define to 1 if <sys/pstat.h> `struct pst_processor' exists
2752 and contains `psp_iticksperclktick'.])],,
2753                 [#include <sys/pstat.h>])
2755 # C++ tests, when required
2757 if test $enable_cxx = yes; then
2758   AC_LANG_PUSH(C++)
2760   # Reasons for testing:
2761   #   <sstream> - not in g++ 2.95.2
2762   #   std::locale - not in g++ 2.95.4
2763   #
2764   AC_CHECK_HEADERS([sstream])
2765   AC_CHECK_TYPES([std::locale],,,[#include <locale>])
2767   AC_LANG_POP(C++)
2771 # Pick the correct source files in $path and link them to mpn/.
2772 # $gmp_mpn_functions lists all functions we need.
2774 # The rule is to find a file with the function name and a .asm, .S,
2775 # .s, or .c extension.  Certain multi-function files with special names
2776 # can provide some functions too.  (mpn/Makefile.am passes
2777 # -DOPERATION_<func> to get them to generate the right code.)
2779 # Note: $gmp_mpn_functions must have mod_1 before pre_mod_1 so the former
2780 #       can optionally provide the latter as an extra entrypoint.  Likewise
2781 #       divrem_1 and pre_divrem_1.
2783 gmp_mpn_functions_optional="umul udiv                                   \
2784   invert_limb sqr_diagonal sqr_diag_addlsh1                             \
2785   mul_2 mul_3 mul_4 mul_5 mul_6                                         \
2786   addmul_2 addmul_3 addmul_4 addmul_5 addmul_6 addmul_7 addmul_8        \
2787   addlsh1_n sublsh1_n rsblsh1_n rsh1add_n rsh1sub_n                     \
2788   addlsh2_n sublsh2_n rsblsh2_n                                         \
2789   addlsh_n sublsh_n rsblsh_n                                            \
2790   add_n_sub_n addaddmul_1msb0"
2792 gmp_mpn_functions="$extra_functions                                        \
2793   add add_1 add_n sub sub_1 sub_n cnd_add_n cnd_sub_n neg com              \
2794   mul_1 addmul_1 submul_1                                                  \
2795   add_err1_n add_err2_n add_err3_n sub_err1_n sub_err2_n sub_err3_n        \
2796   lshift rshift dive_1 diveby3 divis divrem divrem_1 divrem_2              \
2797   fib2_ui mod_1 mod_34lsub1 mode1o pre_divrem_1 pre_mod_1 dump             \
2798   mod_1_1 mod_1_2 mod_1_3 mod_1_4 lshiftc                                  \
2799   mul mul_fft mul_n sqr mul_basecase sqr_basecase nussbaumer_mul           \
2800   mulmid_basecase toom42_mulmid mulmid_n mulmid                            \
2801   random random2 pow_1                                                     \
2802   rootrem sqrtrem sizeinbase get_str set_str                               \
2803   scan0 scan1 popcount hamdist cmp                                         \
2804   perfsqr perfpow                                                          \
2805   gcd_1 gcd gcdext_1 gcdext gcd_subdiv_step                                \
2806   gcdext_lehmer                                                            \
2807   div_q tdiv_qr jacbase jacobi_2 jacobi get_d                              \
2808   matrix22_mul matrix22_mul1_inverse_vector                                \
2809   hgcd_matrix hgcd2 hgcd_step hgcd_reduce hgcd hgcd_appr                   \
2810   hgcd2_jacobi hgcd_jacobi                                                 \
2811   mullo_n mullo_basecase                                                   \
2812   toom22_mul toom32_mul toom42_mul toom52_mul toom62_mul                   \
2813   toom33_mul toom43_mul toom53_mul toom54_mul toom63_mul                   \
2814   toom44_mul                                                               \
2815   toom6h_mul toom6_sqr toom8h_mul toom8_sqr                                \
2816   toom_couple_handling                                                     \
2817   toom2_sqr toom3_sqr toom4_sqr                                            \
2818   toom_eval_dgr3_pm1 toom_eval_dgr3_pm2                                    \
2819   toom_eval_pm1 toom_eval_pm2 toom_eval_pm2exp toom_eval_pm2rexp           \
2820   toom_interpolate_5pts toom_interpolate_6pts toom_interpolate_7pts        \
2821   toom_interpolate_8pts toom_interpolate_12pts toom_interpolate_16pts      \
2822   invertappr invert binvert mulmod_bnm1 sqrmod_bnm1                        \
2823   div_qr_1 div_qr_1n_pi1                                                   \
2824   div_qr_2 div_qr_2n_pi1 div_qr_2u_pi1                                     \
2825   sbpi1_div_q sbpi1_div_qr sbpi1_divappr_q                                 \
2826   dcpi1_div_q dcpi1_div_qr dcpi1_divappr_q                                 \
2827   mu_div_qr mu_divappr_q mu_div_q                                          \
2828   bdiv_q_1                                                                 \
2829   sbpi1_bdiv_q sbpi1_bdiv_qr                                               \
2830   dcpi1_bdiv_q dcpi1_bdiv_qr                                               \
2831   mu_bdiv_q mu_bdiv_qr                                                     \
2832   bdiv_q bdiv_qr broot brootinv bsqrt bsqrtinv                             \
2833   divexact bdiv_dbm1c redc_1 redc_2 redc_n powm powlo sec_powm             \
2834   sec_mul sec_sqr sec_div_qr sec_div_r sec_pi1_div_qr sec_pi1_div_r        \
2835   sec_add_1 sec_sub_1 sec_invert                                           \
2836   trialdiv remove                                                          \
2837   and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n                     \
2838   copyi copyd zero sec_tabselect                                           \
2839   comb_tables                                                              \
2840   $gmp_mpn_functions_optional"
2842 define(GMP_MULFUNC_CHOICES,
2843 [# functions that can be provided by multi-function files
2844 tmp_mulfunc=
2845 case $tmp_fn in
2846   add_n|sub_n)       tmp_mulfunc="aors_n"    ;;
2847   add_err1_n|sub_err1_n)
2848                      tmp_mulfunc="aors_err1_n" ;;
2849   add_err2_n|sub_err2_n)
2850                      tmp_mulfunc="aors_err2_n" ;;
2851   add_err3_n|sub_err3_n)
2852                      tmp_mulfunc="aors_err3_n" ;;
2853   cnd_add_n|cnd_sub_n) tmp_mulfunc="cnd_aors_n"   ;;
2854   sec_add_1|sec_sub_1) tmp_mulfunc="sec_aors_1"   ;;
2855   addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;;
2856   mul_2|addmul_2)    tmp_mulfunc="aormul_2" ;;
2857   mul_3|addmul_3)    tmp_mulfunc="aormul_3" ;;
2858   mul_4|addmul_4)    tmp_mulfunc="aormul_4" ;;
2859   popcount|hamdist)  tmp_mulfunc="popham"    ;;
2860   and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n)
2861                      tmp_mulfunc="logops_n"  ;;
2862   lshift|rshift)     tmp_mulfunc="lorrshift";;
2863   addlsh1_n)
2864                      tmp_mulfunc="aorslsh1_n aorrlsh1_n aorsorrlsh1_n";;
2865   sublsh1_n)
2866                      tmp_mulfunc="aorslsh1_n sorrlsh1_n aorsorrlsh1_n";;
2867   rsblsh1_n)
2868                      tmp_mulfunc="aorrlsh1_n sorrlsh1_n aorsorrlsh1_n";;
2869   addlsh2_n)
2870                      tmp_mulfunc="aorslsh2_n aorrlsh2_n aorsorrlsh2_n";;
2871   sublsh2_n)
2872                      tmp_mulfunc="aorslsh2_n sorrlsh2_n aorsorrlsh2_n";;
2873   rsblsh2_n)
2874                      tmp_mulfunc="aorrlsh2_n sorrlsh2_n aorsorrlsh2_n";;
2875   addlsh_n)
2876                      tmp_mulfunc="aorslsh_n aorrlsh_n aorsorrlsh_n";;
2877   sublsh_n)
2878                      tmp_mulfunc="aorslsh_n sorrlsh_n aorsorrlsh_n";;
2879   rsblsh_n)
2880                      tmp_mulfunc="aorrlsh_n sorrlsh_n aorsorrlsh_n";;
2881   rsh1add_n|rsh1sub_n)
2882                      tmp_mulfunc="rsh1aors_n";;
2883   sec_div_qr|sec_div_r)
2884                      tmp_mulfunc="sec_div";;
2885   sec_pi1_div_qr|sec_pi1_div_r)
2886                      tmp_mulfunc="sec_pi1_div";;
2887 esac
2890 # the list of all object files used by mpn/Makefile.in and the
2891 # top-level Makefile.in, respectively
2892 mpn_objects=
2893 mpn_objs_in_libgmp=
2895 # links from the sources, to be removed by "make distclean"
2896 gmp_srclinks=
2899 # mpn_relative_top_srcdir is $top_srcdir, but for use from within the mpn
2900 # build directory.  If $srcdir is relative then we use a relative path too,
2901 # so the two trees can be moved together.
2902 case $srcdir in
2903   [[\\/]* | ?:[\\/]*])  # absolute, as per autoconf
2904     mpn_relative_top_srcdir=$srcdir ;;
2905   *)                    # relative
2906     mpn_relative_top_srcdir=../$srcdir ;;
2907 esac
2910 define(MPN_SUFFIXES,[asm S s c])
2912 dnl  Usage: GMP_FILE_TO_FUNCTION_BASE(func,file)
2914 dnl  Set $func to the function base name for $file, eg. dive_1 gives
2915 dnl  divexact_1.
2917 define(GMP_FILE_TO_FUNCTION,
2918 [case $$2 in
2919   dive_1)       $1=divexact_1 ;;
2920   diveby3)      $1=divexact_by3c ;;
2921   pre_divrem_1) $1=preinv_divrem_1 ;;
2922   mode1o)       $1=modexact_1c_odd ;;
2923   pre_mod_1)    $1=preinv_mod_1 ;;
2924   mod_1_1)      $1=mod_1_1p ;;
2925   mod_1_1_cps)  $1=mod_1_1p_cps ;;
2926   mod_1_2)      $1=mod_1s_2p ;;
2927   mod_1_2_cps)  $1=mod_1s_2p_cps ;;
2928   mod_1_3)      $1=mod_1s_3p ;;
2929   mod_1_3_cps)  $1=mod_1s_3p_cps ;;
2930   mod_1_4)      $1=mod_1s_4p ;;
2931   mod_1_4_cps)  $1=mod_1s_4p_cps ;;
2932   *)            $1=$$2 ;;
2933 esac
2936 # Fat binary setups.
2938 # We proceed through each $fat_path directory, and look for $fat_function
2939 # routines there.  Those found are incorporated in the build by generating a
2940 # little mpn/<foo>.asm or mpn/<foo>.c file in the build directory, with
2941 # suitable function renaming, and adding that to $mpn_objects (the same as a
2942 # normal mpn file).
2944 # fat.h is generated with macros to let internal calls to each $fat_function
2945 # go directly through __gmpn_cpuvec, plus macros and declarations helping to
2946 # setup that structure, on a per-directory basis ready for
2947 # mpn/<cpu>/fat/fat.c.
2949 # fat.h includes thresholds listed in $fat_thresholds, extracted from
2950 # gmp-mparam.h in each directory.  An overall maximum for each threshold is
2951 # established, for use in making fixed size arrays of temporary space.
2952 # (Eg. MUL_TOOM33_THRESHOLD_LIMIT used by mpn/generic/mul.c.)
2954 # It'd be possible to do some of this manually, but when there's more than a
2955 # few functions and a few directories it becomes very tedious, and very
2956 # prone to having some routine accidentally omitted.  On that basis it seems
2957 # best to automate as much as possible, even if the code to do so is a bit
2958 # ugly.
2961 if test -n "$fat_path"; then
2962   # Usually the mpn build directory is created with mpn/Makefile
2963   # instantiation, but we want to write to it sooner.
2964   mkdir mpn 2>/dev/null
2966   echo "/* fat.h - setups for fat binaries." >fat.h
2967   echo "   Generated by configure - DO NOT EDIT.  */" >>fat.h
2969   AC_DEFINE(WANT_FAT_BINARY, 1, [Define to 1 when building a fat binary.])
2970   GMP_DEFINE(WANT_FAT_BINARY, yes)
2972   # Don't want normal copies of fat functions
2973   for tmp_fn in $fat_functions; do
2974     GMP_REMOVE_FROM_LIST(gmp_mpn_functions, $tmp_fn)
2975     GMP_REMOVE_FROM_LIST(gmp_mpn_functions_optional, $tmp_fn)
2976   done
2978   for tmp_fn in $fat_functions; do
2979     GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
2980     echo "
2981 #ifndef OPERATION_$tmp_fn
2982 #undef  mpn_$tmp_fbase
2983 #define mpn_$tmp_fbase  (*__gmpn_cpuvec.$tmp_fbase)
2984 #endif
2985 DECL_$tmp_fbase (__MPN(${tmp_fbase}_init));" >>fat.h
2986     # encourage various macros to use fat functions
2987     AC_DEFINE_UNQUOTED(HAVE_NATIVE_mpn_$tmp_fbase)
2988   done
2990   echo "" >>fat.h
2991   echo "/* variable thresholds */" >>fat.h
2992   for tmp_tn in $fat_thresholds; do
2993     echo "#undef  $tmp_tn" >>fat.h
2994     echo "#define $tmp_tn  CPUVEC_THRESHOLD (`echo $tmp_tn | tr [A-Z] [a-z]`)" >>fat.h
2995   done
2997   echo "
2998 /* Copy all fields into __gmpn_cpuvec.
2999    memcpy is not used because it might operate byte-wise (depending on its
3000    implementation), and we need the function pointer writes to be atomic.
3001    "volatile" discourages the compiler from trying to optimize this.  */
3002 #define CPUVEC_INSTALL(vec) \\
3003   do { \\
3004     volatile struct cpuvec_t *p = &__gmpn_cpuvec; \\" >>fat.h
3005   for tmp_fn in $fat_functions; do
3006     GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
3007     echo "    p->$tmp_fbase = vec.$tmp_fbase; \\" >>fat.h
3008   done
3009   for tmp_tn in $fat_thresholds; do
3010     tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]`
3011     echo "    p->$tmp_field_name = vec.$tmp_field_name; \\" >>fat.h
3012   done
3013   echo "  } while (0)" >>fat.h
3015   echo "
3016 /* A helper to check all fields are filled. */
3017 #define ASSERT_CPUVEC(vec) \\
3018   do { \\" >>fat.h
3019   for tmp_fn in $fat_functions; do
3020     GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
3021     echo "    ASSERT (vec.$tmp_fbase != NULL); \\" >>fat.h
3022   done
3023   for tmp_tn in $fat_thresholds; do
3024     tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]`
3025     echo "    ASSERT (vec.$tmp_field_name != 0); \\" >>fat.h
3026   done
3027   echo "  } while (0)" >>fat.h
3029   echo "
3030 /* Call ITERATE(field) for each fat threshold field. */
3031 #define ITERATE_FAT_THRESHOLDS() \\
3032   do { \\" >>fat.h
3033   for tmp_tn in $fat_thresholds; do
3034     tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]`
3035     echo "    ITERATE ($tmp_tn, $tmp_field_name); \\" >>fat.h
3036   done
3037   echo "  } while (0)" >>fat.h
3039   for tmp_dir in $fat_path; do
3040     CPUVEC_SETUP=
3041     THRESH_ASM_SETUP=
3042     echo "" >>fat.h
3043     GMP_FAT_SUFFIX(tmp_suffix, $tmp_dir)
3045     # In order to keep names unique on a DOS 8.3 filesystem, use a prefix
3046     # (rather than a suffix) for the generated file names, and abbreviate.
3047     case $tmp_suffix in
3048       pentium)       tmp_prefix=p   ;;
3049       pentium_mmx)   tmp_prefix=pm  ;;
3050       p6_mmx)        tmp_prefix=p2  ;;
3051       p6_p3mmx)      tmp_prefix=p3  ;;
3052       pentium4)      tmp_prefix=p4  ;;
3053       pentium4_mmx)  tmp_prefix=p4m ;;
3054       pentium4_sse2) tmp_prefix=p4s ;;
3055       k6_mmx)        tmp_prefix=k6m ;;
3056       k6_k62mmx)     tmp_prefix=k62 ;;
3057       k7_mmx)        tmp_prefix=k7m ;;
3058       *)             tmp_prefix=$tmp_suffix ;;
3059     esac
3061     # Extract desired thresholds from gmp-mparam.h file in this directory,
3062     # if present.
3063     tmp_mparam=$srcdir/mpn/$tmp_dir/gmp-mparam.h
3064     if test -f $tmp_mparam; then
3065       for tmp_tn in $fat_thresholds; do
3066         tmp_thresh=`sed -n "s/^#define $tmp_tn[         ]*\\([0-9][0-9]*\\).*$/\\1/p" $tmp_mparam`
3067         if test -n "$tmp_thresh"; then
3068           THRESH_ASM_SETUP=["${THRESH_ASM_SETUP}define($tmp_tn,$tmp_thresh)
3070           CPUVEC_SETUP="$CPUVEC_SETUP    decided_cpuvec.`echo $tmp_tn | tr [[A-Z]] [[a-z]]` = $tmp_thresh; \\
3072           eval tmp_limit=\$${tmp_tn}_LIMIT
3073           if test -z "$tmp_limit"; then
3074             tmp_limit=0
3075           fi
3076           if test $tmp_thresh -gt $tmp_limit; then
3077             eval ${tmp_tn}_LIMIT=$tmp_thresh
3078           fi
3079         fi
3080       done
3081     fi
3083     for tmp_fn in $fat_functions; do
3084       GMP_MULFUNC_CHOICES
3086       for tmp_base in $tmp_fn $tmp_mulfunc; do
3087         for tmp_ext in MPN_SUFFIXES; do
3088           tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext
3089           if test -f $tmp_file; then
3091             # If the host uses a non-standard ABI, check if tmp_file supports it
3092             #
3093             if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then
3094               abi=[`sed -n 's/^[        ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `]
3095               if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then
3096                 true
3097               else
3098                 continue
3099               fi
3100             fi
3102             mpn_objects="$mpn_objects ${tmp_prefix}_$tmp_fn.lo"
3103             mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_prefix}_$tmp_fn.lo"
3105             GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
3107             # carry-in variant, eg. divrem_1c or modexact_1c_odd
3108             case $tmp_fbase in
3109               *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;;
3110               *)    tmp_fbasec=${tmp_fbase}c ;;
3111             esac
3113             # Create a little file doing an include from srcdir.  The
3114             # OPERATION and renamings aren't all needed all the time, but
3115             # they don't hurt if unused.
3116             #
3117             # FIXME: Should generate these via config.status commands.
3118             # Would need them all in one AC_CONFIG_COMMANDS though, since
3119             # that macro doesn't accept a set of separate commands generated
3120             # by shell code.
3121             #
3122             case $tmp_ext in
3123               asm)
3124                 # hide the d-n-l from autoconf's error checking
3125                 tmp_d_n_l=d""nl
3126                 echo ["$tmp_d_n_l  mpn_$tmp_fbase - from $tmp_dir directory for fat binary.
3127 $tmp_d_n_l  Generated by configure - DO NOT EDIT.
3129 define(OPERATION_$tmp_fn)
3130 define(__gmpn_$tmp_fbase, __gmpn_${tmp_fbase}_$tmp_suffix)
3131 define(__gmpn_$tmp_fbasec,__gmpn_${tmp_fbasec}_${tmp_suffix})
3132 define(__gmpn_preinv_${tmp_fbase},__gmpn_preinv_${tmp_fbase}_${tmp_suffix})
3133 define(__gmpn_${tmp_fbase}_cps,__gmpn_${tmp_fbase}_cps_${tmp_suffix})
3135 $tmp_d_n_l  For k6 and k7 gcd_1 calling their corresponding mpn_modexact_1_odd
3136 ifdef(\`__gmpn_modexact_1_odd',,
3137 \`define(__gmpn_modexact_1_odd,__gmpn_modexact_1_odd_${tmp_suffix})')
3139 $THRESH_ASM_SETUP
3140 include][($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm)
3141 "] >mpn/${tmp_prefix}_$tmp_fn.asm
3142                 ;;
3143               c)
3144                 echo ["/* mpn_$tmp_fbase - from $tmp_dir directory for fat binary.
3145    Generated by configure - DO NOT EDIT. */
3147 #define OPERATION_$tmp_fn 1
3148 #define __gmpn_$tmp_fbase           __gmpn_${tmp_fbase}_$tmp_suffix
3149 #define __gmpn_$tmp_fbasec          __gmpn_${tmp_fbasec}_${tmp_suffix}
3150 #define __gmpn_preinv_${tmp_fbase}  __gmpn_preinv_${tmp_fbase}_${tmp_suffix}
3151 #define __gmpn_${tmp_fbase}_cps     __gmpn_${tmp_fbase}_cps_${tmp_suffix}
3153 #include \"$mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.c\"
3154 "] >mpn/${tmp_prefix}_$tmp_fn.c
3155                 ;;
3156             esac
3158             # Prototype, and append to CPUVEC_SETUP for this directory.
3159             echo "DECL_$tmp_fbase (__gmpn_${tmp_fbase}_$tmp_suffix);" >>fat.h
3160             CPUVEC_SETUP="$CPUVEC_SETUP    decided_cpuvec.$tmp_fbase = __gmpn_${tmp_fbase}_${tmp_suffix}; \\
3162             # Ditto for any preinv variant (preinv_divrem_1, preinv_mod_1).
3163             if grep "^PROLOGUE(mpn_preinv_$tmp_fn)" $tmp_file >/dev/null; then
3164               echo "DECL_preinv_$tmp_fbase (__gmpn_preinv_${tmp_fbase}_$tmp_suffix);" >>fat.h
3165               CPUVEC_SETUP="$CPUVEC_SETUP    decided_cpuvec.preinv_$tmp_fbase = __gmpn_preinv_${tmp_fbase}_${tmp_suffix}; \\
3167             fi
3169             # Ditto for any mod_1...cps variant
3170             if grep "^PROLOGUE(mpn_${tmp_fbase}_cps)" $tmp_file >/dev/null; then
3171               echo "DECL_${tmp_fbase}_cps (__gmpn_${tmp_fbase}_cps_$tmp_suffix);" >>fat.h
3172               CPUVEC_SETUP="$CPUVEC_SETUP    decided_cpuvec.${tmp_fbase}_cps = __gmpn_${tmp_fbase}_cps_${tmp_suffix}; \\
3174             fi
3175           fi
3176         done
3177       done
3178     done
3180     # Emit CPUVEC_SETUP for this directory
3181     echo "" >>fat.h
3182     echo "#define CPUVEC_SETUP_$tmp_suffix \\" >>fat.h
3183     echo "  do { \\" >>fat.h
3184     echo "$CPUVEC_SETUP  } while (0)" >>fat.h
3185   done
3187   # Emit threshold limits
3188   echo "" >>fat.h
3189   for tmp_tn in $fat_thresholds; do
3190     eval tmp_limit=\$${tmp_tn}_LIMIT
3191     echo "#define ${tmp_tn}_LIMIT  $tmp_limit" >>fat.h
3192   done
3196 # Normal binary setups.
3199 for tmp_ext in MPN_SUFFIXES; do
3200   eval found_$tmp_ext=no
3201 done
3203 for tmp_fn in $gmp_mpn_functions; do
3204   for tmp_ext in MPN_SUFFIXES; do
3205     test "$no_create" = yes || rm -f mpn/$tmp_fn.$tmp_ext
3206   done
3208   # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise
3209   # mpn_preinv_mod_1 by mod_1.asm.
3210   case $tmp_fn in
3211   pre_divrem_1)
3212     if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;;
3213   pre_mod_1)
3214     if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;;
3215   esac
3217   GMP_MULFUNC_CHOICES
3219   found=no
3220   for tmp_dir in $path; do
3221     for tmp_base in $tmp_fn $tmp_mulfunc; do
3222       for tmp_ext in MPN_SUFFIXES; do
3223         tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext
3224         if test -f $tmp_file; then
3226           # For a nails build, check if the file supports our nail bits.
3227           # Generic code always supports all nails.
3228           #
3229           # FIXME: When a multi-function file is selected to provide one of
3230           # the nails-neutral routines, like logops_n for and_n, the
3231           # PROLOGUE grepping will create HAVE_NATIVE_mpn_<foo> defines for
3232           # all functions in that file, even if they haven't all been
3233           # nailified.  Not sure what to do about this, it's only really a
3234           # problem for logops_n, and it's not too terrible to insist those
3235           # get nailified always.
3236           #
3237           if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then
3238             case $tmp_fn in
3239               and_n | ior_n | xor_n | andn_n | \
3240               copyi | copyd | \
3241               popcount | hamdist | \
3242               udiv | udiv_w_sdiv | umul | \
3243               cntlz | invert_limb)
3244                 # these operations are either unaffected by nails or defined
3245                 # to operate on full limbs
3246                 ;;
3247               *)
3248                 nails=[`sed -n 's/^[    ]*NAILS_SUPPORT(\(.*\))/\1/p' $tmp_file `]
3249                 for n in $nails; do
3250                   case $n in
3251                   *-*)
3252                     n_start=`echo "$n" | sed -n 's/\(.*\)-.*/\1/p'`
3253                     n_end=`echo "$n" | sed -n 's/.*-\(.*\)/\1/p'`
3254                     ;;
3255                   *)
3256                     n_start=$n
3257                     n_end=$n
3258                     ;;
3259                   esac
3260                   if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then
3261                     found=yes
3262                     break
3263                   fi
3264                 done
3265                 if test $found != yes; then
3266                   continue
3267                 fi
3268                 ;;
3269             esac
3270           fi
3272           # If the host uses a non-standard ABI, check if tmp_file supports it
3273           #
3274           if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then
3275             abi=[`sed -n 's/^[  ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `]
3276             if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then
3277               true
3278             else
3279               continue
3280             fi
3281           fi
3283           found=yes
3284           eval found_$tmp_ext=yes
3286           if test $tmp_ext = c; then
3287             tmp_u='$U'
3288           else
3289             tmp_u=
3290           fi
3292           mpn_objects="$mpn_objects $tmp_fn$tmp_u.lo"
3293           mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/$tmp_fn$tmp_u.lo"
3294           AC_CONFIG_LINKS(mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext)
3295           gmp_srclinks="$gmp_srclinks mpn/$tmp_fn.$tmp_ext"
3297           # Duplicate AC_DEFINEs are harmless, so it doesn't matter
3298           # that multi-function files get grepped here repeatedly.
3299           # The PROLOGUE pattern excludes the optional second parameter.
3300           gmp_ep=[`
3301             sed -n 's/^[        ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ;
3302             sed -n 's/^[        ]*PROLOGUE(\([^,]*\).*)/\1/p' $tmp_file
3303           `]
3304           for gmp_tmp in $gmp_ep; do
3305             AC_DEFINE_UNQUOTED(HAVE_NATIVE_$gmp_tmp)
3306             eval HAVE_NATIVE_$gmp_tmp=yes
3307           done
3309           case $tmp_fn in
3310           sqr_basecase) sqr_basecase_source=$tmp_file ;;
3311           esac
3313           break
3314         fi
3315       done
3316       if test $found = yes; then break ; fi
3317     done
3318     if test $found = yes; then break ; fi
3319   done
3321   if test $found = no; then
3322     for tmp_optional in $gmp_mpn_functions_optional; do
3323       if test $tmp_optional = $tmp_fn; then
3324         found=yes
3325       fi
3326     done
3327     if test $found = no; then
3328       AC_MSG_ERROR([no version of $tmp_fn found in path: $path])
3329     fi
3330   fi
3331 done
3333 # All cycle counters are .asm files currently
3334 if test -n "$SPEED_CYCLECOUNTER_OBJ"; then
3335   found_asm=yes
3338 dnl  The following list only needs to have templates for those defines which
3339 dnl  are going to be tested by the code, there's no need to have every
3340 dnl  possible mpn routine.
3342 AH_VERBATIM([HAVE_NATIVE],
3343 [/* Define to 1 each of the following for which a native (ie. CPU specific)
3344     implementation of the corresponding routine exists.  */
3345 #undef HAVE_NATIVE_mpn_add_n
3346 #undef HAVE_NATIVE_mpn_add_n_sub_n
3347 #undef HAVE_NATIVE_mpn_add_nc
3348 #undef HAVE_NATIVE_mpn_addaddmul_1msb0
3349 #undef HAVE_NATIVE_mpn_addlsh1_n
3350 #undef HAVE_NATIVE_mpn_addlsh2_n
3351 #undef HAVE_NATIVE_mpn_addlsh_n
3352 #undef HAVE_NATIVE_mpn_addlsh1_nc
3353 #undef HAVE_NATIVE_mpn_addlsh2_nc
3354 #undef HAVE_NATIVE_mpn_addlsh_nc
3355 #undef HAVE_NATIVE_mpn_addlsh1_n_ip1
3356 #undef HAVE_NATIVE_mpn_addlsh2_n_ip1
3357 #undef HAVE_NATIVE_mpn_addlsh_n_ip1
3358 #undef HAVE_NATIVE_mpn_addlsh1_nc_ip1
3359 #undef HAVE_NATIVE_mpn_addlsh2_nc_ip1
3360 #undef HAVE_NATIVE_mpn_addlsh_nc_ip1
3361 #undef HAVE_NATIVE_mpn_addlsh1_n_ip2
3362 #undef HAVE_NATIVE_mpn_addlsh2_n_ip2
3363 #undef HAVE_NATIVE_mpn_addlsh_n_ip2
3364 #undef HAVE_NATIVE_mpn_addlsh1_nc_ip2
3365 #undef HAVE_NATIVE_mpn_addlsh2_nc_ip2
3366 #undef HAVE_NATIVE_mpn_addlsh_nc_ip2
3367 #undef HAVE_NATIVE_mpn_addmul_1c
3368 #undef HAVE_NATIVE_mpn_addmul_2
3369 #undef HAVE_NATIVE_mpn_addmul_3
3370 #undef HAVE_NATIVE_mpn_addmul_4
3371 #undef HAVE_NATIVE_mpn_addmul_5
3372 #undef HAVE_NATIVE_mpn_addmul_6
3373 #undef HAVE_NATIVE_mpn_addmul_7
3374 #undef HAVE_NATIVE_mpn_addmul_8
3375 #undef HAVE_NATIVE_mpn_addmul_2s
3376 #undef HAVE_NATIVE_mpn_and_n
3377 #undef HAVE_NATIVE_mpn_andn_n
3378 #undef HAVE_NATIVE_mpn_bdiv_dbm1c
3379 #undef HAVE_NATIVE_mpn_bdiv_q_1
3380 #undef HAVE_NATIVE_mpn_pi1_bdiv_q_1
3381 #undef HAVE_NATIVE_mpn_cnd_add_n
3382 #undef HAVE_NATIVE_mpn_cnd_sub_n
3383 #undef HAVE_NATIVE_mpn_com
3384 #undef HAVE_NATIVE_mpn_copyd
3385 #undef HAVE_NATIVE_mpn_copyi
3386 #undef HAVE_NATIVE_mpn_div_qr_1n_pi1
3387 #undef HAVE_NATIVE_mpn_div_qr_2
3388 #undef HAVE_NATIVE_mpn_divexact_1
3389 #undef HAVE_NATIVE_mpn_divexact_by3c
3390 #undef HAVE_NATIVE_mpn_divrem_1
3391 #undef HAVE_NATIVE_mpn_divrem_1c
3392 #undef HAVE_NATIVE_mpn_divrem_2
3393 #undef HAVE_NATIVE_mpn_gcd_1
3394 #undef HAVE_NATIVE_mpn_hamdist
3395 #undef HAVE_NATIVE_mpn_invert_limb
3396 #undef HAVE_NATIVE_mpn_ior_n
3397 #undef HAVE_NATIVE_mpn_iorn_n
3398 #undef HAVE_NATIVE_mpn_lshift
3399 #undef HAVE_NATIVE_mpn_lshiftc
3400 #undef HAVE_NATIVE_mpn_lshsub_n
3401 #undef HAVE_NATIVE_mpn_mod_1
3402 #undef HAVE_NATIVE_mpn_mod_1_1p
3403 #undef HAVE_NATIVE_mpn_mod_1c
3404 #undef HAVE_NATIVE_mpn_mod_1s_2p
3405 #undef HAVE_NATIVE_mpn_mod_1s_4p
3406 #undef HAVE_NATIVE_mpn_mod_34lsub1
3407 #undef HAVE_NATIVE_mpn_modexact_1_odd
3408 #undef HAVE_NATIVE_mpn_modexact_1c_odd
3409 #undef HAVE_NATIVE_mpn_mul_1
3410 #undef HAVE_NATIVE_mpn_mul_1c
3411 #undef HAVE_NATIVE_mpn_mul_2
3412 #undef HAVE_NATIVE_mpn_mul_3
3413 #undef HAVE_NATIVE_mpn_mul_4
3414 #undef HAVE_NATIVE_mpn_mul_5
3415 #undef HAVE_NATIVE_mpn_mul_6
3416 #undef HAVE_NATIVE_mpn_mul_basecase
3417 #undef HAVE_NATIVE_mpn_nand_n
3418 #undef HAVE_NATIVE_mpn_nior_n
3419 #undef HAVE_NATIVE_mpn_popcount
3420 #undef HAVE_NATIVE_mpn_preinv_divrem_1
3421 #undef HAVE_NATIVE_mpn_preinv_mod_1
3422 #undef HAVE_NATIVE_mpn_redc_1
3423 #undef HAVE_NATIVE_mpn_redc_2
3424 #undef HAVE_NATIVE_mpn_rsblsh1_n
3425 #undef HAVE_NATIVE_mpn_rsblsh2_n
3426 #undef HAVE_NATIVE_mpn_rsblsh_n
3427 #undef HAVE_NATIVE_mpn_rsblsh1_nc
3428 #undef HAVE_NATIVE_mpn_rsblsh2_nc
3429 #undef HAVE_NATIVE_mpn_rsblsh_nc
3430 #undef HAVE_NATIVE_mpn_rsh1add_n
3431 #undef HAVE_NATIVE_mpn_rsh1add_nc
3432 #undef HAVE_NATIVE_mpn_rsh1sub_n
3433 #undef HAVE_NATIVE_mpn_rsh1sub_nc
3434 #undef HAVE_NATIVE_mpn_rshift
3435 #undef HAVE_NATIVE_mpn_sqr_basecase
3436 #undef HAVE_NATIVE_mpn_sqr_diagonal
3437 #undef HAVE_NATIVE_mpn_sqr_diag_addlsh1
3438 #undef HAVE_NATIVE_mpn_sub_n
3439 #undef HAVE_NATIVE_mpn_sub_nc
3440 #undef HAVE_NATIVE_mpn_sublsh1_n
3441 #undef HAVE_NATIVE_mpn_sublsh2_n
3442 #undef HAVE_NATIVE_mpn_sublsh_n
3443 #undef HAVE_NATIVE_mpn_sublsh1_nc
3444 #undef HAVE_NATIVE_mpn_sublsh2_nc
3445 #undef HAVE_NATIVE_mpn_sublsh_nc
3446 #undef HAVE_NATIVE_mpn_sublsh1_n_ip1
3447 #undef HAVE_NATIVE_mpn_sublsh2_n_ip1
3448 #undef HAVE_NATIVE_mpn_sublsh_n_ip1
3449 #undef HAVE_NATIVE_mpn_sublsh1_nc_ip1
3450 #undef HAVE_NATIVE_mpn_sublsh2_nc_ip1
3451 #undef HAVE_NATIVE_mpn_sublsh_nc_ip1
3452 #undef HAVE_NATIVE_mpn_submul_1c
3453 #undef HAVE_NATIVE_mpn_tabselect
3454 #undef HAVE_NATIVE_mpn_udiv_qrnnd
3455 #undef HAVE_NATIVE_mpn_udiv_qrnnd_r
3456 #undef HAVE_NATIVE_mpn_umul_ppmm
3457 #undef HAVE_NATIVE_mpn_umul_ppmm_r
3458 #undef HAVE_NATIVE_mpn_xor_n
3459 #undef HAVE_NATIVE_mpn_xnor_n])
3462 # Don't demand an m4 unless it's actually needed.
3463 if test $found_asm = yes; then
3464   GMP_PROG_M4
3465   GMP_M4_M4WRAP_SPURIOUS
3466 # else
3467 # It's unclear why this m4-not-needed stuff was ever done.
3468 #  if test -z "$M4" ; then
3469 #    M4=m4-not-needed
3470 #  fi
3473 # Only do the GMP_ASM checks if there's a .S or .asm wanting them.
3474 if test $found_asm = no && test $found_S = no; then
3475   gmp_asm_syntax_testing=no
3478 if test "$gmp_asm_syntax_testing" != no; then
3479   GMP_ASM_TEXT
3480   GMP_ASM_DATA
3481   GMP_ASM_LABEL_SUFFIX
3482   GMP_ASM_GLOBL
3483   GMP_ASM_GLOBL_ATTR
3484   GMP_ASM_UNDERSCORE
3485   GMP_ASM_RODATA
3486   GMP_ASM_TYPE
3487   GMP_ASM_SIZE
3488   GMP_ASM_LSYM_PREFIX
3489   GMP_ASM_W32
3490   GMP_ASM_ALIGN_LOG
3492   case $host in
3493     hppa*-*-*)
3494       # for both pa32 and pa64
3495       GMP_INCLUDE_MPN(pa32/pa-defs.m4)
3496       ;;
3497     IA64_PATTERN)
3498       GMP_ASM_IA64_ALIGN_OK
3499       ;;
3500     M68K_PATTERN)
3501       GMP_ASM_M68K_INSTRUCTION
3502       GMP_ASM_M68K_ADDRESSING
3503       GMP_ASM_M68K_BRANCHES
3504       ;;
3505     [powerpc*-*-* | power[3-9]-*-*])
3506       GMP_ASM_POWERPC_PIC_ALWAYS
3507       GMP_ASM_POWERPC_R_REGISTERS
3508       GMP_INCLUDE_MPN(powerpc32/powerpc-defs.m4)
3510       # Check for Linux ELFv2 ABI
3511       AC_EGREP_CPP(yes,
3512 [#if _CALL_ELF == 2
3514 #endif],
3515       [GMP_DEFINE_RAW(["define(<ELFv2_ABI>)"])])
3517       case $host in
3518         *-*-aix*)
3519           case $ABI in
3520             mode64)      GMP_INCLUDE_MPN(powerpc64/aix.m4) ;;
3521             *)           GMP_INCLUDE_MPN(powerpc32/aix.m4) ;;
3522           esac
3523           ;;
3524         *-*-linux* | *-*-*bsd*)
3525           case $ABI in
3526             mode64)      GMP_INCLUDE_MPN(powerpc64/elf.m4) ;;
3527             mode32 | 32) GMP_INCLUDE_MPN(powerpc32/elf.m4) ;;
3528           esac
3529           ;;
3530         *-*-darwin*)
3531           case $ABI in
3532             mode64)      GMP_INCLUDE_MPN(powerpc64/darwin.m4) ;;
3533             mode32 | 32) GMP_INCLUDE_MPN(powerpc32/darwin.m4) ;;
3534           esac
3535           ;;
3536         *)
3537           # Assume unrecognized operating system is the powerpc eABI
3538           GMP_INCLUDE_MPN(powerpc32/eabi.m4)
3539           ;;
3540       esac
3541       ;;
3542     power*-*-aix*)
3543       GMP_INCLUDE_MPN(powerpc32/aix.m4)
3544       ;;
3545     *sparc*-*-*)
3546       case $ABI in
3547         64)
3548           GMP_ASM_SPARC_REGISTER
3549           ;;
3550       esac
3551       GMP_ASM_SPARC_GOTDATA
3552       GMP_ASM_SPARC_SHARED_THUNKS
3553       ;;
3554     X86_PATTERN | X86_64_PATTERN)
3555       GMP_ASM_ALIGN_FILL_0x90
3556       case $ABI in
3557         32)
3558           GMP_INCLUDE_MPN(x86/x86-defs.m4)
3559           AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86)
3560           GMP_ASM_COFF_TYPE
3561           GMP_ASM_X86_GOT_UNDERSCORE
3562           GMP_ASM_X86_SHLDL_CL
3563           case $enable_profiling in
3564             prof | gprof)  GMP_ASM_X86_MCOUNT ;;
3565           esac
3566           case $host in
3567             *-*-darwin*)
3568               GMP_INCLUDE_MPN(x86/darwin.m4) ;;
3569           esac
3570           ;;
3571         64|x32)
3572           GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4)
3573           AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86_64)
3574           case $host in
3575             *-*-darwin*)
3576               GMP_INCLUDE_MPN(x86_64/darwin.m4) ;;
3577             *-*-mingw* | *-*-cygwin)
3578               GMP_INCLUDE_MPN(x86_64/dos64.m4) ;;
3579             *-openbsd*)
3580               GMP_DEFINE_RAW(["define(<OPENBSD>,1)"]) ;;
3581           esac
3582           ;;
3583       esac
3584       ;;
3585   esac
3588 # For --enable-minithres, prepend "minithres" to path so that its special
3589 # gmp-mparam.h will be used.
3590 if test $enable_minithres = yes; then
3591   path="minithres $path"
3594 # Create link for gmp-mparam.h.
3595 gmp_mparam_source=
3596 for gmp_mparam_dir in $path; do
3597   test "$no_create" = yes || rm -f gmp-mparam.h
3598   tmp_file=$srcdir/mpn/$gmp_mparam_dir/gmp-mparam.h
3599   if test -f $tmp_file; then
3600     AC_CONFIG_LINKS(gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h)
3601     gmp_srclinks="$gmp_srclinks gmp-mparam.h"
3602     gmp_mparam_source=$tmp_file
3603     break
3604   fi
3605 done
3606 if test -z "$gmp_mparam_source"; then
3607   AC_MSG_ERROR([no version of gmp-mparam.h found in path: $path])
3610 # For a helpful message from tune/tuneup.c
3611 gmp_mparam_suggest=$gmp_mparam_source
3612 if test "$gmp_mparam_dir" = generic; then
3613   for i in $path; do break; done
3614   if test "$i" != generic; then
3615     gmp_mparam_suggest="new file $srcdir/mpn/$i/gmp-mparam.h"
3616   fi
3618 AC_DEFINE_UNQUOTED(GMP_MPARAM_H_SUGGEST, "$gmp_mparam_source",
3619 [The gmp-mparam.h file (a string) the tune program should suggest updating.])
3622 # Copy relevant parameters from gmp-mparam.h to config.m4.
3623 # We only do this for parameters that are used by some assembly files.
3624 # Fat binaries do this on a per-file basis, so skip in that case.
3626 if test -z "$fat_path"; then
3627   for i in SQR_TOOM2_THRESHOLD BMOD_1_TO_MOD_1_THRESHOLD SHLD_SLOW SHRD_SLOW; do
3628     value=`sed -n 's/^#define '$i'[     ]*\([0-9][0-9]*\).*$/\1/p' $gmp_mparam_source`
3629     if test -n "$value"; then
3630       GMP_DEFINE_RAW(["define(<$i>,<$value>)"])
3631     fi
3632   done
3636 # Sizes of some types, needed at preprocessing time.
3638 # FIXME: The assumption that GMP_LIMB_BITS is 8*sizeof(mp_limb_t) might
3639 # be slightly rash, but it's true everywhere we know of and ought to be true
3640 # of any sensible system.  In a generic C build, grepping LONG_BIT out of
3641 # <limits.h> might be an alternative, for maximum portability.
3643 AC_CHECK_SIZEOF(void *)
3644 AC_CHECK_SIZEOF(unsigned short)
3645 AC_CHECK_SIZEOF(unsigned)
3646 AC_CHECK_SIZEOF(unsigned long)
3647 AC_CHECK_SIZEOF(mp_limb_t, , GMP_INCLUDE_GMP_H)
3648 if test "$ac_cv_sizeof_mp_limb_t" = 0; then
3649   AC_MSG_ERROR([Oops, mp_limb_t doesn't seem to work])
3651 AC_SUBST(GMP_LIMB_BITS, `expr 8 \* $ac_cv_sizeof_mp_limb_t`)
3652 GMP_DEFINE_RAW(["define(<SIZEOF_UNSIGNED>,<$ac_cv_sizeof_unsigned>)"])
3654 # Check compiler limb size matches gmp-mparam.h
3656 # FIXME: Some of the cycle counter objects in the tune directory depend on
3657 # the size of ulong, it'd be possible to check that here, though a mismatch
3658 # probably wouldn't want to be fatal, none of the libgmp assembler code
3659 # depends on ulong.
3661 mparam_bits=[`sed -n 's/^#define GMP_LIMB_BITS[         ][      ]*\([0-9]*\).*$/\1/p' $gmp_mparam_source`]
3662 if test -n "$mparam_bits" && test "$mparam_bits" -ne $GMP_LIMB_BITS; then
3663   if test "$test_CFLAGS" = set; then
3664     AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code
3665 in this configuration expects $mparam_bits bits.
3666 You appear to have set \$CFLAGS, perhaps you also need to tell GMP the
3667 intended ABI, see "ABI and ISA" in the manual.])
3668   else
3669     AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code
3670 in this configuration expects $mparam_bits bits.])
3671   fi
3674 GMP_DEFINE_RAW(["define(<GMP_LIMB_BITS>,$GMP_LIMB_BITS)"])
3675 GMP_DEFINE_RAW(["define(<GMP_NAIL_BITS>,$GMP_NAIL_BITS)"])
3676 GMP_DEFINE_RAW(["define(<GMP_NUMB_BITS>,eval(GMP_LIMB_BITS-GMP_NAIL_BITS))"])
3679 AC_SUBST(mpn_objects)
3680 AC_SUBST(mpn_objs_in_libgmp)
3681 AC_SUBST(gmp_srclinks)
3684 # A recompiled sqr_basecase for use in the tune program, if necessary.
3685 TUNE_SQR_OBJ=
3686 test -d tune || mkdir tune
3687 case $sqr_basecase_source in
3688   *.asm)
3689     sqr_max=[`sed -n 's/^def...(SQR_TOOM2_THRESHOLD_MAX, *\([0-9]*\))/\1/p' $sqr_basecase_source`]
3690     if test -n "$sqr_max"; then
3691       TUNE_SQR_OBJ=sqr_asm.o
3692       AC_DEFINE_UNQUOTED(TUNE_SQR_TOOM2_MAX,$sqr_max,
3693       [Maximum size the tune program can test for SQR_TOOM2_THRESHOLD])
3694     fi
3695     cat >tune/sqr_basecase.c <<EOF
3696 /* not sure that an empty file can compile, so put in a dummy */
3697 int sqr_basecase_dummy;
3699     ;;
3700   *.c)
3701     TUNE_SQR_OBJ=
3702     AC_DEFINE(TUNE_SQR_TOOM2_MAX,SQR_TOOM2_MAX_GENERIC)
3703     cat >tune/sqr_basecase.c <<EOF
3704 #define TUNE_PROGRAM_BUILD 1
3705 #define TUNE_PROGRAM_BUILD_SQR 1
3706 #include "mpn/sqr_basecase.c"
3708     ;;
3709 esac
3710 AC_SUBST(TUNE_SQR_OBJ)
3713 # Configs for demos/pexpr.c.
3715 AC_CONFIG_FILES(demos/pexpr-config.h:demos/pexpr-config-h.in)
3716 GMP_SUBST_CHECK_FUNCS(clock, cputime, getrusage, gettimeofday, sigaction, sigaltstack, sigstack)
3717 GMP_SUBST_CHECK_HEADERS(sys/resource.h)
3718 AC_CHECK_TYPES([stack_t], HAVE_STACK_T_01=1, HAVE_STACK_T_01=0,
3719                [#include <signal.h>])
3720 AC_SUBST(HAVE_STACK_T_01)
3722 # Configs for demos/calc directory
3724 # AC_SUBST+AC_CONFIG_FILES is used for calc-config.h, rather than AC_DEFINE+
3725 # AC_CONFIG_HEADERS, since with the latter automake (1.8) will then put the
3726 # directory (ie. demos/calc) into $(DEFAULT_INCLUDES) for every Makefile.in,
3727 # which would look very strange.
3729 # -lcurses is required by libreadline.  On a typical SVR4 style system this
3730 # normally doesn't have to be given explicitly, since libreadline.so will
3731 # have a NEEDED record for it.  But if someone for some reason is using only
3732 # a static libreadline.a then we must give -lcurses.  Readline (as of
3733 # version 4.3) doesn't use libtool, so we can't rely on a .la to cover
3734 # necessary dependencies.
3736 # On a couple of systems we've seen libreadline available, but the headers
3737 # not in the default include path, so check for readline/readline.h.  We've
3738 # also seen readline/history.h missing, not sure if that's just a broken
3739 # install or a very old version, but check that too.
3741 AC_CONFIG_FILES(demos/calc/calc-config.h:demos/calc/calc-config-h.in)
3742 LIBCURSES=
3743 if test $with_readline != no; then
3744   AC_CHECK_LIB(ncurses, tputs, [LIBCURSES=-lncurses],
3745     [AC_CHECK_LIB(curses, tputs, [LIBCURSES=-lcurses])])
3747 AC_SUBST(LIBCURSES)
3748 use_readline=$with_readline
3749 if test $with_readline = detect; then
3750   use_readline=no
3751   AC_CHECK_LIB(readline, readline,
3752     [AC_CHECK_HEADER(readline/readline.h,
3753       [AC_CHECK_HEADER(readline/history.h, use_readline=yes)])],
3754     , $LIBCURSES)
3755   AC_MSG_CHECKING(readline detected)
3756   AC_MSG_RESULT($use_readline)
3758 if test $use_readline = yes; then
3759   AC_SUBST(WITH_READLINE_01, 1)
3760   AC_SUBST(LIBREADLINE, -lreadline)
3761 else
3762   WITH_READLINE_01=0
3764 AC_PROG_YACC
3765 AM_PROG_LEX
3767 # Configs for demos/expr directory
3769 # Libtool already runs an AC_CHECK_TOOL for ranlib, but we give
3770 # AC_PROG_RANLIB anyway since automake is supposed to complain if it's not
3771 # called.  (Automake 1.8.4 doesn't, at least not when the only library is in
3772 # an EXTRA_LIBRARIES.)
3774 AC_PROG_RANLIB
3777 # Create config.m4.
3778 GMP_FINISH
3780 # Create Makefiles
3781 # FIXME: Upcoming version of autoconf/automake may not like broken lines.
3782 #        Right now automake isn't accepting the new AC_CONFIG_FILES scheme.
3784 AC_OUTPUT(Makefile                                                      \
3785   mpf/Makefile mpn/Makefile mpq/Makefile                                \
3786   mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile \
3787   tests/Makefile tests/devel/Makefile                                   \
3788   tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile              \
3789   tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile            \
3790   tests/cxx/Makefile                                                    \
3791   doc/Makefile tune/Makefile                                            \
3792   demos/Makefile demos/calc/Makefile demos/expr/Makefile                \
3793   gmp.h:gmp-h.in)
3795 AC_MSG_NOTICE([summary of build options:
3797   Version:           ${PACKAGE_STRING}
3798   Host type:         ${host}
3799   ABI:               ${ABI}
3800   Install prefix:    ${prefix}
3801   Compiler:          ${CC}
3802   Static libraries:  ${enable_static}
3803   Shared libraries:  ${enable_shared}
3806 if test x$cross_compiling = xyes ; then
3807    case "$host" in
3808      *-*-mingw* | *-*-cygwin)
3809      if test x$ABI = x64 ; then
3810         AC_MSG_NOTICE([If wine64 is installed, use make check TESTS_ENVIRONMENT=wine64.])
3811      else
3812         AC_MSG_NOTICE([If wine is installed, use make check TESTS_ENVIRONMENT=wine.])
3813      fi
3814      ;;
3815    esac