blob: d05b5045bfa366da2445469f5f9f1c9ed26243cc [file] [log] [blame]
#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