289 constexpr
bool isARM() const noexcept {
310 constexpr
bool isX86() const noexcept {
323 #if defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) || \
326 #elif defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i586__) || \
327 defined(__i686__) || defined(_M_IX86)
331 #elif defined(__aarch64__) || defined(_M_ARM64)
333 #elif defined(__arm__) || defined(_M_ARM)
334 #if defined(__ARM_ARCH_8__) || defined(__ARM_ARCH_8A__)
336 #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || \
337 defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
339 #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \
340 defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)
347 #elif defined(__mips__) || defined(__mips) || defined(__MIPS__)
348 #if defined(__mips64__) || defined(__mips64) || (_MIPS_SIM == _ABI64)
355 #elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__ppc) || \
357 #if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || defined(_ARCH_PPC64)
364 #elif defined(__riscv)
365 #if defined(__riscv_xlen) && (__riscv_xlen == 64)
367 #elif defined(__riscv_xlen) && (__riscv_xlen == 32)
374 #elif defined(__sparc__) || defined(__sparc)
375 #if defined(__sparc64__) || defined(__sparcv9)
414 return sizeof(
void*) * 8;
470 return "ARM v8 (32-bit)";
472 return "ARM v8 (64-bit)";
857 #if defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) || \
859 #define TRLC_ARCH_X86_64_PP 1
860 #define TRLC_ARCH_64BIT_PP 1
861 #define TRLC_ARCH_X86_64 1
862 #define TRLC_ARCH_64BIT 1
864 #define TRLC_ARCH_X86_64_PP 0
865 #define TRLC_ARCH_X86_64 0
868 #if defined(__aarch64__) || defined(_M_ARM64)
869 #define TRLC_ARCH_ARM64_PP 1
870 #define TRLC_ARCH_64BIT_PP 1
871 #define TRLC_ARCH_ARM64 1
872 #define TRLC_ARCH_64BIT 1
874 #define TRLC_ARCH_ARM64_PP 0
875 #define TRLC_ARCH_ARM64 0
878 #if defined(__i386__) || defined(__i386) || defined(_M_IX86)
879 #define TRLC_ARCH_X86_PP 1
880 #define TRLC_ARCH_32BIT_PP 1
881 #define TRLC_ARCH_X86 1
882 #define TRLC_ARCH_32BIT 1
884 #define TRLC_ARCH_X86_PP 0
885 #define TRLC_ARCH_X86 0
888 #if defined(__arm__) || defined(_M_ARM)
889 #define TRLC_ARCH_ARM_PP 1
890 #define TRLC_ARCH_32BIT_PP 1
891 #define TRLC_ARCH_ARM 1
892 #define TRLC_ARCH_32BIT 1
894 #define TRLC_ARCH_ARM_PP 0
895 #define TRLC_ARCH_ARM 0
899 #if defined(__mips__) || defined(__mips) || defined(__MIPS__)
900 #define TRLC_ARCH_MIPS 1
902 #define TRLC_ARCH_MIPS 0
905 #if defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__ppc) || \
907 #define TRLC_ARCH_POWERPC 1
909 #define TRLC_ARCH_POWERPC 0
913 #define TRLC_ARCH_RISCV 1
915 #define TRLC_ARCH_RISCV 0
918 #if defined(__sparc__) || defined(__sparc)
919 #define TRLC_ARCH_SPARC 1
921 #define TRLC_ARCH_SPARC 0
925 #ifndef TRLC_ARCH_64BIT_PP
926 #if defined(__LP64__) || defined(_WIN64) || \
927 (defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8)
928 #define TRLC_ARCH_64BIT_PP 1
929 #define TRLC_ARCH_32BIT_PP 0
930 #define TRLC_ARCH_64BIT 1
931 #define TRLC_ARCH_32BIT 0
933 #define TRLC_ARCH_64BIT_PP 0
934 #define TRLC_ARCH_32BIT_PP 1
935 #define TRLC_ARCH_64BIT 0
936 #define TRLC_ARCH_32BIT 1
940 #ifndef TRLC_ARCH_32BIT_PP
941 #define TRLC_ARCH_32BIT_PP (!TRLC_ARCH_64BIT_PP)
942 #define TRLC_ARCH_32BIT (!TRLC_ARCH_64BIT)
946 #if defined(__BYTE_ORDER__)
947 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
948 #define TRLC_LITTLE_ENDIAN 1
949 #define TRLC_BIG_ENDIAN 0
950 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
951 #define TRLC_LITTLE_ENDIAN 0
952 #define TRLC_BIG_ENDIAN 1
954 #define TRLC_LITTLE_ENDIAN 0
955 #define TRLC_BIG_ENDIAN 0
957 #elif defined(__LITTLE_ENDIAN__) || defined(__ARMEL__)
958 #define TRLC_LITTLE_ENDIAN 1
959 #define TRLC_BIG_ENDIAN 0
960 #elif defined(__BIG_ENDIAN__) || defined(__ARMEB__)
961 #define TRLC_LITTLE_ENDIAN 0
962 #define TRLC_BIG_ENDIAN 1
965 #if TRLC_ARCH_X86 || TRLC_ARCH_X86_64 || TRLC_ARCH_ARM || TRLC_ARCH_ARM64 || TRLC_ARCH_RISCV
966 #define TRLC_LITTLE_ENDIAN 1
967 #define TRLC_BIG_ENDIAN 0
968 #elif TRLC_ARCH_SPARC || TRLC_ARCH_MIPS || TRLC_ARCH_POWERPC
969 #define TRLC_LITTLE_ENDIAN 0
970 #define TRLC_BIG_ENDIAN 1
972 #define TRLC_LITTLE_ENDIAN 1
973 #define TRLC_BIG_ENDIAN 0
978 #if TRLC_ARCH_X86 || TRLC_ARCH_X86_64 || TRLC_ARCH_ARM || TRLC_ARCH_ARM64
979 #define TRLC_HAS_SIMD 1
981 #define TRLC_HAS_SIMD 0
984 #if TRLC_ARCH_X86_64 || TRLC_ARCH_ARM64 || TRLC_ARCH_RISCV
985 #define TRLC_HAS_VECTOR 1
987 #define TRLC_HAS_VECTOR 0
Byte order detection and utilities for cross-platform development.