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

