123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 |
- /*============================================================================
- Kitware Information Macro Library
- Copyright 2010-2018 Kitware, Inc.
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Kitware, Inc. nor the names of its contributors
- may be used to endorse or promote products derived from this
- software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- ============================================================================*/
- /*
- This header defines macros with information about the C ABI.
- Only information that can be determined using the preprocessor at
- compilation time is available. No try-compile results may be added
- here. Instead we memorize results on platforms of interest.
- An includer may optionally define the following macros to suppress errors:
- KWIML_ABI_NO_VERIFY = skip verification declarations
- KWIML_ABI_NO_ERROR_CHAR_SIGN = signedness of 'char' may be unknown
- KWIML_ABI_NO_ERROR_LONG_LONG = existence of 'long long' may be unknown
- KWIML_ABI_NO_ERROR_ENDIAN = byte order of CPU may be unknown
- An includer may test the following macros after inclusion:
- KWIML_ABI_VERSION = interface version number # of this header
- KWIML_ABI_SIZEOF_DATA_PTR = sizeof(void*)
- KWIML_ABI_SIZEOF_CODE_PTR = sizeof(void(*)(void))
- KWIML_ABI_SIZEOF_FLOAT = sizeof(float)
- KWIML_ABI_SIZEOF_DOUBLE = sizeof(double)
- KWIML_ABI_SIZEOF_CHAR = sizeof(char)
- KWIML_ABI_SIZEOF_SHORT = sizeof(short)
- KWIML_ABI_SIZEOF_INT = sizeof(int)
- KWIML_ABI_SIZEOF_LONG = sizeof(long)
- KWIML_ABI_SIZEOF_LONG_LONG = sizeof(long long) or 0 if not a type
- Undefined if existence is unknown and error suppression macro
- KWIML_ABI_NO_ERROR_LONG_LONG was defined.
- KWIML_ABI_SIZEOF___INT64 = 8 if '__int64' exists or 0 if not
- Undefined if existence is unknown.
- KWIML_ABI___INT64_IS_LONG = 1 if '__int64' is 'long' (same type)
- Undefined otherwise.
- KWIML_ABI___INT64_IS_LONG_LONG = 1 if '__int64' is 'long long' (same type)
- Undefined otherwise.
- KWIML_ABI___INT64_IS_UNIQUE = 1 if '__int64' is a distinct type
- Undefined otherwise.
- KWIML_ABI_CHAR_IS_UNSIGNED = 1 if 'char' is unsigned, else undefined
- KWIML_ABI_CHAR_IS_SIGNED = 1 if 'char' is signed, else undefined
- One of these is defined unless signedness of 'char' is unknown and
- error suppression macro KWIML_ABI_NO_ERROR_CHAR_SIGN was defined.
- KWIML_ABI_ENDIAN_ID_BIG = id for big-endian (always defined)
- KWIML_ABI_ENDIAN_ID_LITTLE = id for little-endian (always defined)
- KWIML_ABI_ENDIAN_ID = id of byte order of target CPU
- Defined to KWIML_ABI_ENDIAN_ID_BIG or KWIML_ABI_ENDIAN_ID_LITTLE
- unless byte order is unknown and error suppression macro
- KWIML_ABI_NO_ERROR_ENDIAN was defined.
- We verify most results using dummy "extern" declarations that are
- invalid if the macros are wrong. Verification is disabled if
- suppression macro KWIML_ABI_NO_VERIFY was defined.
- */
- #define KWIML_ABI_private_VERSION 1
- /* Guard definition of this version. */
- #ifndef KWIML_ABI_detail_DEFINED_VERSION_1
- # define KWIML_ABI_detail_DEFINED_VERSION_1 1
- # define KWIML_ABI_private_DO_DEFINE
- #endif
- /* Guard verification of this version. */
- #if !defined(KWIML_ABI_NO_VERIFY)
- # ifndef KWIML_ABI_detail_VERIFIED_VERSION_1
- # define KWIML_ABI_detail_VERIFIED_VERSION_1
- # define KWIML_ABI_private_DO_VERIFY
- # endif
- #endif
- #ifdef KWIML_ABI_private_DO_DEFINE
- #undef KWIML_ABI_private_DO_DEFINE
- /* Define version as most recent of those included. */
- #if !defined(KWIML_ABI_VERSION) || KWIML_ABI_VERSION < KWIML_ABI_private_VERSION
- # undef KWIML_ABI_VERSION
- # define KWIML_ABI_VERSION 1
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_DATA_PTR)
- # if defined(__SIZEOF_POINTER__)
- # define KWIML_ABI_SIZEOF_DATA_PTR __SIZEOF_POINTER__
- # elif defined(_SIZE_PTR)
- # define KWIML_ABI_SIZEOF_DATA_PTR (_SIZE_PTR >> 3)
- # elif defined(_LP64) || defined(__LP64__)
- # define KWIML_ABI_SIZEOF_DATA_PTR 8
- # elif defined(_ILP32)
- # define KWIML_ABI_SIZEOF_DATA_PTR 4
- # elif defined(__64BIT__) /* IBM XL */
- # define KWIML_ABI_SIZEOF_DATA_PTR 8
- # elif defined(_M_X64)
- # define KWIML_ABI_SIZEOF_DATA_PTR 8
- # elif defined(__ia64)
- # define KWIML_ABI_SIZEOF_DATA_PTR 8
- # elif defined(__sparcv9)
- # define KWIML_ABI_SIZEOF_DATA_PTR 8
- # elif defined(__x86_64) || defined(__x86_64__)
- # define KWIML_ABI_SIZEOF_DATA_PTR 8
- # elif defined(__amd64) || defined(__amd64__)
- # define KWIML_ABI_SIZEOF_DATA_PTR 8
- # elif defined(__i386) || defined(__i386__)
- # define KWIML_ABI_SIZEOF_DATA_PTR 4
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_DATA_PTR)
- # define KWIML_ABI_SIZEOF_DATA_PTR 4
- #endif
- #if !defined(KWIML_ABI_SIZEOF_CODE_PTR)
- # define KWIML_ABI_SIZEOF_CODE_PTR KWIML_ABI_SIZEOF_DATA_PTR
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_CHAR)
- # define KWIML_ABI_SIZEOF_CHAR 1
- #endif
- #if !defined(KWIML_ABI_CHAR_IS_UNSIGNED) && !defined(KWIML_ABI_CHAR_IS_SIGNED)
- # if defined(__CHAR_UNSIGNED__) /* GNU, some IBM XL, others? */
- # define KWIML_ABI_CHAR_IS_UNSIGNED 1
- # elif defined(_CHAR_UNSIGNED) /* Intel, IBM XL, MSVC, Borland, others? */
- # define KWIML_ABI_CHAR_IS_UNSIGNED 1
- # elif defined(_CHAR_SIGNED) /* IBM XL, others? */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(__CHAR_SIGNED__) /* IBM XL, Watcom, others? */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(__SIGNED_CHARS__) /* EDG, Intel, SGI MIPSpro */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(_CHAR_IS_SIGNED) /* Some SunPro, others? */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(_CHAR_IS_UNSIGNED) /* SunPro, others? */
- # define KWIML_ABI_CHAR_IS_UNSIGNED 1
- # elif defined(__GNUC__) /* GNU default */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* SunPro default */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(__HP_cc) || defined(__HP_aCC) /* HP default (unless +uc) */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(_SGI_COMPILER_VERSION) /* SGI MIPSpro default */
- # define KWIML_ABI_CHAR_IS_UNSIGNED 1
- # elif defined(__PGIC__) /* PGI default */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(_MSC_VER) /* MSVC default */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(__WATCOMC__) /* Watcom default */
- # define KWIML_ABI_CHAR_IS_UNSIGNED 1
- # elif defined(__BORLANDC__) /* Borland default */
- # define KWIML_ABI_CHAR_IS_SIGNED 1
- # elif defined(__hpux) /* Old HP: no __HP_cc/__HP_aCC/__GNUC__ above */
- # define KWIML_ABI_CHAR_IS_SIGNED 1 /* (unless +uc) */
- # endif
- #endif
- #if !defined(KWIML_ABI_CHAR_IS_UNSIGNED) && !defined(KWIML_ABI_CHAR_IS_SIGNED) \
- && !defined(KWIML_ABI_NO_ERROR_CHAR_SIGN)
- # error "Signedness of 'char' unknown."
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_SHORT)
- # if defined(__SIZEOF_SHORT__)
- # define KWIML_ABI_SIZEOF_SHORT __SIZEOF_SHORT__
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_SHORT)
- # define KWIML_ABI_SIZEOF_SHORT 2
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_INT)
- # if defined(__SIZEOF_INT__)
- # define KWIML_ABI_SIZEOF_INT __SIZEOF_INT__
- # elif defined(_SIZE_INT)
- # define KWIML_ABI_SIZEOF_INT (_SIZE_INT >> 3)
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_INT)
- # define KWIML_ABI_SIZEOF_INT 4
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_LONG)
- # if defined(__SIZEOF_LONG__)
- # define KWIML_ABI_SIZEOF_LONG __SIZEOF_LONG__
- # elif defined(_SIZE_LONG)
- # define KWIML_ABI_SIZEOF_LONG (_SIZE_LONG >> 3)
- # elif defined(__LONG_MAX__)
- # if __LONG_MAX__ == 0x7fffffff
- # define KWIML_ABI_SIZEOF_LONG 4
- # elif __LONG_MAX__>>32 == 0x7fffffff
- # define KWIML_ABI_SIZEOF_LONG 8
- # endif
- # elif defined(_MSC_VER) /* MSVC and Intel on Windows */
- # define KWIML_ABI_SIZEOF_LONG 4
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_LONG)
- # define KWIML_ABI_SIZEOF_LONG KWIML_ABI_SIZEOF_DATA_PTR
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_LONG_LONG)
- # if defined(__SIZEOF_LONG_LONG__)
- # define KWIML_ABI_SIZEOF_LONG_LONG __SIZEOF_LONG_LONG__
- # elif defined(__LONG_LONG_MAX__)
- # if __LONG_LONG_MAX__ == 0x7fffffff
- # define KWIML_ABI_SIZEOF_LONG_LONG 4
- # elif __LONG_LONG_MAX__>>32 == 0x7fffffff
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # endif
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_LONG_LONG)
- # if defined(_LONGLONG) /* SGI, some GNU, perhaps others. */ \
- && !defined(_MSC_VER)
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(_LONG_LONG) /* IBM XL, perhaps others. */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__NO_LONG_LONG) /* EDG */
- # define KWIML_ABI_SIZEOF_LONG_LONG 0
- # elif defined(__cplusplus) && __cplusplus > 199711L /* C++0x */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* SunPro */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__HP_cc) || defined(__HP_aCC) /* HP */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__PGIC__) /* PGI */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__WATCOMC__) /* Watcom */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__INTEL_COMPILER) /* Intel */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__BORLANDC__) /* Borland */
- # if __BORLANDC__ >= 0x0560
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # else
- # define KWIML_ABI_SIZEOF_LONG_LONG 0
- # endif
- # elif defined(_MSC_VER) /* Microsoft */
- # if _MSC_VER >= 1310
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # else
- # define KWIML_ABI_SIZEOF_LONG_LONG 0
- # endif
- # elif defined(__GNUC__) /* GNU */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # elif defined(__hpux) /* Old HP: no __HP_cc/__HP_aCC/__GNUC__ above */
- # define KWIML_ABI_SIZEOF_LONG_LONG 8
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_LONG_LONG) && !defined(KWIML_ABI_NO_ERROR_LONG_LONG)
- # error "Existence of 'long long' unknown."
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF___INT64)
- # if defined(__INTEL_COMPILER)
- # define KWIML_ABI_SIZEOF___INT64 8
- # elif defined(_MSC_VER)
- # define KWIML_ABI_SIZEOF___INT64 8
- # elif defined(__BORLANDC__)
- # define KWIML_ABI_SIZEOF___INT64 8
- # else
- # define KWIML_ABI_SIZEOF___INT64 0
- # endif
- #endif
- #if defined(KWIML_ABI_SIZEOF___INT64) && KWIML_ABI_SIZEOF___INT64 > 0
- # if KWIML_ABI_SIZEOF_LONG == 8
- # define KWIML_ABI___INT64_IS_LONG 1
- # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
- # define KWIML_ABI___INT64_IS_LONG_LONG 1
- # else
- # define KWIML_ABI___INT64_IS_UNIQUE 1
- # endif
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_FLOAT)
- # if defined(__SIZEOF_FLOAT__)
- # define KWIML_ABI_SIZEOF_FLOAT __SIZEOF_FLOAT__
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_FLOAT)
- # define KWIML_ABI_SIZEOF_FLOAT 4
- #endif
- /*--------------------------------------------------------------------------*/
- #if !defined(KWIML_ABI_SIZEOF_DOUBLE)
- # if defined(__SIZEOF_DOUBLE__)
- # define KWIML_ABI_SIZEOF_DOUBLE __SIZEOF_DOUBLE__
- # endif
- #endif
- #if !defined(KWIML_ABI_SIZEOF_DOUBLE)
- # define KWIML_ABI_SIZEOF_DOUBLE 8
- #endif
- /*--------------------------------------------------------------------------*/
- /* Identify possible endian cases. The macro KWIML_ABI_ENDIAN_ID will be
- defined to one of these, or undefined if unknown. */
- #if !defined(KWIML_ABI_ENDIAN_ID_BIG)
- # define KWIML_ABI_ENDIAN_ID_BIG 4321
- #endif
- #if !defined(KWIML_ABI_ENDIAN_ID_LITTLE)
- # define KWIML_ABI_ENDIAN_ID_LITTLE 1234
- #endif
- #if KWIML_ABI_ENDIAN_ID_BIG == KWIML_ABI_ENDIAN_ID_LITTLE
- # error "KWIML_ABI_ENDIAN_ID_BIG == KWIML_ABI_ENDIAN_ID_LITTLE"
- #endif
- #if defined(KWIML_ABI_ENDIAN_ID) /* Skip #elif cases if already defined. */
- /* Use dedicated symbols if the compiler defines them. Do this first
- because some architectures allow runtime byte order selection by
- the operating system (values for such architectures below are
- guesses for compilers that do not define a dedicated symbol).
- Ensure that only one is defined in case the platform or a header
- defines both as possible values for some third symbol. */
- #elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- #elif defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- #elif defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* Alpha */
- #elif defined(__alpha) || defined(__alpha__) || defined(_M_ALPHA)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* Arm */
- #elif defined(__arm__)
- # if !defined(__ARMEB__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- # else
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- # endif
- /* Intel x86 */
- #elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- #elif defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- #elif defined(__MWERKS__) && defined(__INTEL__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* Intel x86-64 */
- #elif defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- #elif defined(__amd64) || defined(__amd64__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* Intel Architecture-64 (Itanium) */
- #elif defined(__ia64) || defined(__ia64__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- #elif defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* PowerPC */
- #elif defined(__powerpc) || defined(__powerpc__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- #elif defined(__ppc) || defined(__ppc__) || defined(__POWERPC__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* SPARC */
- #elif defined(__sparc) || defined(__sparc__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* HP/PA RISC */
- #elif defined(__hppa) || defined(__hppa__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* Motorola 68k */
- #elif defined(__m68k__) || defined(M68000)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* MIPSel (MIPS little endian) */
- #elif defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* MIPSeb (MIPS big endian) */
- #elif defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* MIPS (fallback, big endian) */
- #elif defined(__mips) || defined(__mips__) || defined(__MIPS__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* NIOS2 */
- #elif defined(__NIOS2__) || defined(__NIOS2) || defined(__nios2__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* OpenRISC 1000 */
- #elif defined(__or1k__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* RS/6000 */
- #elif defined(__THW_RS600) || defined(_IBMR2) || defined(_POWER)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- #elif defined(_ARCH_PWR) || defined(_ARCH_PWR2)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* System/370 */
- #elif defined(__370__) || defined(__THW_370__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* System/390 */
- #elif defined(__s390__) || defined(__s390x__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* z/Architecture */
- #elif defined(__SYSC_ZARCH__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* VAX */
- #elif defined(__vax__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- /* Aarch64 */
- #elif defined(__aarch64__)
- # if !defined(__AARCH64EB__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- # else
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- # endif
- /* Xtensa */
- #elif defined(__XTENSA_EB__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_BIG
- #elif defined(__XTENSA_EL__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* RISC-V */
- #elif defined(__riscv) || defined(__riscv__)
- # define KWIML_ABI_ENDIAN_ID KWIML_ABI_ENDIAN_ID_LITTLE
- /* Unknown CPU */
- #elif !defined(KWIML_ABI_NO_ERROR_ENDIAN)
- # error "Byte order of target CPU unknown."
- #endif
- #endif /* KWIML_ABI_private_DO_DEFINE */
- /*--------------------------------------------------------------------------*/
- #ifdef KWIML_ABI_private_DO_VERIFY
- #undef KWIML_ABI_private_DO_VERIFY
- #if defined(_MSC_VER)
- # pragma warning (push)
- # pragma warning (disable:4309) /* static_cast trunction of constant value */
- # pragma warning (disable:4310) /* cast truncates constant value */
- #endif
- #if defined(__cplusplus) && !defined(__BORLANDC__)
- #define KWIML_ABI_private_STATIC_CAST(t,v) static_cast<t>(v)
- #else
- #define KWIML_ABI_private_STATIC_CAST(t,v) (t)(v)
- #endif
- #define KWIML_ABI_private_VERIFY(n, x, y) KWIML_ABI_private_VERIFY_0(KWIML_ABI_private_VERSION, n, x, y)
- #define KWIML_ABI_private_VERIFY_0(V, n, x, y) KWIML_ABI_private_VERIFY_1(V, n, x, y)
- #define KWIML_ABI_private_VERIFY_1(V, n, x, y) extern int (*n##_v##V)[x]; extern int (*n##_v##V)[y]
- #define KWIML_ABI_private_VERIFY_SAME_IMPL(n, x, y) KWIML_ABI_private_VERIFY_SAME_IMPL_0(KWIML_ABI_private_VERSION, n, x, y)
- #define KWIML_ABI_private_VERIFY_SAME_IMPL_0(V, n, x, y) KWIML_ABI_private_VERIFY_SAME_IMPL_1(V, n, x, y)
- #define KWIML_ABI_private_VERIFY_SAME_IMPL_1(V, n, x, y) extern int (*n##_v##V)(x*); extern int (*n##_v##V)(y*)
- #define KWIML_ABI_private_VERIFY_DIFF_IMPL(n, x, y) KWIML_ABI_private_VERIFY_DIFF_IMPL_0(KWIML_ABI_private_VERSION, n, x, y)
- #define KWIML_ABI_private_VERIFY_DIFF_IMPL_0(V, n, x, y) KWIML_ABI_private_VERIFY_DIFF_IMPL_1(V, n, x, y)
- #if defined(__cplusplus)
- # define KWIML_ABI_private_VERIFY_DIFF_IMPL_1(V, n, x, y) extern int* n##_v##V(x*); extern char* n##_v##V(y*)
- #else
- # define KWIML_ABI_private_VERIFY_DIFF_IMPL_1(V, n, x, y) extern int* n##_v##V(x*) /* TODO: possible? */
- #endif
- #define KWIML_ABI_private_VERIFY_BOOL(m, b) KWIML_ABI_private_VERIFY(KWIML_ABI_detail_VERIFY_##m, 2, (b)?2:3)
- #define KWIML_ABI_private_VERIFY_SIZE(m, t) KWIML_ABI_private_VERIFY(KWIML_ABI_detail_VERIFY_##m, m, sizeof(t))
- #define KWIML_ABI_private_VERIFY_SAME(m, x, y) KWIML_ABI_private_VERIFY_SAME_IMPL(KWIML_ABI_detail_VERIFY_##m, x, y)
- #define KWIML_ABI_private_VERIFY_DIFF(m, x, y) KWIML_ABI_private_VERIFY_DIFF_IMPL(KWIML_ABI_detail_VERIFY_##m, x, y)
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_DATA_PTR, int*);
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_CODE_PTR, int(*)(int));
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_CHAR, char);
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_SHORT, short);
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_INT, int);
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_LONG, long);
- #if defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG > 0
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_LONG_LONG, long long);
- #endif
- #if defined(KWIML_ABI_SIZEOF___INT64) && KWIML_ABI_SIZEOF___INT64 > 0
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF___INT64, __int64);
- #endif
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_FLOAT, float);
- KWIML_ABI_private_VERIFY_SIZE(KWIML_ABI_SIZEOF_DOUBLE, double);
- #if defined(KWIML_ABI___INT64_IS_LONG)
- KWIML_ABI_private_VERIFY_SAME(KWIML_ABI___INT64_IS_LONG, __int64, long);
- #elif defined(KWIML_ABI___INT64_IS_LONG_LONG)
- KWIML_ABI_private_VERIFY_SAME(KWIML_ABI___INT64_IS_LONG_LONG, __int64, long long);
- #elif defined(KWIML_ABI_SIZEOF___INT64) && KWIML_ABI_SIZEOF___INT64 > 0
- KWIML_ABI_private_VERIFY_DIFF(KWIML_ABI___INT64_NOT_LONG, __int64, long);
- # if defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG > 0
- KWIML_ABI_private_VERIFY_DIFF(KWIML_ABI___INT64_NOT_LONG_LONG, __int64, long long);
- # endif
- #endif
- #if defined(KWIML_ABI_CHAR_IS_UNSIGNED)
- KWIML_ABI_private_VERIFY_BOOL(KWIML_ABI_CHAR_IS_UNSIGNED,
- KWIML_ABI_private_STATIC_CAST(char, 0x80) > 0);
- #elif defined(KWIML_ABI_CHAR_IS_SIGNED)
- KWIML_ABI_private_VERIFY_BOOL(KWIML_ABI_CHAR_IS_SIGNED,
- KWIML_ABI_private_STATIC_CAST(char, 0x80) < 0);
- #endif
- #undef KWIML_ABI_private_VERIFY_DIFF
- #undef KWIML_ABI_private_VERIFY_SAME
- #undef KWIML_ABI_private_VERIFY_SIZE
- #undef KWIML_ABI_private_VERIFY_BOOL
- #undef KWIML_ABI_private_VERIFY_DIFF_IMPL_1
- #undef KWIML_ABI_private_VERIFY_DIFF_IMPL_0
- #undef KWIML_ABI_private_VERIFY_DIFF_IMPL
- #undef KWIML_ABI_private_VERIFY_SAME_IMPL_1
- #undef KWIML_ABI_private_VERIFY_SAME_IMPL_0
- #undef KWIML_ABI_private_VERIFY_SAME_IMPL
- #undef KWIML_ABI_private_VERIFY_1
- #undef KWIML_ABI_private_VERIFY_0
- #undef KWIML_ABI_private_VERIFY
- #undef KWIML_ABI_private_STATIC_CAST
- #if defined(_MSC_VER)
- # pragma warning (pop)
- #endif
- #endif /* KWIML_ABI_private_DO_VERIFY */
- #undef KWIML_ABI_private_VERSION
|