The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/config/host-cpu-c-abi.m4

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 # host-cpu-c-abi.m4 serial 11
    2 dnl Copyright (C) 2002-2019 Free Software Foundation, Inc.
    3 dnl This file is free software; the Free Software Foundation
    4 dnl gives unlimited permission to copy and/or distribute it,
    5 dnl with or without modifications, as long as this notice is preserved.
    6 
    7 dnl From Bruno Haible and Sam Steingold.
    8 
    9 dnl Sets the HOST_CPU variable to the canonical name of the CPU.
   10 dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
   11 dnl C language ABI (application binary interface).
   12 dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
   13 dnl config.h.
   14 dnl
   15 dnl This canonical name can be used to select a particular assembly language
   16 dnl source file that will interoperate with C code on the given host.
   17 dnl
   18 dnl For example:
   19 dnl * 'i386' and 'sparc' are different canonical names, because code for i386
   20 dnl   will not run on SPARC CPUs and vice versa. They have different
   21 dnl   instruction sets.
   22 dnl * 'sparc' and 'sparc64' are different canonical names, because code for
   23 dnl   'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
   24 dnl   contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
   25 dnl   instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
   26 dnl   mode, but not both.
   27 dnl * 'mips' and 'mipsn32' are different canonical names, because they use
   28 dnl   different argument passing and return conventions for C functions, and
   29 dnl   although the instruction set of 'mips' is a large subset of the
   30 dnl   instruction set of 'mipsn32'.
   31 dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
   32 dnl   different sizes for the C types like 'int' and 'void *', and although
   33 dnl   the instruction sets of 'mipsn32' and 'mips64' are the same.
   34 dnl * The same canonical name is used for different endiannesses. You can
   35 dnl   determine the endianness through preprocessor symbols:
   36 dnl   - 'arm': test __ARMEL__.
   37 dnl   - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
   38 dnl   - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
   39 dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
   40 dnl   (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
   41 dnl   - Instructions that do not exist on all of these CPUs (cmpxchg,
   42 dnl     MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
   43 dnl     assembly language source files use such instructions, you will
   44 dnl     need to make the distinction.
   45 dnl   - Speed of execution of the common instruction set is reasonable across
   46 dnl     the entire family of CPUs. If you have assembly language source files
   47 dnl     that are optimized for particular CPU types (like GNU gmp has), you
   48 dnl     will need to make the distinction.
   49 dnl   See <https://en.wikipedia.org/wiki/X86_instruction_listings>.
   50 AC_DEFUN([gl_HOST_CPU_C_ABI],
   51 [
   52   AC_REQUIRE([AC_CANONICAL_HOST])
   53   AC_REQUIRE([gl_C_ASM])
   54   AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
   55     [case "$host_cpu" in
   56 
   57 changequote(,)dnl
   58        i[4567]86 )
   59 changequote([,])dnl
   60          gl_cv_host_cpu_c_abi=i386
   61          ;;
   62 
   63        x86_64 )
   64          # On x86_64 systems, the C compiler may be generating code in one of
   65          # these ABIs:
   66          # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
   67          # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
   68          #   with native Windows (mingw, MSVC).
   69          # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
   70          # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
   71          AC_COMPILE_IFELSE(
   72            [AC_LANG_SOURCE(
   73               [[#if (defined __x86_64__ || defined __amd64__ \
   74                      || defined _M_X64 || defined _M_AMD64)
   75                  int ok;
   76                 #else
   77                  error fail
   78                 #endif
   79               ]])],
   80            [AC_COMPILE_IFELSE(
   81               [AC_LANG_SOURCE(
   82                  [[#if defined __ILP32__ || defined _ILP32
   83                     int ok;
   84                    #else
   85                     error fail
   86                    #endif
   87                  ]])],
   88               [gl_cv_host_cpu_c_abi=x86_64-x32],
   89               [gl_cv_host_cpu_c_abi=x86_64])],
   90            [gl_cv_host_cpu_c_abi=i386])
   91          ;;
   92 
   93 changequote(,)dnl
   94        alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
   95 changequote([,])dnl
   96          gl_cv_host_cpu_c_abi=alpha
   97          ;;
   98 
   99        arm* | aarch64 )
  100          # Assume arm with EABI.
  101          # On arm64 systems, the C compiler may be generating code in one of
  102          # these ABIs:
  103          # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
  104          # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
  105          # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
  106          AC_COMPILE_IFELSE(
  107            [AC_LANG_SOURCE(
  108               [[#ifdef __aarch64__
  109                  int ok;
  110                 #else
  111                  error fail
  112                 #endif
  113               ]])],
  114            [AC_COMPILE_IFELSE(
  115               [AC_LANG_SOURCE(
  116                 [[#if defined __ILP32__ || defined _ILP32
  117                    int ok;
  118                   #else
  119                    error fail
  120                   #endif
  121                 ]])],
  122               [gl_cv_host_cpu_c_abi=arm64-ilp32],
  123               [gl_cv_host_cpu_c_abi=arm64])],
  124            [# Don't distinguish little-endian and big-endian arm, since they
  125             # don't require different machine code for simple operations and
  126             # since the user can distinguish them through the preprocessor
  127             # defines __ARMEL__ vs. __ARMEB__.
  128             # But distinguish arm which passes floating-point arguments and
  129             # return values in integer registers (r0, r1, ...) - this is
  130             # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
  131             # passes them in float registers (s0, s1, ...) and double registers
  132             # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
  133             # sets the preprocessor defines __ARM_PCS (for the first case) and
  134             # __ARM_PCS_VFP (for the second case), but older GCC does not.
  135             echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
  136             # Look for a reference to the register d0 in the .s file.
  137             AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
  138             if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
  139               gl_cv_host_cpu_c_abi=armhf
  140             else
  141               gl_cv_host_cpu_c_abi=arm
  142             fi
  143             rm -f conftest*
  144            ])
  145          ;;
  146 
  147        hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
  148          # On hppa, the C compiler may be generating 32-bit code or 64-bit
  149          # code. In the latter case, it defines _LP64 and __LP64__.
  150          AC_COMPILE_IFELSE(
  151            [AC_LANG_SOURCE(
  152               [[#ifdef __LP64__
  153                  int ok;
  154                 #else
  155                  error fail
  156                 #endif
  157               ]])],
  158            [gl_cv_host_cpu_c_abi=hppa64],
  159            [gl_cv_host_cpu_c_abi=hppa])
  160          ;;
  161 
  162        ia64* )
  163          # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
  164          # 32-bit code. In the latter case, it defines _ILP32.
  165          AC_COMPILE_IFELSE(
  166            [AC_LANG_SOURCE(
  167               [[#ifdef _ILP32
  168                  int ok;
  169                 #else
  170                  error fail
  171                 #endif
  172               ]])],
  173            [gl_cv_host_cpu_c_abi=ia64-ilp32],
  174            [gl_cv_host_cpu_c_abi=ia64])
  175          ;;
  176 
  177        mips* )
  178          # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
  179          # at 32.
  180          AC_COMPILE_IFELSE(
  181            [AC_LANG_SOURCE(
  182               [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
  183                  int ok;
  184                 #else
  185                  error fail
  186                 #endif
  187               ]])],
  188            [gl_cv_host_cpu_c_abi=mips64],
  189            [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
  190             # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
  191             # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
  192             # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
  193             AC_COMPILE_IFELSE(
  194               [AC_LANG_SOURCE(
  195                  [[#if (_MIPS_SIM == _ABIN32)
  196                     int ok;
  197                    #else
  198                     error fail
  199                    #endif
  200                  ]])],
  201               [gl_cv_host_cpu_c_abi=mipsn32],
  202               [gl_cv_host_cpu_c_abi=mips])])
  203          ;;
  204 
  205        powerpc* )
  206          # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
  207          # No need to distinguish them here; the caller may distinguish
  208          # them based on the OS.
  209          # On powerpc64 systems, the C compiler may still be generating
  210          # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
  211          # be generating 64-bit code.
  212          AC_COMPILE_IFELSE(
  213            [AC_LANG_SOURCE(
  214               [[#if defined __powerpc64__ || defined _ARCH_PPC64
  215                  int ok;
  216                 #else
  217                  error fail
  218                 #endif
  219               ]])],
  220            [# On powerpc64, there are two ABIs on Linux: The AIX compatible
  221             # one and the ELFv2 one. The latter defines _CALL_ELF=2.
  222             AC_COMPILE_IFELSE(
  223               [AC_LANG_SOURCE(
  224                  [[#if defined _CALL_ELF && _CALL_ELF == 2
  225                     int ok;
  226                    #else
  227                     error fail
  228                    #endif
  229                  ]])],
  230               [gl_cv_host_cpu_c_abi=powerpc64-elfv2],
  231               [gl_cv_host_cpu_c_abi=powerpc64])
  232            ],
  233            [gl_cv_host_cpu_c_abi=powerpc])
  234          ;;
  235 
  236        rs6000 )
  237          gl_cv_host_cpu_c_abi=powerpc
  238          ;;
  239 
  240        riscv32 | riscv64 )
  241          # There are 2 architectures (with variants): rv32* and rv64*.
  242          AC_COMPILE_IFELSE(
  243            [AC_LANG_SOURCE(
  244               [[#if __riscv_xlen == 64
  245                   int ok;
  246                 #else
  247                   error fail
  248                 #endif
  249               ]])],
  250            [cpu=riscv64],
  251            [cpu=riscv32])
  252          # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
  253          # Size of 'long' and 'void *':
  254          AC_COMPILE_IFELSE(
  255            [AC_LANG_SOURCE(
  256               [[#if defined __LP64__
  257                   int ok;
  258                 #else
  259                   error fail
  260                 #endif
  261               ]])],
  262            [main_abi=lp64],
  263            [main_abi=ilp32])
  264          # Float ABIs:
  265          # __riscv_float_abi_double:
  266          #   'float' and 'double' are passed in floating-point registers.
  267          # __riscv_float_abi_single:
  268          #   'float' are passed in floating-point registers.
  269          # __riscv_float_abi_soft:
  270          #   No values are passed in floating-point registers.
  271          AC_COMPILE_IFELSE(
  272            [AC_LANG_SOURCE(
  273               [[#if defined __riscv_float_abi_double
  274                   int ok;
  275                 #else
  276                   error fail
  277                 #endif
  278               ]])],
  279            [float_abi=d],
  280            [AC_COMPILE_IFELSE(
  281               [AC_LANG_SOURCE(
  282                  [[#if defined __riscv_float_abi_single
  283                      int ok;
  284                    #else
  285                      error fail
  286                    #endif
  287                  ]])],
  288               [float_abi=f],
  289               [float_abi=''])
  290            ])
  291          gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
  292          ;;
  293 
  294        s390* )
  295          # On s390x, the C compiler may be generating 64-bit (= s390x) code
  296          # or 31-bit (= s390) code.
  297          AC_COMPILE_IFELSE(
  298            [AC_LANG_SOURCE(
  299               [[#if defined __LP64__ || defined __s390x__
  300                   int ok;
  301                 #else
  302                   error fail
  303                 #endif
  304               ]])],
  305            [gl_cv_host_cpu_c_abi=s390x],
  306            [gl_cv_host_cpu_c_abi=s390])
  307          ;;
  308 
  309        sparc | sparc64 )
  310          # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
  311          # C compiler still generates 32-bit code.
  312          AC_COMPILE_IFELSE(
  313            [AC_LANG_SOURCE(
  314               [[#if defined __sparcv9 || defined __arch64__
  315                  int ok;
  316                 #else
  317                  error fail
  318                 #endif
  319               ]])],
  320            [gl_cv_host_cpu_c_abi=sparc64],
  321            [gl_cv_host_cpu_c_abi=sparc])
  322          ;;
  323 
  324        *)
  325          gl_cv_host_cpu_c_abi="$host_cpu"
  326          ;;
  327      esac
  328     ])
  329 
  330   dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
  331   HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
  332   HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
  333   AC_SUBST([HOST_CPU])
  334   AC_SUBST([HOST_CPU_C_ABI])
  335 
  336   # This was
  337   #   AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
  338   #   AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
  339   # earlier, but KAI C++ 3.2d doesn't like this.
  340   sed -e 's/-/_/g' >> confdefs.h <<EOF
  341 #ifndef __${HOST_CPU}__
  342 #define __${HOST_CPU}__ 1
  343 #endif
  344 #ifndef __${HOST_CPU_C_ABI}__
  345 #define __${HOST_CPU_C_ABI}__ 1
  346 #endif
  347 EOF
  348   AH_TOP([/* CPU and C ABI indicator */
  349 #ifndef __i386__
  350 #undef __i386__
  351 #endif
  352 #ifndef __x86_64_x32__
  353 #undef __x86_64_x32__
  354 #endif
  355 #ifndef __x86_64__
  356 #undef __x86_64__
  357 #endif
  358 #ifndef __alpha__
  359 #undef __alpha__
  360 #endif
  361 #ifndef __arm__
  362 #undef __arm__
  363 #endif
  364 #ifndef __armhf__
  365 #undef __armhf__
  366 #endif
  367 #ifndef __arm64_ilp32__
  368 #undef __arm64_ilp32__
  369 #endif
  370 #ifndef __arm64__
  371 #undef __arm64__
  372 #endif
  373 #ifndef __hppa__
  374 #undef __hppa__
  375 #endif
  376 #ifndef __hppa64__
  377 #undef __hppa64__
  378 #endif
  379 #ifndef __ia64_ilp32__
  380 #undef __ia64_ilp32__
  381 #endif
  382 #ifndef __ia64__
  383 #undef __ia64__
  384 #endif
  385 #ifndef __m68k__
  386 #undef __m68k__
  387 #endif
  388 #ifndef __mips__
  389 #undef __mips__
  390 #endif
  391 #ifndef __mipsn32__
  392 #undef __mipsn32__
  393 #endif
  394 #ifndef __mips64__
  395 #undef __mips64__
  396 #endif
  397 #ifndef __powerpc__
  398 #undef __powerpc__
  399 #endif
  400 #ifndef __powerpc64__
  401 #undef __powerpc64__
  402 #endif
  403 #ifndef __powerpc64_elfv2__
  404 #undef __powerpc64_elfv2__
  405 #endif
  406 #ifndef __riscv32__
  407 #undef __riscv32__
  408 #endif
  409 #ifndef __riscv64__
  410 #undef __riscv64__
  411 #endif
  412 #ifndef __riscv32_ilp32__
  413 #undef __riscv32_ilp32__
  414 #endif
  415 #ifndef __riscv32_ilp32f__
  416 #undef __riscv32_ilp32f__
  417 #endif
  418 #ifndef __riscv32_ilp32d__
  419 #undef __riscv32_ilp32d__
  420 #endif
  421 #ifndef __riscv64_ilp32__
  422 #undef __riscv64_ilp32__
  423 #endif
  424 #ifndef __riscv64_ilp32f__
  425 #undef __riscv64_ilp32f__
  426 #endif
  427 #ifndef __riscv64_ilp32d__
  428 #undef __riscv64_ilp32d__
  429 #endif
  430 #ifndef __riscv64_lp64__
  431 #undef __riscv64_lp64__
  432 #endif
  433 #ifndef __riscv64_lp64f__
  434 #undef __riscv64_lp64f__
  435 #endif
  436 #ifndef __riscv64_lp64d__
  437 #undef __riscv64_lp64d__
  438 #endif
  439 #ifndef __s390__
  440 #undef __s390__
  441 #endif
  442 #ifndef __s390x__
  443 #undef __s390x__
  444 #endif
  445 #ifndef __sh__
  446 #undef __sh__
  447 #endif
  448 #ifndef __sparc__
  449 #undef __sparc__
  450 #endif
  451 #ifndef __sparc64__
  452 #undef __sparc64__
  453 #endif
  454 ])
  455 
  456 ])
  457 
  458 
  459 dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI
  460 dnl (application binary interface) is a 32-bit one, or to 'no' otherwise.
  461 dnl This is a simplified variant of gl_HOST_CPU_C_ABI.
  462 AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT],
  463 [
  464   AC_REQUIRE([AC_CANONICAL_HOST])
  465   AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit],
  466     [if test -n "$gl_cv_host_cpu_c_abi"; then
  467        case "$gl_cv_host_cpu_c_abi" in
  468          i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
  469            gl_cv_host_cpu_c_abi_32bit=yes ;;
  470          *)
  471            gl_cv_host_cpu_c_abi_32bit=no ;;
  472        esac
  473      else
  474        case "$host_cpu" in
  475 
  476 changequote(,)dnl
  477          i[4567]86 )
  478 changequote([,])dnl
  479            gl_cv_host_cpu_c_abi_32bit=yes
  480            ;;
  481 
  482          x86_64 )
  483            # On x86_64 systems, the C compiler may be generating code in one of
  484            # these ABIs:
  485            # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
  486            # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
  487            #   with native Windows (mingw, MSVC).
  488            # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
  489            # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
  490            AC_COMPILE_IFELSE(
  491              [AC_LANG_SOURCE(
  492                 [[#if (defined __x86_64__ || defined __amd64__ \
  493                        || defined _M_X64 || defined _M_AMD64) \
  494                       && !(defined __ILP32__ || defined _ILP32)
  495                    int ok;
  496                   #else
  497                    error fail
  498                   #endif
  499                 ]])],
  500              [gl_cv_host_cpu_c_abi_32bit=no],
  501              [gl_cv_host_cpu_c_abi_32bit=yes])
  502            ;;
  503 
  504          arm* | aarch64 )
  505            # Assume arm with EABI.
  506            # On arm64 systems, the C compiler may be generating code in one of
  507            # these ABIs:
  508            # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
  509            # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
  510            # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
  511            AC_COMPILE_IFELSE(
  512              [AC_LANG_SOURCE(
  513                 [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
  514                    int ok;
  515                   #else
  516                    error fail
  517                   #endif
  518                 ]])],
  519              [gl_cv_host_cpu_c_abi_32bit=no],
  520              [gl_cv_host_cpu_c_abi_32bit=yes])
  521            ;;
  522 
  523          hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
  524            # On hppa, the C compiler may be generating 32-bit code or 64-bit
  525            # code. In the latter case, it defines _LP64 and __LP64__.
  526            AC_COMPILE_IFELSE(
  527              [AC_LANG_SOURCE(
  528                 [[#ifdef __LP64__
  529                    int ok;
  530                   #else
  531                    error fail
  532                   #endif
  533                 ]])],
  534              [gl_cv_host_cpu_c_abi_32bit=no],
  535              [gl_cv_host_cpu_c_abi_32bit=yes])
  536            ;;
  537 
  538          ia64* )
  539            # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
  540            # 32-bit code. In the latter case, it defines _ILP32.
  541            AC_COMPILE_IFELSE(
  542              [AC_LANG_SOURCE(
  543                 [[#ifdef _ILP32
  544                    int ok;
  545                   #else
  546                    error fail
  547                   #endif
  548                 ]])],
  549              [gl_cv_host_cpu_c_abi_32bit=yes],
  550              [gl_cv_host_cpu_c_abi_32bit=no])
  551            ;;
  552 
  553          mips* )
  554            # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
  555            # at 32.
  556            AC_COMPILE_IFELSE(
  557              [AC_LANG_SOURCE(
  558                 [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
  559                    int ok;
  560                   #else
  561                    error fail
  562                   #endif
  563                 ]])],
  564              [gl_cv_host_cpu_c_abi_32bit=no],
  565              [gl_cv_host_cpu_c_abi_32bit=yes])
  566            ;;
  567 
  568          powerpc* )
  569            # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
  570            # No need to distinguish them here; the caller may distinguish
  571            # them based on the OS.
  572            # On powerpc64 systems, the C compiler may still be generating
  573            # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
  574            # be generating 64-bit code.
  575            AC_COMPILE_IFELSE(
  576              [AC_LANG_SOURCE(
  577                 [[#if defined __powerpc64__ || defined _ARCH_PPC64
  578                    int ok;
  579                   #else
  580                    error fail
  581                   #endif
  582                 ]])],
  583              [gl_cv_host_cpu_c_abi_32bit=no],
  584              [gl_cv_host_cpu_c_abi_32bit=yes])
  585            ;;
  586 
  587          rs6000 )
  588            gl_cv_host_cpu_c_abi_32bit=yes
  589            ;;
  590 
  591          riscv32 | riscv64 )
  592            # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
  593            # Size of 'long' and 'void *':
  594            AC_COMPILE_IFELSE(
  595              [AC_LANG_SOURCE(
  596                 [[#if defined __LP64__
  597                     int ok;
  598                   #else
  599                     error fail
  600                   #endif
  601                 ]])],
  602              [gl_cv_host_cpu_c_abi_32bit=no],
  603              [gl_cv_host_cpu_c_abi_32bit=yes])
  604            ;;
  605 
  606          s390* )
  607            # On s390x, the C compiler may be generating 64-bit (= s390x) code
  608            # or 31-bit (= s390) code.
  609            AC_COMPILE_IFELSE(
  610              [AC_LANG_SOURCE(
  611                 [[#if defined __LP64__ || defined __s390x__
  612                     int ok;
  613                   #else
  614                     error fail
  615                   #endif
  616                 ]])],
  617              [gl_cv_host_cpu_c_abi_32bit=no],
  618              [gl_cv_host_cpu_c_abi_32bit=yes])
  619            ;;
  620 
  621          sparc | sparc64 )
  622            # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
  623            # C compiler still generates 32-bit code.
  624            AC_COMPILE_IFELSE(
  625              [AC_LANG_SOURCE(
  626                 [[#if defined __sparcv9 || defined __arch64__
  627                    int ok;
  628                   #else
  629                    error fail
  630                   #endif
  631                 ]])],
  632              [gl_cv_host_cpu_c_abi_32bit=no],
  633              [gl_cv_host_cpu_c_abi_32bit=yes])
  634            ;;
  635 
  636          *)
  637            gl_cv_host_cpu_c_abi_32bit=no
  638            ;;
  639        esac
  640      fi
  641     ])
  642 
  643   HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
  644 ])

Cache object: 58485509f1b48caa7075ff019d9d3f06


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.