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