|
From 2c8b9d5807a515a0ff859899065f512beabcbaed Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C5=A0imon=20Bo=C5=99ek?= <simon.borek@nic.cz>
|
|
Date: Sat, 16 Jul 2022 18:39:55 +0200
|
|
Subject: [PATCH] PPC/e500 with SPE enabled: use soft float instead of failing
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
This allows building LuaJit for systems with Power ISA SPE
|
|
extension[^1] support by using soft float on LuaJit side.
|
|
|
|
While e500 CPU cores support SPE instruction set extension
|
|
allowing them to perform floating point arithmetic natively,
|
|
this isn't required. They can function with software floating
|
|
point to integer arithmetic translation as well,
|
|
just like FPU-less PowerPC CPUs without SPE support.
|
|
|
|
Therefore I see no need to prevent them from running LuaJit
|
|
explicitly.
|
|
|
|
[^1]: https://www.nxp.com/docs/en/reference-manual/SPEPEM.pdf
|
|
|
|
Signed-off-by: Pali Rohár <pali@kernel.org>
|
|
Signed-off-by: Šimon Bořek <simon.borek@nic.cz>
|
|
---
|
|
src/lj_arch.h | 7 ++-----
|
|
1 file changed, 2 insertions(+), 5 deletions(-)
|
|
|
|
--- a/src/lj_arch.h
|
|
+++ b/src/lj_arch.h
|
|
@@ -256,7 +256,7 @@
|
|
#define LJ_ARCH_NAME "ppc"
|
|
|
|
#if !defined(LJ_ARCH_HASFPU)
|
|
-#if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE)
|
|
+#if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) || defined(__NO_FPRS__)
|
|
#define LJ_ARCH_HASFPU 0
|
|
#else
|
|
#define LJ_ARCH_HASFPU 1
|
|
@@ -264,7 +264,7 @@
|
|
#endif
|
|
|
|
#if !defined(LJ_ABI_SOFTFP)
|
|
-#if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE)
|
|
+#if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) || defined(__NO_FPRS__)
|
|
#define LJ_ABI_SOFTFP 1
|
|
#else
|
|
#define LJ_ABI_SOFTFP 0
|
|
@@ -442,9 +442,6 @@
|
|
#if LJ_ARCH_PPC64
|
|
#error "No support for PowerPC 64 bit mode (yet)"
|
|
#endif
|
|
-#if defined(__NO_FPRS__) && !defined(_SOFT_FLOAT)
|
|
-#error "No support for PPC/e500 anymore (use LuaJIT 2.0)"
|
|
-#endif
|
|
#elif LJ_TARGET_MIPS32
|
|
#if !((defined(_MIPS_SIM_ABI32) && _MIPS_SIM == _MIPS_SIM_ABI32) || (defined(_ABIO32) && _MIPS_SIM == _ABIO32))
|
|
#error "Only o32 ABI supported for MIPS32"
|