From e84c2a9e9ae5ed667e554471015a5df3bfd8634a Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 29 Jul 2012 12:22:18 +0200 Subject: [PATCH] Handle cross-compiles with FPU/no-FPU or hard-fp/soft-fp ABI mismatch. --- src/Makefile | 8 +++++++- src/lj_arch.h | 14 +++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Makefile b/src/Makefile index 531f8bab..748a4ed7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -379,9 +379,15 @@ ifneq (,$(findstring LJ_DUALNUM 1,$(TARGET_TESTARCH))) endif ifneq (,$(findstring LJ_ARCH_HASFPU 1,$(TARGET_TESTARCH))) DASM_AFLAGS+= -D FPU + TARGET_ARCH+= -DLJ_ARCH_HASFPU=1 +else + TARGET_ARCH+= -DLJ_ARCH_HASFPU=0 endif ifeq (,$(findstring LJ_ABI_SOFTFP 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D HF + DASM_AFLAGS+= -D HFABI + TARGET_ARCH+= -DLJ_ABI_SOFTFP=0 +else + TARGET_ARCH+= -DLJ_ABI_SOFTFP=1 endif DASM_AFLAGS+= -D VER=$(subst LJ_ARCH_VERSION_,,$(filter LJ_ARCH_VERSION_%,$(subst LJ_ARCH_VERSION ,LJ_ARCH_VERSION_,$(TARGET_TESTARCH)))) ifeq (Windows,$(TARGET_SYS)) diff --git a/src/lj_arch.h b/src/lj_arch.h index a3d51542..8850f8a9 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h @@ -121,7 +121,6 @@ #define LJ_ARCH_NAME "x86" #define LJ_ARCH_BITS 32 #define LJ_ARCH_ENDIAN LUAJIT_LE -#define LJ_ARCH_HASFPU 1 #if LJ_TARGET_WINDOWS || __CYGWIN__ #define LJ_ABI_WIN 1 #else @@ -139,7 +138,6 @@ #define LJ_ARCH_NAME "x64" #define LJ_ARCH_BITS 64 #define LJ_ARCH_ENDIAN LUAJIT_LE -#define LJ_ARCH_HASFPU 1 #define LJ_ABI_WIN LJ_TARGET_WINDOWS #define LJ_TARGET_X64 1 #define LJ_TARGET_X86ORX64 1 @@ -154,8 +152,12 @@ #define LJ_ARCH_NAME "arm" #define LJ_ARCH_BITS 32 #define LJ_ARCH_ENDIAN LUAJIT_LE +#ifndef LJ_ARCH_HASFPU #define LJ_ARCH_HASFPU 0 +#endif +#ifndef LJ_ABI_SOFTFP #define LJ_ABI_SOFTFP 1 +#endif #define LJ_ABI_EABI 1 #define LJ_TARGET_ARM 1 #define LJ_TARGET_EHRETREG 0 @@ -184,7 +186,6 @@ #define LJ_ARCH_BITS 32 #endif #define LJ_ARCH_ENDIAN LUAJIT_BE -#define LJ_ARCH_HASFPU 1 #define LJ_TARGET_PPC 1 #define LJ_TARGET_EHRETREG 3 #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ @@ -228,8 +229,9 @@ #define LJ_ARCH_NAME "ppcspe" #define LJ_ARCH_BITS 32 #define LJ_ARCH_ENDIAN LUAJIT_BE -#define LJ_ARCH_HASFPU 1 +#ifndef LJ_ABI_SOFTFP #define LJ_ABI_SOFTFP 1 +#endif #define LJ_ABI_EABI 1 #define LJ_TARGET_PPCSPE 1 #define LJ_TARGET_EHRETREG 3 @@ -251,7 +253,6 @@ #define LJ_ARCH_ENDIAN LUAJIT_BE #endif #define LJ_ARCH_BITS 32 -#define LJ_ARCH_HASFPU 1 #define LJ_TARGET_MIPS 1 #define LJ_TARGET_EHRETREG 4 #define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ @@ -358,6 +359,9 @@ #define LJ_HASFFI 1 #endif +#ifndef LJ_ARCH_HASFPU +#define LJ_ARCH_HASFPU 1 +#endif #define LJ_SOFTFP (!LJ_ARCH_HASFPU) #if LJ_ARCH_ENDIAN == LUAJIT_BE