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
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
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/.
35 AC_COPYRIGHT(GMP_COPYRIGHT)
36 AH_TOP(/*GMP_COPYRIGHT*/)
38 AC_REVISION($Revision$)
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).])
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.
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.
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.
80 AM_INIT_AUTOMAKE([1.8 gnu no-dependencies])
81 AC_CONFIG_HEADERS(config.h:config.in)
86 AC_HELP_STRING([--enable-assert],[enable ASSERT checking [default=no]]),
89 *) AC_MSG_ERROR([bad value $enableval for --enable-assert, need yes or 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])
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]]),
106 alloca|malloc-reentrant|malloc-notreentrant) ;;
107 yes|no|reentrant|notreentrant) ;;
110 AC_MSG_ERROR([bad value $enableval for --enable-alloca, need one of:
111 yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug]) ;;
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
129 AC_HELP_STRING([--enable-cxx],[enable C++ support [default=no]]),
132 *) AC_MSG_ERROR([bad value $enableval for --enable-cxx, need yes/no/detect]) ;;
137 AC_ARG_ENABLE(assembly,
138 AC_HELP_STRING([--enable-assembly],[enable the use of assembly loops [default=yes]]),
141 *) AC_MSG_ERROR([bad value $enableval for --enable-assembly, need yes or no]) ;;
143 [enable_assembly=yes])
147 AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=yes]]),
150 *) AC_MSG_ERROR([bad value $enableval for --enable-fft, need yes or no]) ;;
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]]),
164 *) AC_MSG_ERROR([bad value $enableval for --enable-old-fft-full, need yes or no]) ;;
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])
175 AC_HELP_STRING([--enable-nails],[use nails on limbs [default=no]]),
177 [yes|no|[02468]|[0-9][02468]]) ;;
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]) ;;
185 case $enable_nails in
186 yes) GMP_NAIL_BITS=2 ;;
187 no) GMP_NAIL_BITS=0 ;;
188 *) GMP_NAIL_BITS=$enable_nails ;;
190 AC_SUBST(GMP_NAIL_BITS)
193 AC_ARG_ENABLE(profiling,
194 AC_HELP_STRING([--enable-profiling],
195 [build with profiler support [default=no]]),
197 no|prof|gprof|instrument) ;;
198 *) AC_MSG_ERROR([bad value $enableval for --enable-profiling, need no/prof/gprof/instrument]) ;;
200 [enable_profiling=no])
202 case $enable_profiling in
204 AC_DEFINE(WANT_PROFILING_PROF, 1,
205 [Define to 1 if --enable-profiling=prof])
208 AC_DEFINE(WANT_PROFILING_GPROF, 1,
209 [Define to 1 if --enable-profiling=gprof])
212 AC_DEFINE(WANT_PROFILING_INSTRUMENT, 1,
213 [Define to 1 if --enable-profiling=instrument])
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
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]]),
232 *) AC_MSG_ERROR([bad value $withval for --with-readline, need yes/no/detect]) ;;
234 [with_readline=detect])
238 AC_HELP_STRING([--enable-fat],
239 [build fat libraries on systems that support it [default=no]]),
242 *) AC_MSG_ERROR([bad value $enableval for --enable-fat, need yes or no]) ;;
247 AC_ARG_ENABLE(minithres,
248 AC_HELP_STRING([--enable-minithres],
249 [choose minimal thresholds for testing [default=no]]),
252 *) AC_MSG_ERROR([bad value $enableval for --enable-minithres, need yes or no]) ;;
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]]),
261 *) AC_MSG_ERROR([bad value $enableval for --enable-fake-cpuid, need yes or no]) ;;
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
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
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.
443 gcc_cflags="-O2 -pedantic"
444 gcc_64_cflags="-O2 -pedantic"
448 SPEED_CYCLECOUNTER_OBJ=
451 AC_SUBST(HAVE_HOST_CPU_FAMILY_power, 0)
452 AC_SUBST(HAVE_HOST_CPU_FAMILY_powerpc,0)
457 AC_DEFINE(HAVE_HOST_CPU_FAMILY_alpha)
459 alphaev5* | alphapca5*)
460 path="alpha/ev5 alpha" ;;
461 alphaev67 | alphaev68 | alphaev7*)
462 path="alpha/ev67 alpha/ev6 alpha" ;;
464 path="alpha/ev6 alpha" ;;
468 if test "$enable_assembly" = "yes" ; then
469 extra_functions="cntlz"
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.
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.
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" ;;
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.
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.
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.
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).
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.
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" ;;
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
534 GMP_INCLUDE_MPN(alpha/alpha-defs.m4)
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
543 GMP_INCLUDE_MPN(alpha/default.m4)
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.
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" ;;
565 GMP_INCLUDE_MPN(alpha/default.m4)
571 # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes
574 SPEED_CYCLECOUNTER_OBJ=alpha.lo
575 cyclecounter_size=1 ;;
580 # Cray vector machines.
581 # This must come after alpha* so that we can recognize present and future
582 # vector processors with a wildcard.
584 gmp_asm_syntax_testing=no
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"
594 arm*-*-* | aarch64*-*-*)
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"
601 CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo'
602 CALLING_CONVENTIONS_OBJS_64=""
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
611 gcc_cflags_fpmode="-mfloat-abi=softfp" ;;
613 gcc_cflags_fpmode="-mfloat-abi=hard" ;;
616 # FIXME: We make mandatory compiler options optional here. We should
617 # either enforce them, or organise to strip paths as the corresponding
620 armxscale | arm7ej | arm9te | arm9e* | arm10* | armv5*)
622 gcc_cflags_arch="-march=armv5"
624 armsa1 | arm7t* | arm9t* | armv4t*)
626 gcc_cflags_arch="-march=armv4"
629 path="arm/v6t2 arm/v6 arm/v5 arm"
630 gcc_cflags_arch="-march=armv6t2"
633 path="arm/v6 arm/v5 arm"
634 gcc_cflags_arch="-march=armv6"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
691 armcortexa53 | armcortexa53neon)
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"
699 armcortexa57 | armcortexa57neon)
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"
707 armcortexa72 | armcortexa72neon)
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"
717 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm"
719 gcc_cflags_arch="-march=armv8-a"
720 gcc_cflags_neon="-mfpu=neon"
721 gcc_cflags_tune="-mtune=exynosm1"
725 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm"
727 gcc_cflags_arch="-march=armv8-a"
728 gcc_cflags_neon="-mfpu=neon"
729 gcc_cflags_tune="-mtune=thunderx"
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"
741 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm"
743 gcc_cflags_arch="-march=armv8-a"
744 gcc_cflags_neon="-mfpu=neon"
749 gcc_cflags_arch="-march=armv4"
750 GMP_DEFINE_RAW(["define(<NOTHUMB>,1)"])
757 [f30[01]-fujitsu-sysv*])
759 # FIXME: flags for vcc?
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
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.
776 gcc_cflags_optlist="arch"
777 gcc_testlist="sizeof-long-4"
778 SPEED_CYCLECOUNTER_OBJ=hppa.lo
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.)
786 hppa1.0*) path="pa32" ;;
787 hppa7000*) path="pa32/hppa1_1 pa32" ;;
789 path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;;
791 path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;;
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
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.
804 hppa1.0*) gcc_cflags_arch="-mpa-risc-1-0" ;;
806 gcc_cflags_arch="-mpa-risc-1-1" ;;
810 hppa1.0*) cc_cflags="+O2" ;;
812 cc_cflags="+DA1.1 +O2" ;;
816 hppa2.0*-*-* | hppa64-*-*)
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
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.
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.
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" ;;
851 gcc_20w_cflags="$gcc_cflags -mpa-risc-2-0"
852 cc_20w_cflags="+DD64 +O2"
853 cc_20w_testlist="hpc-hppa-2-0"
855 any_20w_testlist="sizeof-long-8"
856 SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo
857 cyclecounter_size_20w=2
867 GMP_INCLUDE_MPN(ia64/ia64-defs.m4)
868 SPEED_CYCLECOUNTER_OBJ=ia64.lo
869 any_32_testlist="sizeof-long-4"
872 itanium) path="ia64/itanium ia64" ;;
873 itanium2) path="ia64/itanium2 ia64" ;;
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
882 itanium) gcc_cflags_tune="-mtune=itanium" ;;
883 itanium2) gcc_cflags_tune="-mtune=itanium2" ;;
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"
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.
904 any_64_testlist="sizeof-long-8"
909 cc_32_cflags_optlist="opt"
910 cc_32_cflags_opt="+O2 +O1"
911 gcc_32_cflags="$gcc_cflags -milp32"
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.
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"
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.
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" ;;
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.
957 [m680[234]0 | m68360]) path="m68k/mc68020 m68k" ;;
968 gcc_cflags="$gcc_cflags -m88110"
969 path="m88k/mc88110 m88k"
973 # IRIX 5 and earlier can only run 32-bit o32.
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.
979 # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not
980 # supporting n32 or 64.
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.
988 gcc_cflags_optlist="abi"
989 gcc_cflags_abi="-mabi=32 -m32"
990 gcc_testlist="gcc-mips-o32"
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)
997 [mips64*-*-* | mips*-*-irix[6789]*])
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
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"
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
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.
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.
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.)
1043 [powerpc*-*-* | power[3-9]-*-*])
1044 AC_DEFINE(HAVE_HOST_CPU_FAMILY_powerpc)
1045 HAVE_HOST_CPU_FAMILY_powerpc=1
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
1057 # grab this object, though it's not a true cycle counter routine
1058 SPEED_CYCLECOUNTER_OBJ=powerpc.lo
1062 powerpc740 | powerpc750)
1063 path="powerpc32/750 powerpc32" ;;
1064 powerpc7400 | powerpc7410)
1065 path="powerpc32/vmx powerpc32/750 powerpc32" ;;
1067 path="powerpc32/vmx powerpc32" ;;
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" ;;
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" ;;
1130 gcc_32_cflags_maybe="-maix32"
1131 xlc_cflags="-O2 -qmaxmem=20000"
1132 xlc_cflags_optlist="arch"
1133 xlc_32_cflags_maybe="-q32"
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"
1158 do path_mode64="${path_mode64}powerpc64/mode64/$i "
1159 path_mode64="${path_mode64}powerpc64/$i "
1160 p="${p} powerpc32/$i "
1162 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
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
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.
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.
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.
1185 # Do not use -fast for Darwin, it actually adds options
1186 # incompatible with a shared library.
1188 abilist="mode64 mode32 $abilist"
1189 gcc_cflags_opt="-O3 -O2 -O1" # will this become used?
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
1198 gcc_mode64_cflags="-m64"
1199 gcc_mode64_cflags_optlist="cpu opt"
1200 gcc_mode64_cflags_opt="-O3 -O2 -O1"
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 "
1211 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
1212 path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64"
1214 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo
1215 cyclecounter_size_mode64=0
1216 any_mode64_testlist="sizeof-long-8"
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
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.)
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
1233 abilist="mode64 mode32 $abilist"
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"
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 "
1254 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64"
1255 path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64"
1257 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo
1258 cyclecounter_size_mode64=0
1259 any_mode64_testlist="sizeof-long-8"
1268 [power-*-* | power[12]-*-* | power2sc-*-*])
1269 AC_DEFINE(HAVE_HOST_CPU_FAMILY_power)
1270 HAVE_HOST_CPU_FAMILY_power=1
1272 if test "$enable_assembly" = "yes" ; then
1273 extra_functions="udiv_w_sdiv"
1277 # gcc 2.7.2 knows rios1, rios2, rsc
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.
1282 gcc_cflags_optlist="cpu"
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" ;;
1292 xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000"
1298 # IBM System/390 and z/Architecture
1299 S390_PATTERN | S390X_PATTERN)
1301 gcc_cflags="$gcc_cflags $fomit_frame_pointer"
1302 gcc_cflags_optlist="arch"
1304 if test "$enable_assembly" = "yes" ; then
1305 extra_functions="udiv_w_sdiv"
1307 gcc_32_cflags_maybe="-m31"
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)
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)
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)
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)
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)
1363 gcc_64_cflags_optlist="arch"
1364 gcc_64_cflags="$gcc_cflags -m64"
1365 path_64="s390_64/$host_cpu s390_64"
1372 sh-*-*) path="sh" ;;
1373 [sh[2-4]-*-*]) path="sh/sh2 sh" ;;
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
1387 any_testlist="sizeof-long-4"
1388 GMP_INCLUDE_MPN(sparc32/sparc-defs.m4)
1391 sparcv8 | microsparc | turbosparc)
1392 path="sparc32/v8 sparc32" ;;
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" ;;
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).
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.
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.
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.
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";;
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";;
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";;
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";;
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";;
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";;
1458 gcc_cflags_cpu="-mcpu=v7 -mcypress"
1462 # SunPRO cc and acc, and SunOS bundled cc
1464 *-*-solaris* | *-*-sunos*)
1465 # Note no -g, it disables all optimizations.
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
1475 sparcv8 | microsparc* | supersparc* | turbosparc | hypersparc*)
1476 cc_cflags_arch="-xarch=v8";;
1478 cc_cflags_arch="-xarch=v8plusd" ;;
1479 sparc64 | sparcv9* | ultrasparc*)
1480 cc_cflags_arch="-xarch=v8plus" ;;
1482 cc_cflags_arch="-xarch=v7" ;;
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.
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" ;;
1510 sparc64 | sparcv9* | ultrasparc*)
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.
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
1523 *-*-*bsd*) abilist="64" ;;
1525 # For all other systems, we try both 64 and 32.
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.
1533 *) abilist="64 32" ;;
1537 ultrasparc | ultrasparc2 | ultrasparc2i)
1538 path_64="sparc64/ultrasparc1234 sparc64" ;;
1540 path_64="sparc64/ultrasparc34 sparc64/ultrasparc1234 sparc64" ;;
1542 path_64="sparc64/ultrasparct1 sparc64" ;;
1544 path_64="sparc64/ultrasparct3 sparc64" ;;
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
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.)
1563 gcc_64_cflags="$gcc_cflags -m64 -mptr64"
1564 gcc_64_ldflags="-Wc,-m64"
1565 gcc_64_cflags_optlist="cpu asm"
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.
1575 cclist_64="$cclist_64 cc"
1576 cc_64_cflags_optlist="cpu"
1579 cc_64_cflags="$cc_64_cflags -xO3 -xarch=v9d" ;;
1581 cc_64_cflags="-xO3 -xarch=v9" ;;
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
1598 # Use elf conventions (i.e., '%' register prefix, no global prefix)
1600 GMP_INCLUDE_MPN(vax/elf.m4)
1601 gcc_cflags="$gcc_cflags $fomit_frame_pointer"
1603 if test "$enable_assembly" = "yes" ; then
1604 extra_functions="udiv_w_sdiv"
1608 # Default to aout conventions (i.e., no register prefix, '_' global prefix)
1610 gcc_cflags="$gcc_cflags $fomit_frame_pointer"
1612 if test "$enable_assembly" = "yes" ; then
1613 extra_functions="udiv_w_sdiv"
1618 # AMD and Intel x86 configurations, including AMD64
1620 # Rumour has it gcc -O2 used to give worse register allocation than just
1621 # -O, but lets assume that's no longer true.
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-*-*.
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.
1633 X86_PATTERN | X86_64_PATTERN)
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.
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.
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.
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.
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.
1685 gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386"
1686 gcc_cflags_arch="-march=i386"
1690 gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486"
1691 gcc_cflags_arch="-march=i486"
1695 gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486"
1696 gcc_cflags_arch="-march=pentium"
1697 path="x86/pentium x86"
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"
1705 gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486"
1706 gcc_cflags_arch="-march=pentiumpro -march=pentium"
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"
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"
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"
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"
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"
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"
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"
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"
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.
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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
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
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"
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"
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"
1883 gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486"
1884 gcc_cflags_arch="-march=i486"
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";;
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
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"
1915 any_x32_testlist="sizeof-long-4"
1918 if test "$enable_assembly" = "yes" ; then
1919 extra_functions_64="$extra_functions_64 invert_limb_table"
1920 extra_functions_x32=$extra_functions_64
1926 cc_64_cflags="-xO3 -m64"
1928 *-*-mingw* | *-*-cygwin)
1930 CALLING_CONVENTIONS_OBJS_64=""
1931 AC_DEFINE(HOST_DOS64,1,[Define to 1 for Windos/64])
1932 GMP_NONSTD_ABI_64=DOS64
1940 # Special CPU "none" used to select generic C, now this is obsolete.
1943 AC_MSG_WARN([the \"none\" host is obsolete, use --disable-assembly])
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.
1955 gcc_cflags_optlist="$gcc_cflags_optlist nocygwin"
1956 gcc_cflags_nocygwin="-mno-cygwin"
1961 CFLAGS_or_unset=${CFLAGS-'(unset)'}
1962 CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'}
1964 cat >&AC_FD_CC <<EOF
1968 CFLAGS=$CFLAGS_or_unset
1969 CPPFLAGS=$CPPFLAGS_or_unset
1977 test_CFLAGS=${CFLAGS+set}
1978 test_CPPFLAGS=${CPPFLAGS+set}
1980 for abi in $abilist; do
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
1989 for abi in $abilist; do
1990 if test $abi = "$ABI"; then found=yes; break; fi
1992 if test $found = no; then
1993 AC_MSG_ERROR([ABI=$ABI is not among the following valid choices: $abilist])
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.
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.
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".
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.
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
2038 for i in $cclist_chosen; do
2039 if test "$ccbase" = $i; then
2044 cclist_chosen=$found
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.
2053 # $cross_compiling will be yes/no/maybe at this point. Do the host
2054 # prefixing for "maybe" as well as "yes".
2056 if test "$cross_compiling" != no && test -z "$CC"; then
2057 cross_compiling_prefix="${host_alias}-"
2060 for ccprefix in $cross_compiling_prefix ""; do
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.
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
2076 if test $ccbase != gcc; then
2077 GMP_PROG_CC_IS_GNU($cc,ccbase=gcc)
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)
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.
2092 *sparc*-*-solaris* | *sparc*-*-sunos*)
2093 if test "$ccbase" = acc; then ccbase=cc; fi ;;
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"
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
2121 case "$enable_profiling" in
2122 prof) cflags="$cflags -p" ;;
2123 gprof) cflags="$cflags -pg" ;;
2124 instrument) cflags="$cflags -finstrument-functions" ;;
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
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)
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\"
2144 for tst in $testlist; do
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) ;;
2152 if test $testlist_pass = no; then break; fi
2155 if test $testlist_pass = yes; then
2161 if test $found_compiler = yes; then break; fi
2164 if test $found_compiler = yes; then break; fi
2167 if test $found_compiler = yes; then break; fi
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
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])
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
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"
2205 fat_path="x86 x86/fat x86/i486
2206 x86/k6 x86/k6/mmx x86/k6/k62mmx
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"
2216 if test "$abi" = 64; then
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
2225 fat_functions="$fat_functions addmul_2 addlsh1_n addlsh2_n sublsh1_n"
2228 fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD
2229 SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD
2230 BMOD_1_TO_MOD_1_THRESHOLD"
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.
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 '~' ' '`
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.
2260 # This is only for ABI=32, any 64-bit gcc is good and any OS
2261 # knowing x86_64 will know xmm.
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
2268 if test "$abi" = 32; then
2269 GMP_GCC_PENTIUM4_SSE2($cc $cflags $cppflags,, continue)
2270 GMP_OS_X86_XMM($cc $cflags $cppflags,, continue)
2274 # special check, avoiding a warning
2275 GMP_GCC_NO_CPP_PRECOMP($ccbase,$cc,$cflags,
2276 [cflags="$cflags $flag"
2283 GMP_GCC_WA_MCPU($cc $cflags, $flag, , [continue])
2288 GMP_GCC_WA_OLDAS($cc $cflags $cppflags,
2289 [cflags="$cflags $flag"
2295 GMP_PROG_CC_WORKS($cc $cflags $cppflags $flag,
2296 [cflags="$cflags $flag"
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.
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.
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)])
2342 AC_SUBST(SPEED_CYCLECOUNTER_OBJ)
2345 # Calling conventions checking, selected according to ABI.
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"
2352 CALLING_CONVENTIONS_OBJS=""
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])
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
2370 eval tmp=\"\$path$abi1\"
2371 test -n "$tmp" || eval tmp=\"\$path$abi2\"
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 */" ;;
2381 AC_SUBST(DEFN_LONG_LONG_LIMB)
2384 # The C compiler and preprocessor, put into ANSI mode if possible.
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"
2406 # The C++ compiler, if desired.
2408 if test $enable_cxx != no; then
2409 test_CXXFLAGS=${CXXFLAGS+set}
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++.
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$//'`
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.
2434 # Automake includes $CPPFLAGS in a C++ compile, so we do the same here.
2436 for cxxflags_choice in $cxxflags_list; do
2437 eval CXXFLAGS=\"\$cxxflags_$cxxflags_choice\"
2438 GMP_PROG_CXX_WORKS($CXX $CPPFLAGS $CXXFLAGS,
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])
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
2461 # Path setups for Cray, according to IEEE or CFP. These must come after
2462 # deciding the compiler.
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
2480 generic) new_path="$new_path $i" ;;
2481 *) new_path="$new_path $i/nails $i" ;;
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"
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
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*)]) ;;
2510 case "$path $fat_path" in
2511 *sse2*) GMP_ASM_X86_SSE2( , [GMP_STRIP_PATH(sse2)]) ;;
2514 case "$path $fat_path" in
2515 *mulx*) GMP_ASM_X86_MULX( , [GMP_STRIP_PATH(mulx)]) ;;
2517 case "$path $fat_path" in
2518 *adx*) GMP_ASM_X86_ADX( , [GMP_STRIP_PATH(adx)]) ;;
2524 if test "$enable_assembly" = "no"; then
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\"
2534 cat >&AC_FD_CC <<EOF
2540 GMP_LDFLAGS=$GMP_LDFLAGS
2545 echo "using ABI=\"$ABI\""
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\""
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.
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
2574 if test -z "$enable_shared"; then enable_shared=no; fi ;;
2578 # Configs for Windows DLLs.
2580 AC_LIBTOOL_WIN32_DLL
2582 AC_SUBST(LIBGMP_DLL,0)
2584 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
2585 # By default, build only static.
2586 if test -z "$enable_shared"; then
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.])
2595 # "-no-undefined" is required when building a DLL, see documentation on
2596 # AC_LIBTOOL_WIN32_DLL.
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.
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.
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).
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.
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.
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"
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
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
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])
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
2679 AC_MSG_ERROR([cannot create both shared and static libraries on this system, --disable one of the two])
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.
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
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>
2726 # if HAVE_SYS_TIME_H
2727 # include <sys/time.h>
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>
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>
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], , ,
2759 #include <errno.h>])
2763 # Reasons for testing:
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.
2784 GMP_C_ATTRIBUTE_CONST
2785 GMP_C_ATTRIBUTE_MALLOC
2786 GMP_C_ATTRIBUTE_MODE
2787 GMP_C_ATTRIBUTE_NORETURN
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)
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])
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
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.
2854 AC_SEARCH_LIBS(clock_gettime, rt, [
2855 AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define to 1 if you have the `clock_gettime' function])])
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
2878 # Reasons for testing:
2879 # <sstream> - not in g++ 2.95.2
2880 # std::locale - not in g++ 2.95.4
2882 AC_CHECK_HEADERS([sstream])
2883 AC_CHECK_TYPES([std::locale],,,[#include <locale>])
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 \
2923 gcd_1 gcd gcdext_1 gcdext gcd_subdiv_step \
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 \
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 \
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 \
2955 and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n \
2956 copyi copyd zero sec_tabselect \
2958 $gmp_mpn_functions_optional"
2960 define(GMP_MULFUNC_CHOICES,
2961 [# functions that can be provided by multi-function files
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";;
2982 tmp_mulfunc="aorslsh1_n aorrlsh1_n aorsorrlsh1_n";;
2984 tmp_mulfunc="aorslsh1_n sorrlsh1_n aorsorrlsh1_n";;
2986 tmp_mulfunc="aorrlsh1_n sorrlsh1_n aorsorrlsh1_n";;
2988 tmp_mulfunc="aorslsh2_n aorrlsh2_n aorsorrlsh2_n";;
2990 tmp_mulfunc="aorslsh2_n sorrlsh2_n aorsorrlsh2_n";;
2992 tmp_mulfunc="aorrlsh2_n sorrlsh2_n aorsorrlsh2_n";;
2994 tmp_mulfunc="aorslsh_n aorrlsh_n aorsorrlsh_n";;
2996 tmp_mulfunc="aorslsh_n sorrlsh_n aorsorrlsh_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";;
3008 # the list of all object files used by mpn/Makefile.in and the
3009 # top-level Makefile.in, respectively
3013 # links from the sources, to be removed by "make distclean"
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.
3021 [[\\/]* | ?:[\\/]*]) # absolute, as per autoconf
3022 mpn_relative_top_srcdir=$srcdir ;;
3024 mpn_relative_top_srcdir=../$srcdir ;;
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
3035 define(GMP_FILE_TO_FUNCTION,
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 ;;
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
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
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)
3096 for tmp_fn in $fat_functions; do
3097 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn)
3099 #ifndef OPERATION_$tmp_fn
3100 #undef mpn_$tmp_fbase
3101 #define mpn_$tmp_fbase (*__gmpn_cpuvec.$tmp_fbase)
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)
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
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) \\
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
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
3131 echo " } while (0)" >>fat.h
3134 /* A helper to check all fields are filled. */
3135 #define ASSERT_CPUVEC(vec) \\
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
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
3145 echo " } while (0)" >>fat.h
3148 /* Call ITERATE(field) for each fat threshold field. */
3149 #define ITERATE_FAT_THRESHOLDS() \\
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
3155 echo " } while (0)" >>fat.h
3157 for tmp_dir in $fat_path; do
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.
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 ;;
3179 # Extract desired thresholds from gmp-mparam.h file in this directory,
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
3194 if test $tmp_thresh -gt $tmp_limit; then
3195 eval ${tmp_tn}_LIMIT=$tmp_thresh
3201 for tmp_fn in $fat_functions; do
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
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
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
3227 *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;;
3228 *) tmp_fbasec=${tmp_fbase}c ;;
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.
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
3242 # hide the d-n-l from autoconf's error checking
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})')
3258 include][($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm)
3259 "] >mpn/${tmp_prefix}_$tmp_fn.asm
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
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}; \\
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}; \\
3298 # Emit CPUVEC_SETUP for this directory
3300 echo "#define CPUVEC_SETUP_$tmp_suffix \\" >>fat.h
3301 echo " do { \\" >>fat.h
3302 echo "$CPUVEC_SETUP } while (0)" >>fat.h
3305 # Emit threshold limits
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
3314 # Normal binary setups.
3317 for tmp_ext in MPN_SUFFIXES; do
3318 eval found_$tmp_ext=no
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
3326 # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise
3327 # mpn_preinv_mod_1 by mod_1.asm.
3330 if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;;
3332 if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;;
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.
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.
3355 if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then
3357 and_n | ior_n | xor_n | andn_n | \
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
3366 nails=[`sed -n 's/^[ ]*NAILS_SUPPORT(\(.*\))/\1/p' $tmp_file `]
3370 n_start=`echo "$n" | sed -n 's/\(.*\)-.*/\1/p'`
3371 n_end=`echo "$n" | sed -n 's/.*-\(.*\)/\1/p'`
3378 if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then
3383 if test $found != yes; then
3390 # If the host uses a non-standard ABI, check if tmp_file supports it
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
3402 eval found_$tmp_ext=yes
3404 if test $tmp_ext = c; then
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.
3419 sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ;
3420 sed -n 's/^[ ]*PROLOGUE(\([^,]*\).*)/\1/p' $tmp_file
3422 for gmp_tmp in $gmp_ep; do
3423 AC_DEFINE_UNQUOTED(HAVE_NATIVE_$gmp_tmp)
3424 eval HAVE_NATIVE_$gmp_tmp=yes
3428 sqr_basecase) sqr_basecase_source=$tmp_file ;;
3434 if test $found = yes; then break ; fi
3436 if test $found = yes; then break ; fi
3439 if test $found = no; then
3440 for tmp_optional in $gmp_mpn_functions_optional; do
3441 if test $tmp_optional = $tmp_fn; then
3445 if test $found = no; then
3446 AC_MSG_ERROR([no version of $tmp_fn found in path: $path])
3451 # All cycle counters are .asm files currently
3452 if test -n "$SPEED_CYCLECOUNTER_OBJ"; then
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
3584 GMP_M4_M4WRAP_SPURIOUS
3586 # It's unclear why this m4-not-needed stuff was ever done.
3587 # if test -z "$M4" ; then
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
3600 GMP_ASM_LABEL_SUFFIX
3612 arm*-*-* | aarch64*-*-*)
3615 GMP_INCLUDE_MPN(arm/arm-defs.m4) ;;
3619 # for both pa32 and pa64
3620 GMP_INCLUDE_MPN(pa32/pa-defs.m4)
3623 GMP_ASM_IA64_ALIGN_OK
3626 GMP_ASM_M68K_INSTRUCTION
3627 GMP_ASM_M68K_ADDRESSING
3628 GMP_ASM_M68K_BRANCHES
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
3640 [GMP_DEFINE_RAW(["define(<ELFv2_ABI>)"])])
3645 mode64) GMP_INCLUDE_MPN(powerpc64/aix.m4) ;;
3646 *) GMP_INCLUDE_MPN(powerpc32/aix.m4) ;;
3649 *-*-linux* | *-*-*bsd*)
3651 mode64) GMP_INCLUDE_MPN(powerpc64/elf.m4) ;;
3652 mode32 | 32) GMP_INCLUDE_MPN(powerpc32/elf.m4) ;;
3657 mode64) GMP_INCLUDE_MPN(powerpc64/darwin.m4) ;;
3658 mode32 | 32) GMP_INCLUDE_MPN(powerpc32/darwin.m4) ;;
3662 # Assume unrecognized operating system is the powerpc eABI
3663 GMP_INCLUDE_MPN(powerpc32/eabi.m4)
3668 GMP_INCLUDE_MPN(powerpc32/aix.m4)
3673 GMP_ASM_SPARC_REGISTER
3676 GMP_ASM_SPARC_GOTDATA
3677 GMP_ASM_SPARC_SHARED_THUNKS
3679 X86_PATTERN | X86_64_PATTERN)
3680 GMP_ASM_ALIGN_FILL_0x90
3683 GMP_INCLUDE_MPN(x86/x86-defs.m4)
3684 AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86)
3686 GMP_ASM_X86_GOT_UNDERSCORE
3687 GMP_ASM_X86_SHLDL_CL
3688 case $enable_profiling in
3689 prof | gprof) GMP_ASM_X86_MCOUNT ;;
3693 GMP_INCLUDE_MPN(x86/darwin.m4) ;;
3697 GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4)
3698 AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86_64)
3701 GMP_INCLUDE_MPN(x86_64/darwin.m4) ;;
3702 *-*-mingw* | *-*-cygwin)
3703 GMP_INCLUDE_MPN(x86_64/dos64.m4) ;;
3705 GMP_DEFINE_RAW(["define(<OPENBSD>,1)"]) ;;
3707 GMP_DEFINE_RAW(["define(<LINUX>,1)"]) ;;
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.
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
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"
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>)"])
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
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.])
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.])
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.
3813 test -d tune || mkdir tune
3814 case $sqr_basecase_source in
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])
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;
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"
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)
3870 if test $with_readline != no; then
3871 AC_CHECK_LIB(ncurses, tputs, [LIBCURSES=-lncurses],
3872 [AC_CHECK_LIB(curses, tputs, [LIBCURSES=-lcurses])])
3875 use_readline=$with_readline
3876 if test $with_readline = detect; then
3878 AC_CHECK_LIB(readline, readline,
3879 [AC_CHECK_HEADER(readline/readline.h,
3880 [AC_CHECK_HEADER(readline/history.h, use_readline=yes)])],
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)
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.)
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 \
3922 AC_MSG_NOTICE([summary of build options:
3924 Version: ${PACKAGE_STRING}
3927 Install prefix: ${prefix}
3929 Static libraries: ${enable_static}
3930 Shared libraries: ${enable_shared}
3933 if test x$cross_compiling = xyes ; then
3935 *-*-mingw* | *-*-cygwin)
3936 if test x$ABI = x64 ; then
3937 AC_MSG_NOTICE([If wine64 is installed, use make check TESTS_ENVIRONMENT=wine64.])
3939 AC_MSG_NOTICE([If wine is installed, use make check TESTS_ENVIRONMENT=wine.])