You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ravi/src/ravi_arch.h

178 lines
5.0 KiB

/*
** Target architecture selection.
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
*/
#ifndef RAVI_ARCH_H
#define RAVI_ARCH_H
#include "lua.h"
/* Target endianess. */
#define RAVI__ARCH_LE 0
#define RAVI__ARCH_BE 1
/* Target architectures. */
#define RAVI__ARCH_X86 1
#define RAVI__ARCH_x86 1
#define RAVI__ARCH_X64 2
#define RAVI__ARCH_x64 2
#define RAVI__ARCH_ARM 3
#define RAVI__ARCH_arm 3
#define RAVI__ARCH_ARM64 4
#define RAVI__ARCH_arm64 4
#define RAVI__ARCH_PPC 5
#define RAVI__ARCH_ppc 5
#define RAVI__ARCH_MIPS 6
#define RAVI__ARCH_mips 6
#define RAVI__ARCH_MIPS32 6
#define RAVI__ARCH_mips32 6
#define RAVI__ARCH_MIPS64 7
#define RAVI__ARCH_mips64 7
/* Target OS. */
#define RAVI__OS_OTHER 0
#define RAVI__OS_WINDOWS 1
#define RAVI__OS_LINUX 2
#define RAVI__OS_OSX 3
#define RAVI__OS_BSD 4
#define RAVI__OS_POSIX 5
/* Select native target if no target defined. */
#ifndef RAVI__TARGET
#if defined(__i386) || defined(__i386__) || defined(_M_IX86)
#define RAVI__TARGET RAVI__ARCH_X86
#elif defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
#define RAVI__TARGET RAVI__ARCH_X64
#elif defined(__arm__) || defined(__arm) || defined(__ARM__) || defined(__ARM)
#error "No support for this architecture (yet)"
#define RAVI__TARGET RAVI__ARCH_ARM
#elif defined(__aarch64__)
#define RAVI__TARGET RAVI__ARCH_ARM64
#elif defined(__ppc__) || defined(__ppc) || defined(__PPC__) || defined(__PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__POWERPC) || defined(_M_PPC)
#error "No support for this architecture (yet)"
#define RAVI__TARGET RAVI__ARCH_PPC
#elif defined(__mips64__) || defined(__mips64) || defined(__MIPS64__) || defined(__MIPS64)
#error "No support for this architecture (yet)"
#define RAVI__TARGET RAVI__ARCH_MIPS64
#elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS)
#error "No support for this architecture (yet)"
#define RAVI__TARGET RAVI__ARCH_MIPS32
#else
#error "No support for this architecture (yet)"
#endif
#endif
/* Select native OS if no target OS defined. */
#ifndef RAVI__OS
#if defined(_WIN32) && !defined(_XBOX_VER)
#define RAVI__OS RAVI__OS_WINDOWS
#elif defined(__linux__)
#define RAVI__OS RAVI__OS_LINUX
#elif defined(__MACH__) && defined(__APPLE__)
#define RAVI__OS RAVI__OS_OSX
#elif (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
defined(__NetBSD__) || defined(__OpenBSD__) || \
defined(__DragonFly__)) && !defined(__ORBIS__)
#define RAVI__OS RAVI__OS_BSD
#elif (defined(__sun__) && defined(__svr4__)) || defined(__HAIKU__)
#define RAVI__OS RAVI__OS_POSIX
#elif defined(__CYGWIN__)
#define RAVI_TARGET_CYGWIN 1
#define RAVI__OS RAVI__OS_POSIX
#else
#define RAVI__OS RAVI__OS_OTHER
#endif
#endif
/* Set target OS properties. */
#if RAVI__OS == RAVI__OS_WINDOWS
#define RAVI_OS_NAME "Windows"
#elif RAVI__OS == RAVI__OS_LINUX
#define RAVI_OS_NAME "Linux"
#elif RAVI__OS == RAVI__OS_OSX
#define RAVI_OS_NAME "OSX"
#elif RAVI__OS == RAVI__OS_BSD
#define RAVI_OS_NAME "BSD"
#elif RAVI__OS == RAVI__OS_POSIX
#define RAVI_OS_NAME "POSIX"
#else
#define RAVI_OS_NAME "Other"
#endif
#define RAVI_TARGET_WINDOWS (RAVI__OS == RAVI__OS_WINDOWS)
#define RAVI_TARGET_LINUX (RAVI__OS == RAVI__OS_LINUX)
#define RAVI_TARGET_OSX (RAVI__OS == RAVI__OS_OSX)
#define RAVI_TARGET_IOS (RAVI_TARGET_OSX && (RAVI__TARGET == RAVI__ARCH_ARM || RAVI__TARGET == RAVI__ARCH_ARM64))
#define RAVI_TARGET_POSIX (RAVI__OS > RAVI__OS_WINDOWS)
#define RAVI_TARGET_DLOPEN RAVI_TARGET_POSIX
/* Set target architecture properties. */
#if RAVI__TARGET == RAVI__ARCH_X86
#define RAVI_ARCH_NAME "x86"
#define RAVI_ARCH_BITS 32
#define RAVI_ARCH_ENDIAN RAVI__ARCH_LE
#if RAVI_TARGET_WINDOWS || RAVI_TARGET_CYGWIN
#define RAVI_ABI_WIN 1
#else
#define RAVI_ABI_WIN 0
#endif
#define RAVI_TARGET_X86 1
#define RAVI_TARGET_X86ORX64 1
#elif RAVI__TARGET == RAVI__ARCH_X64
#define RAVI_ARCH_NAME "x64"
#define RAVI_ARCH_BITS 64
#define RAVI_ARCH_ENDIAN RAVI__ARCH_LE
#if RAVI_TARGET_WINDOWS || RAVI_TARGET_CYGWIN
#define RAVI_ABI_WIN 1
#else
#define RAVI_ABI_WIN 0
#endif
#define RAVI_TARGET_X64 1
#define RAVI_TARGET_X86ORX64 1
#elif RAVI__TARGET == RAVI__ARCH_ARM64
#define RAVI_ARCH_BITS 64
#if defined(__AARCH64EB__)
#define RAVI_ARCH_NAME "arm64be"
#define RAVI_ARCH_ENDIAN RAVI__ARCH_BE
#else
#define RAVI_ARCH_NAME "arm64"
#define RAVI_ARCH_ENDIAN RAVI__ARCH_LE
#endif
#define RAVI_TARGET_ARM64 1
#else
#error "No target architecture defined"
#endif
#ifndef RAVI_PAGESIZE
#define RAVI_PAGESIZE 4096
#endif
#if RAVI_ARCH_ENDIAN == RAVI__ARCH_BE
#define RAVI_LE 0
#define RAVI_BE 1
#define RAVI_ENDIAN_SELECT(le, be) be
#define RAVI_ENDIAN_LOHI(lo, hi) hi lo
#else
#define RAVI_LE 1
#define RAVI_BE 0
#define RAVI_ENDIAN_SELECT(le, be) le
#define RAVI_ENDIAN_LOHI(lo, hi) lo hi
#endif
#if RAVI_ARCH_BITS == 32
#define RAVI_32 1
#define RAVI_64 0
#else
#define RAVI_32 0
#define RAVI_64 1
#endif
#endif