132 lines
3.6 KiB
C
132 lines
3.6 KiB
C
#ifndef HU_ARCH_H
|
|
#define HU_ARCH_H
|
|
|
|
#define HU_ARCH_ARM_P 0
|
|
#define HU_ARCH_AVR_P 0
|
|
#define HU_ARCH_EMSCRIPTEN_P 0 // emscripten not in wasm mode
|
|
#define HU_ARCH_MIPS_P 0
|
|
#define HU_ARCH_MSP430_P 0
|
|
#define HU_ARCH_PPC_P 0
|
|
#define HU_ARCH_RISCV_P 0
|
|
#define HU_ARCH_WASM_P 0
|
|
#define HU_ARCH_X86_P 0
|
|
|
|
#if defined(__aarch64__) || defined(_M_ARM64)
|
|
# undef HU_ARCH_ARM_P
|
|
# define HU_ARCH_ARM_P 1
|
|
# ifndef HU_INTERNAL_BITS
|
|
# define HU_INTERNAL_BITS 64
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__arm__) || defined(__thumb__) || defined(_M_ARM) || \
|
|
defined(_M_ARMT)
|
|
# undef HU_ARCH_ARM_P
|
|
# define HU_ARCH_ARM_P 1
|
|
# ifndef HU_INTERNAL_BITS
|
|
# define HU_INTERNAL_BITS 32
|
|
# endif
|
|
#endif
|
|
|
|
#if HU_ARCH_ARM_P
|
|
# define HU_ARCH_ARM 1
|
|
#endif
|
|
|
|
#if defined(__AVR) || defined(__AVR__) || defined(__AVR_ARCH__)
|
|
# undef HU_ARCH_AVR_P
|
|
# define HU_ARCH_AVR_P 1
|
|
# define HU_ARCH_AVR 1
|
|
#endif
|
|
|
|
#if defined(__wasm32) || defined(__wasm32__)
|
|
# undef HU_ARCH_WASM_P
|
|
# define HU_ARCH_WASM_P 1
|
|
# define HU_ARCH_WASM 1
|
|
# ifndef HU_INTERNAL_BITS
|
|
# define HU_INTERNAL_BITS 32
|
|
# endif
|
|
#elif defined(__wasm) || defined(__wasm__)
|
|
# undef HU_ARCH_WASM_P
|
|
# define HU_ARCH_WASM_P 1
|
|
# define HU_ARCH_WASM 1
|
|
#elif defined(__EMSCRIPTEN__)
|
|
# undef HU_ARCH_EMSCRIPTEN_P
|
|
# define HU_ARCH_EMSCRIPTEN_P 1
|
|
# define HU_ARCH_EMSCRIPTEN 1
|
|
#endif
|
|
|
|
#if defined(__mips__) || defined(__mips) || defined(__MIPS__) || \
|
|
defined(__mips64)
|
|
# undef HU_ARCH_MIPS_P
|
|
# define HU_ARCH_MIPS_P 1
|
|
# define HU_ARCH_MIPS 1
|
|
# ifndef HU_INTERNAL_BITS
|
|
# if (defined(__mips) && __mips == 64) || defined(__mips64)
|
|
# define HU_INTERNAL_BITS 64
|
|
# endif
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || \
|
|
defined(__ppc) || defined(__ppc__) || defined(__ppc64__) || \
|
|
defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \
|
|
defined(__PPC__) || defined(__PPC64__)
|
|
# undef HU_ARCH_PPC_P
|
|
# define HU_ARCH_PPC_P 1
|
|
# define HU_ARCH_PPC 1
|
|
# ifndef HU_INTERNAL_BITS
|
|
# if defined(__powerpc64__) || defined(__ppc64__) || \
|
|
defined(__PPC64__) || defined(_ARCH_PPC64)
|
|
# define HU_INTERNAL_BITS 64
|
|
# elif defined(__GNUC__)
|
|
# define HU_INTERNAL_BITS 32
|
|
# endif
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__MSP430__) || defined(__MSP430X__) || defined(__ICCMSP430__)
|
|
# undef HU_ARCH_MSP430_P
|
|
# define HU_ARCH_MSP430_P 1
|
|
# define HU_ARCH_MSP430 1
|
|
# ifndef HU_INTERNAL_BITS
|
|
# define HU_INTERNAL_BITS 16
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__riscv) || defined(__riscv_xlen)
|
|
# undef HU_ARCH_RISCV_P
|
|
# define HU_ARCH_RISCV_P 1
|
|
# define HU_ARCH_RISCV 1
|
|
# if !defined(HU_INTERNAL_BITS) && defined(__riscv_xlen)
|
|
# define HU_INTERNAL_BITS __riscv_xlen
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__x86_64__) || defined(__amd64__) || defined(_M_AMD64) || \
|
|
defined(_M_X64)
|
|
# undef HU_ARCH_X86_P
|
|
# define HU_ARCH_X86_P 1
|
|
# define HU_INTERNAL_BITS 64
|
|
#endif
|
|
|
|
#if defined(__i386__) || defined(__i386) || defined(_M_IX86) || \
|
|
defined(__X86__) || defined(_X86_) || defined(__I86__)
|
|
# undef HU_ARCH_X86_P
|
|
# define HU_ARCH_X86_P 1
|
|
# ifndef HU_INTERNAL_BITS
|
|
# define HU_INTERNAL_BITS 32
|
|
# endif
|
|
#endif
|
|
|
|
#if HU_ARCH_X86_P
|
|
# define HU_ARCH_X86 1
|
|
#endif
|
|
|
|
#if (HU_ARCH_ARM_P + HU_ARCH_AVR_P + HU_ARCH_EMSCRIPTEN_P + HU_ARCH_MIPS_P + \
|
|
HU_ARCH_MSP430_P + HU_ARCH_PPC_P + HU_ARCH_RISCV_P + HU_ARCH_WASM_P + \
|
|
HU_ARCH_X86_P) != 1
|
|
# error "BUG: HU_ARCH_*_P not properly defined"
|
|
#endif
|
|
|
|
#endif
|