diff options
Diffstat (limited to 'pcp/m4/host-cpu-c-abi.m4')
| -rw-r--r-- | pcp/m4/host-cpu-c-abi.m4 | 675 | 
1 files changed, 675 insertions, 0 deletions
| diff --git a/pcp/m4/host-cpu-c-abi.m4 b/pcp/m4/host-cpu-c-abi.m4 new file mode 100644 index 0000000..6db2aa2 --- /dev/null +++ b/pcp/m4/host-cpu-c-abi.m4 @@ -0,0 +1,675 @@ +# host-cpu-c-abi.m4 serial 13 +dnl Copyright (C) 2002-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible and Sam Steingold. + +dnl Sets the HOST_CPU variable to the canonical name of the CPU. +dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its +dnl C language ABI (application binary interface). +dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in +dnl config.h. +dnl +dnl This canonical name can be used to select a particular assembly language +dnl source file that will interoperate with C code on the given host. +dnl +dnl For example: +dnl * 'i386' and 'sparc' are different canonical names, because code for i386 +dnl   will not run on SPARC CPUs and vice versa. They have different +dnl   instruction sets. +dnl * 'sparc' and 'sparc64' are different canonical names, because code for +dnl   'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code +dnl   contains 32-bit instructions, whereas 'sparc64' code contains 64-bit +dnl   instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit +dnl   mode, but not both. +dnl * 'mips' and 'mipsn32' are different canonical names, because they use +dnl   different argument passing and return conventions for C functions, and +dnl   although the instruction set of 'mips' is a large subset of the +dnl   instruction set of 'mipsn32'. +dnl * 'mipsn32' and 'mips64' are different canonical names, because they use +dnl   different sizes for the C types like 'int' and 'void *', and although +dnl   the instruction sets of 'mipsn32' and 'mips64' are the same. +dnl * The same canonical name is used for different endiannesses. You can +dnl   determine the endianness through preprocessor symbols: +dnl   - 'arm': test __ARMEL__. +dnl   - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. +dnl   - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. +dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 +dnl   (Pentium), AMD K7, Pentium II, Pentium IV, etc., because +dnl   - Instructions that do not exist on all of these CPUs (cmpxchg, +dnl     MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your +dnl     assembly language source files use such instructions, you will +dnl     need to make the distinction. +dnl   - Speed of execution of the common instruction set is reasonable across +dnl     the entire family of CPUs. If you have assembly language source files +dnl     that are optimized for particular CPU types (like GNU gmp has), you +dnl     will need to make the distinction. +dnl   See <https://en.wikipedia.org/wiki/X86_instruction_listings>. +AC_DEFUN([gl_HOST_CPU_C_ABI], +[ +  AC_REQUIRE([AC_CANONICAL_HOST]) +  AC_REQUIRE([gl_C_ASM]) +  AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], +    [case "$host_cpu" in + +changequote(,)dnl +       i[34567]86 ) +changequote([,])dnl +         gl_cv_host_cpu_c_abi=i386 +         ;; + +       x86_64 ) +         # On x86_64 systems, the C compiler may be generating code in one of +         # these ABIs: +         # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. +         # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 +         #   with native Windows (mingw, MSVC). +         # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. +         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if (defined __x86_64__ || defined __amd64__ \ +                     || defined _M_X64 || defined _M_AMD64) +                 int ok; +                #else +                 error fail +                #endif +              ]])], +           [AC_COMPILE_IFELSE( +              [AC_LANG_SOURCE( +                 [[#if defined __ILP32__ || defined _ILP32 +                    int ok; +                   #else +                    error fail +                   #endif +                 ]])], +              [gl_cv_host_cpu_c_abi=x86_64-x32], +              [gl_cv_host_cpu_c_abi=x86_64])], +           [gl_cv_host_cpu_c_abi=i386]) +         ;; + +changequote(,)dnl +       alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) +changequote([,])dnl +         gl_cv_host_cpu_c_abi=alpha +         ;; + +       arm* | aarch64 ) +         # Assume arm with EABI. +         # On arm64 systems, the C compiler may be generating code in one of +         # these ABIs: +         # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. +         # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. +         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#ifdef __aarch64__ +                 int ok; +                #else +                 error fail +                #endif +              ]])], +           [AC_COMPILE_IFELSE( +              [AC_LANG_SOURCE( +                [[#if defined __ILP32__ || defined _ILP32 +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +              [gl_cv_host_cpu_c_abi=arm64-ilp32], +              [gl_cv_host_cpu_c_abi=arm64])], +           [# Don't distinguish little-endian and big-endian arm, since they +            # don't require different machine code for simple operations and +            # since the user can distinguish them through the preprocessor +            # defines __ARMEL__ vs. __ARMEB__. +            # But distinguish arm which passes floating-point arguments and +            # return values in integer registers (r0, r1, ...) - this is +            # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which +            # passes them in float registers (s0, s1, ...) and double registers +            # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer +            # sets the preprocessor defines __ARM_PCS (for the first case) and +            # __ARM_PCS_VFP (for the second case), but older GCC does not. +            echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c +            # Look for a reference to the register d0 in the .s file. +            AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 +            if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then +              gl_cv_host_cpu_c_abi=armhf +            else +              gl_cv_host_cpu_c_abi=arm +            fi +            rm -f conftest* +           ]) +         ;; + +       hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) +         # On hppa, the C compiler may be generating 32-bit code or 64-bit +         # code. In the latter case, it defines _LP64 and __LP64__. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#ifdef __LP64__ +                 int ok; +                #else +                 error fail +                #endif +              ]])], +           [gl_cv_host_cpu_c_abi=hppa64], +           [gl_cv_host_cpu_c_abi=hppa]) +         ;; + +       ia64* ) +         # On ia64 on HP-UX, the C compiler may be generating 64-bit code or +         # 32-bit code. In the latter case, it defines _ILP32. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#ifdef _ILP32 +                 int ok; +                #else +                 error fail +                #endif +              ]])], +           [gl_cv_host_cpu_c_abi=ia64-ilp32], +           [gl_cv_host_cpu_c_abi=ia64]) +         ;; + +       mips* ) +         # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this +         # at 32. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) +                 int ok; +                #else +                 error fail +                #endif +              ]])], +           [gl_cv_host_cpu_c_abi=mips64], +           [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but +            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32. +            # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but +            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32. +            AC_COMPILE_IFELSE( +              [AC_LANG_SOURCE( +                 [[#if (_MIPS_SIM == _ABIN32) +                    int ok; +                   #else +                    error fail +                   #endif +                 ]])], +              [gl_cv_host_cpu_c_abi=mipsn32], +              [gl_cv_host_cpu_c_abi=mips])]) +         ;; + +       powerpc* ) +         # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. +         # No need to distinguish them here; the caller may distinguish +         # them based on the OS. +         # On powerpc64 systems, the C compiler may still be generating +         # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may +         # be generating 64-bit code. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if defined __powerpc64__ || defined _ARCH_PPC64 +                 int ok; +                #else +                 error fail +                #endif +              ]])], +           [# On powerpc64, there are two ABIs on Linux: The AIX compatible +            # one and the ELFv2 one. The latter defines _CALL_ELF=2. +            AC_COMPILE_IFELSE( +              [AC_LANG_SOURCE( +                 [[#if defined _CALL_ELF && _CALL_ELF == 2 +                    int ok; +                   #else +                    error fail +                   #endif +                 ]])], +              [gl_cv_host_cpu_c_abi=powerpc64-elfv2], +              [gl_cv_host_cpu_c_abi=powerpc64]) +           ], +           [gl_cv_host_cpu_c_abi=powerpc]) +         ;; + +       rs6000 ) +         gl_cv_host_cpu_c_abi=powerpc +         ;; + +       riscv32 | riscv64 ) +         # There are 2 architectures (with variants): rv32* and rv64*. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if __riscv_xlen == 64 +                  int ok; +                #else +                  error fail +                #endif +              ]])], +           [cpu=riscv64], +           [cpu=riscv32]) +         # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. +         # Size of 'long' and 'void *': +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if defined __LP64__ +                  int ok; +                #else +                  error fail +                #endif +              ]])], +           [main_abi=lp64], +           [main_abi=ilp32]) +         # Float ABIs: +         # __riscv_float_abi_double: +         #   'float' and 'double' are passed in floating-point registers. +         # __riscv_float_abi_single: +         #   'float' are passed in floating-point registers. +         # __riscv_float_abi_soft: +         #   No values are passed in floating-point registers. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if defined __riscv_float_abi_double +                  int ok; +                #else +                  error fail +                #endif +              ]])], +           [float_abi=d], +           [AC_COMPILE_IFELSE( +              [AC_LANG_SOURCE( +                 [[#if defined __riscv_float_abi_single +                     int ok; +                   #else +                     error fail +                   #endif +                 ]])], +              [float_abi=f], +              [float_abi='']) +           ]) +         gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" +         ;; + +       s390* ) +         # On s390x, the C compiler may be generating 64-bit (= s390x) code +         # or 31-bit (= s390) code. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if defined __LP64__ || defined __s390x__ +                  int ok; +                #else +                  error fail +                #endif +              ]])], +           [gl_cv_host_cpu_c_abi=s390x], +           [gl_cv_host_cpu_c_abi=s390]) +         ;; + +       sparc | sparc64 ) +         # UltraSPARCs running Linux have `uname -m` = "sparc64", but the +         # C compiler still generates 32-bit code. +         AC_COMPILE_IFELSE( +           [AC_LANG_SOURCE( +              [[#if defined __sparcv9 || defined __arch64__ +                 int ok; +                #else +                 error fail +                #endif +              ]])], +           [gl_cv_host_cpu_c_abi=sparc64], +           [gl_cv_host_cpu_c_abi=sparc]) +         ;; + +       *) +         gl_cv_host_cpu_c_abi="$host_cpu" +         ;; +     esac +    ]) + +  dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. +  HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` +  HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" +  AC_SUBST([HOST_CPU]) +  AC_SUBST([HOST_CPU_C_ABI]) + +  # This was +  #   AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) +  #   AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) +  # earlier, but KAI C++ 3.2d doesn't like this. +  sed -e 's/-/_/g' >> confdefs.h <<EOF +#ifndef __${HOST_CPU}__ +#define __${HOST_CPU}__ 1 +#endif +#ifndef __${HOST_CPU_C_ABI}__ +#define __${HOST_CPU_C_ABI}__ 1 +#endif +EOF +  AH_TOP([/* CPU and C ABI indicator */ +#ifndef __i386__ +#undef __i386__ +#endif +#ifndef __x86_64_x32__ +#undef __x86_64_x32__ +#endif +#ifndef __x86_64__ +#undef __x86_64__ +#endif +#ifndef __alpha__ +#undef __alpha__ +#endif +#ifndef __arm__ +#undef __arm__ +#endif +#ifndef __armhf__ +#undef __armhf__ +#endif +#ifndef __arm64_ilp32__ +#undef __arm64_ilp32__ +#endif +#ifndef __arm64__ +#undef __arm64__ +#endif +#ifndef __hppa__ +#undef __hppa__ +#endif +#ifndef __hppa64__ +#undef __hppa64__ +#endif +#ifndef __ia64_ilp32__ +#undef __ia64_ilp32__ +#endif +#ifndef __ia64__ +#undef __ia64__ +#endif +#ifndef __m68k__ +#undef __m68k__ +#endif +#ifndef __mips__ +#undef __mips__ +#endif +#ifndef __mipsn32__ +#undef __mipsn32__ +#endif +#ifndef __mips64__ +#undef __mips64__ +#endif +#ifndef __powerpc__ +#undef __powerpc__ +#endif +#ifndef __powerpc64__ +#undef __powerpc64__ +#endif +#ifndef __powerpc64_elfv2__ +#undef __powerpc64_elfv2__ +#endif +#ifndef __riscv32__ +#undef __riscv32__ +#endif +#ifndef __riscv64__ +#undef __riscv64__ +#endif +#ifndef __riscv32_ilp32__ +#undef __riscv32_ilp32__ +#endif +#ifndef __riscv32_ilp32f__ +#undef __riscv32_ilp32f__ +#endif +#ifndef __riscv32_ilp32d__ +#undef __riscv32_ilp32d__ +#endif +#ifndef __riscv64_ilp32__ +#undef __riscv64_ilp32__ +#endif +#ifndef __riscv64_ilp32f__ +#undef __riscv64_ilp32f__ +#endif +#ifndef __riscv64_ilp32d__ +#undef __riscv64_ilp32d__ +#endif +#ifndef __riscv64_lp64__ +#undef __riscv64_lp64__ +#endif +#ifndef __riscv64_lp64f__ +#undef __riscv64_lp64f__ +#endif +#ifndef __riscv64_lp64d__ +#undef __riscv64_lp64d__ +#endif +#ifndef __s390__ +#undef __s390__ +#endif +#ifndef __s390x__ +#undef __s390x__ +#endif +#ifndef __sh__ +#undef __sh__ +#endif +#ifndef __sparc__ +#undef __sparc__ +#endif +#ifndef __sparc64__ +#undef __sparc64__ +#endif +]) + +]) + + +dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI +dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit +dnl one, or to 'unknown' if unknown. +dnl This is a simplified variant of gl_HOST_CPU_C_ABI. +AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], +[ +  AC_REQUIRE([AC_CANONICAL_HOST]) +  AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit], +    [if test -n "$gl_cv_host_cpu_c_abi"; then +       case "$gl_cv_host_cpu_c_abi" in +         i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) +           gl_cv_host_cpu_c_abi_32bit=yes ;; +         x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) +           gl_cv_host_cpu_c_abi_32bit=no ;; +         *) +           gl_cv_host_cpu_c_abi_32bit=unknown ;; +       esac +     else +       case "$host_cpu" in + +         # CPUs that only support a 32-bit ABI. +         arc \ +         | bfin \ +         | cris* \ +         | csky \ +         | epiphany \ +         | ft32 \ +         | h8300 \ +         | m68k \ +         | microblaze | microblazeel \ +         | nds32 | nds32le | nds32be \ +         | nios2 | nios2eb | nios2el \ +         | or1k* \ +         | or32 \ +         | sh | sh[1234] | sh[1234]e[lb] \ +         | tic6x \ +         | xtensa* ) +           gl_cv_host_cpu_c_abi_32bit=yes +           ;; + +         # CPUs that only support a 64-bit ABI. +changequote(,)dnl +         alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ +         | mmix ) +changequote([,])dnl +           gl_cv_host_cpu_c_abi_32bit=no +           ;; + +changequote(,)dnl +         i[34567]86 ) +changequote([,])dnl +           gl_cv_host_cpu_c_abi_32bit=yes +           ;; + +         x86_64 ) +           # On x86_64 systems, the C compiler may be generating code in one of +           # these ABIs: +           # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. +           # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 +           #   with native Windows (mingw, MSVC). +           # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. +           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#if (defined __x86_64__ || defined __amd64__ \ +                       || defined _M_X64 || defined _M_AMD64) \ +                      && !(defined __ILP32__ || defined _ILP32) +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         arm* | aarch64 ) +           # Assume arm with EABI. +           # On arm64 systems, the C compiler may be generating code in one of +           # these ABIs: +           # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. +           # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. +           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) +           # On hppa, the C compiler may be generating 32-bit code or 64-bit +           # code. In the latter case, it defines _LP64 and __LP64__. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#ifdef __LP64__ +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         ia64* ) +           # On ia64 on HP-UX, the C compiler may be generating 64-bit code or +           # 32-bit code. In the latter case, it defines _ILP32. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#ifdef _ILP32 +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=yes], +             [gl_cv_host_cpu_c_abi_32bit=no]) +           ;; + +         mips* ) +           # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this +           # at 32. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         powerpc* ) +           # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. +           # No need to distinguish them here; the caller may distinguish +           # them based on the OS. +           # On powerpc64 systems, the C compiler may still be generating +           # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may +           # be generating 64-bit code. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#if defined __powerpc64__ || defined _ARCH_PPC64 +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         rs6000 ) +           gl_cv_host_cpu_c_abi_32bit=yes +           ;; + +         riscv32 | riscv64 ) +           # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. +           # Size of 'long' and 'void *': +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#if defined __LP64__ +                    int ok; +                  #else +                    error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         s390* ) +           # On s390x, the C compiler may be generating 64-bit (= s390x) code +           # or 31-bit (= s390) code. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#if defined __LP64__ || defined __s390x__ +                    int ok; +                  #else +                    error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         sparc | sparc64 ) +           # UltraSPARCs running Linux have `uname -m` = "sparc64", but the +           # C compiler still generates 32-bit code. +           AC_COMPILE_IFELSE( +             [AC_LANG_SOURCE( +                [[#if defined __sparcv9 || defined __arch64__ +                   int ok; +                  #else +                   error fail +                  #endif +                ]])], +             [gl_cv_host_cpu_c_abi_32bit=no], +             [gl_cv_host_cpu_c_abi_32bit=yes]) +           ;; + +         *) +           gl_cv_host_cpu_c_abi_32bit=unknown +           ;; +       esac +     fi +    ]) + +  HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" +]) | 
