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