Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

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