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