|
@@ -0,0 +1,133 @@
|
|
|
+From 66a9a994c03d65fc37d701a60b26506bede49ae1 Mon Sep 17 00:00:00 2001
|
|
|
+From: Paul Cercueil <paul@crapouillou.net>
|
|
|
+Date: Sun, 2 Jun 2024 22:35:24 +0200
|
|
|
+Subject: [PATCH] mips: Fix build on MIPS64 with n32 ABI
|
|
|
+
|
|
|
+The build on MIPS64 with n32 ABI was broken for a few reasons.
|
|
|
+
|
|
|
+- The _movi_d_w() functions had a different prototype in jit_mips-fpu.c
|
|
|
+ than in lightning.c;
|
|
|
+- The movi_d_w() was still provided by lightning.c even though
|
|
|
+ jit_mips-fpu.c provides its own version;
|
|
|
+- The "ww" opcodes were allowed, which was probably not meant to happen.
|
|
|
+
|
|
|
+Fixes a build issue reported by Buildroot:
|
|
|
+http://autobuild.buildroot.net/results/27123bf0ddc84599bceb02ac987327817d498659/
|
|
|
+
|
|
|
+Signed-off-by: Paul Cercueil <paul@crapouillou.net>
|
|
|
+Upstream: http://git.savannah.gnu.org/cgit/lightning.git/commit/?id=778d326740f9893c398f959b419629935b613099
|
|
|
+---
|
|
|
+ lib/jit_mips-fpu.c | 4 ++--
|
|
|
+ lib/jit_mips.c | 3 +--
|
|
|
+ lib/lightning.c | 43 +++++++++++++++++++++----------------------
|
|
|
+ 3 files changed, 24 insertions(+), 26 deletions(-)
|
|
|
+
|
|
|
+diff --git a/lib/jit_mips-fpu.c b/lib/jit_mips-fpu.c
|
|
|
+index 61db30e..8ad97e9 100644
|
|
|
+--- a/lib/jit_mips-fpu.c
|
|
|
++++ b/lib/jit_mips-fpu.c
|
|
|
+@@ -349,7 +349,7 @@ static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
|
|
|
+ # define movi64(r0, i0) _movi64(_jit, r0, i0)
|
|
|
+ static void _movi64(jit_state_t*,jit_int32_t,jit_int64_t);
|
|
|
+ # define movi_d_w(r0, i0) _movi_d_w(_jit, r0, i0)
|
|
|
+-static void _movi_d_w(jit_state_t*,jit_int32_t,jit_int64_t);
|
|
|
++static void _movi_d_w(jit_state_t*,jit_int32_t,jit_float64_t);
|
|
|
+ # elif __WORDSIZE == 64
|
|
|
+ # define movi64(r0, i0) movi(r0, i0)
|
|
|
+ # endif
|
|
|
+@@ -1152,7 +1152,7 @@ _movi64(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0)
|
|
|
+ }
|
|
|
+
|
|
|
+ static void
|
|
|
+-_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0)
|
|
|
++_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
|
|
|
+ {
|
|
|
+ union {
|
|
|
+ jit_int64_t l;
|
|
|
+diff --git a/lib/jit_mips.c b/lib/jit_mips.c
|
|
|
+index 4fb6c34..6eb41a0 100644
|
|
|
+--- a/lib/jit_mips.c
|
|
|
++++ b/lib/jit_mips.c
|
|
|
+@@ -2184,8 +2184,7 @@ _emit_code(jit_state_t *_jit)
|
|
|
+ case jit_code_movi_w_d:
|
|
|
+ movi_w_d(rn(node->u.w), node->v.w);
|
|
|
+ break;
|
|
|
+-#endif
|
|
|
+-#if __WORDSIZE == 32
|
|
|
++#else
|
|
|
+ case jit_code_movr_ww_d:
|
|
|
+ movr_ww_d(rn(node->u.w), rn(node->v.w), rn(node->w.w));
|
|
|
+ break;
|
|
|
+diff --git a/lib/lightning.c b/lib/lightning.c
|
|
|
+index b40d35b..2c10928 100644
|
|
|
+--- a/lib/lightning.c
|
|
|
++++ b/lib/lightning.c
|
|
|
+@@ -4331,12 +4331,12 @@ static void _htoni_ul(jit_state_t*, jit_int32_t, jit_word_t);
|
|
|
+ #endif
|
|
|
+ # define movi_f_w(r0, i0) _movi_f_w(_jit, r0, i0)
|
|
|
+ static void _movi_f_w(jit_state_t*, jit_int32_t, jit_float32_t);
|
|
|
+-#if __WORDSIZE == 32 && !(defined(__mips__) && NEW_ABI)
|
|
|
+-# define movi_d_ww(r0, r1, i0) _movi_d_ww(_jit, r0, r1, i0)
|
|
|
+-static void _movi_d_ww(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
|
|
|
+-#else
|
|
|
++#if __WORDSIZE == 64
|
|
|
+ # define movi_d_w(r0, i0) _movi_d_w(_jit, r0, i0)
|
|
|
+ static void _movi_d_w(jit_state_t*, jit_int32_t, jit_float64_t);
|
|
|
++#elif !(defined(__mips__) && NEW_ABI)
|
|
|
++# define movi_d_ww(r0, r1, i0) _movi_d_ww(_jit, r0, r1, i0)
|
|
|
++static void _movi_d_ww(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
|
|
|
+ #endif
|
|
|
+ #define cloi(r0, i0) _cloi(_jit, r0, i0)
|
|
|
+ static void _cloi(jit_state_t*, jit_int32_t, jit_word_t);
|
|
|
+@@ -4803,7 +4803,23 @@ _movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0)
|
|
|
+ movi(r0, data.i);
|
|
|
+ }
|
|
|
+
|
|
|
+-#if __WORDSIZE == 32 && !(defined(__mips__) && NEW_ABI)
|
|
|
++#if __WORDSIZE == 64
|
|
|
++static void
|
|
|
++_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
|
|
|
++{
|
|
|
++ union {
|
|
|
++ jit_int64_t l;
|
|
|
++ jit_float64_t d;
|
|
|
++ } data;
|
|
|
++ data.d = i0;
|
|
|
++# if defined(__ia64__)
|
|
|
++ /* Should be used only in this case (with out0 == 120) */
|
|
|
++ if (r0 >= 120)
|
|
|
++ r0 = _jitc->rout + (r0 - 120);
|
|
|
++# endif
|
|
|
++ movi(r0, data.l);
|
|
|
++}
|
|
|
++#elif !(defined(__mips__) && NEW_ABI)
|
|
|
+ static void
|
|
|
+ _movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0)
|
|
|
+ {
|
|
|
+@@ -4821,23 +4837,6 @@ _movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0)
|
|
|
+ movi(r0, data.i[1]);
|
|
|
+ # endif
|
|
|
+ }
|
|
|
+-
|
|
|
+-#else
|
|
|
+-static void
|
|
|
+-_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0)
|
|
|
+-{
|
|
|
+- union {
|
|
|
+- jit_int64_t l;
|
|
|
+- jit_float64_t d;
|
|
|
+- } data;
|
|
|
+- data.d = i0;
|
|
|
+-# if defined(__ia64__)
|
|
|
+- /* Should be used only in this case (with out0 == 120) */
|
|
|
+- if (r0 >= 120)
|
|
|
+- r0 = _jitc->rout + (r0 - 120);
|
|
|
+-# endif
|
|
|
+- movi(r0, data.l);
|
|
|
+-}
|
|
|
+ #endif
|
|
|
+
|
|
|
+ void
|
|
|
+--
|
|
|
+2.43.0
|
|
|
+
|