#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 bitness { 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_S390, MACH_S390X, MACH_ALPHA, MACH_BFIN, MACH_H8300, MACH_M68K, MACH_MICROBLAZE, MACH_NDS32, MACH_NIOS2, MACH_OPENRISC, MACH_SH, MACH_XTENSA, MACH_UNKNOWN }; #if defined(__aarch64__) #define MACH_NATIVE MACH_ARM64 #elif defined(__alpha__) || defined(__alpha) #define MACH_NATIVE MACH_ALPHA #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 #elif defined(__s390__) #define MACH_NATIVE MACH_S390 #else #define MACH_NATIVE MACH_UNKNOWN #endif enum fp_abi { FP_ABI_HARD, FP_ABI_SOFT, FP_ABI_HYBRID, }; #if defined(__ARM_PCS_VFP) #define FP_ABI_NATIVE FP_ABI_HARD #elif defined(__ARM_PCS) && !defined(__SOFTFP__) #define FP_ABI_NATIVE FP_ABI_HYBRID #else #define FP_ABI_NATIVE FP_ABI_SOFT #endif enum { OS_UNKNOWN, OS_NONE, OS_UNIX, OS_CYGWIN, OS_DARWIN, OS_FREEBSD, OS_LINUX, OS_NETBSD, OS_OPENBSD, OS_SUNOS, }; #if defined(__CYGWIN__) #define OS_NATIVE OS_CYGWIN #elif defined(__APPLE__) #define OS_NATIVE OS_DARWIN #elif defined(__FreeBSD__) #define OS_NATIVE OS_FREEBSD #elif defined(__linux__) || defined(__linux) #define OS_NATIVE OS_LINUX #elif defined(__NetBSD__) #define OS_NATIVE OS_NETBSD #elif defined(__OpenBSD__) #define OS_NATIVE OS_OPENBSD #elif defined(__sun__) || defined(__sun) #define OS_NATIVE OS_SUNOS #elif defined(__unix__) || defined(__unix) #define OS_NATIVE OS_UNIX #else #define OS_NATIVE OS_UNKNOWN #endif #endif