#ifndef MACHINE_H #define MACHINE_H #if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) #define ARCH_BIG_ENDIAN 1 #else #define ARCH_BIG_ENDIAN 0 #endif enum { ARCH_LP32, ARCH_X32, ARCH_LP64, ARCH_LLP64, }; #ifdef __LP64__ #define ARCH_M64_DEFAULT ARCH_LP64 #elif defined(__x86_64__) || defined(__x86_64) #define ARCH_M64_DEFAULT ARCH_X32 #else #define ARCH_M64_DEFAULT ARCH_LP32 #endif enum machine { MACH_ARM, MACH_ARM64, MACH_I386, MACH_X86_64, MACH_MIPS32, MACH_MIPS64, MACH_PPC32, MACH_PPC64, MACH_RISCV32, MACH_RISCV64, MACH_SPARC32, MACH_SPARC64, MACH_M68K, MACH_S390X, MACH_UNKNOWN }; #if defined(__aarch64__) #define MACH_NATIVE MACH_ARM64 #elif defined(__arm__) #define MACH_NATIVE MACH_ARM #elif defined(__x86_64__) || defined(__x86_64) #define MACH_NATIVE MACH_X86_64 #elif defined(__i386__) || defined(__i386) #define MACH_NATIVE MACH_I386 #elif defined(__mips64__) || (defined(__mips) && __mips == 64) #define MACH_NATIVE MACH_MIPS64 #elif defined(__mips__) || defined(__mips) #define MACH_NATIVE MACH_MIPS32 #elif defined(__powerpc64__) || defined(__ppc64__) #define MACH_NATIVE MACH_PPC64 #elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) #define MACH_NATIVE MACH_PPC32 #elif defined(__riscv) && (__riscv_xlen == 64) #define MACH_NATIVE MACH_RISCV64 #elif defined(__riscv) && (__riscv_xlen == 32) #define MACH_NATIVE MACH_RISCV32 #elif defined(__sparc_v9__) || defined(__sparcv9) #define MACH_NATIVE MACH_SPARC64 #elif defined(__sparc__) || defined(__sparc) #define MACH_NATIVE MACH_SPARC32 #elif defined(__m68k__) #define MACH_NATIVE MACH_M68K #elif defined(__s390x__) || defined(__zarch__) #define MACH_NATIVE MACH_S390X #else #define MACH_NATIVE MACH_UNKNOWN #endif #if defined(__CHAR_UNSIGNED__) #define UNSIGNED_CHAR 1 #else #define UNSIGNED_CHAR 0 #endif #endif