machine.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #ifndef MACHINE_H
  2. #define MACHINE_H
  3. #if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
  4. #define ARCH_BIG_ENDIAN 1
  5. #else
  6. #define ARCH_BIG_ENDIAN 0
  7. #endif
  8. enum bitness {
  9. ARCH_LP32,
  10. ARCH_X32,
  11. ARCH_LP64,
  12. ARCH_LLP64,
  13. };
  14. #ifdef __LP64__
  15. #define ARCH_M64_DEFAULT ARCH_LP64
  16. #elif defined(__x86_64__) || defined(__x86_64)
  17. #define ARCH_M64_DEFAULT ARCH_X32
  18. #else
  19. #define ARCH_M64_DEFAULT ARCH_LP32
  20. #endif
  21. enum machine {
  22. MACH_ARM, MACH_ARM64,
  23. MACH_I386, MACH_X86_64,
  24. MACH_MIPS32, MACH_MIPS64,
  25. MACH_PPC32, MACH_PPC64,
  26. MACH_RISCV32, MACH_RISCV64,
  27. MACH_SPARC32, MACH_SPARC64,
  28. MACH_S390, MACH_S390X,
  29. MACH_ALPHA,
  30. MACH_BFIN,
  31. MACH_H8300,
  32. MACH_M68K,
  33. MACH_MICROBLAZE,
  34. MACH_NDS32,
  35. MACH_NIOS2,
  36. MACH_OPENRISC,
  37. MACH_SH,
  38. MACH_XTENSA,
  39. MACH_UNKNOWN
  40. };
  41. #if defined(__aarch64__)
  42. #define MACH_NATIVE MACH_ARM64
  43. #elif defined(__alpha__) || defined(__alpha)
  44. #define MACH_NATIVE MACH_ALPHA
  45. #elif defined(__arm__)
  46. #define MACH_NATIVE MACH_ARM
  47. #elif defined(__x86_64__) || defined(__x86_64)
  48. #define MACH_NATIVE MACH_X86_64
  49. #elif defined(__i386__) || defined(__i386)
  50. #define MACH_NATIVE MACH_I386
  51. #elif defined(__mips64__) || (defined(__mips) && __mips == 64)
  52. #define MACH_NATIVE MACH_MIPS64
  53. #elif defined(__mips__) || defined(__mips)
  54. #define MACH_NATIVE MACH_MIPS32
  55. #elif defined(__powerpc64__) || defined(__ppc64__)
  56. #define MACH_NATIVE MACH_PPC64
  57. #elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__)
  58. #define MACH_NATIVE MACH_PPC32
  59. #elif defined(__riscv) && (__riscv_xlen == 64)
  60. #define MACH_NATIVE MACH_RISCV64
  61. #elif defined(__riscv) && (__riscv_xlen == 32)
  62. #define MACH_NATIVE MACH_RISCV32
  63. #elif defined(__sparc_v9__) || defined(__sparcv9)
  64. #define MACH_NATIVE MACH_SPARC64
  65. #elif defined(__sparc__) || defined(__sparc)
  66. #define MACH_NATIVE MACH_SPARC32
  67. #elif defined(__m68k__)
  68. #define MACH_NATIVE MACH_M68K
  69. #elif defined(__s390x__) || defined(__zarch__)
  70. #define MACH_NATIVE MACH_S390X
  71. #elif defined(__s390__)
  72. #define MACH_NATIVE MACH_S390
  73. #else
  74. #define MACH_NATIVE MACH_UNKNOWN
  75. #endif
  76. enum fp_abi {
  77. FP_ABI_HARD,
  78. FP_ABI_SOFT,
  79. FP_ABI_HYBRID,
  80. };
  81. #if defined(__ARM_PCS_VFP)
  82. #define FP_ABI_NATIVE FP_ABI_HARD
  83. #elif defined(__ARM_PCS) && !defined(__SOFTFP__)
  84. #define FP_ABI_NATIVE FP_ABI_HYBRID
  85. #else
  86. #define FP_ABI_NATIVE FP_ABI_SOFT
  87. #endif
  88. enum {
  89. OS_UNKNOWN,
  90. OS_NONE,
  91. OS_UNIX,
  92. OS_CYGWIN,
  93. OS_DARWIN,
  94. OS_FREEBSD,
  95. OS_LINUX,
  96. OS_NETBSD,
  97. OS_OPENBSD,
  98. OS_SUNOS,
  99. };
  100. #if defined(__CYGWIN__)
  101. #define OS_NATIVE OS_CYGWIN
  102. #elif defined(__APPLE__)
  103. #define OS_NATIVE OS_DARWIN
  104. #elif defined(__FreeBSD__)
  105. #define OS_NATIVE OS_FREEBSD
  106. #elif defined(__linux__) || defined(__linux)
  107. #define OS_NATIVE OS_LINUX
  108. #elif defined(__NetBSD__)
  109. #define OS_NATIVE OS_NETBSD
  110. #elif defined(__OpenBSD__)
  111. #define OS_NATIVE OS_OPENBSD
  112. #elif defined(__sun__) || defined(__sun)
  113. #define OS_NATIVE OS_SUNOS
  114. #elif defined(__unix__) || defined(__unix)
  115. #define OS_NATIVE OS_UNIX
  116. #else
  117. #define OS_NATIVE OS_UNKNOWN
  118. #endif
  119. #endif