From 016f8b583ccb019421be82a917c1218a6875241e Mon Sep 17 00:00:00 2001 From: Xiaolin Zhao Date: Wed, 27 Jul 2022 15:47:31 +0800 Subject: [PATCH] LoongArch64: Add target architecture selection Co-developed-by: Qiqi Huang --- src/lj_arch.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/lj_arch.h b/src/lj_arch.h index 882c99cb..891d12c5 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h @@ -31,6 +31,8 @@ #define LUAJIT_ARCH_mips32 6 #define LUAJIT_ARCH_MIPS64 7 #define LUAJIT_ARCH_mips64 7 +#define LUAJIT_ARCH_LOONGARCH64 8 +#define LUAJIT_ARCH_loongarch64 8 /* Target OS. */ #define LUAJIT_OS_OTHER 0 @@ -65,6 +67,8 @@ #define LUAJIT_TARGET LUAJIT_ARCH_MIPS64 #elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS) #define LUAJIT_TARGET LUAJIT_ARCH_MIPS32 +#elif defined(__loongarch64) +#define LUAJIT_TARGET LUAJIT_ARCH_LOONGARCH64 #else #error "No support for this architecture (yet)" #endif @@ -432,6 +436,20 @@ #define LJ_ARCH_VERSION 10 #endif +#elif LUAJIT_TARGET == LUAJIT_ARCH_LOONGARCH64 +#define LJ_ARCH_NAME "loongarch64" +#define LJ_ARCH_BITS 64 +#define LJ_ARCH_ENDIAN LUAJIT_LE +#define LJ_TARGET_LOONGARCH64 1 +#define LJ_TARGET_GC64 1 +#define LJ_TARGET_EHRETREG 4 +#define LJ_TARGET_EHRAREG 1 +#define LJ_TARGET_JUMPRANGE 27 /* +-2^27 = +-128MB */ +#define LJ_TARGET_MASKSHIFT 1 +#define LJ_TARGET_MASKROT 1 +#define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ +#define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL + #else #error "No target architecture defined" #endif @@ -462,6 +480,16 @@ #error "Need at least GCC 4.8 or newer" #endif #endif +#elif LJ_TARGET_LOONGARCH64 +#if __clang__ +#if ((__clang_major__ < 8) || ((__clang_major__ == 8) && __clang_minor__ < 0)) && !defined(__NX_TOOLCHAIN_MAJOR__) +#error "Need at least Clang 8.0 or newer" +#endif +#else +#if (__GNUC__ < 8) || ((__GNUC__ == 8) && __GNUC_MINOR__ < 3) +#error "Need at least GCC 8.3 or newer" +#endif +#endif #elif !LJ_TARGET_PS3 #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) #error "Need at least GCC 4.3 or newer" @@ -509,6 +537,10 @@ /* MIPS32ON64 aka n32 ABI support might be desirable, but difficult. */ #error "Only n64 ABI supported for MIPS64" #endif +#elif LJ_TARGET_LOONGARCH64 +#if !(defined(_ABILP64) && _LOONGARCH_SIM == _ABILP64) +#error "Only LOONGARCH lp64d ABI is supported" +#endif #endif #endif