github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/configure.ac (about) 1 dnl Process this file with autoconf to produce a configure script. 2 3 4 define(GMP_COPYRIGHT,[[ 5 6 Copyright 1996-2016 Free Software Foundation, Inc. 7 8 This file is part of the GNU MP Library. 9 10 The GNU MP Library is free software; you can redistribute it and/or modify 11 it under the terms of either: 12 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. 16 17 or 18 19 * the GNU General Public License as published by the Free Software 20 Foundation; either version 2 of the License, or (at your option) any 21 later version. 22 23 or both in parallel, as here. 24 25 The GNU MP Library is distributed in the hope that it will be useful, but 26 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 27 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 28 for more details. 29 30 You should have received copies of the GNU General Public License and the 31 GNU Lesser General Public License along with the GNU MP Library. If not, 32 see https://www.gnu.org/licenses/. 33 ]]) 34 35 AC_COPYRIGHT(GMP_COPYRIGHT) 36 AH_TOP(/*GMP_COPYRIGHT*/) 37 38 AC_REVISION($Revision$) 39 AC_PREREQ(2.59) 40 AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html], gmp) 41 AC_CONFIG_SRCDIR(gmp-impl.h) 42 m4_pattern_forbid([^[ \t]*GMP_]) 43 m4_pattern_allow(GMP_LDFLAGS) 44 m4_pattern_allow(GMP_LIMB_BITS) 45 m4_pattern_allow(GMP_MPARAM_H_SUGGEST) 46 m4_pattern_allow(GMP_NAIL_BITS) 47 m4_pattern_allow(GMP_NUMB_BITS) 48 m4_pattern_allow(GMP_NONSTD_ABI) 49 m4_pattern_allow(GMP_CPU_TYPE) 50 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". 55 # 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).]) 61 fi 62 63 GMP_INIT(config.m4) 64 65 AC_CANONICAL_HOST 66 67 dnl Automake "no-dependencies" is used because include file dependencies 68 dnl are not useful to us. Pretty much everything depends just on gmp.h, 69 dnl gmp-impl.h and longlong.h, and yet only rarely does everything need to 70 dnl be rebuilt for changes to those files. 71 dnl 72 dnl "no-dependencies" also helps with the way we're setup to run 73 dnl AC_PROG_CXX only conditionally. If dependencies are used then recent 74 dnl automake (eg 1.7.2) appends an AM_CONDITIONAL to AC_PROG_CXX, and then 75 dnl gets upset if it's not actually executed. 76 dnl 77 dnl Note that there's a copy of these options in the top-level Makefile.am, 78 dnl so update there too if changing anything. 79 dnl 80 AM_INIT_AUTOMAKE([1.8 gnu no-dependencies]) 81 AC_CONFIG_HEADERS(config.h:config.in) 82 AM_MAINTAINER_MODE 83 84 85 AC_ARG_ENABLE(assert, 86 AC_HELP_STRING([--enable-assert],[enable ASSERT checking [default=no]]), 87 [case $enableval in 88 yes|no) ;; 89 *) AC_MSG_ERROR([bad value $enableval for --enable-assert, need yes or no]) ;; 90 esac], 91 [enable_assert=no]) 92 93 if test "$enable_assert" = "yes"; then 94 AC_DEFINE(WANT_ASSERT,1, 95 [Define to 1 to enable ASSERT checking, per --enable-assert]) 96 want_assert_01=1 97 else 98 want_assert_01=0 99 fi 100 GMP_DEFINE_RAW(["define(<WANT_ASSERT>,$want_assert_01)"]) 101 102 103 AC_ARG_ENABLE(alloca, 104 AC_HELP_STRING([--enable-alloca],[how to get temp memory [default=reentrant]]), 105 [case $enableval in 106 alloca|malloc-reentrant|malloc-notreentrant) ;; 107 yes|no|reentrant|notreentrant) ;; 108 debug) ;; 109 *) 110 AC_MSG_ERROR([bad value $enableval for --enable-alloca, need one of: 111 yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug]) ;; 112 esac], 113 [enable_alloca=reentrant]) 114 115 116 # IMPROVE ME: The default for C++ is disabled. The tests currently 117 # performed below for a working C++ compiler are not particularly strong, 118 # and in general can't be expected to get the right setup on their own. The 119 # most significant problem is getting the ABI the same. Defaulting CXXFLAGS 120 # to CFLAGS takes only a small step towards this. It's also probably worth 121 # worrying whether the C and C++ runtimes from say gcc and a vendor C++ can 122 # work together. Some rather broken C++ installations were encountered 123 # during testing, and though such things clearly aren't GMP's problem, if 124 # --enable-cxx=detect were to be the default then some careful checks of 125 # which, if any, C++ compiler on the system is up to scratch would be 126 # wanted. 127 # 128 AC_ARG_ENABLE(cxx, 129 AC_HELP_STRING([--enable-cxx],[enable C++ support [default=no]]), 130 [case $enableval in 131 yes|no|detect) ;; 132 *) AC_MSG_ERROR([bad value $enableval for --enable-cxx, need yes/no/detect]) ;; 133 esac], 134 [enable_cxx=no]) 135 136 137 AC_ARG_ENABLE(assembly, 138 AC_HELP_STRING([--enable-assembly],[enable the use of assembly loops [default=yes]]), 139 [case $enableval in 140 yes|no) ;; 141 *) AC_MSG_ERROR([bad value $enableval for --enable-assembly, need yes or no]) ;; 142 esac], 143 [enable_assembly=yes]) 144 145 146 AC_ARG_ENABLE(fft, 147 AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=yes]]), 148 [case $enableval in 149 yes|no) ;; 150 *) AC_MSG_ERROR([bad value $enableval for --enable-fft, need yes or no]) ;; 151 esac], 152 [enable_fft=yes]) 153 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]) 157 fi 158 159 160 AC_ARG_ENABLE(old-fft-full, 161 AC_HELP_STRING([--enable-old-fft-full],[enable old mpn_mul_fft_full for multiplication [default=no]]), 162 [case $enableval in 163 yes|no) ;; 164 *) AC_MSG_ERROR([bad value $enableval for --enable-old-fft-full, need yes or no]) ;; 165 esac], 166 [enable_old_fft_full=no]) 167 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]) 171 fi 172 173 174 AC_ARG_ENABLE(nails, 175 AC_HELP_STRING([--enable-nails],[use nails on limbs [default=no]]), 176 [case $enableval in 177 [yes|no|[02468]|[0-9][02468]]) ;; 178 [*[13579]]) 179 AC_MSG_ERROR([bad value $enableval for --enable-nails, only even nail sizes supported]) ;; 180 *) 181 AC_MSG_ERROR([bad value $enableval for --enable-nails, need yes/no/number]) ;; 182 esac], 183 [enable_nails=no]) 184 185 case $enable_nails in 186 yes) GMP_NAIL_BITS=2 ;; 187 no) GMP_NAIL_BITS=0 ;; 188 *) GMP_NAIL_BITS=$enable_nails ;; 189 esac 190 AC_SUBST(GMP_NAIL_BITS) 191 192 193 AC_ARG_ENABLE(profiling, 194 AC_HELP_STRING([--enable-profiling], 195 [build with profiler support [default=no]]), 196 [case $enableval in 197 no|prof|gprof|instrument) ;; 198 *) AC_MSG_ERROR([bad value $enableval for --enable-profiling, need no/prof/gprof/instrument]) ;; 199 esac], 200 [enable_profiling=no]) 201 202 case $enable_profiling in 203 prof) 204 AC_DEFINE(WANT_PROFILING_PROF, 1, 205 [Define to 1 if --enable-profiling=prof]) 206 ;; 207 gprof) 208 AC_DEFINE(WANT_PROFILING_GPROF, 1, 209 [Define to 1 if --enable-profiling=gprof]) 210 ;; 211 instrument) 212 AC_DEFINE(WANT_PROFILING_INSTRUMENT, 1, 213 [Define to 1 if --enable-profiling=instrument]) 214 ;; 215 esac 216 217 GMP_DEFINE_RAW(["define(<WANT_PROFILING>,<\`$enable_profiling'>)"]) 218 219 # -fomit-frame-pointer is incompatible with -pg on some chips 220 if test "$enable_profiling" = gprof; then 221 fomit_frame_pointer= 222 else 223 fomit_frame_pointer="-fomit-frame-pointer" 224 fi 225 226 227 AC_ARG_WITH(readline, 228 AC_HELP_STRING([--with-readline], 229 [readline support in demo programs [default=detect]]), 230 [case $withval in 231 yes|no|detect) ;; 232 *) AC_MSG_ERROR([bad value $withval for --with-readline, need yes/no/detect]) ;; 233 esac], 234 [with_readline=detect]) 235 236 237 AC_ARG_ENABLE(fat, 238 AC_HELP_STRING([--enable-fat], 239 [build fat libraries on systems that support it [default=no]]), 240 [case $enableval in 241 yes|no) ;; 242 *) AC_MSG_ERROR([bad value $enableval for --enable-fat, need yes or no]) ;; 243 esac], 244 [enable_fat=no]) 245 246 247 AC_ARG_ENABLE(minithres, 248 AC_HELP_STRING([--enable-minithres], 249 [choose minimal thresholds for testing [default=no]]), 250 [case $enableval in 251 yes|no) ;; 252 *) AC_MSG_ERROR([bad value $enableval for --enable-minithres, need yes or no]) ;; 253 esac], 254 [enable_minithres=no]) 255 256 257 AC_ARG_ENABLE(fake-cpuid, 258 AC_HELP_STRING([--enable-fake-cpuid],[enable GMP_CPU_TYPE faking cpuid [default=no]]), 259 [case $enableval in 260 yes|no) ;; 261 *) AC_MSG_ERROR([bad value $enableval for --enable-fake-cpuid, need yes or no]) ;; 262 esac], 263 [enable_fake_cpuid=no]) 264 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]) 268 fi 269 270 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]) 273 fi 274 275 if test $enable_fake_cpuid = yes && test $enable_fat = no ; then 276 AC_MSG_ERROR([--enable-fake-cpuid requires --enable-fat]) 277 fi 278 279 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) 283 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. 286 dnl 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. 289 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 300 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 329 330 /* Define to 1 iff we have a s390 with 64-bit registers. */ 331 #undef HAVE_HOST_CPU_s390_zarch]) 332 333 334 # Table of compilers, options, and mpn paths. This code has various related 335 # purposes 336 # 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 342 # 343 # After GMP specific searches and tests, the standard autoconf AC_PROG_CC is 344 # called. User selections of CC etc are respected. 345 # 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. 349 # 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. 354 # 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. 359 # 360 # 361 # The variables set here are 362 # 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 378 # 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. 384 # 385 # For multiple ABIs, the scheme extends as follows. 386 # 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 400 # 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. 407 # 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. 411 # 412 # SPEED_CYCLECOUNTER, cyclecounter_size and CALLING_CONVENTIONS_OBJS are 413 # also set here, with an ABI suffix. 414 # 415 # 416 # 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. 421 # 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. 428 429 430 AC_ARG_VAR(ABI, [desired ABI (for processors supporting more than one ABI)]) 431 432 # abilist needs to be non-empty, "standard" is just a generic name here 433 abilist="standard" 434 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. 440 # 441 cclist="gcc cc" 442 443 gcc_cflags="-O2 -pedantic" 444 gcc_64_cflags="-O2 -pedantic" 445 cc_cflags="-O" 446 cc_64_cflags="-O" 447 448 SPEED_CYCLECOUNTER_OBJ= 449 cyclecounter_size=2 450 451 AC_SUBST(HAVE_HOST_CPU_FAMILY_power, 0) 452 AC_SUBST(HAVE_HOST_CPU_FAMILY_powerpc,0) 453 454 case $host in 455 456 alpha*-*-*) 457 AC_DEFINE(HAVE_HOST_CPU_FAMILY_alpha) 458 case $host_cpu in 459 alphaev5* | alphapca5*) 460 path="alpha/ev5 alpha" ;; 461 alphaev67 | alphaev68 | alphaev7*) 462 path="alpha/ev67 alpha/ev6 alpha" ;; 463 alphaev6) 464 path="alpha/ev6 alpha" ;; 465 *) 466 path="alpha" ;; 467 esac 468 if test "$enable_assembly" = "yes" ; then 469 extra_functions="cntlz" 470 fi 471 gcc_cflags_optlist="asm cpu oldas" # need asm ahead of cpu, see below 472 gcc_cflags_maybe="-mieee" 473 gcc_cflags_oldas="-Wa,-oldas" # see GMP_GCC_WA_OLDAS. 474 475 # gcc 2.7.2.3 doesn't know any -mcpu= for alpha, apparently. 476 # gcc 2.95 knows -mcpu= ev4, ev5, ev56, pca56, ev6. 477 # gcc 3.0 adds nothing. 478 # gcc 3.1 adds ev45, ev67 (but ev45 is the same as ev4). 479 # gcc 3.2 adds nothing. 480 # 481 # gcc version "2.9-gnupro-99r1" under "-O2 -mcpu=ev6" strikes internal 482 # compiler errors too easily and is rejected by GMP_PROG_CC_WORKS. Each 483 # -mcpu=ev6 below has a fallback to -mcpu=ev56 for this reason. 484 # 485 case $host_cpu in 486 alpha) gcc_cflags_cpu="-mcpu=ev4" ;; 487 alphaev5) gcc_cflags_cpu="-mcpu=ev5" ;; 488 alphaev56) gcc_cflags_cpu="-mcpu=ev56" ;; 489 alphapca56 | alphapca57) 490 gcc_cflags_cpu="-mcpu=pca56" ;; 491 alphaev6) gcc_cflags_cpu="-mcpu=ev6 -mcpu=ev56" ;; 492 alphaev67 | alphaev68 | alphaev7*) 493 gcc_cflags_cpu="-mcpu=ev67 -mcpu=ev6 -mcpu=ev56" ;; 494 esac 495 496 # gcc version "2.9-gnupro-99r1" on alphaev68-dec-osf5.1 has been seen 497 # accepting -mcpu=ev6, but not putting the assembler in the right mode 498 # for what it produces. We need to do this for it, and need to do it 499 # before testing the -mcpu options. 500 # 501 # On old versions of gcc, which don't know -mcpu=, we believe an 502 # explicit -Wa,-mev5 etc will be necessary to put the assembler in 503 # the right mode for our .asm files and longlong.h asm blocks. 504 # 505 # On newer versions of gcc, when -mcpu= is known, we must give a -Wa 506 # which is at least as high as the code gcc will generate. gcc 507 # establishes what it needs with a ".arch" directive, our command line 508 # option seems to override that. 509 # 510 # gas prior to 2.14 doesn't accept -mev67, but -mev6 seems enough for 511 # ctlz and cttz (in 2.10.0 at least). 512 # 513 # OSF `as' accepts ev68 but stupidly treats it as ev4. -arch only seems 514 # to affect insns like ldbu which are expanded as macros when necessary. 515 # Insns like ctlz which were never available as macros are always 516 # accepted and always generate their plain code. 517 # 518 case $host_cpu in 519 alpha) gcc_cflags_asm="-Wa,-arch,ev4 -Wa,-mev4" ;; 520 alphaev5) gcc_cflags_asm="-Wa,-arch,ev5 -Wa,-mev5" ;; 521 alphaev56) gcc_cflags_asm="-Wa,-arch,ev56 -Wa,-mev56" ;; 522 alphapca56 | alphapca57) 523 gcc_cflags_asm="-Wa,-arch,pca56 -Wa,-mpca56" ;; 524 alphaev6) gcc_cflags_asm="-Wa,-arch,ev6 -Wa,-mev6" ;; 525 alphaev67 | alphaev68 | alphaev7*) 526 gcc_cflags_asm="-Wa,-arch,ev67 -Wa,-mev67 -Wa,-arch,ev6 -Wa,-mev6" ;; 527 esac 528 529 # It might be better to ask "cc" whether it's Cray C or DEC C, 530 # instead of relying on the OS part of $host. But it's hard to 531 # imagine either of those compilers anywhere except their native 532 # systems. 533 # 534 GMP_INCLUDE_MPN(alpha/alpha-defs.m4) 535 case $host in 536 *-cray-unicos*) 537 cc_cflags="-O" # no -g, it silently disables all optimizations 538 GMP_INCLUDE_MPN(alpha/unicos.m4) 539 # Don't perform any assembly syntax tests on this beast. 540 gmp_asm_syntax_testing=no 541 ;; 542 *-*-osf*) 543 GMP_INCLUDE_MPN(alpha/default.m4) 544 cc_cflags="" 545 cc_cflags_optlist="opt cpu" 546 547 # not sure if -fast works on old versions, so make it optional 548 cc_cflags_opt="-fast -O2" 549 550 # DEC C V5.9-005 knows ev4, ev5, ev56, pca56, ev6. 551 # Compaq C V6.3-029 adds ev67. 552 # 553 case $host_cpu in 554 alpha) cc_cflags_cpu="-arch~ev4~-tune~ev4" ;; 555 alphaev5) cc_cflags_cpu="-arch~ev5~-tune~ev5" ;; 556 alphaev56) cc_cflags_cpu="-arch~ev56~-tune~ev56" ;; 557 alphapca56 | alphapca57) 558 cc_cflags_cpu="-arch~pca56~-tune~pca56" ;; 559 alphaev6) cc_cflags_cpu="-arch~ev6~-tune~ev6" ;; 560 alphaev67 | alphaev68 | alphaev7*) 561 cc_cflags_cpu="-arch~ev67~-tune~ev67 -arch~ev6~-tune~ev6" ;; 562 esac 563 ;; 564 *) 565 GMP_INCLUDE_MPN(alpha/default.m4) 566 ;; 567 esac 568 569 case $host in 570 *-*-unicos*) 571 # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes 572 ;; 573 *) 574 SPEED_CYCLECOUNTER_OBJ=alpha.lo 575 cyclecounter_size=1 ;; 576 esac 577 ;; 578 579 580 # Cray vector machines. 581 # This must come after alpha* so that we can recognize present and future 582 # vector processors with a wildcard. 583 *-cray-unicos*) 584 gmp_asm_syntax_testing=no 585 cclist="cc" 586 # We used to have -hscalar0 here as a workaround for miscompilation of 587 # mpz/import.c, but let's hope Cray fixes their bugs instead, since 588 # -hscalar0 causes disastrously poor code to be generated. 589 cc_cflags="-O3 -hnofastmd -htask0 -Wa,-B" 590 path="cray" 591 ;; 592 593 594 arm*-*-* | aarch64*-*-*) 595 abilist="32" 596 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 597 gcc_cflags_optlist="arch fpmode neon tune" 598 gcc_64_cflags_optlist="arch tune" 599 gcc_testlist="gcc-arm-umodsi" 600 gcc_64_testlist="" 601 CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo' 602 CALLING_CONVENTIONS_OBJS_64="" 603 cclist_64="gcc cc" 604 any_32_testlist="sizeof-long-4" 605 any_64_testlist="sizeof-long-8" 606 607 # This is needed for clang, which is not content with flags like -mfpu=neon 608 # alone. 609 case $host in 610 *-*-*eabi) 611 gcc_cflags_fpmode="-mfloat-abi=softfp" ;; 612 *-*-*eabihf) 613 gcc_cflags_fpmode="-mfloat-abi=hard" ;; 614 esac 615 616 # FIXME: We make mandatory compiler options optional here. We should 617 # either enforce them, or organise to strip paths as the corresponding 618 # options fail. 619 case $host_cpu in 620 armxscale | arm7ej | arm9te | arm9e* | arm10* | armv5*) 621 path="arm/v5 arm" 622 gcc_cflags_arch="-march=armv5" 623 ;; 624 armsa1 | arm7t* | arm9t* | armv4t*) 625 path="arm" 626 gcc_cflags_arch="-march=armv4" 627 ;; 628 arm1156 | armv6t2*) 629 path="arm/v6t2 arm/v6 arm/v5 arm" 630 gcc_cflags_arch="-march=armv6t2" 631 ;; 632 arm11* | armv6*) 633 path="arm/v6 arm/v5 arm" 634 gcc_cflags_arch="-march=armv6" 635 ;; 636 armcortexa5 | armv7*) 637 path="arm/v6t2 arm/v6 arm/v5 arm" 638 gcc_cflags_arch="-march=armv7-a" 639 gcc_cflags_tune="-mtune=cortex-a5" 640 ;; 641 armcortexa5neon) 642 path="arm/neon arm/v6t2 arm/v6 arm/v5 arm" 643 gcc_cflags_neon="-mfpu=neon" 644 gcc_cflags_arch="-march=armv7-a" 645 gcc_cflags_tune="-mtune=cortex-a5" 646 ;; 647 armcortexa7) 648 path="arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" 649 gcc_cflags_arch="-march=armv7-a" 650 gcc_cflags_tune="-mtune=cortex-a7" 651 ;; 652 armcortexa7neon) 653 path="arm/neon arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" 654 gcc_cflags_arch="-march=armv7-a" 655 gcc_cflags_neon="-mfpu=neon" 656 gcc_cflags_tune="-mtune=cortex-a7" 657 ;; 658 armcortexa8) 659 path="arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" 660 gcc_cflags_arch="-march=armv7-a" 661 gcc_cflags_tune="-mtune=cortex-a8" 662 ;; 663 armcortexa8neon) 664 path="arm/neon arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" 665 gcc_cflags_arch="-march=armv7-a" 666 gcc_cflags_neon="-mfpu=neon" 667 gcc_cflags_tune="-mtune=cortex-a8" 668 ;; 669 armcortexa9) 670 path="arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" 671 gcc_cflags_arch="-march=armv7-a" 672 gcc_cflags_tune="-mtune=cortex-a9" 673 ;; 674 armcortexa9neon) 675 path="arm/neon arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" 676 gcc_cflags_arch="-march=armv7-a" 677 gcc_cflags_neon="-mfpu=neon" 678 gcc_cflags_tune="-mtune=cortex-a9" 679 ;; 680 armcortexa15) 681 path="arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 682 gcc_cflags_arch="-march=armv7-a" 683 gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" 684 ;; 685 armcortexa15neon) 686 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 687 gcc_cflags_arch="-march=armv7-a" 688 gcc_cflags_neon="-mfpu=neon" 689 gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" 690 ;; 691 armcortexa53 | armcortexa53neon) 692 abilist="64 32" 693 path="arm/neon arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" 694 path_64="arm64/cora53 arm64" 695 gcc_cflags_arch="-march=armv8-a" 696 gcc_cflags_neon="-mfpu=neon" 697 gcc_cflags_tune="-mtune=cortex-a53" 698 ;; 699 armcortexa57 | armcortexa57neon) 700 abilist="64 32" 701 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 702 path_64="arm64/cora57 arm64" 703 gcc_cflags_arch="-march=armv8-a" 704 gcc_cflags_neon="-mfpu=neon" 705 gcc_cflags_tune="-mtune=cortex-a57" 706 ;; 707 armcortexa72 | armcortexa72neon) 708 abilist="64 32" 709 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 710 path_64="arm64/cora72 arm64" 711 gcc_cflags_arch="-march=armv8-a" 712 gcc_cflags_neon="-mfpu=neon" 713 gcc_cflags_tune="-mtune=cortex-a72" 714 ;; 715 armexynosm1) 716 abilist="64 32" 717 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 718 path_64="arm64" 719 gcc_cflags_arch="-march=armv8-a" 720 gcc_cflags_neon="-mfpu=neon" 721 gcc_cflags_tune="-mtune=exynosm1" 722 ;; 723 armthunderx) 724 abilist="64 32" 725 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 726 path_64="arm64" 727 gcc_cflags_arch="-march=armv8-a" 728 gcc_cflags_neon="-mfpu=neon" 729 gcc_cflags_tune="-mtune=thunderx" 730 ;; 731 armxgene1) 732 abilist="64 32" 733 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 734 path_64="arm64/xgene1 arm64" 735 gcc_cflags_arch="-march=armv8-a" 736 gcc_cflags_neon="-mfpu=neon" 737 gcc_cflags_tune="-mtune=xgene1" 738 ;; 739 aarch64*) 740 abilist="64 32" 741 path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 742 path_64="arm64" 743 gcc_cflags_arch="-march=armv8-a" 744 gcc_cflags_neon="-mfpu=neon" 745 gcc_cflags_tune="" 746 ;; 747 *) 748 path="arm" 749 gcc_cflags_arch="-march=armv4" 750 GMP_DEFINE_RAW(["define(<NOTHUMB>,1)"]) 751 ;; 752 esac 753 ;; 754 755 756 # Fujitsu 757 [f30[01]-fujitsu-sysv*]) 758 cclist="gcc vcc" 759 # FIXME: flags for vcc? 760 vcc_cflags="-g" 761 path="fujitsu" 762 ;; 763 764 765 hppa*-*-*) 766 # HP cc (the one sold separately) is K&R by default, but AM_C_PROTOTYPES 767 # will add "-Ae", or "-Aa -D_HPUX_SOURCE", to put it into ansi mode, if 768 # possible. 769 # 770 # gcc for hppa 2.0 can be built either for 2.0n (32-bit) or 2.0w 771 # (64-bit), but not both, so there's no option to choose the desired 772 # mode, we must instead detect which of the two it is. This is done by 773 # checking sizeof(long), either 4 or 8 bytes respectively. Do this in 774 # ABI=1.0 too, in case someone tries to build that with a 2.0w gcc. 775 # 776 gcc_cflags_optlist="arch" 777 gcc_testlist="sizeof-long-4" 778 SPEED_CYCLECOUNTER_OBJ=hppa.lo 779 cyclecounter_size=1 780 781 # FIXME: For hppa2.0*, path should be "pa32/hppa2_0 pa32/hppa1_1 pa32". 782 # (Can't remember why this isn't done already, have to check what .asm 783 # files are available in each and how they run on a typical 2.0 cpu.) 784 # 785 case $host_cpu in 786 hppa1.0*) path="pa32" ;; 787 hppa7000*) path="pa32/hppa1_1 pa32" ;; 788 hppa2.0* | hppa64) 789 path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; 790 *) # default to 7100 791 path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; 792 esac 793 794 # gcc 2.7.2.3 knows -mpa-risc-1-0 and -mpa-risc-1-1 795 # gcc 2.95 adds -mpa-risc-2-0, plus synonyms -march=1.0, 1.1 and 2.0 796 # 797 # We don't use -mpa-risc-2-0 in ABI=1.0 because 64-bit registers may not 798 # be saved by the kernel on an old system. Actually gcc (as of 3.2) 799 # only adds a few float instructions with -mpa-risc-2-0, so it would 800 # probably be safe, but let's not take the chance. In any case, a 801 # configuration like --host=hppa2.0 ABI=1.0 is far from optimal. 802 # 803 case $host_cpu in 804 hppa1.0*) gcc_cflags_arch="-mpa-risc-1-0" ;; 805 *) # default to 7100 806 gcc_cflags_arch="-mpa-risc-1-1" ;; 807 esac 808 809 case $host_cpu in 810 hppa1.0*) cc_cflags="+O2" ;; 811 *) # default to 7100 812 cc_cflags="+DA1.1 +O2" ;; 813 esac 814 815 case $host in 816 hppa2.0*-*-* | hppa64-*-*) 817 cclist_20n="gcc cc" 818 abilist="2.0n 1.0" 819 path_20n="pa64" 820 limb_20n=longlong 821 any_20n_testlist="sizeof-long-4" 822 SPEED_CYCLECOUNTER_OBJ_20n=hppa2.lo 823 cyclecounter_size_20n=2 824 825 # -mpa-risc-2-0 is only an optional flag, in case an old gcc is 826 # used. Assembler support for 2.0 is essential though, for our asm 827 # files. 828 gcc_20n_cflags="$gcc_cflags" 829 gcc_20n_cflags_optlist="arch" 830 gcc_20n_cflags_arch="-mpa-risc-2-0 -mpa-risc-1-1" 831 gcc_20n_testlist="sizeof-long-4 hppa-level-2.0" 832 833 cc_20n_cflags="+DA2.0 +e +O2 -Wl,+vnocompatwarnings" 834 cc_20n_testlist="hpc-hppa-2-0" 835 836 # ABI=2.0w is available for hppa2.0w and hppa2.0, but not for 837 # hppa2.0n, on the assumption that that the latter indicates a 838 # desire for ABI=2.0n. 839 case $host in 840 hppa2.0n-*-*) ;; 841 *) 842 # HPUX 10 and earlier cannot run 2.0w. Not sure about other 843 # systems (GNU/Linux for instance), but lets assume they're ok. 844 case $host in 845 [*-*-hpux[1-9] | *-*-hpux[1-9].* | *-*-hpux10 | *-*-hpux10.*]) ;; 846 [*-*-linux*]) abilist="1.0" ;; # due to linux permanent kernel bug 847 *) abilist="2.0w $abilist" ;; 848 esac 849 850 cclist_20w="gcc cc" 851 gcc_20w_cflags="$gcc_cflags -mpa-risc-2-0" 852 cc_20w_cflags="+DD64 +O2" 853 cc_20w_testlist="hpc-hppa-2-0" 854 path_20w="pa64" 855 any_20w_testlist="sizeof-long-8" 856 SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo 857 cyclecounter_size_20w=2 858 ;; 859 esac 860 ;; 861 esac 862 ;; 863 864 865 IA64_PATTERN) 866 abilist="64" 867 GMP_INCLUDE_MPN(ia64/ia64-defs.m4) 868 SPEED_CYCLECOUNTER_OBJ=ia64.lo 869 any_32_testlist="sizeof-long-4" 870 871 case $host_cpu in 872 itanium) path="ia64/itanium ia64" ;; 873 itanium2) path="ia64/itanium2 ia64" ;; 874 *) path="ia64" ;; 875 esac 876 877 gcc_64_cflags_optlist="tune" 878 gcc_32_cflags_optlist=$gcc_64_cflags_optlist 879 880 # gcc pre-release 3.4 adds -mtune itanium and itanium2 881 case $host_cpu in 882 itanium) gcc_cflags_tune="-mtune=itanium" ;; 883 itanium2) gcc_cflags_tune="-mtune=itanium2" ;; 884 esac 885 886 case $host in 887 *-*-linux*) 888 cclist="gcc icc" 889 icc_cflags="-no-gcc" 890 icc_cflags_optlist="opt" 891 # Don't use -O3, it is for "large data sets" and also miscompiles GMP. 892 # But icc miscompiles GMP at any optimization level, at higher levels 893 # it miscompiles more files... 894 icc_cflags_opt="-O2 -O1" 895 icc_cflags_opt_maybe="-fp-model~precise" 896 ;; 897 898 *-*-hpux*) 899 # HP cc sometimes gets internal errors if the optimization level is 900 # too high. GMP_PROG_CC_WORKS detects this, the "_opt" fallbacks 901 # let us use whatever seems to work. 902 # 903 abilist="32 64" 904 any_64_testlist="sizeof-long-8" 905 906 cclist_32="gcc cc" 907 path_32="ia64" 908 cc_32_cflags="" 909 cc_32_cflags_optlist="opt" 910 cc_32_cflags_opt="+O2 +O1" 911 gcc_32_cflags="$gcc_cflags -milp32" 912 limb_32=longlong 913 SPEED_CYCLECOUNTER_OBJ_32=ia64.lo 914 cyclecounter_size_32=2 915 916 # Must have +DD64 in CPPFLAGS to get the right __LP64__ for headers, 917 # but also need it in CFLAGS for linking programs, since automake 918 # only uses CFLAGS when linking, not CPPFLAGS. 919 # FIXME: Maybe should use cc_64_ldflags for this, but that would 920 # need GMP_LDFLAGS used consistently by all the programs. 921 # 922 cc_64_cflags="+DD64" 923 cc_64_cppflags="+DD64" 924 cc_64_cflags_optlist="opt" 925 cc_64_cflags_opt="+O2 +O1" 926 gcc_64_cflags="$gcc_cflags -mlp64" 927 ;; 928 esac 929 ;; 930 931 932 # Motorola 68k 933 # 934 M68K_PATTERN) 935 AC_DEFINE(HAVE_HOST_CPU_FAMILY_m68k) 936 GMP_INCLUDE_MPN(m68k/m68k-defs.m4) 937 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 938 gcc_cflags_optlist="arch" 939 940 # gcc 2.7.2 knows -m68000, -m68020, -m68030, -m68040. 941 # gcc 2.95 adds -mcpu32, -m68060. 942 # FIXME: Maybe "-m68020 -mnobitfield" would suit cpu32 on 2.7.2. 943 # 944 case $host_cpu in 945 m68020) gcc_cflags_arch="-m68020" ;; 946 m68030) gcc_cflags_arch="-m68030" ;; 947 m68040) gcc_cflags_arch="-m68040" ;; 948 m68060) gcc_cflags_arch="-m68060 -m68000" ;; 949 m68360) gcc_cflags_arch="-mcpu32 -m68000" ;; 950 *) gcc_cflags_arch="-m68000" ;; 951 esac 952 953 # FIXME: m68k/mc68020 looks like it's ok for cpu32, but this wants to be 954 # tested. Will need to introduce an m68k/cpu32 if m68k/mc68020 ever uses 955 # the bitfield instructions. 956 case $host_cpu in 957 [m680[234]0 | m68360]) path="m68k/mc68020 m68k" ;; 958 *) path="m68k" ;; 959 esac 960 ;; 961 962 963 # Motorola 88k 964 m88k*-*-*) 965 path="m88k" 966 ;; 967 m88110*-*-*) 968 gcc_cflags="$gcc_cflags -m88110" 969 path="m88k/mc88110 m88k" 970 ;; 971 972 973 # IRIX 5 and earlier can only run 32-bit o32. 974 # 975 # IRIX 6 and up always has a 64-bit mips CPU can run n32 or 64. n32 is 976 # preferred over 64, but only because that's been the default in past 977 # versions of GMP. The two are equally efficient. 978 # 979 # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not 980 # supporting n32 or 64. 981 # 982 # For reference, libtool (eg. 1.5.6) recognises the n32 ABI and knows the 983 # right options to use when linking (both cc and gcc), so no need for 984 # anything special from us. 985 # 986 mips*-*-*) 987 abilist="o32" 988 gcc_cflags_optlist="abi" 989 gcc_cflags_abi="-mabi=32 -m32" 990 gcc_testlist="gcc-mips-o32" 991 path="mips32" 992 cc_cflags="-O2 -o32" # no -g, it disables all optimizations 993 # this suits both mips32 and mips64 994 GMP_INCLUDE_MPN(mips32/mips-defs.m4) 995 996 case $host in 997 [mips64*-*-* | mips*-*-irix[6789]*]) 998 abilist="n32 64 o32" 999 1000 cclist_n32="gcc cc" 1001 gcc_n32_cflags_optlist="abi" 1002 gcc_n32_cflags="$gcc_cflags" 1003 gcc_n32_cflags_abi="-mabi=n32 -mn32" 1004 cc_n32_cflags="-O2 -n32" # no -g, it disables all optimizations 1005 limb_n32=longlong 1006 path_n32="mips64" 1007 1008 cclist_64="gcc cc" 1009 gcc_64_cflags_optlist="abi" 1010 gcc_64_cflags="$gcc_cflags" 1011 gcc_64_cflags_abi="-mabi=64 -m64" 1012 gcc_64_ldflags="-Wc,-mabi=64" 1013 cc_64_cflags="-O2 -64" # no -g, it disables all optimizations 1014 cc_64_ldflags="-Wc,-64" 1015 path_64="mips64" 1016 ;; 1017 esac 1018 ;; 1019 1020 1021 # Darwin (powerpc-apple-darwin1.3) has it's hacked gcc installed as cc. 1022 # Our usual "gcc in disguise" detection means gcc_cflags etc here gets 1023 # used. 1024 # 1025 # The darwin pre-compiling preprocessor is disabled with -no-cpp-precomp 1026 # since it doesn't like "__attribute__ ((mode (SI)))" etc in gmp-impl.h, 1027 # and so always ends up running the plain preprocessor anyway. This could 1028 # be done in CPPFLAGS rather than CFLAGS, but there's not many places 1029 # preprocessing is done separately, and this is only a speedup, the normal 1030 # preprocessor gets run if there's any problems. 1031 # 1032 # We used to use -Wa,-mppc with gcc, but can't remember exactly why. 1033 # Presumably it was for old versions of gcc where -mpowerpc doesn't put 1034 # the assembler in the right mode. In any case -Wa,-mppc is not good, for 1035 # instance -mcpu=604 makes recent gcc use -m604 to get access to the 1036 # "fsel" instruction, but a -Wa,-mppc overrides that, making code that 1037 # comes out with fsel fail. 1038 # 1039 # (Note also that the darwin assembler doesn't accept "-mppc", so any 1040 # -Wa,-mppc was used only if it worked. The right flag on darwin would be 1041 # "-arch ppc" or some such, but that's already the default.) 1042 # 1043 [powerpc*-*-* | power[3-9]-*-*]) 1044 AC_DEFINE(HAVE_HOST_CPU_FAMILY_powerpc) 1045 HAVE_HOST_CPU_FAMILY_powerpc=1 1046 abilist="32" 1047 cclist="gcc cc" 1048 cc_cflags="-O2" 1049 gcc_32_cflags_maybe="-m32" 1050 gcc_cflags_optlist="precomp subtype asm cpu" 1051 gcc_cflags_precomp="-no-cpp-precomp" 1052 gcc_cflags_subtype="-force_cpusubtype_ALL" # for vmx on darwin 1053 gcc_cflags_asm="" 1054 gcc_cflags_cpu="" 1055 vmx_path="" 1056 1057 # grab this object, though it's not a true cycle counter routine 1058 SPEED_CYCLECOUNTER_OBJ=powerpc.lo 1059 cyclecounter_size=0 1060 1061 case $host_cpu in 1062 powerpc740 | powerpc750) 1063 path="powerpc32/750 powerpc32" ;; 1064 powerpc7400 | powerpc7410) 1065 path="powerpc32/vmx powerpc32/750 powerpc32" ;; 1066 [powerpc74[45]?]) 1067 path="powerpc32/vmx powerpc32" ;; 1068 *) 1069 path="powerpc32" ;; 1070 esac 1071 1072 case $host_cpu in 1073 powerpc401) gcc_cflags_cpu="-mcpu=401" ;; 1074 powerpc403) gcc_cflags_cpu="-mcpu=403" 1075 xlc_cflags_arch="-qarch=403 -qarch=ppc" ;; 1076 powerpc405) gcc_cflags_cpu="-mcpu=405" ;; 1077 powerpc505) gcc_cflags_cpu="-mcpu=505" ;; 1078 powerpc601) gcc_cflags_cpu="-mcpu=601" 1079 xlc_cflags_arch="-qarch=601 -qarch=ppc" ;; 1080 powerpc602) gcc_cflags_cpu="-mcpu=602" 1081 xlc_cflags_arch="-qarch=602 -qarch=ppc" ;; 1082 powerpc603) gcc_cflags_cpu="-mcpu=603" 1083 xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; 1084 powerpc603e) gcc_cflags_cpu="-mcpu=603e -mcpu=603" 1085 xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; 1086 powerpc604) gcc_cflags_cpu="-mcpu=604" 1087 xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; 1088 powerpc604e) gcc_cflags_cpu="-mcpu=604e -mcpu=604" 1089 xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; 1090 powerpc620) gcc_cflags_cpu="-mcpu=620" ;; 1091 powerpc630) gcc_cflags_cpu="-mcpu=630" 1092 xlc_cflags_arch="-qarch=pwr3" 1093 cpu_path="p3 p3-p7" ;; 1094 powerpc740) gcc_cflags_cpu="-mcpu=740" ;; 1095 powerpc7400 | powerpc7410) 1096 gcc_cflags_asm="-Wa,-maltivec" 1097 gcc_cflags_cpu="-mcpu=7400 -mcpu=750" ;; 1098 [powerpc74[45]?]) 1099 gcc_cflags_asm="-Wa,-maltivec" 1100 gcc_cflags_cpu="-mcpu=7450" ;; 1101 powerpc750) gcc_cflags_cpu="-mcpu=750" ;; 1102 powerpc801) gcc_cflags_cpu="-mcpu=801" ;; 1103 powerpc821) gcc_cflags_cpu="-mcpu=821" ;; 1104 powerpc823) gcc_cflags_cpu="-mcpu=823" ;; 1105 powerpc860) gcc_cflags_cpu="-mcpu=860" ;; 1106 powerpc970) gcc_cflags_cpu="-mtune=970" 1107 xlc_cflags_arch="-qarch=970 -qarch=pwr3" 1108 vmx_path="powerpc64/vmx" 1109 cpu_path="p4 p3-p7" ;; 1110 power4) gcc_cflags_cpu="-mtune=power4" 1111 xlc_cflags_arch="-qarch=pwr4" 1112 cpu_path="p4 p3-p7" ;; 1113 power5) gcc_cflags_cpu="-mtune=power5 -mtune=power4" 1114 xlc_cflags_arch="-qarch=pwr5" 1115 cpu_path="p5 p4 p3-p7" ;; 1116 power6) gcc_cflags_cpu="-mtune=power6" 1117 xlc_cflags_arch="-qarch=pwr6" 1118 cpu_path="p6 p3-p7" ;; 1119 power7) gcc_cflags_cpu="-mtune=power7 -mtune=power5" 1120 xlc_cflags_arch="-qarch=pwr7 -qarch=pwr5" 1121 cpu_path="p7 p5 p4 p3-p7" ;; 1122 [power[89]]) gcc_cflags_cpu="-mtune=power8 -mtune=power7 -mtune=power5" 1123 xlc_cflags_arch="-qarch=pwr8 -qarch=pwr7 -qarch=pwr5" 1124 cpu_path="p8 p7 p5 p4 p3-p7" ;; 1125 esac 1126 1127 case $host in 1128 *-*-aix*) 1129 cclist="gcc xlc cc" 1130 gcc_32_cflags_maybe="-maix32" 1131 xlc_cflags="-O2 -qmaxmem=20000" 1132 xlc_cflags_optlist="arch" 1133 xlc_32_cflags_maybe="-q32" 1134 ar_32_flags="-X32" 1135 nm_32_flags="-X32" 1136 esac 1137 1138 case $host in 1139 POWERPC64_PATTERN) 1140 case $host in 1141 *-*-aix*) 1142 # On AIX a true 64-bit ABI is available. 1143 # Need -Wc to pass object type flags through to the linker. 1144 abilist="mode64 $abilist" 1145 cclist_mode64="gcc xlc" 1146 gcc_mode64_cflags="$gcc_cflags -maix64 -mpowerpc64" 1147 gcc_mode64_cflags_optlist="cpu" 1148 gcc_mode64_ldflags="-Wc,-maix64" 1149 xlc_mode64_cflags="-O2 -q64 -qmaxmem=20000" 1150 xlc_mode64_cflags_optlist="arch" 1151 xlc_mode64_ldflags="-Wc,-q64" 1152 # Must indicate object type to ar and nm 1153 ar_mode64_flags="-X64" 1154 nm_mode64_flags="-X64" 1155 path_mode64="" 1156 p="" 1157 for i in $cpu_path 1158 do path_mode64="${path_mode64}powerpc64/mode64/$i " 1159 path_mode64="${path_mode64}powerpc64/$i " 1160 p="${p} powerpc32/$i " 1161 done 1162 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" 1163 path="$p $path" 1164 # grab this object, though it's not a true cycle counter routine 1165 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo 1166 cyclecounter_size_mode64=0 1167 ;; 1168 *-*-darwin*) 1169 # On Darwin we can use 64-bit instructions with a longlong limb, 1170 # but the chip still in 32-bit mode. 1171 # In theory this can be used on any OS which knows how to save 1172 # 64-bit registers in a context switch. 1173 # 1174 # Note that we must use -mpowerpc64 with gcc, since the 1175 # longlong.h macros expect limb operands in a single 64-bit 1176 # register, not two 32-bit registers as would be given for a 1177 # long long without -mpowerpc64. In theory we could detect and 1178 # accommodate both styles, but the proper 64-bit registers will 1179 # be fastest and are what we really want to use. 1180 # 1181 # One would think -mpowerpc64 would set the assembler in the right 1182 # mode to handle 64-bit instructions. But for that, also 1183 # -force_cpusubtype_ALL is needed. 1184 # 1185 # Do not use -fast for Darwin, it actually adds options 1186 # incompatible with a shared library. 1187 # 1188 abilist="mode64 mode32 $abilist" 1189 gcc_cflags_opt="-O3 -O2 -O1" # will this become used? 1190 cclist_mode32="gcc" 1191 gcc_mode32_cflags_maybe="-m32" 1192 gcc_mode32_cflags="-mpowerpc64" 1193 gcc_mode32_cflags_optlist="subtype cpu opt" 1194 gcc_mode32_cflags_subtype="-force_cpusubtype_ALL" 1195 gcc_mode32_cflags_opt="-O3 -O2 -O1" 1196 limb_mode32=longlong 1197 cclist_mode64="gcc" 1198 gcc_mode64_cflags="-m64" 1199 gcc_mode64_cflags_optlist="cpu opt" 1200 gcc_mode64_cflags_opt="-O3 -O2 -O1" 1201 path_mode64="" 1202 path_mode32="" 1203 p="" 1204 for i in $cpu_path 1205 do path_mode64="${path_mode64}powerpc64/mode64/$i " 1206 path_mode64="${path_mode64}powerpc64/$i " 1207 path_mode32="${path_mode32}powerpc64/mode32/$i " 1208 path_mode32="${path_mode32}powerpc64/$i " 1209 p="${p} powerpc32/$i " 1210 done 1211 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" 1212 path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" 1213 path="$p $path" 1214 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo 1215 cyclecounter_size_mode64=0 1216 any_mode64_testlist="sizeof-long-8" 1217 ;; 1218 *-*-linux* | *-*-*bsd*) 1219 # On GNU/Linux, assume the processor is in 64-bit mode. Some 1220 # environments have a gcc that is always in 64-bit mode, while 1221 # others require -m64, hence the use of cflags_maybe. The 1222 # sizeof-long-8 test checks the mode is right (for the no option 1223 # case). 1224 # 1225 # -mpowerpc64 is not used, since it should be the default in 1226 # 64-bit mode. (We need its effect for the various longlong.h 1227 # asm macros to be right of course.) 1228 # 1229 # gcc64 was an early port of gcc to 64-bit mode, but should be 1230 # obsolete before too long. We prefer plain gcc when it knows 1231 # 64-bits. 1232 # 1233 abilist="mode64 mode32 $abilist" 1234 cclist_mode32="gcc" 1235 gcc_mode32_cflags_maybe="-m32" 1236 gcc_mode32_cflags="-mpowerpc64" 1237 gcc_mode32_cflags_optlist="cpu opt" 1238 gcc_mode32_cflags_opt="-O3 -O2 -O1" 1239 limb_mode32=longlong 1240 cclist_mode64="gcc gcc64" 1241 gcc_mode64_cflags_maybe="-m64" 1242 gcc_mode64_cflags_optlist="cpu opt" 1243 gcc_mode64_cflags_opt="-O3 -O2 -O1" 1244 path_mode64="" 1245 path_mode32="" 1246 p="" 1247 for i in $cpu_path 1248 do path_mode64="${path_mode64}powerpc64/mode64/$i " 1249 path_mode64="${path_mode64}powerpc64/$i " 1250 path_mode32="${path_mode32}powerpc64/mode32/$i " 1251 path_mode32="${path_mode32}powerpc64/$i " 1252 p="${p} powerpc32/$i " 1253 done 1254 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" 1255 path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" 1256 path="$p $path" 1257 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo 1258 cyclecounter_size_mode64=0 1259 any_mode64_testlist="sizeof-long-8" 1260 ;; 1261 esac 1262 ;; 1263 esac 1264 ;; 1265 1266 1267 # POWER 32-bit 1268 [power-*-* | power[12]-*-* | power2sc-*-*]) 1269 AC_DEFINE(HAVE_HOST_CPU_FAMILY_power) 1270 HAVE_HOST_CPU_FAMILY_power=1 1271 cclist="gcc" 1272 if test "$enable_assembly" = "yes" ; then 1273 extra_functions="udiv_w_sdiv" 1274 fi 1275 path="power" 1276 1277 # gcc 2.7.2 knows rios1, rios2, rsc 1278 # 1279 # -mcpu=rios2 can tickle an AIX assembler bug (see GMP_PROG_CC_WORKS) so 1280 # there needs to be a fallback to just -mpower. 1281 # 1282 gcc_cflags_optlist="cpu" 1283 case $host in 1284 power-*-*) gcc_cflags_cpu="-mcpu=power -mpower" ;; 1285 power1-*-*) gcc_cflags_cpu="-mcpu=rios1 -mpower" ;; 1286 power2-*-*) gcc_cflags_cpu="-mcpu=rios2 -mpower" ;; 1287 power2sc-*-*) gcc_cflags_cpu="-mcpu=rsc -mpower" ;; 1288 esac 1289 case $host in 1290 *-*-aix*) 1291 cclist="gcc xlc" 1292 xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000" 1293 ;; 1294 esac 1295 ;; 1296 1297 1298 # IBM System/390 and z/Architecture 1299 S390_PATTERN | S390X_PATTERN) 1300 abilist="32" 1301 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1302 gcc_cflags_optlist="arch" 1303 path="s390_32" 1304 if test "$enable_assembly" = "yes" ; then 1305 extra_functions="udiv_w_sdiv" 1306 fi 1307 gcc_32_cflags_maybe="-m31" 1308 1309 case $host_cpu in 1310 s390) 1311 ;; 1312 z900 | z900esa) 1313 cpu="z900" 1314 gccarch="$cpu" 1315 path="s390_32/esame/$cpu s390_32/esame s390_32" 1316 gcc_cflags_arch="-march=$gccarch" 1317 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1318 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1319 extra_functions="" 1320 ;; 1321 z990 | z990esa) 1322 cpu="z990" 1323 gccarch="$cpu" 1324 path="s390_32/esame/$cpu s390_32/esame s390_32" 1325 gcc_cflags_arch="-march=$gccarch" 1326 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1327 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1328 extra_functions="" 1329 ;; 1330 z9 | z9esa) 1331 cpu="z9" 1332 gccarch="z9-109" 1333 path="s390_32/esame/$cpu s390_32/esame s390_32" 1334 gcc_cflags_arch="-march=$gccarch" 1335 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1336 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1337 extra_functions="" 1338 ;; 1339 z10 | z10esa) 1340 cpu="z10" 1341 gccarch="z10" 1342 path="s390_32/esame/$cpu s390_32/esame s390_32" 1343 gcc_cflags_arch="-march=$gccarch" 1344 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1345 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1346 extra_functions="" 1347 ;; 1348 z196 | z196esa) 1349 cpu="z196" 1350 gccarch="z196" 1351 path="s390_32/esame/$cpu s390_32/esame s390_32" 1352 gcc_cflags_arch="-march=$gccarch" 1353 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1354 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1355 extra_functions="" 1356 ;; 1357 esac 1358 1359 case $host in 1360 S390X_PATTERN) 1361 abilist="64 32" 1362 cclist_64="gcc" 1363 gcc_64_cflags_optlist="arch" 1364 gcc_64_cflags="$gcc_cflags -m64" 1365 path_64="s390_64/$host_cpu s390_64" 1366 extra_functions="" 1367 ;; 1368 esac 1369 ;; 1370 1371 1372 sh-*-*) path="sh" ;; 1373 [sh[2-4]-*-*]) path="sh/sh2 sh" ;; 1374 1375 1376 *sparc*-*-*) 1377 # sizeof(long)==4 or 8 is tested, to ensure we get the right ABI. We've 1378 # had various bug reports where users have set CFLAGS for their desired 1379 # mode, but not set our ABI. For some reason it's sparc where this 1380 # keeps coming up, presumably users there are accustomed to driving the 1381 # compiler mode that way. The effect of our testlist setting is to 1382 # reject ABI=64 in favour of ABI=32 if the user has forced the flags to 1383 # 32-bit mode. 1384 # 1385 abilist="32" 1386 cclist="gcc acc cc" 1387 any_testlist="sizeof-long-4" 1388 GMP_INCLUDE_MPN(sparc32/sparc-defs.m4) 1389 1390 case $host_cpu in 1391 sparcv8 | microsparc | turbosparc) 1392 path="sparc32/v8 sparc32" ;; 1393 supersparc) 1394 path="sparc32/v8/supersparc sparc32/v8 sparc32" ;; 1395 [sparc64 | sparcv9* | ultrasparc | ultrasparc[234]*]) 1396 path="sparc32/v9 sparc32/v8 sparc32" ;; 1397 [ultrasparct[12345]]) 1398 path="sparc32/ultrasparct1 sparc32/v8 sparc32" ;; 1399 *) 1400 path="sparc32" ;; 1401 esac 1402 1403 # gcc 2.7.2 doesn't know about v9 and doesn't pass -xarch=v8plus to the 1404 # assembler. Add it explicitly since the solaris assembler won't accept 1405 # our sparc32/v9 asm code without it. gas accepts -xarch=v8plus too, so 1406 # it can be in the cflags unconditionally (though gas doesn't need it). 1407 # 1408 # gcc -m32 is needed to force 32-bit mode on a dual-ABI system, but past 1409 # gcc doesn't know that flag, hence cflags_maybe. Note that -m32 cannot 1410 # be done through the optlist since the plain cflags would be run first 1411 # and we don't want to require the default mode (whatever it is) works. 1412 # 1413 # Note it's gcc_32_cflags_maybe and not gcc_cflags_maybe because the 1414 # latter would be used in the 64-bit ABI on systems like "*bsd" where 1415 # abilist="64" only. 1416 # 1417 gcc_32_cflags_maybe="-m32" 1418 gcc_cflags_optlist="cpu asm" 1419 1420 # gcc 2.7.2 knows -mcypress, -msupersparc, -mv8, -msparclite. 1421 # gcc 2.95 knows -mcpu= v7, hypersparc, sparclite86x, f930, f934, 1422 # sparclet, tsc701, v9, ultrasparc. A warning is given that the 1423 # plain -m forms will disappear. 1424 # gcc 3.3 adds ultrasparc3. 1425 # 1426 case $host_cpu in 1427 supersparc*) 1428 gcc_cflags_cpu="-mcpu=supersparc -msupersparc" 1429 gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; 1430 sparcv8 | microsparc* | turbosparc | hypersparc*) 1431 gcc_cflags_cpu="-mcpu=v8 -mv8" 1432 gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; 1433 sparc64 | sparcv9*) 1434 gcc_cflags_cpu="-mcpu=v9" 1435 gcc_32_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8plus" 1436 gcc_64_cflags_asm="-Wa,-Av9 -Wa,-xarch=v9";; 1437 ultrasparc1 | ultrasparc2*) 1438 gcc_cflags_cpu="-mcpu=ultrasparc -mcpu=v9" 1439 gcc_32_cflags_asm="-Wa,-Av8plusa -Wa,-xarch=v8plusa" 1440 gcc_64_cflags_asm="-Wa,-Av9a -Wa,-xarch=v9a";; 1441 [ultrasparc[34]]) 1442 gcc_cflags_cpu="-mcpu=ultrasparc3 -mcpu=ultrasparc -mcpu=v9" 1443 gcc_32_cflags_asm="-Wa,-Av8plusb -Wa,-xarch=v8plusb" 1444 gcc_64_cflags_asm="-Wa,-Av9b -Wa,-xarch=v9b";; 1445 [ultrasparct[12]]) 1446 gcc_cflags_cpu="-mcpu=niagara -mcpu=v9" 1447 gcc_32_cflags_asm="-Wa,-Av8plusc -Wa,-xarch=v8plusc" 1448 gcc_64_cflags_asm="-Wa,-Av9c -Wa,-xarch=v9c";; 1449 ultrasparct3) 1450 gcc_cflags_cpu="-mcpu=niagara3 -mcpu=niagara -mcpu=v9" 1451 gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" 1452 gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; 1453 [ultrasparct[45]]) 1454 gcc_cflags_cpu="-mcpu=niagara4 -mcpu=niagara3 -mcpu=niagara -mcpu=v9" 1455 gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" 1456 gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; 1457 *) 1458 gcc_cflags_cpu="-mcpu=v7 -mcypress" 1459 gcc_cflags_asm="";; 1460 esac 1461 1462 # SunPRO cc and acc, and SunOS bundled cc 1463 case $host in 1464 *-*-solaris* | *-*-sunos*) 1465 # Note no -g, it disables all optimizations. 1466 cc_cflags= 1467 cc_cflags_optlist="opt arch cpu" 1468 1469 # SunOS <= 4 cc doesn't know -xO3, fallback to -O2. 1470 cc_cflags_opt="-xO3 -O2" 1471 1472 # SunOS cc doesn't know -xarch, apparently always generating v7 1473 # code, so make this optional 1474 case $host_cpu in 1475 sparcv8 | microsparc* | supersparc* | turbosparc | hypersparc*) 1476 cc_cflags_arch="-xarch=v8";; 1477 [ultrasparct[345]]) 1478 cc_cflags_arch="-xarch=v8plusd" ;; 1479 sparc64 | sparcv9* | ultrasparc*) 1480 cc_cflags_arch="-xarch=v8plus" ;; 1481 *) 1482 cc_cflags_arch="-xarch=v7" ;; 1483 esac 1484 1485 # SunOS cc doesn't know -xchip and doesn't seem to have an equivalent. 1486 # SunPRO cc 5 recognises -xchip=generic, old, super, super2, micro, 1487 # micro2, hyper, hyper2, powerup, ultra, ultra2, ultra2i. 1488 # SunPRO cc 6 adds -xchip=ultra2e, ultra3cu. 1489 # 1490 case $host_cpu in 1491 supersparc*) cc_cflags_cpu="-xchip=super" ;; 1492 microsparc*) cc_cflags_cpu="-xchip=micro" ;; 1493 turbosparc) cc_cflags_cpu="-xchip=micro2" ;; 1494 hypersparc*) cc_cflags_cpu="-xchip=hyper" ;; 1495 ultrasparc) cc_cflags_cpu="-xchip=ultra" ;; 1496 ultrasparc2) cc_cflags_cpu="-xchip=ultra2 -xchip=ultra" ;; 1497 ultrasparc2i) cc_cflags_cpu="-xchip=ultra2i -xchip=ultra2 -xchip=ultra" ;; 1498 ultrasparc3) cc_cflags_cpu="-xchip=ultra3 -xchip=ultra" ;; 1499 ultrasparc4) cc_cflags_cpu="-xchip=ultra4 -xchip=ultra3 -xchip=ultra" ;; 1500 ultrasparct1) cc_cflags_cpu="-xchip=ultraT1" ;; 1501 ultrasparct2) cc_cflags_cpu="-xchip=ultraT2 -xchip=ultraT1" ;; 1502 ultrasparct3) cc_cflags_cpu="-xchip=ultraT3 -xchip=ultraT2" ;; 1503 ultrasparct4) cc_cflags_cpu="-xchip=T4" ;; 1504 ultrasparct5) cc_cflags_cpu="-xchip=T5 -xchip=T4" ;; 1505 *) cc_cflags_cpu="-xchip=generic" ;; 1506 esac 1507 esac 1508 1509 case $host_cpu in 1510 sparc64 | sparcv9* | ultrasparc*) 1511 case $host in 1512 # Solaris 6 and earlier cannot run ABI=64 since it doesn't save 1513 # registers properly, so ABI=32 is left as the only choice. 1514 # 1515 [*-*-solaris2.[0-6] | *-*-solaris2.[0-6].*]) ;; 1516 1517 # BSD sparc64 ports are 64-bit-only systems, so ABI=64 is the only 1518 # choice. In fact they need no special compiler flags, gcc -m64 1519 # is the default, but it doesn't hurt to add it. v9 CPUs always 1520 # use the sparc64 port, since the plain 32-bit sparc ports don't 1521 # run on a v9. 1522 # 1523 *-*-*bsd*) abilist="64" ;; 1524 1525 # For all other systems, we try both 64 and 32. 1526 # 1527 # GNU/Linux sparc64 has only recently gained a 64-bit user mode. 1528 # In the past sparc64 meant a v9 cpu, but there were no 64-bit 1529 # operations in user mode. We assume that if "gcc -m64" works 1530 # then the system is suitable. Hopefully even if someone attempts 1531 # to put a new gcc and/or glibc on an old system it won't run. 1532 # 1533 *) abilist="64 32" ;; 1534 esac 1535 1536 case $host_cpu in 1537 ultrasparc | ultrasparc2 | ultrasparc2i) 1538 path_64="sparc64/ultrasparc1234 sparc64" ;; 1539 [ultrasparc[34]]) 1540 path_64="sparc64/ultrasparc34 sparc64/ultrasparc1234 sparc64" ;; 1541 [ultrasparct[12]]) 1542 path_64="sparc64/ultrasparct1 sparc64" ;; 1543 [ultrasparct[345]]) 1544 path_64="sparc64/ultrasparct3 sparc64" ;; 1545 *) 1546 path_64="sparc64" 1547 esac 1548 1549 cclist_64="gcc" 1550 any_64_testlist="sizeof-long-8" 1551 1552 # gcc -mptr64 is probably implied by -m64, but we're not sure if 1553 # this was always so. On Solaris in the past we always used both 1554 # "-m64 -mptr64". 1555 # 1556 # gcc -Wa,-xarch=v9 is thought to be necessary in some cases on 1557 # solaris, but it would seem likely that if gcc is going to generate 1558 # 64-bit code it will have to add that option itself where needed. 1559 # An extra copy of this option should be harmless though, but leave 1560 # it until we're sure. (Might want -xarch=v9a or -xarch=v9b for the 1561 # higher cpu types instead.) 1562 # 1563 gcc_64_cflags="$gcc_cflags -m64 -mptr64" 1564 gcc_64_ldflags="-Wc,-m64" 1565 gcc_64_cflags_optlist="cpu asm" 1566 1567 case $host in 1568 *-*-solaris*) 1569 # Sun cc. 1570 # 1571 # We used to have -fast and some fixup options here, but it 1572 # recurrently caused problems with miscompilation. Of course, 1573 # -fast is documented as miscompiling things for the sake of speed. 1574 # 1575 cclist_64="$cclist_64 cc" 1576 cc_64_cflags_optlist="cpu" 1577 case $host_cpu in 1578 [ultrasparct[345]]) 1579 cc_64_cflags="$cc_64_cflags -xO3 -xarch=v9d" ;; 1580 *) 1581 cc_64_cflags="-xO3 -xarch=v9" ;; 1582 esac 1583 ;; 1584 esac 1585 1586 # using the v9 %tick register 1587 SPEED_CYCLECOUNTER_OBJ_32=sparcv9.lo 1588 SPEED_CYCLECOUNTER_OBJ_64=sparcv9.lo 1589 cyclecounter_size_32=2 1590 cyclecounter_size_64=2 1591 ;; 1592 esac 1593 ;; 1594 1595 1596 # VAX 1597 vax*-*-*elf*) 1598 # Use elf conventions (i.e., '%' register prefix, no global prefix) 1599 # 1600 GMP_INCLUDE_MPN(vax/elf.m4) 1601 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1602 path="vax" 1603 if test "$enable_assembly" = "yes" ; then 1604 extra_functions="udiv_w_sdiv" 1605 fi 1606 ;; 1607 vax*-*-*) 1608 # Default to aout conventions (i.e., no register prefix, '_' global prefix) 1609 # 1610 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1611 path="vax" 1612 if test "$enable_assembly" = "yes" ; then 1613 extra_functions="udiv_w_sdiv" 1614 fi 1615 ;; 1616 1617 1618 # AMD and Intel x86 configurations, including AMD64 1619 # 1620 # Rumour has it gcc -O2 used to give worse register allocation than just 1621 # -O, but lets assume that's no longer true. 1622 # 1623 # -m32 forces 32-bit mode on a bi-arch 32/64 amd64 build of gcc. -m64 is 1624 # the default in such a build (we think), so -m32 is essential for ABI=32. 1625 # This is, of course, done for any $host_cpu, not just x86_64, so we can 1626 # get such a gcc into the right mode to cross-compile to say i486-*-*. 1627 # 1628 # -m32 is not available in gcc 2.95 and earlier, hence cflags_maybe to use 1629 # it when it works. We check sizeof(long)==4 to ensure we get the right 1630 # mode, in case -m32 has failed not because it's an old gcc, but because 1631 # it's a dual 32/64-bit gcc without a 32-bit libc, or whatever. 1632 # 1633 X86_PATTERN | X86_64_PATTERN) 1634 abilist="32" 1635 cclist="gcc icc cc" 1636 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1637 gcc_32_cflags_maybe="-m32" 1638 icc_cflags="-no-gcc" 1639 icc_cflags_optlist="opt" 1640 icc_cflags_opt="-O3 -O2 -O1" 1641 icc_cflags_opt_maybe="-fp-model~precise" 1642 any_32_testlist="sizeof-long-4" 1643 gcc_cflags_optlist="cpu arch noavx" 1644 CALLING_CONVENTIONS_OBJS='x86call.lo x86check$U.lo' 1645 1646 # Availability of rdtsc is checked at run-time. 1647 SPEED_CYCLECOUNTER_OBJ=pentium.lo 1648 1649 # gcc 2.7.2 only knows i386 and i486, using -m386 or -m486. These 1650 # represent -mcpu= since -m486 doesn't generate 486 specific insns. 1651 # gcc 2.95 adds k6, pentium and pentiumpro, and takes -march= and -mcpu=. 1652 # gcc 3.0 adds athlon. 1653 # gcc 3.1 adds k6-2, k6-3, pentium-mmx, pentium2, pentium3, pentium4, 1654 # athlon-tbird, athlon-4, athlon-xp, athlon-mp. 1655 # gcc 3.2 adds winchip2. 1656 # gcc 3.3 adds winchip-c6. 1657 # gcc 3.3.1 from mandrake adds k8 and knows -mtune. 1658 # gcc 3.4 adds c3, c3-2, k8, and deprecates -mcpu in favour of -mtune. 1659 # 1660 # In gcc 2.95.[0123], -march=pentiumpro provoked a stack slot bug in an 1661 # old version of mpz/powm.c. Seems to be fine with the current code, so 1662 # no need for any restrictions on that option. 1663 # 1664 # -march=pentiumpro can fail if the assembler doesn't know "cmov" 1665 # (eg. solaris 2.8 native "as"), so always have -march=pentium after 1666 # that as a fallback. 1667 # 1668 # -march=pentium4 and -march=k8 enable SSE2 instructions, which may or 1669 # may not be supported by the assembler and/or the OS, and is bad in gcc 1670 # prior to 3.3. The tests will reject these if no good, so fallbacks 1671 # like "-march=pentium4 -mno-sse2" are given to try also without SSE2. 1672 # Note the relevant -march types are listed in the optflags handling 1673 # below, be sure to update there if adding new types emitting SSE2. 1674 # 1675 # -mtune is used at the start of each cpu option list to give something 1676 # gcc 3.4 will use, thereby avoiding warnings from -mcpu. -mcpu forms 1677 # are retained for use by prior gcc. For example pentium has 1678 # "-mtune=pentium -mcpu=pentium ...", the -mtune is for 3.4 and the 1679 # -mcpu for prior. If there's a brand new choice in 3.4 for a chip, 1680 # like k8 for x86_64, then it can be the -mtune at the start, no need to 1681 # duplicate anything. 1682 # 1683 case $host_cpu in 1684 i386*) 1685 gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386" 1686 gcc_cflags_arch="-march=i386" 1687 path="x86" 1688 ;; 1689 i486*) 1690 gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" 1691 gcc_cflags_arch="-march=i486" 1692 path="x86/i486 x86" 1693 ;; 1694 i586 | pentium) 1695 gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486" 1696 gcc_cflags_arch="-march=pentium" 1697 path="x86/pentium x86" 1698 ;; 1699 pentiummmx) 1700 gcc_cflags_cpu="-mtune=pentium-mmx -mcpu=pentium-mmx -mcpu=pentium -m486" 1701 gcc_cflags_arch="-march=pentium-mmx -march=pentium" 1702 path="x86/pentium/mmx x86/pentium x86/mmx x86" 1703 ;; 1704 i686 | pentiumpro) 1705 gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486" 1706 gcc_cflags_arch="-march=pentiumpro -march=pentium" 1707 path="x86/p6 x86" 1708 ;; 1709 pentium2) 1710 gcc_cflags_cpu="-mtune=pentium2 -mcpu=pentium2 -mcpu=pentiumpro -mcpu=i486 -m486" 1711 gcc_cflags_arch="-march=pentium2 -march=pentiumpro -march=pentium" 1712 path="x86/p6/mmx x86/p6 x86/mmx x86" 1713 ;; 1714 pentium3) 1715 gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" 1716 gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" 1717 path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1718 ;; 1719 pentiumm) 1720 gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" 1721 gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" 1722 path="x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1723 ;; 1724 k6) 1725 gcc_cflags_cpu="-mtune=k6 -mcpu=k6 -mcpu=i486 -m486" 1726 gcc_cflags_arch="-march=k6" 1727 path="x86/k6/mmx x86/k6 x86/mmx x86" 1728 ;; 1729 k62) 1730 gcc_cflags_cpu="-mtune=k6-2 -mcpu=k6-2 -mcpu=k6 -mcpu=i486 -m486" 1731 gcc_cflags_arch="-march=k6-2 -march=k6" 1732 path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" 1733 ;; 1734 k63) 1735 gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" 1736 gcc_cflags_arch="-march=k6-3 -march=k6" 1737 path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" 1738 ;; 1739 geode) 1740 gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" 1741 gcc_cflags_arch="-march=k6-3 -march=k6" 1742 path="x86/geode x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" 1743 ;; 1744 athlon) 1745 # Athlon instruction costs are close to P6 (3 cycle load latency, 1746 # 4-6 cycle mul, 40 cycle div, pairable adc, etc) so if gcc doesn't 1747 # know athlon (eg. 2.95.2 doesn't) then fall back on pentiumpro. 1748 gcc_cflags_cpu="-mtune=athlon -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" 1749 gcc_cflags_arch="-march=athlon -march=pentiumpro -march=pentium" 1750 path="x86/k7/mmx x86/k7 x86/mmx x86" 1751 ;; 1752 i786 | pentium4) 1753 # pentiumpro is the primary fallback when gcc doesn't know pentium4. 1754 # This gets us cmov to eliminate branches. Maybe "athlon" would be 1755 # a possibility on gcc 3.0. 1756 # 1757 gcc_cflags_cpu="-mtune=pentium4 -mcpu=pentium4 -mcpu=pentiumpro -mcpu=i486 -m486" 1758 gcc_cflags_arch="-march=pentium4 -march=pentium4~-mno-sse2 -march=pentiumpro -march=pentium" 1759 gcc_64_cflags_cpu="-mtune=nocona" 1760 path="x86/pentium4/sse2 x86/pentium4/mmx x86/pentium4 x86/mmx x86" 1761 path_64="x86_64/pentium4 x86_64" 1762 ;; 1763 viac32) 1764 # Not sure of the best fallbacks here for -mcpu. 1765 # c3-2 has sse and mmx, so pentium3 is good for -march. 1766 gcc_cflags_cpu="-mtune=c3-2 -mcpu=c3-2 -mcpu=i486 -m486" 1767 gcc_cflags_arch="-march=c3-2 -march=pentium3 -march=pentiumpro -march=pentium" 1768 path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1769 ;; 1770 viac3*) 1771 # Not sure of the best fallbacks here. 1772 gcc_cflags_cpu="-mtune=c3 -mcpu=c3 -mcpu=i486 -m486" 1773 gcc_cflags_arch="-march=c3 -march=pentium-mmx -march=pentium" 1774 path="x86/pentium/mmx x86/pentium x86/mmx x86" 1775 ;; 1776 athlon64 | k8 | x86_64) 1777 gcc_cflags_cpu="-mtune=k8 -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" 1778 gcc_cflags_arch="-march=k8 -march=k8~-mno-sse2 -march=athlon -march=pentiumpro -march=pentium" 1779 path="x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" 1780 path_64="x86_64/k8 x86_64" 1781 ;; 1782 k10) 1783 gcc_cflags_cpu="-mtune=amdfam10 -mtune=k8" 1784 gcc_cflags_arch="-march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1785 path="x86/k10 x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" 1786 path_64="x86_64/k10 x86_64/k8 x86_64" 1787 ;; 1788 bobcat) 1789 gcc_cflags_cpu="-mtune=btver1 -mtune=amdfam10 -mtune=k8" 1790 gcc_cflags_arch="-march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1791 path="x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86" 1792 path_64="x86_64/bobcat x86_64/k10 x86_64/k8 x86_64" 1793 ;; 1794 jaguar | jaguarnoavx) 1795 gcc_cflags_cpu="-mtune=btver2 -mtune=btver1 -mtune=amdfam10 -mtune=k8" 1796 gcc_cflags_arch="-march=btver2 -march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1797 path="x86/jaguar x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86" 1798 path_64="x86_64/jaguar x86_64/bobcat x86_64/k10 x86_64/k8 x86_64" 1799 ;; 1800 bulldozer | bd1 | bulldozernoavx | bd1noavx) 1801 gcc_cflags_cpu="-mtune=bdver1 -mtune=amdfam10 -mtune=k8" 1802 gcc_cflags_arch="-march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1803 path="x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" 1804 path_64="x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" 1805 ;; 1806 piledriver | bd2 | piledrivernoavx | bd2noavx) 1807 gcc_cflags_cpu="-mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" 1808 gcc_cflags_arch="-march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1809 path="x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" 1810 path_64="x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" 1811 ;; 1812 steamroller | bd3 | steamrollernoavx | bd3noavx) 1813 gcc_cflags_cpu="-mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" 1814 gcc_cflags_arch="-march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1815 path="x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" 1816 path_64="x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" 1817 ;; 1818 excavator | bd4 | excavatornoavx | bd4noavx) 1819 gcc_cflags_cpu="-mtune=bdver4 -mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" 1820 gcc_cflags_arch="-march=bdver4 -march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1821 path="x86/bd4 x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" 1822 path_64="x86_64/bd4 x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" 1823 ;; 1824 core2) 1825 gcc_cflags_cpu="-mtune=core2 -mtune=k8" 1826 gcc_cflags_arch="-march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1827 path="x86/core2 x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1828 path_64="x86_64/core2 x86_64" 1829 ;; 1830 corei | coreinhm | coreiwsm | nehalem | westmere) 1831 gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8" 1832 gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1833 path="x86/coreinhm x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1834 path_64="x86_64/coreinhm x86_64/core2 x86_64" 1835 ;; 1836 coreisbr | coreisbrnoavx | coreiibr | coreiibrnoavx | \ 1837 sandybridge | sandybridgenoavx | ivybridge | ivybridgenoavx) 1838 gcc_cflags_cpu="-mtune=sandybridge -mtune=corei7 -mtune=core2 -mtune=k8" 1839 gcc_cflags_arch="-march=sandybridge -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1840 path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1841 path_64="x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" 1842 ;; 1843 coreihwl | coreihwlnoavx | haswell | haswellnoavx) 1844 gcc_cflags_cpu="-mtune=haswell -mtune=corei7 -mtune=core2 -mtune=k8" 1845 gcc_cflags_arch="-march=haswell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1846 path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1847 path_64="x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" 1848 ;; 1849 coreibwl | coreibwlnoavx | broadwell | broadwellnoavx) 1850 gcc_cflags_cpu="-mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" 1851 gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1852 path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1853 path_64="x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" 1854 # extra_functions_64="missing" # enable for bmi2/adx simulation 1855 ;; 1856 skylake | skylakenoavx | kabylake | kabylakenoavx) 1857 gcc_cflags_cpu="-mtune=skylake -mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" 1858 # Don't pass -march=skylake for now as then some compilers emit AVX512. 1859 gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1860 path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" 1861 path_64="x86_64/skylake x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" 1862 # extra_functions_64="missing" # enable for bmi2/adx simulation 1863 ;; 1864 atom) # in-order pipeline atom 1865 gcc_cflags_cpu="-mtune=atom -mtune=pentium3" 1866 gcc_cflags_arch="-march=atom -march=pentium3" 1867 path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" 1868 path_64="x86_64/atom x86_64" 1869 ;; 1870 silvermont | goldmont) # out-of-order pipeline atom 1871 gcc_cflags_cpu="-mtune=slm -mtune=atom -mtune=pentium3" 1872 gcc_cflags_arch="-march=slm -march=atom -march=pentium3" 1873 path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" 1874 path_64="x86_64/silvermont x86_64/atom x86_64" 1875 ;; 1876 nano) 1877 gcc_cflags_cpu="-mtune=nano" 1878 gcc_cflags_arch="-march=nano" 1879 path="x86/nano x86/mmx x86" 1880 path_64="x86_64/nano x86_64" 1881 ;; 1882 *) 1883 gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" 1884 gcc_cflags_arch="-march=i486" 1885 path="x86" 1886 path_64="x86_64" 1887 ;; 1888 esac 1889 1890 case $host in 1891 # Disable AVX if the CPU part tells us AVX is unavailable, but also 1892 # unconditionally for NetBSD where they don't work but OSXSAVE is set 1893 # to claim the contrary. 1894 *noavx-*-* | *-*-netbsd*) 1895 gcc_cflags_noavx="-mno-avx";; 1896 esac 1897 1898 case $host in 1899 X86_64_PATTERN) 1900 cclist_64="gcc cc" 1901 gcc_64_cflags="$gcc_cflags -m64" 1902 gcc_64_cflags_optlist="cpu arch noavx" 1903 CALLING_CONVENTIONS_OBJS_64='amd64call.lo amd64check$U.lo' 1904 SPEED_CYCLECOUNTER_OBJ_64=x86_64.lo 1905 cyclecounter_size_64=2 1906 1907 cclist_x32="gcc cc" 1908 gcc_x32_cflags="$gcc_cflags -mx32" 1909 gcc_x32_cflags_optlist="$gcc_64_cflags_optlist" 1910 CALLING_CONVENTIONS_OBJS_x32="$CALLING_CONVENTIONS_OBJS_64" 1911 SPEED_CYCLECOUNTER_OBJ_x32="$SPEED_CYCLECOUNTER_OBJ_64" 1912 cyclecounter_size_x32="$cyclecounter_size_64" 1913 path_x32="$path_64" 1914 limb_x32=longlong 1915 any_x32_testlist="sizeof-long-4" 1916 1917 abilist="64 x32 32" 1918 if test "$enable_assembly" = "yes" ; then 1919 extra_functions_64="$extra_functions_64 invert_limb_table" 1920 extra_functions_x32=$extra_functions_64 1921 fi 1922 1923 case $host in 1924 *-*-solaris*) 1925 # Sun cc. 1926 cc_64_cflags="-xO3 -m64" 1927 ;; 1928 *-*-mingw* | *-*-cygwin) 1929 limb_64=longlong 1930 CALLING_CONVENTIONS_OBJS_64="" 1931 AC_DEFINE(HOST_DOS64,1,[Define to 1 for Windos/64]) 1932 GMP_NONSTD_ABI_64=DOS64 1933 ;; 1934 esac 1935 ;; 1936 esac 1937 ;; 1938 1939 1940 # Special CPU "none" used to select generic C, now this is obsolete. 1941 none-*-*) 1942 enable_assembly=no 1943 AC_MSG_WARN([the \"none\" host is obsolete, use --disable-assembly]) 1944 ;; 1945 1946 esac 1947 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. 1952 # 1953 case $host in 1954 *-*-mingw*) 1955 gcc_cflags_optlist="$gcc_cflags_optlist nocygwin" 1956 gcc_cflags_nocygwin="-mno-cygwin" 1957 ;; 1958 esac 1959 1960 1961 CFLAGS_or_unset=${CFLAGS-'(unset)'} 1962 CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'} 1963 1964 cat >&AC_FD_CC <<EOF 1965 User: 1966 ABI=$ABI 1967 CC=$CC 1968 CFLAGS=$CFLAGS_or_unset 1969 CPPFLAGS=$CPPFLAGS_or_unset 1970 MPN_PATH=$MPN_PATH 1971 GMP: 1972 abilist=$abilist 1973 cclist=$cclist 1974 EOF 1975 1976 1977 test_CFLAGS=${CFLAGS+set} 1978 test_CPPFLAGS=${CPPFLAGS+set} 1979 1980 for abi in $abilist; do 1981 abi_last="$abi" 1982 done 1983 1984 # If the user specifies an ABI then it must be in $abilist, after that 1985 # $abilist is restricted to just that choice. 1986 # 1987 if test -n "$ABI"; then 1988 found=no 1989 for abi in $abilist; do 1990 if test $abi = "$ABI"; then found=yes; break; fi 1991 done 1992 if test $found = no; then 1993 AC_MSG_ERROR([ABI=$ABI is not among the following valid choices: $abilist]) 1994 fi 1995 abilist="$ABI" 1996 fi 1997 1998 found_compiler=no 1999 2000 for abi in $abilist; do 2001 2002 echo "checking ABI=$abi" 2003 2004 # Suppose abilist="64 32", then for abi=64, will have abi1="_64" and 2005 # abi2="_64". For abi=32, will have abi1="_32" and abi2="". This is how 2006 # $gcc_cflags becomes a fallback for $gcc_32_cflags (the last in the 2007 # abilist), but there's no fallback for $gcc_64_cflags. 2008 # 2009 abi1=[`echo _$abi | sed 's/[.]//g'`] 2010 if test $abi = $abi_last; then abi2=; else abi2="$abi1"; fi 2011 2012 # Compiler choices under this ABI 2013 eval cclist_chosen=\"\$cclist$abi1\" 2014 test -n "$cclist_chosen" || eval cclist_chosen=\"\$cclist$abi2\" 2015 2016 # If there's a user specified $CC then don't use a list for 2017 # $cclist_chosen, just a single value for $ccbase. 2018 # 2019 if test -n "$CC"; then 2020 2021 # The first word of $CC, stripped of any directory. For instance 2022 # CC="/usr/local/bin/gcc -pipe" will give "gcc". 2023 # 2024 for ccbase in $CC; do break; done 2025 ccbase=`echo $ccbase | sed 's:.*/::'` 2026 2027 # If this $ccbase is in $cclist_chosen then it's a compiler we know and 2028 # we can do flags defaulting with it. If not, then $cclist_chosen is 2029 # set to "unrecognised" so no default flags are used. 2030 # 2031 # "unrecognised" is used to avoid bad effects with eval if $ccbase has 2032 # non-symbol characters. For instance ccbase=my+cc would end up with 2033 # something like cflags="$my+cc_cflags" which would give 2034 # cflags="+cc_cflags" rather than the intended empty string for an 2035 # unknown compiler. 2036 # 2037 found=unrecognised 2038 for i in $cclist_chosen; do 2039 if test "$ccbase" = $i; then 2040 found=$ccbase 2041 break 2042 fi 2043 done 2044 cclist_chosen=$found 2045 fi 2046 2047 for ccbase in $cclist_chosen; do 2048 2049 # When cross compiling, look for a compiler with the $host_alias as a 2050 # prefix, the same way that AC_CHECK_TOOL does. But don't do this to a 2051 # user-selected $CC. 2052 # 2053 # $cross_compiling will be yes/no/maybe at this point. Do the host 2054 # prefixing for "maybe" as well as "yes". 2055 # 2056 if test "$cross_compiling" != no && test -z "$CC"; then 2057 cross_compiling_prefix="${host_alias}-" 2058 fi 2059 2060 for ccprefix in $cross_compiling_prefix ""; do 2061 2062 cc="$CC" 2063 test -n "$cc" || cc="$ccprefix$ccbase" 2064 2065 # If the compiler is gcc but installed under another name, then change 2066 # $ccbase so as to use the flags we know for gcc. This helps for 2067 # instance when specifying CC=gcc272 on Debian GNU/Linux, or the 2068 # native cc which is really gcc on NeXT or MacOS-X. 2069 # 2070 # FIXME: There's a slight misfeature here. If cc is actually gcc but 2071 # gcc is not a known compiler under this $abi then we'll end up 2072 # testing it with no flags and it'll work, but chances are it won't be 2073 # in the right mode for the ABI we desire. Let's quietly hope this 2074 # doesn't happen. 2075 # 2076 if test $ccbase != gcc; then 2077 GMP_PROG_CC_IS_GNU($cc,ccbase=gcc) 2078 fi 2079 2080 # Similarly if the compiler is IBM xlc but invoked as cc or whatever 2081 # then change $ccbase and make the default xlc flags available. 2082 if test $ccbase != xlc; then 2083 GMP_PROG_CC_IS_XLC($cc,ccbase=xlc) 2084 fi 2085 2086 # acc was Sun's first unbundled compiler back in the SunOS days, or 2087 # something like that, but today its man page says it's not meant to 2088 # be used directly (instead via /usr/ucb/cc). The options are pretty 2089 # much the same as the main SunPRO cc, so share those configs. 2090 # 2091 case $host in 2092 *sparc*-*-solaris* | *sparc*-*-sunos*) 2093 if test "$ccbase" = acc; then ccbase=cc; fi ;; 2094 esac 2095 2096 for tmp_cflags_maybe in yes no; do 2097 eval cflags=\"\$${ccbase}${abi1}_cflags\" 2098 test -n "$cflags" || eval cflags=\"\$${ccbase}${abi2}_cflags\" 2099 2100 if test "$tmp_cflags_maybe" = yes; then 2101 # don't try cflags_maybe when the user set CFLAGS 2102 if test "$test_CFLAGS" = set; then continue; fi 2103 eval cflags_maybe=\"\$${ccbase}${abi1}_cflags_maybe\" 2104 test -n "$cflags_maybe" || eval cflags_maybe=\"\$${ccbase}${abi2}_cflags_maybe\" 2105 # don't try cflags_maybe if there's nothing set 2106 if test -z "$cflags_maybe"; then continue; fi 2107 cflags="$cflags_maybe $cflags" 2108 fi 2109 2110 # Any user CFLAGS, even an empty string, takes precedence 2111 if test "$test_CFLAGS" = set; then cflags=$CFLAGS; fi 2112 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 2117 2118 # --enable-profiling adds -p/-pg even to user-specified CFLAGS. 2119 # This is convenient, but it's perhaps a bit naughty to modify user 2120 # CFLAGS. 2121 case "$enable_profiling" in 2122 prof) cflags="$cflags -p" ;; 2123 gprof) cflags="$cflags -pg" ;; 2124 instrument) cflags="$cflags -finstrument-functions" ;; 2125 esac 2126 2127 GMP_PROG_CC_WORKS($cc $cflags $cppflags,,continue) 2128 2129 # If we're supposed to be using a "long long" for a limb, check that 2130 # it works. 2131 eval limb_chosen=\"\$limb$abi1\" 2132 test -n "$limb_chosen" || eval limb_chosen=\"\$limb$abi2\" 2133 if test "$limb_chosen" = longlong; then 2134 GMP_PROG_CC_WORKS_LONGLONG($cc $cflags $cppflags,,continue) 2135 fi 2136 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\" 2142 2143 testlist_pass=yes 2144 for tst in $testlist; do 2145 case $tst in 2146 hpc-hppa-2-0) GMP_HPC_HPPA_2_0($cc,,testlist_pass=no) ;; 2147 gcc-arm-umodsi) GMP_GCC_ARM_UMODSI($cc,,testlist_pass=no) ;; 2148 gcc-mips-o32) GMP_GCC_MIPS_O32($cc,,testlist_pass=no) ;; 2149 hppa-level-2.0) GMP_HPPA_LEVEL_20($cc $cflags,,testlist_pass=no) ;; 2150 sizeof*) GMP_C_TEST_SIZEOF($cc $cflags,$tst,,testlist_pass=no) ;; 2151 esac 2152 if test $testlist_pass = no; then break; fi 2153 done 2154 2155 if test $testlist_pass = yes; then 2156 found_compiler=yes 2157 break 2158 fi 2159 done 2160 2161 if test $found_compiler = yes; then break; fi 2162 done 2163 2164 if test $found_compiler = yes; then break; fi 2165 done 2166 2167 if test $found_compiler = yes; then break; fi 2168 done 2169 2170 2171 # If we recognised the CPU, as indicated by $path being set, then insist 2172 # that we have a working compiler, either from our $cclist choices or from 2173 # $CC. We can't let AC_PROG_CC look around for a compiler because it might 2174 # find one that we've rejected (for not supporting the modes our asm code 2175 # demands, etc). 2176 # 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). 2183 # 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]) 2186 fi 2187 2188 case $host in 2189 X86_PATTERN | X86_64_PATTERN) 2190 # If the user asked for a fat build, override the path and flags set above 2191 if test $enable_fat = yes; then 2192 gcc_cflags_cpu="" 2193 gcc_cflags_arch="" 2194 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" 2201 2202 if test "$abi" = 32; then 2203 extra_functions="$extra_functions fat fat_entry" 2204 path="x86/fat x86" 2205 fat_path="x86 x86/fat x86/i486 2206 x86/k6 x86/k6/mmx x86/k6/k62mmx 2207 x86/k7 x86/k7/mmx 2208 x86/k8 x86/k10 x86/bobcat 2209 x86/pentium x86/pentium/mmx 2210 x86/p6 x86/p6/mmx x86/p6/p3mmx x86/p6/sse2 2211 x86/pentium4 x86/pentium4/mmx x86/pentium4/sse2 2212 x86/core2 x86/coreinhm x86/coreisbr 2213 x86/atom x86/atom/mmx x86/atom/sse2 x86/nano" 2214 fi 2215 2216 if test "$abi" = 64; then 2217 gcc_64_cflags="" 2218 extra_functions_64="$extra_functions_64 fat fat_entry" 2219 path_64="x86_64/fat x86_64" 2220 fat_path="x86_64 x86_64/fat 2221 x86_64/k8 x86_64/k10 x86_64/bd1 x86_64/bobcat x86_64/pentium4 2222 x86_64/core2 x86_64/coreinhm x86_64/coreisbr x86_64/coreihwl 2223 x86_64/coreibwl x86_64/skylake x86_64/atom x86_64/silvermont 2224 x86_64/nano" 2225 fat_functions="$fat_functions addmul_2 addlsh1_n addlsh2_n sublsh1_n" 2226 fi 2227 2228 fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD 2229 SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD 2230 BMOD_1_TO_MOD_1_THRESHOLD" 2231 fi 2232 ;; 2233 esac 2234 2235 2236 if test $found_compiler = yes; then 2237 2238 # If we're creating CFLAGS, then look for optional additions. If the user 2239 # set CFLAGS then leave it alone. 2240 # 2241 if test "$test_CFLAGS" != set; then 2242 eval optlist=\"\$${ccbase}${abi1}_cflags_optlist\" 2243 test -n "$optlist" || eval optlist=\"\$${ccbase}${abi2}_cflags_optlist\" 2244 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}\" 2249 2250 for flag in $optflags; do 2251 2252 # ~ represents a space in an option spec 2253 flag=`echo "$flag" | tr '~' ' '` 2254 2255 case $flag in 2256 -march=pentium4 | -march=k8) 2257 # For -march settings which enable SSE2 we exclude certain bad 2258 # gcc versions and we need an OS knowing how to save xmm regs. 2259 # 2260 # This is only for ABI=32, any 64-bit gcc is good and any OS 2261 # knowing x86_64 will know xmm. 2262 # 2263 # -march=k8 was only introduced in gcc 3.3, so we shouldn't need 2264 # the GMP_GCC_PENTIUM4_SSE2 check (for gcc 3.2 and prior). But 2265 # it doesn't hurt to run it anyway, sharing code with the 2266 # pentium4 case. 2267 # 2268 if test "$abi" = 32; then 2269 GMP_GCC_PENTIUM4_SSE2($cc $cflags $cppflags,, continue) 2270 GMP_OS_X86_XMM($cc $cflags $cppflags,, continue) 2271 fi 2272 ;; 2273 -no-cpp-precomp) 2274 # special check, avoiding a warning 2275 GMP_GCC_NO_CPP_PRECOMP($ccbase,$cc,$cflags, 2276 [cflags="$cflags $flag" 2277 break], 2278 [continue]) 2279 ;; 2280 -Wa,-m*) 2281 case $host in 2282 alpha*-*-*) 2283 GMP_GCC_WA_MCPU($cc $cflags, $flag, , [continue]) 2284 ;; 2285 esac 2286 ;; 2287 -Wa,-oldas) 2288 GMP_GCC_WA_OLDAS($cc $cflags $cppflags, 2289 [cflags="$cflags $flag" 2290 break], 2291 [continue]) 2292 ;; 2293 esac 2294 2295 GMP_PROG_CC_WORKS($cc $cflags $cppflags $flag, 2296 [cflags="$cflags $flag" 2297 break]) 2298 done 2299 done 2300 fi 2301 2302 ABI="$abi" 2303 CC="$cc" 2304 CFLAGS="$cflags" 2305 CPPFLAGS="$cppflags" 2306 eval GMP_NONSTD_ABI=\"\$GMP_NONSTD_ABI_$ABI\" 2307 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) 2311 2312 2313 # GMP_LDFLAGS substitution, selected according to ABI. 2314 # These are needed on libgmp.la and libmp.la, but currently not on 2315 # convenience libraries like tune/libspeed.la or mpz/libmpz.la. 2316 # 2317 eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" 2318 test -n "$GMP_LDFLAGS" || eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" 2319 AC_SUBST(GMP_LDFLAGS) 2320 AC_SUBST(LIBGMP_LDFLAGS) 2321 AC_SUBST(LIBGMPXX_LDFLAGS) 2322 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" 2327 2328 2329 # Cycle counter, selected according to ABI. 2330 # 2331 eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi1\" 2332 test -n "$tmp" || eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi2\" 2333 SPEED_CYCLECOUNTER_OBJ="$tmp" 2334 eval tmp=\"\$cyclecounter_size$abi1\" 2335 test -n "$tmp" || eval tmp=\"\$cyclecounter_size$abi2\" 2336 cyclecounter_size="$tmp" 2337 2338 if test -n "$SPEED_CYCLECOUNTER_OBJ"; then 2339 AC_DEFINE_UNQUOTED(HAVE_SPEED_CYCLECOUNTER, $cyclecounter_size, 2340 [Tune directory speed_cyclecounter, undef=none, 1=32bits, 2=64bits)]) 2341 fi 2342 AC_SUBST(SPEED_CYCLECOUNTER_OBJ) 2343 2344 2345 # Calling conventions checking, selected according to ABI. 2346 # 2347 eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi1\" 2348 test -n "$tmp" || eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi2\" 2349 if test "$enable_assembly" = "yes"; then 2350 CALLING_CONVENTIONS_OBJS="$tmp" 2351 else 2352 CALLING_CONVENTIONS_OBJS="" 2353 fi 2354 2355 if test -n "$CALLING_CONVENTIONS_OBJS"; then 2356 AC_DEFINE(HAVE_CALLING_CONVENTIONS,1, 2357 [Define to 1 if tests/libtests has calling conventions checking for the CPU]) 2358 fi 2359 AC_SUBST(CALLING_CONVENTIONS_OBJS) 2360 2361 fi 2362 2363 2364 # If the user gave an MPN_PATH, use that verbatim, otherwise choose 2365 # according to the ABI and add "generic". 2366 # 2367 if test -n "$MPN_PATH"; then 2368 path="$MPN_PATH" 2369 else 2370 eval tmp=\"\$path$abi1\" 2371 test -n "$tmp" || eval tmp=\"\$path$abi2\" 2372 path="$tmp generic" 2373 fi 2374 2375 2376 # Long long limb setup for gmp.h. 2377 case $limb_chosen in 2378 longlong) DEFN_LONG_LONG_LIMB="#define _LONG_LONG_LIMB 1" ;; 2379 *) DEFN_LONG_LONG_LIMB="/* #undef _LONG_LONG_LIMB */" ;; 2380 esac 2381 AC_SUBST(DEFN_LONG_LONG_LIMB) 2382 2383 2384 # The C compiler and preprocessor, put into ANSI mode if possible. 2385 AC_PROG_CC 2386 AC_PROG_CC_STDC 2387 AC_PROG_CPP 2388 2389 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 2396 2397 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. 2401 # 2402 test -n "$CCAS" || CCAS="$CC -c" 2403 AC_SUBST(CCAS) 2404 2405 2406 # The C++ compiler, if desired. 2407 want_cxx=no 2408 if test $enable_cxx != no; then 2409 test_CXXFLAGS=${CXXFLAGS+set} 2410 AC_PROG_CXX 2411 2412 echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC 2413 cxxflags_ac_prog_cxx=$CXXFLAGS 2414 cxxflags_list=ac_prog_cxx 2415 2416 # If the user didn't specify $CXXFLAGS, then try $CFLAGS, with -g removed 2417 # if AC_PROG_CXX thinks that doesn't work. $CFLAGS stands a good chance 2418 # of working, eg. on a GNU system where CC=gcc and CXX=g++. 2419 # 2420 if test "$test_CXXFLAGS" != set; then 2421 cxxflags_cflags=$CFLAGS 2422 cxxflags_list="cflags $cxxflags_list" 2423 if test "$ac_prog_cxx_g" = no; then 2424 cxxflags_cflags=`echo "$cxxflags_cflags" | sed -e 's/ -g //' -e 's/^-g //' -e 's/ -g$//'` 2425 fi 2426 fi 2427 2428 # See if the C++ compiler works. If the user specified CXXFLAGS then all 2429 # we're doing is checking whether AC_PROG_CXX succeeded, since it doesn't 2430 # give a fatal error, just leaves CXX set to a default g++. If on the 2431 # other hand the user didn't specify CXXFLAGS then we get to try here our 2432 # $cxxflags_list alternatives. 2433 # 2434 # Automake includes $CPPFLAGS in a C++ compile, so we do the same here. 2435 # 2436 for cxxflags_choice in $cxxflags_list; do 2437 eval CXXFLAGS=\"\$cxxflags_$cxxflags_choice\" 2438 GMP_PROG_CXX_WORKS($CXX $CPPFLAGS $CXXFLAGS, 2439 [want_cxx=yes 2440 break]) 2441 done 2442 2443 # If --enable-cxx=yes but a C++ compiler can't be found, then abort. 2444 if test $want_cxx = no && test $enable_cxx = yes; then 2445 AC_MSG_ERROR([C++ compiler not available, see config.log for details]) 2446 fi 2447 fi 2448 2449 AM_CONDITIONAL(WANT_CXX, test $want_cxx = yes) 2450 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). 2455 # 2456 if test $want_cxx = yes; then 2457 AC_PROG_CXXCPP 2458 fi 2459 2460 2461 # Path setups for Cray, according to IEEE or CFP. These must come after 2462 # deciding the compiler. 2463 # 2464 GMP_CRAY_OPTIONS( 2465 [add_path="cray/ieee"], 2466 [add_path="cray/cfp"; extra_functions="mulwwc90"], 2467 [add_path="cray/cfp"; extra_functions="mulwwj90"]) 2468 2469 2470 if test -z "$MPN_PATH"; then 2471 path="$add_path $path" 2472 fi 2473 2474 # For a nail build, also look in "nails" subdirectories. 2475 # 2476 if test $GMP_NAIL_BITS != 0 && test -z "$MPN_PATH"; then 2477 new_path= 2478 for i in $path; do 2479 case $i in 2480 generic) new_path="$new_path $i" ;; 2481 *) new_path="$new_path $i/nails $i" ;; 2482 esac 2483 done 2484 path=$new_path 2485 fi 2486 2487 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. 2491 # 2492 for i in $fat_path; do 2493 GMP_FAT_SUFFIX(tmp_suffix, $i) 2494 CPUVEC_list="$CPUVEC_list CPUVEC_SETUP_$tmp_suffix" 2495 done 2496 2497 2498 # If there's any sse2 or mmx in the path, check whether the assembler 2499 # supports it, and remove if not. 2500 # 2501 # We only need this in ABI=32, for ABI=64 on x86_64 we can assume a new 2502 # enough assembler. 2503 # 2504 case $host in 2505 X86_PATTERN | X86_64_PATTERN) 2506 if test "$ABI" = 32; then 2507 case "$path $fat_path" in 2508 *mmx*) GMP_ASM_X86_MMX( , [GMP_STRIP_PATH(*mmx*)]) ;; 2509 esac 2510 case "$path $fat_path" in 2511 *sse2*) GMP_ASM_X86_SSE2( , [GMP_STRIP_PATH(sse2)]) ;; 2512 esac 2513 fi 2514 case "$path $fat_path" in 2515 *mulx*) GMP_ASM_X86_MULX( , [GMP_STRIP_PATH(mulx)]) ;; 2516 esac 2517 case "$path $fat_path" in 2518 *adx*) GMP_ASM_X86_ADX( , [GMP_STRIP_PATH(adx)]) ;; 2519 esac 2520 ;; 2521 esac 2522 2523 2524 if test "$enable_assembly" = "no"; then 2525 path="generic" 2526 AC_DEFINE([NO_ASM],1,[Define to 1 to disable the use of inline assembly]) 2527 # for abi in $abilist; do 2528 # eval unset "path_\$abi" 2529 # eval gcc_${abi}_cflags=\"\$gcc_${abi}_cflags -DNO_ASM\" 2530 # done 2531 fi 2532 2533 2534 cat >&AC_FD_CC <<EOF 2535 Decided: 2536 ABI=$ABI 2537 CC=$CC 2538 CFLAGS=$CFLAGS 2539 CPPFLAGS=$CPPFLAGS 2540 GMP_LDFLAGS=$GMP_LDFLAGS 2541 CXX=$CXX 2542 CXXFLAGS=$CXXFLAGS 2543 path=$path 2544 EOF 2545 echo "using ABI=\"$ABI\"" 2546 echo " CC=\"$CC\"" 2547 echo " CFLAGS=\"$CFLAGS\"" 2548 echo " CPPFLAGS=\"$CPPFLAGS\"" 2549 if test $want_cxx = yes; then 2550 echo " CXX=\"$CXX\"" 2551 echo " CXXFLAGS=\"$CXXFLAGS\"" 2552 fi 2553 echo " MPN_PATH=\"$path\"" 2554 2555 2556 CL_AS_NOEXECSTACK 2557 2558 GMP_PROG_AR 2559 GMP_PROG_NM 2560 2561 case $host in 2562 # FIXME: On AIX 3 and 4, $libname.a is included in libtool 2563 # $library_names_spec, so libgmp.a becomes a symlink to libgmp.so, making 2564 # it impossible to build shared and static libraries simultaneously. 2565 # Disable shared libraries by default, but let the user override with 2566 # --enable-shared --disable-static. 2567 # 2568 # FIXME: This $libname.a problem looks like it might apply to *-*-amigaos* 2569 # and *-*-os2* too, but wait for someone to test this before worrying 2570 # about it. If there is a problem then of course libtool is the right 2571 # place to fix it. 2572 # 2573 [*-*-aix[34]*]) 2574 if test -z "$enable_shared"; then enable_shared=no; fi ;; 2575 esac 2576 2577 2578 # Configs for Windows DLLs. 2579 2580 AC_LIBTOOL_WIN32_DLL 2581 2582 AC_SUBST(LIBGMP_DLL,0) 2583 case $host in 2584 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) 2585 # By default, build only static. 2586 if test -z "$enable_shared"; then 2587 enable_shared=no 2588 fi 2589 # Don't allow both static and DLL. 2590 if test "$enable_shared" != no && test "$enable_static" != no; then 2591 AC_MSG_ERROR([cannot build both static and DLL, since gmp.h is different for each. 2592 Use "--disable-static --enable-shared" to build just a DLL.]) 2593 fi 2594 2595 # "-no-undefined" is required when building a DLL, see documentation on 2596 # AC_LIBTOOL_WIN32_DLL. 2597 # 2598 # "-Wl,--export-all-symbols" is a bit of a hack, it gets all libgmp and 2599 # libgmpxx functions and variables exported. This is what libtool did 2600 # in the past, and it's convenient for us in the test programs. 2601 # 2602 # Maybe it'd be prudent to check for --export-all-symbols before using 2603 # it, but it seems to have been in ld since at least 2000, and there's 2604 # not really any alternative we want to take up at the moment. 2605 # 2606 # "-Wl,output-def" is used to get a .def file for use by MS lib to make 2607 # a .lib import library, described in the manual. libgmp-3.dll.def 2608 # corresponds to the libmp-3.dll.def generated by libtool (as a result 2609 # of -export-symbols on that library). 2610 # 2611 # Incidentally, libtool does generate an import library libgmp.dll.a, 2612 # but it's "ar" format and cannot be used by the MS linker. There 2613 # doesn't seem to be any GNU tool for generating or converting to .lib. 2614 # 2615 # FIXME: The .def files produced by -Wl,output-def include isascii, 2616 # iscsym, iscsymf and toascii, apparently because mingw ctype.h doesn't 2617 # inline isascii (used in gmp). It gives an extern inline for 2618 # __isascii, but for some reason not the plain isascii. 2619 # 2620 if test "$enable_shared" = yes; then 2621 GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols" 2622 LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def" 2623 LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def" 2624 LIBGMP_DLL=1 2625 fi 2626 ;; 2627 esac 2628 2629 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. 2633 # 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*. 2637 # 2638 # FIXME: Newer libtool should have it's own fix for this. 2639 # 2640 if test -z "$CONFIG_SHELL"; then 2641 CONFIG_SHELL=$SHELL 2642 fi 2643 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. 2648 # 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. 2651 # 2652 if test "${with_tags+set}" != set; then 2653 if test $want_cxx = yes; then 2654 with_tags=CXX 2655 else 2656 with_tags= 2657 fi 2658 fi 2659 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. 2664 # 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. 2667 # 2668 #AC_PROVIDE([AC_PROG_F77]) 2669 2670 AC_PROG_LIBTOOL 2671 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. 2675 # 2676 if test "$enable_shared" = yes && test "$enable_static" = yes; then 2677 case $library_names_spec in 2678 *libname.a*) 2679 AC_MSG_ERROR([cannot create both shared and static libraries on this system, --disable one of the two]) 2680 ;; 2681 esac 2682 fi 2683 2684 AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes) 2685 2686 2687 # Many of these library and header checks are for the benefit of 2688 # supplementary programs. libgmp doesn't use anything too weird. 2689 2690 AC_HEADER_STDC 2691 AC_HEADER_TIME 2692 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 2714 # 2715 # inttypes.h, stdint.h, unistd.h and sys/types.h are already in the autoconf 2716 # default tests 2717 # 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) 2719 2720 # On SunOS, sys/resource.h needs sys/time.h (for struct timeval) 2721 AC_CHECK_HEADERS(sys/resource.h,,, 2722 [#if TIME_WITH_SYS_TIME 2723 # include <sys/time.h> 2724 # include <time.h> 2725 #else 2726 # if HAVE_SYS_TIME_H 2727 # include <sys/time.h> 2728 # else 2729 # include <time.h> 2730 # endif 2731 #endif]) 2732 2733 # On NetBSD and OpenBSD, sys/sysctl.h needs sys/param.h for various constants 2734 AC_CHECK_HEADERS(sys/sysctl.h,,, 2735 [#if HAVE_SYS_PARAM_H 2736 # include <sys/param.h> 2737 #endif]) 2738 2739 # On OSF 4.0, <machine/hal_sysinfo.h> must have <sys/sysinfo.h> for ulong_t 2740 AC_CHECK_HEADERS(machine/hal_sysinfo.h,,, 2741 [#if HAVE_SYS_SYSINFO_H 2742 # include <sys/sysinfo.h> 2743 #endif]) 2744 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 2749 # 2750 # optarg should be in unistd.h and the rest in stdio.h, both of which are 2751 # in the autoconf default includes. 2752 # 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. 2755 # 2756 AC_CHECK_DECLS([fgetc, fscanf, optarg, ungetc, vfprintf]) 2757 AC_CHECK_DECLS([sys_errlist, sys_nerr], , , 2758 [#include <stdio.h> 2759 #include <errno.h>]) 2760 2761 AC_TYPE_SIGNAL 2762 2763 # Reasons for testing: 2764 # intmax_t - C99 2765 # long double - not in the HP bundled K&R cc 2766 # long long - only in reasonably recent compilers 2767 # ptrdiff_t - seems to be everywhere, maybe don't need to check this 2768 # quad_t - BSD specific 2769 # uint_least32_t - C99 2770 # 2771 # the default includes are sufficient for all these types 2772 # 2773 AC_CHECK_TYPES([intmax_t, long double, long long, ptrdiff_t, quad_t, 2774 uint_least32_t, intptr_t]) 2775 2776 # FIXME: Really want #ifndef __cplusplus around the #define volatile 2777 # replacement autoconf gives, since volatile is always available in C++. 2778 # But we don't use it in C++ currently. 2779 AC_C_VOLATILE 2780 2781 AC_C_RESTRICT 2782 2783 # GMP_C_STDARG 2784 GMP_C_ATTRIBUTE_CONST 2785 GMP_C_ATTRIBUTE_MALLOC 2786 GMP_C_ATTRIBUTE_MODE 2787 GMP_C_ATTRIBUTE_NORETURN 2788 GMP_C_HIDDEN_ALIAS 2789 2790 GMP_H_EXTERN_INLINE 2791 2792 # from libtool 2793 AC_CHECK_LIBM 2794 AC_SUBST(LIBM) 2795 2796 GMP_FUNC_ALLOCA 2797 GMP_OPTION_ALLOCA 2798 2799 GMP_H_HAVE_FILE 2800 2801 AC_C_BIGENDIAN( 2802 [AC_DEFINE(HAVE_LIMB_BIG_ENDIAN, 1) 2803 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_BIG_ENDIAN')", POST)], 2804 [AC_DEFINE(HAVE_LIMB_LITTLE_ENDIAN, 1) 2805 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_LITTLE_ENDIAN')", POST) 2806 ], [:]) 2807 AH_VERBATIM([HAVE_LIMB], 2808 [/* Define one of these to 1 for the endianness of `mp_limb_t'. 2809 If the endianness is not a simple big or little, or you don't know what 2810 it is, then leave both undefined. */ 2811 #undef HAVE_LIMB_BIG_ENDIAN 2812 #undef HAVE_LIMB_LITTLE_ENDIAN]) 2813 2814 GMP_C_DOUBLE_FORMAT 2815 2816 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 2839 # 2840 # AC_FUNC_STRNLEN is not used because we don't want the AC_LIBOBJ 2841 # replacement setups it gives. It detects a faulty strnlen on AIX, but 2842 # missing out on that test is ok since our only use of strnlen is in 2843 # __gmp_replacement_vsnprintf which is not required on AIX since it has a 2844 # vsnprintf. 2845 # 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) 2847 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. 2852 2853 old_LIBS="$LIBS" 2854 AC_SEARCH_LIBS(clock_gettime, rt, [ 2855 AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define to 1 if you have the `clock_gettime' function])]) 2856 TUNE_LIBS="$LIBS" 2857 LIBS="$old_LIBS" 2858 2859 AC_SUBST(TUNE_LIBS) 2860 2861 GMP_FUNC_VSNPRINTF 2862 GMP_FUNC_SSCANF_WRITABLE_INPUT 2863 2864 # Reasons for checking: 2865 # pst_processor psp_iticksperclktick - not in hpux 9 2866 # 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>]) 2872 2873 # C++ tests, when required 2874 # 2875 if test $enable_cxx = yes; then 2876 AC_LANG_PUSH(C++) 2877 2878 # Reasons for testing: 2879 # <sstream> - not in g++ 2.95.2 2880 # std::locale - not in g++ 2.95.4 2881 # 2882 AC_CHECK_HEADERS([sstream]) 2883 AC_CHECK_TYPES([std::locale],,,[#include <locale>]) 2884 2885 AC_LANG_POP(C++) 2886 fi 2887 2888 2889 # Pick the correct source files in $path and link them to mpn/. 2890 # $gmp_mpn_functions lists all functions we need. 2891 # 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.) 2896 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. 2900 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" 2909 2910 gmp_mpn_functions="$extra_functions \ 2911 add add_1 add_n sub sub_1 sub_n cnd_add_n cnd_sub_n cnd_swap neg com \ 2912 mul_1 addmul_1 submul_1 \ 2913 add_err1_n add_err2_n add_err3_n sub_err1_n sub_err2_n sub_err3_n \ 2914 lshift rshift dive_1 diveby3 divis divrem divrem_1 divrem_2 \ 2915 fib2_ui mod_1 mod_34lsub1 mode1o pre_divrem_1 pre_mod_1 dump \ 2916 mod_1_1 mod_1_2 mod_1_3 mod_1_4 lshiftc \ 2917 mul mul_fft mul_n sqr mul_basecase sqr_basecase nussbaumer_mul \ 2918 mulmid_basecase toom42_mulmid mulmid_n mulmid \ 2919 random random2 pow_1 \ 2920 rootrem sqrtrem sizeinbase get_str set_str \ 2921 scan0 scan1 popcount hamdist cmp zero_p \ 2922 perfsqr perfpow \ 2923 gcd_1 gcd gcdext_1 gcdext gcd_subdiv_step \ 2924 gcdext_lehmer \ 2925 div_q tdiv_qr jacbase jacobi_2 jacobi get_d \ 2926 matrix22_mul matrix22_mul1_inverse_vector \ 2927 hgcd_matrix hgcd2 hgcd_step hgcd_reduce hgcd hgcd_appr \ 2928 hgcd2_jacobi hgcd_jacobi \ 2929 mullo_n mullo_basecase sqrlo sqrlo_basecase \ 2930 toom22_mul toom32_mul toom42_mul toom52_mul toom62_mul \ 2931 toom33_mul toom43_mul toom53_mul toom54_mul toom63_mul \ 2932 toom44_mul \ 2933 toom6h_mul toom6_sqr toom8h_mul toom8_sqr \ 2934 toom_couple_handling \ 2935 toom2_sqr toom3_sqr toom4_sqr \ 2936 toom_eval_dgr3_pm1 toom_eval_dgr3_pm2 \ 2937 toom_eval_pm1 toom_eval_pm2 toom_eval_pm2exp toom_eval_pm2rexp \ 2938 toom_interpolate_5pts toom_interpolate_6pts toom_interpolate_7pts \ 2939 toom_interpolate_8pts toom_interpolate_12pts toom_interpolate_16pts \ 2940 invertappr invert binvert mulmod_bnm1 sqrmod_bnm1 \ 2941 div_qr_1 div_qr_1n_pi1 \ 2942 div_qr_2 div_qr_2n_pi1 div_qr_2u_pi1 \ 2943 sbpi1_div_q sbpi1_div_qr sbpi1_divappr_q \ 2944 dcpi1_div_q dcpi1_div_qr dcpi1_divappr_q \ 2945 mu_div_qr mu_divappr_q mu_div_q \ 2946 bdiv_q_1 \ 2947 sbpi1_bdiv_q sbpi1_bdiv_qr \ 2948 dcpi1_bdiv_q dcpi1_bdiv_qr \ 2949 mu_bdiv_q mu_bdiv_qr \ 2950 bdiv_q bdiv_qr broot brootinv bsqrt bsqrtinv \ 2951 divexact bdiv_dbm1c redc_1 redc_2 redc_n powm powlo sec_powm \ 2952 sec_mul sec_sqr sec_div_qr sec_div_r sec_pi1_div_qr sec_pi1_div_r \ 2953 sec_add_1 sec_sub_1 sec_invert \ 2954 trialdiv remove \ 2955 and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n \ 2956 copyi copyd zero sec_tabselect \ 2957 comb_tables \ 2958 $gmp_mpn_functions_optional" 2959 2960 define(GMP_MULFUNC_CHOICES, 2961 [# functions that can be provided by multi-function files 2962 tmp_mulfunc= 2963 case $tmp_fn in 2964 add_n|sub_n) tmp_mulfunc="aors_n" ;; 2965 add_err1_n|sub_err1_n) 2966 tmp_mulfunc="aors_err1_n" ;; 2967 add_err2_n|sub_err2_n) 2968 tmp_mulfunc="aors_err2_n" ;; 2969 add_err3_n|sub_err3_n) 2970 tmp_mulfunc="aors_err3_n" ;; 2971 cnd_add_n|cnd_sub_n) tmp_mulfunc="cnd_aors_n" ;; 2972 sec_add_1|sec_sub_1) tmp_mulfunc="sec_aors_1" ;; 2973 addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; 2974 mul_2|addmul_2) tmp_mulfunc="aormul_2" ;; 2975 mul_3|addmul_3) tmp_mulfunc="aormul_3" ;; 2976 mul_4|addmul_4) tmp_mulfunc="aormul_4" ;; 2977 popcount|hamdist) tmp_mulfunc="popham" ;; 2978 and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n) 2979 tmp_mulfunc="logops_n" ;; 2980 lshift|rshift) tmp_mulfunc="lorrshift";; 2981 addlsh1_n) 2982 tmp_mulfunc="aorslsh1_n aorrlsh1_n aorsorrlsh1_n";; 2983 sublsh1_n) 2984 tmp_mulfunc="aorslsh1_n sorrlsh1_n aorsorrlsh1_n";; 2985 rsblsh1_n) 2986 tmp_mulfunc="aorrlsh1_n sorrlsh1_n aorsorrlsh1_n";; 2987 addlsh2_n) 2988 tmp_mulfunc="aorslsh2_n aorrlsh2_n aorsorrlsh2_n";; 2989 sublsh2_n) 2990 tmp_mulfunc="aorslsh2_n sorrlsh2_n aorsorrlsh2_n";; 2991 rsblsh2_n) 2992 tmp_mulfunc="aorrlsh2_n sorrlsh2_n aorsorrlsh2_n";; 2993 addlsh_n) 2994 tmp_mulfunc="aorslsh_n aorrlsh_n aorsorrlsh_n";; 2995 sublsh_n) 2996 tmp_mulfunc="aorslsh_n sorrlsh_n aorsorrlsh_n";; 2997 rsblsh_n) 2998 tmp_mulfunc="aorrlsh_n sorrlsh_n aorsorrlsh_n";; 2999 rsh1add_n|rsh1sub_n) 3000 tmp_mulfunc="rsh1aors_n";; 3001 sec_div_qr|sec_div_r) 3002 tmp_mulfunc="sec_div";; 3003 sec_pi1_div_qr|sec_pi1_div_r) 3004 tmp_mulfunc="sec_pi1_div";; 3005 esac 3006 ]) 3007 3008 # the list of all object files used by mpn/Makefile.in and the 3009 # top-level Makefile.in, respectively 3010 mpn_objects= 3011 mpn_objs_in_libgmp= 3012 3013 # links from the sources, to be removed by "make distclean" 3014 gmp_srclinks= 3015 3016 3017 # mpn_relative_top_srcdir is $top_srcdir, but for use from within the mpn 3018 # build directory. If $srcdir is relative then we use a relative path too, 3019 # so the two trees can be moved together. 3020 case $srcdir in 3021 [[\\/]* | ?:[\\/]*]) # absolute, as per autoconf 3022 mpn_relative_top_srcdir=$srcdir ;; 3023 *) # relative 3024 mpn_relative_top_srcdir=../$srcdir ;; 3025 esac 3026 3027 3028 define(MPN_SUFFIXES,[asm S s c]) 3029 3030 dnl Usage: GMP_FILE_TO_FUNCTION_BASE(func,file) 3031 dnl 3032 dnl Set $func to the function base name for $file, eg. dive_1 gives 3033 dnl divexact_1. 3034 dnl 3035 define(GMP_FILE_TO_FUNCTION, 3036 [case $$2 in 3037 dive_1) $1=divexact_1 ;; 3038 diveby3) $1=divexact_by3c ;; 3039 pre_divrem_1) $1=preinv_divrem_1 ;; 3040 mode1o) $1=modexact_1c_odd ;; 3041 pre_mod_1) $1=preinv_mod_1 ;; 3042 mod_1_1) $1=mod_1_1p ;; 3043 mod_1_1_cps) $1=mod_1_1p_cps ;; 3044 mod_1_2) $1=mod_1s_2p ;; 3045 mod_1_2_cps) $1=mod_1s_2p_cps ;; 3046 mod_1_3) $1=mod_1s_3p ;; 3047 mod_1_3_cps) $1=mod_1s_3p_cps ;; 3048 mod_1_4) $1=mod_1s_4p ;; 3049 mod_1_4_cps) $1=mod_1s_4p_cps ;; 3050 *) $1=$$2 ;; 3051 esac 3052 ]) 3053 3054 # Fat binary setups. 3055 # 3056 # We proceed through each $fat_path directory, and look for $fat_function 3057 # routines there. Those found are incorporated in the build by generating a 3058 # little mpn/<foo>.asm or mpn/<foo>.c file in the build directory, with 3059 # suitable function renaming, and adding that to $mpn_objects (the same as a 3060 # normal mpn file). 3061 # 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. 3066 # 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.) 3071 # 3072 # It'd be possible to do some of this manually, but when there's more than a 3073 # few functions and a few directories it becomes very tedious, and very 3074 # prone to having some routine accidentally omitted. On that basis it seems 3075 # best to automate as much as possible, even if the code to do so is a bit 3076 # ugly. 3077 # 3078 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 3083 3084 echo "/* fat.h - setups for fat binaries." >fat.h 3085 echo " Generated by configure - DO NOT EDIT. */" >>fat.h 3086 3087 AC_DEFINE(WANT_FAT_BINARY, 1, [Define to 1 when building a fat binary.]) 3088 GMP_DEFINE(WANT_FAT_BINARY, yes) 3089 3090 # Don't want normal copies of fat functions 3091 for tmp_fn in $fat_functions; do 3092 GMP_REMOVE_FROM_LIST(gmp_mpn_functions, $tmp_fn) 3093 GMP_REMOVE_FROM_LIST(gmp_mpn_functions_optional, $tmp_fn) 3094 done 3095 3096 for tmp_fn in $fat_functions; do 3097 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 3098 echo " 3099 #ifndef OPERATION_$tmp_fn 3100 #undef mpn_$tmp_fbase 3101 #define mpn_$tmp_fbase (*__gmpn_cpuvec.$tmp_fbase) 3102 #endif 3103 DECL_$tmp_fbase (__MPN(${tmp_fbase}_init));" >>fat.h 3104 # encourage various macros to use fat functions 3105 AC_DEFINE_UNQUOTED(HAVE_NATIVE_mpn_$tmp_fbase) 3106 done 3107 3108 echo "" >>fat.h 3109 echo "/* variable thresholds */" >>fat.h 3110 for tmp_tn in $fat_thresholds; do 3111 echo "#undef $tmp_tn" >>fat.h 3112 echo "#define $tmp_tn CPUVEC_THRESHOLD (`echo $tmp_tn | tr [A-Z] [a-z]`)" >>fat.h 3113 done 3114 3115 echo " 3116 /* Copy all fields into __gmpn_cpuvec. 3117 memcpy is not used because it might operate byte-wise (depending on its 3118 implementation), and we need the function pointer writes to be atomic. 3119 "volatile" discourages the compiler from trying to optimize this. */ 3120 #define CPUVEC_INSTALL(vec) \\ 3121 do { \\ 3122 volatile struct cpuvec_t *p = &__gmpn_cpuvec; \\" >>fat.h 3123 for tmp_fn in $fat_functions; do 3124 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 3125 echo " p->$tmp_fbase = vec.$tmp_fbase; \\" >>fat.h 3126 done 3127 for tmp_tn in $fat_thresholds; do 3128 tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` 3129 echo " p->$tmp_field_name = vec.$tmp_field_name; \\" >>fat.h 3130 done 3131 echo " } while (0)" >>fat.h 3132 3133 echo " 3134 /* A helper to check all fields are filled. */ 3135 #define ASSERT_CPUVEC(vec) \\ 3136 do { \\" >>fat.h 3137 for tmp_fn in $fat_functions; do 3138 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 3139 echo " ASSERT (vec.$tmp_fbase != NULL); \\" >>fat.h 3140 done 3141 for tmp_tn in $fat_thresholds; do 3142 tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` 3143 echo " ASSERT (vec.$tmp_field_name != 0); \\" >>fat.h 3144 done 3145 echo " } while (0)" >>fat.h 3146 3147 echo " 3148 /* Call ITERATE(field) for each fat threshold field. */ 3149 #define ITERATE_FAT_THRESHOLDS() \\ 3150 do { \\" >>fat.h 3151 for tmp_tn in $fat_thresholds; do 3152 tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` 3153 echo " ITERATE ($tmp_tn, $tmp_field_name); \\" >>fat.h 3154 done 3155 echo " } while (0)" >>fat.h 3156 3157 for tmp_dir in $fat_path; do 3158 CPUVEC_SETUP= 3159 THRESH_ASM_SETUP= 3160 echo "" >>fat.h 3161 GMP_FAT_SUFFIX(tmp_suffix, $tmp_dir) 3162 3163 # In order to keep names unique on a DOS 8.3 filesystem, use a prefix 3164 # (rather than a suffix) for the generated file names, and abbreviate. 3165 case $tmp_suffix in 3166 pentium) tmp_prefix=p ;; 3167 pentium_mmx) tmp_prefix=pm ;; 3168 p6_mmx) tmp_prefix=p2 ;; 3169 p6_p3mmx) tmp_prefix=p3 ;; 3170 pentium4) tmp_prefix=p4 ;; 3171 pentium4_mmx) tmp_prefix=p4m ;; 3172 pentium4_sse2) tmp_prefix=p4s ;; 3173 k6_mmx) tmp_prefix=k6m ;; 3174 k6_k62mmx) tmp_prefix=k62 ;; 3175 k7_mmx) tmp_prefix=k7m ;; 3176 *) tmp_prefix=$tmp_suffix ;; 3177 esac 3178 3179 # Extract desired thresholds from gmp-mparam.h file in this directory, 3180 # if present. 3181 tmp_mparam=$srcdir/mpn/$tmp_dir/gmp-mparam.h 3182 if test -f $tmp_mparam; then 3183 for tmp_tn in $fat_thresholds; do 3184 tmp_thresh=`sed -n "s/^#define $tmp_tn[ ]*\\([0-9][0-9]*\\).*$/\\1/p" $tmp_mparam` 3185 if test -n "$tmp_thresh"; then 3186 THRESH_ASM_SETUP=["${THRESH_ASM_SETUP}define($tmp_tn,$tmp_thresh) 3187 "] 3188 CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.`echo $tmp_tn | tr [[A-Z]] [[a-z]]` = $tmp_thresh; \\ 3189 " 3190 eval tmp_limit=\$${tmp_tn}_LIMIT 3191 if test -z "$tmp_limit"; then 3192 tmp_limit=0 3193 fi 3194 if test $tmp_thresh -gt $tmp_limit; then 3195 eval ${tmp_tn}_LIMIT=$tmp_thresh 3196 fi 3197 fi 3198 done 3199 fi 3200 3201 for tmp_fn in $fat_functions; do 3202 GMP_MULFUNC_CHOICES 3203 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 3208 3209 # If the host uses a non-standard ABI, check if tmp_file supports it 3210 # 3211 if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then 3212 abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] 3213 if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then 3214 true 3215 else 3216 continue 3217 fi 3218 fi 3219 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" 3222 3223 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 3224 3225 # carry-in variant, eg. divrem_1c or modexact_1c_odd 3226 case $tmp_fbase in 3227 *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;; 3228 *) tmp_fbasec=${tmp_fbase}c ;; 3229 esac 3230 3231 # Create a little file doing an include from srcdir. The 3232 # OPERATION and renamings aren't all needed all the time, but 3233 # they don't hurt if unused. 3234 # 3235 # FIXME: Should generate these via config.status commands. 3236 # Would need them all in one AC_CONFIG_COMMANDS though, since 3237 # that macro doesn't accept a set of separate commands generated 3238 # by shell code. 3239 # 3240 case $tmp_ext in 3241 asm) 3242 # hide the d-n-l from autoconf's error checking 3243 tmp_d_n_l=d""nl 3244 echo ["$tmp_d_n_l mpn_$tmp_fbase - from $tmp_dir directory for fat binary. 3245 $tmp_d_n_l Generated by configure - DO NOT EDIT. 3246 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}) 3252 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})') 3256 3257 $THRESH_ASM_SETUP 3258 include][($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm) 3259 "] >mpn/${tmp_prefix}_$tmp_fn.asm 3260 ;; 3261 c) 3262 echo ["/* mpn_$tmp_fbase - from $tmp_dir directory for fat binary. 3263 Generated by configure - DO NOT EDIT. */ 3264 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} 3270 3271 #include \"$mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.c\" 3272 "] >mpn/${tmp_prefix}_$tmp_fn.c 3273 ;; 3274 esac 3275 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}; \\ 3279 " 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}; \\ 3284 " 3285 fi 3286 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}; \\ 3291 " 3292 fi 3293 fi 3294 done 3295 done 3296 done 3297 3298 # Emit CPUVEC_SETUP for this directory 3299 echo "" >>fat.h 3300 echo "#define CPUVEC_SETUP_$tmp_suffix \\" >>fat.h 3301 echo " do { \\" >>fat.h 3302 echo "$CPUVEC_SETUP } while (0)" >>fat.h 3303 done 3304 3305 # Emit threshold limits 3306 echo "" >>fat.h 3307 for tmp_tn in $fat_thresholds; do 3308 eval tmp_limit=\$${tmp_tn}_LIMIT 3309 echo "#define ${tmp_tn}_LIMIT $tmp_limit" >>fat.h 3310 done 3311 fi 3312 3313 3314 # Normal binary setups. 3315 # 3316 3317 for tmp_ext in MPN_SUFFIXES; do 3318 eval found_$tmp_ext=no 3319 done 3320 3321 for tmp_fn in $gmp_mpn_functions; do 3322 for tmp_ext in MPN_SUFFIXES; do 3323 test "$no_create" = yes || rm -f mpn/$tmp_fn.$tmp_ext 3324 done 3325 3326 # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise 3327 # mpn_preinv_mod_1 by mod_1.asm. 3328 case $tmp_fn in 3329 pre_divrem_1) 3330 if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;; 3331 pre_mod_1) 3332 if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;; 3333 esac 3334 3335 GMP_MULFUNC_CHOICES 3336 3337 found=no 3338 for tmp_dir in $path; do 3339 for tmp_base in $tmp_fn $tmp_mulfunc; do 3340 for tmp_ext in MPN_SUFFIXES; do 3341 tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext 3342 if test -f $tmp_file; then 3343 3344 # For a nails build, check if the file supports our nail bits. 3345 # Generic code always supports all nails. 3346 # 3347 # FIXME: When a multi-function file is selected to provide one of 3348 # the nails-neutral routines, like logops_n for and_n, the 3349 # PROLOGUE grepping will create HAVE_NATIVE_mpn_<foo> defines for 3350 # all functions in that file, even if they haven't all been 3351 # nailified. Not sure what to do about this, it's only really a 3352 # problem for logops_n, and it's not too terrible to insist those 3353 # get nailified always. 3354 # 3355 if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then 3356 case $tmp_fn in 3357 and_n | ior_n | xor_n | andn_n | \ 3358 copyi | copyd | \ 3359 popcount | hamdist | \ 3360 udiv | udiv_w_sdiv | umul | \ 3361 cntlz | invert_limb) 3362 # these operations are either unaffected by nails or defined 3363 # to operate on full limbs 3364 ;; 3365 *) 3366 nails=[`sed -n 's/^[ ]*NAILS_SUPPORT(\(.*\))/\1/p' $tmp_file `] 3367 for n in $nails; do 3368 case $n in 3369 *-*) 3370 n_start=`echo "$n" | sed -n 's/\(.*\)-.*/\1/p'` 3371 n_end=`echo "$n" | sed -n 's/.*-\(.*\)/\1/p'` 3372 ;; 3373 *) 3374 n_start=$n 3375 n_end=$n 3376 ;; 3377 esac 3378 if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then 3379 found=yes 3380 break 3381 fi 3382 done 3383 if test $found != yes; then 3384 continue 3385 fi 3386 ;; 3387 esac 3388 fi 3389 3390 # If the host uses a non-standard ABI, check if tmp_file supports it 3391 # 3392 if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then 3393 abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] 3394 if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then 3395 true 3396 else 3397 continue 3398 fi 3399 fi 3400 3401 found=yes 3402 eval found_$tmp_ext=yes 3403 3404 if test $tmp_ext = c; then 3405 tmp_u='$U' 3406 else 3407 tmp_u= 3408 fi 3409 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" 3414 3415 # Duplicate AC_DEFINEs are harmless, so it doesn't matter 3416 # that multi-function files get grepped here repeatedly. 3417 # The PROLOGUE pattern excludes the optional second parameter. 3418 gmp_ep=[` 3419 sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ; 3420 sed -n 's/^[ ]*PROLOGUE(\([^,]*\).*)/\1/p' $tmp_file 3421 `] 3422 for gmp_tmp in $gmp_ep; do 3423 AC_DEFINE_UNQUOTED(HAVE_NATIVE_$gmp_tmp) 3424 eval HAVE_NATIVE_$gmp_tmp=yes 3425 done 3426 3427 case $tmp_fn in 3428 sqr_basecase) sqr_basecase_source=$tmp_file ;; 3429 esac 3430 3431 break 3432 fi 3433 done 3434 if test $found = yes; then break ; fi 3435 done 3436 if test $found = yes; then break ; fi 3437 done 3438 3439 if test $found = no; then 3440 for tmp_optional in $gmp_mpn_functions_optional; do 3441 if test $tmp_optional = $tmp_fn; then 3442 found=yes 3443 fi 3444 done 3445 if test $found = no; then 3446 AC_MSG_ERROR([no version of $tmp_fn found in path: $path]) 3447 fi 3448 fi 3449 done 3450 3451 # All cycle counters are .asm files currently 3452 if test -n "$SPEED_CYCLECOUNTER_OBJ"; then 3453 found_asm=yes 3454 fi 3455 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. 3459 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]) 3579 3580 3581 # Don't demand an m4 unless it's actually needed. 3582 if test $found_asm = yes; then 3583 GMP_PROG_M4 3584 GMP_M4_M4WRAP_SPURIOUS 3585 # else 3586 # It's unclear why this m4-not-needed stuff was ever done. 3587 # if test -z "$M4" ; then 3588 # M4=m4-not-needed 3589 # fi 3590 fi 3591 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 3595 fi 3596 3597 if test "$gmp_asm_syntax_testing" != no; then 3598 GMP_ASM_TEXT 3599 GMP_ASM_DATA 3600 GMP_ASM_LABEL_SUFFIX 3601 GMP_ASM_GLOBL 3602 GMP_ASM_GLOBL_ATTR 3603 GMP_ASM_UNDERSCORE 3604 GMP_ASM_RODATA 3605 GMP_ASM_TYPE 3606 GMP_ASM_SIZE 3607 GMP_ASM_LSYM_PREFIX 3608 GMP_ASM_W32 3609 GMP_ASM_ALIGN_LOG 3610 3611 case $host in 3612 arm*-*-* | aarch64*-*-*) 3613 case $ABI in 3614 32) 3615 GMP_INCLUDE_MPN(arm/arm-defs.m4) ;; 3616 esac 3617 ;; 3618 hppa*-*-*) 3619 # for both pa32 and pa64 3620 GMP_INCLUDE_MPN(pa32/pa-defs.m4) 3621 ;; 3622 IA64_PATTERN) 3623 GMP_ASM_IA64_ALIGN_OK 3624 ;; 3625 M68K_PATTERN) 3626 GMP_ASM_M68K_INSTRUCTION 3627 GMP_ASM_M68K_ADDRESSING 3628 GMP_ASM_M68K_BRANCHES 3629 ;; 3630 [powerpc*-*-* | power[3-9]-*-*]) 3631 GMP_ASM_POWERPC_PIC_ALWAYS 3632 GMP_ASM_POWERPC_R_REGISTERS 3633 GMP_INCLUDE_MPN(powerpc32/powerpc-defs.m4) 3634 3635 # Check for Linux ELFv2 ABI 3636 AC_EGREP_CPP(yes, 3637 [#if _CALL_ELF == 2 3638 yes 3639 #endif], 3640 [GMP_DEFINE_RAW(["define(<ELFv2_ABI>)"])]) 3641 3642 case $host in 3643 *-*-aix*) 3644 case $ABI in 3645 mode64) GMP_INCLUDE_MPN(powerpc64/aix.m4) ;; 3646 *) GMP_INCLUDE_MPN(powerpc32/aix.m4) ;; 3647 esac 3648 ;; 3649 *-*-linux* | *-*-*bsd*) 3650 case $ABI in 3651 mode64) GMP_INCLUDE_MPN(powerpc64/elf.m4) ;; 3652 mode32 | 32) GMP_INCLUDE_MPN(powerpc32/elf.m4) ;; 3653 esac 3654 ;; 3655 *-*-darwin*) 3656 case $ABI in 3657 mode64) GMP_INCLUDE_MPN(powerpc64/darwin.m4) ;; 3658 mode32 | 32) GMP_INCLUDE_MPN(powerpc32/darwin.m4) ;; 3659 esac 3660 ;; 3661 *) 3662 # Assume unrecognized operating system is the powerpc eABI 3663 GMP_INCLUDE_MPN(powerpc32/eabi.m4) 3664 ;; 3665 esac 3666 ;; 3667 power*-*-aix*) 3668 GMP_INCLUDE_MPN(powerpc32/aix.m4) 3669 ;; 3670 *sparc*-*-*) 3671 case $ABI in 3672 64) 3673 GMP_ASM_SPARC_REGISTER 3674 ;; 3675 esac 3676 GMP_ASM_SPARC_GOTDATA 3677 GMP_ASM_SPARC_SHARED_THUNKS 3678 ;; 3679 X86_PATTERN | X86_64_PATTERN) 3680 GMP_ASM_ALIGN_FILL_0x90 3681 case $ABI in 3682 32) 3683 GMP_INCLUDE_MPN(x86/x86-defs.m4) 3684 AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86) 3685 GMP_ASM_COFF_TYPE 3686 GMP_ASM_X86_GOT_UNDERSCORE 3687 GMP_ASM_X86_SHLDL_CL 3688 case $enable_profiling in 3689 prof | gprof) GMP_ASM_X86_MCOUNT ;; 3690 esac 3691 case $host in 3692 *-*-darwin*) 3693 GMP_INCLUDE_MPN(x86/darwin.m4) ;; 3694 esac 3695 ;; 3696 64|x32) 3697 GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4) 3698 AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86_64) 3699 case $host in 3700 *-*-darwin*) 3701 GMP_INCLUDE_MPN(x86_64/darwin.m4) ;; 3702 *-*-mingw* | *-*-cygwin) 3703 GMP_INCLUDE_MPN(x86_64/dos64.m4) ;; 3704 *-openbsd*) 3705 GMP_DEFINE_RAW(["define(<OPENBSD>,1)"]) ;; 3706 *-linux*) 3707 GMP_DEFINE_RAW(["define(<LINUX>,1)"]) ;; 3708 esac 3709 ;; 3710 esac 3711 ;; 3712 esac 3713 fi 3714 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" 3719 fi 3720 3721 # Create link for gmp-mparam.h. 3722 gmp_mparam_source= 3723 for gmp_mparam_dir in $path; do 3724 test "$no_create" = yes || rm -f gmp-mparam.h 3725 tmp_file=$srcdir/mpn/$gmp_mparam_dir/gmp-mparam.h 3726 if test -f $tmp_file; then 3727 AC_CONFIG_LINKS(gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h) 3728 gmp_srclinks="$gmp_srclinks gmp-mparam.h" 3729 gmp_mparam_source=$tmp_file 3730 break 3731 fi 3732 done 3733 if test -z "$gmp_mparam_source"; then 3734 AC_MSG_ERROR([no version of gmp-mparam.h found in path: $path]) 3735 fi 3736 3737 # For a helpful message from tune/tuneup.c 3738 gmp_mparam_suggest=$gmp_mparam_source 3739 if test "$gmp_mparam_dir" = generic; then 3740 for i in $path; do break; done 3741 if test "$i" != generic; then 3742 gmp_mparam_suggest="new file $srcdir/mpn/$i/gmp-mparam.h" 3743 fi 3744 fi 3745 AC_DEFINE_UNQUOTED(GMP_MPARAM_H_SUGGEST, "$gmp_mparam_source", 3746 [The gmp-mparam.h file (a string) the tune program should suggest updating.]) 3747 3748 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. 3752 # 3753 if test -z "$fat_path"; then 3754 for i in SQR_TOOM2_THRESHOLD BMOD_1_TO_MOD_1_THRESHOLD SHLD_SLOW SHRD_SLOW; do 3755 value=`sed -n 's/^#define '$i'[ ]*\([0-9][0-9]*\).*$/\1/p' $gmp_mparam_source` 3756 if test -n "$value"; then 3757 GMP_DEFINE_RAW(["define(<$i>,<$value>)"]) 3758 fi 3759 done 3760 fi 3761 3762 3763 # Sizes of some types, needed at preprocessing time. 3764 # 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. 3769 # 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]) 3777 fi 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>)"]) 3780 3781 # Check compiler limb size matches gmp-mparam.h 3782 # 3783 # FIXME: Some of the cycle counter objects in the tune directory depend on 3784 # the size of ulong, it'd be possible to check that here, though a mismatch 3785 # probably wouldn't want to be fatal, none of the libgmp assembler code 3786 # depends on ulong. 3787 # 3788 mparam_bits=[`sed -n 's/^#define GMP_LIMB_BITS[ ][ ]*\([0-9]*\).*$/\1/p' $gmp_mparam_source`] 3789 if test -n "$mparam_bits" && test "$mparam_bits" -ne $GMP_LIMB_BITS; then 3790 if test "$test_CFLAGS" = set; then 3791 AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code 3792 in this configuration expects $mparam_bits bits. 3793 You appear to have set \$CFLAGS, perhaps you also need to tell GMP the 3794 intended ABI, see "ABI and ISA" in the manual.]) 3795 else 3796 AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code 3797 in this configuration expects $mparam_bits bits.]) 3798 fi 3799 fi 3800 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))"]) 3804 3805 3806 AC_SUBST(mpn_objects) 3807 AC_SUBST(mpn_objs_in_libgmp) 3808 AC_SUBST(gmp_srclinks) 3809 3810 3811 # A recompiled sqr_basecase for use in the tune program, if necessary. 3812 TUNE_SQR_OBJ= 3813 test -d tune || mkdir tune 3814 case $sqr_basecase_source in 3815 *.asm) 3816 sqr_max=[`sed -n 's/^def...(SQR_TOOM2_THRESHOLD_MAX, *\([0-9]*\))/\1/p' $sqr_basecase_source`] 3817 if test -n "$sqr_max"; then 3818 TUNE_SQR_OBJ=sqr_asm.o 3819 AC_DEFINE_UNQUOTED(TUNE_SQR_TOOM2_MAX,$sqr_max, 3820 [Maximum size the tune program can test for SQR_TOOM2_THRESHOLD]) 3821 fi 3822 cat >tune/sqr_basecase.c <<EOF 3823 /* not sure that an empty file can compile, so put in a dummy */ 3824 int sqr_basecase_dummy; 3825 EOF 3826 ;; 3827 *.c) 3828 TUNE_SQR_OBJ= 3829 AC_DEFINE(TUNE_SQR_TOOM2_MAX,SQR_TOOM2_MAX_GENERIC) 3830 cat >tune/sqr_basecase.c <<EOF 3831 #define TUNE_PROGRAM_BUILD 1 3832 #define TUNE_PROGRAM_BUILD_SQR 1 3833 #include "mpn/sqr_basecase.c" 3834 EOF 3835 ;; 3836 esac 3837 AC_SUBST(TUNE_SQR_OBJ) 3838 3839 3840 # Configs for demos/pexpr.c. 3841 # 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) 3848 3849 # Configs for demos/calc directory 3850 # 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. 3855 # 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. 3862 # 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. 3867 # 3868 AC_CONFIG_FILES(demos/calc/calc-config.h:demos/calc/calc-config-h.in) 3869 LIBCURSES= 3870 if test $with_readline != no; then 3871 AC_CHECK_LIB(ncurses, tputs, [LIBCURSES=-lncurses], 3872 [AC_CHECK_LIB(curses, tputs, [LIBCURSES=-lcurses])]) 3873 fi 3874 AC_SUBST(LIBCURSES) 3875 use_readline=$with_readline 3876 if test $with_readline = detect; then 3877 use_readline=no 3878 AC_CHECK_LIB(readline, readline, 3879 [AC_CHECK_HEADER(readline/readline.h, 3880 [AC_CHECK_HEADER(readline/history.h, use_readline=yes)])], 3881 , $LIBCURSES) 3882 AC_MSG_CHECKING(readline detected) 3883 AC_MSG_RESULT($use_readline) 3884 fi 3885 if test $use_readline = yes; then 3886 AC_SUBST(WITH_READLINE_01, 1) 3887 AC_SUBST(LIBREADLINE, -lreadline) 3888 else 3889 WITH_READLINE_01=0 3890 fi 3891 AC_PROG_YACC 3892 AM_PROG_LEX 3893 3894 # Configs for demos/expr directory 3895 # 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.) 3900 # 3901 AC_PROG_RANLIB 3902 3903 3904 # Create config.m4. 3905 GMP_FINISH 3906 3907 # Create Makefiles 3908 # FIXME: Upcoming version of autoconf/automake may not like broken lines. 3909 # Right now automake isn't accepting the new AC_CONFIG_FILES scheme. 3910 3911 AC_OUTPUT(Makefile \ 3912 mpf/Makefile mpn/Makefile mpq/Makefile \ 3913 mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile \ 3914 tests/Makefile tests/devel/Makefile \ 3915 tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile \ 3916 tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile \ 3917 tests/cxx/Makefile \ 3918 doc/Makefile tune/Makefile \ 3919 demos/Makefile demos/calc/Makefile demos/expr/Makefile \ 3920 gmp.h:gmp-h.in) 3921 3922 AC_MSG_NOTICE([summary of build options: 3923 3924 Version: ${PACKAGE_STRING} 3925 Host type: ${host} 3926 ABI: ${ABI} 3927 Install prefix: ${prefix} 3928 Compiler: ${CC} 3929 Static libraries: ${enable_static} 3930 Shared libraries: ${enable_shared} 3931 ]) 3932 3933 if test x$cross_compiling = xyes ; then 3934 case "$host" in 3935 *-*-mingw* | *-*-cygwin) 3936 if test x$ABI = x64 ; then 3937 AC_MSG_NOTICE([If wine64 is installed, use make check TESTS_ENVIRONMENT=wine64.]) 3938 else 3939 AC_MSG_NOTICE([If wine is installed, use make check TESTS_ENVIRONMENT=wine.]) 3940 fi 3941 ;; 3942 esac 3943 fi