[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Lightning] [PATCH 3/3] Allow *_ui macros on 32-bit CPUs
From: |
Paul Cercueil |
Subject: |
[Lightning] [PATCH 3/3] Allow *_ui macros on 32-bit CPUs |
Date: |
Tue, 17 Sep 2019 14:30:17 +0200 |
If you want for instance to retrieve a unsigned 32-bit value returned by
a function that was just called, you previously needed to write the
following:
#if __WORDSIZE == 64
jit_retval_ui(JIT_R0);
#else
jit_retval(JIT_R0);
#endif
Make it simpler by adding the *_ui macros on 32-bit CPUs, where they
simply point to their corresponding *_i variant.
For jit_extr_ui and jit_extr_i macros, on 32-bit CPUs they now simply
resolve to jit_movr().
Signed-off-by: Paul Cercueil <address@hidden>
---
include/lightning.h.in | 12 ++++++++----
lib/jit_arm.c | 2 ++
lib/jit_hppa.c | 2 ++
lib/jit_mips.c | 2 --
lib/jit_ppc.c | 2 --
lib/jit_s390-cpu.c | 5 ++---
lib/jit_s390.c | 2 --
lib/jit_sparc.c | 2 --
lib/jit_x86-cpu.c | 5 ++++-
lib/jit_x86.c | 2 --
lib/lightning.c | 5 +++++
11 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/include/lightning.h.in b/include/lightning.h.in
index 9652843..b6bf4e6 100644
--- a/include/lightning.h.in
+++ b/include/lightning.h.in
@@ -208,6 +208,7 @@ typedef enum {
#define jit_getarg_i(u,v) _jit_getarg_i(_jit,u,v)
#if __WORDSIZE == 32
# define jit_getarg(u,v) jit_getarg_i(u,v)
+# define jit_getarg_ui(u,v) jit_getarg_i(u,v)
#else
# define jit_getarg(u,v) jit_getarg_l(u,v)
# define jit_getarg_ui(u,v) _jit_getarg_ui(_jit,u,v)
@@ -340,10 +341,8 @@ typedef enum {
#define jit_extr_s(u,v) jit_new_node_ww(jit_code_extr_s,u,v)
#define jit_extr_us(u,v) jit_new_node_ww(jit_code_extr_us,u,v)
jit_code_extr_s, jit_code_extr_us,
-#if __WORDSIZE == 64
# define jit_extr_i(u,v) jit_new_node_ww(jit_code_extr_i,u,v)
# define jit_extr_ui(u,v) jit_new_node_ww(jit_code_extr_ui,u,v)
-#endif
jit_code_extr_i, jit_code_extr_ui,
#define jit_htonr_us(u,v) jit_new_node_ww(jit_code_htonr_us,u,v)
@@ -355,8 +354,8 @@ typedef enum {
# define jit_htonr(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v)
# define jit_ntohr(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v)
#else
-#define jit_htonr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
-#define jit_ntohr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
+# define jit_htonr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
+# define jit_ntohr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
# define jit_htonr(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
# define jit_ntohr(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v)
#endif
@@ -379,7 +378,9 @@ typedef enum {
jit_code_ldr_i, jit_code_ldi_i,
#if __WORDSIZE == 32
# define jit_ldr(u,v) jit_ldr_i(u,v)
+# define jit_ldr_ui(u,v) jit_ldr_i(u,v)
# define jit_ldi(u,v) jit_ldi_i(u,v)
+# define jit_ldi_ui(u,v) jit_ldi_i(u,v)
#else
# define jit_ldr(u,v) jit_ldr_l(u,v)
# define jit_ldi(u,v) jit_ldi_l(u,v)
@@ -408,7 +409,9 @@ typedef enum {
jit_code_ldxr_i, jit_code_ldxi_i,
#if __WORDSIZE == 32
# define jit_ldxr(u,v,w) jit_ldxr_i(u,v,w)
+# define jit_ldxr_ui(u,v,w) jit_ldxr_i(u,v,w)
# define jit_ldxi(u,v,w) jit_ldxi_i(u,v,w)
+# define jit_ldxi_ui(u,v,w) jit_ldxi_i(u,v,w)
#else
# define jit_ldxr_ui(u,v,w) jit_new_node_www(jit_code_ldxr_ui,u,v,w)
# define jit_ldxi_ui(u,v,w) jit_new_node_www(jit_code_ldxi_ui,u,v,w)
@@ -552,6 +555,7 @@ typedef enum {
#define jit_retval_i(u) _jit_retval_i(_jit,u)
#if __WORDSIZE == 32
# define jit_retval(u) jit_retval_i(u)
+# define jit_retval_ui(u) jit_retval_i(u)
#else
# define jit_retval(u) jit_retval_l(u)
# define jit_retval_ui(u) _jit_retval_ui(_jit,u)
diff --git a/lib/jit_arm.c b/lib/jit_arm.c
index 83669f1..20d03ef 100644
--- a/lib/jit_arm.c
+++ b/lib/jit_arm.c
@@ -1504,6 +1504,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
+ case_rr(ext, _i);
+ case_rr(ext, _ui);
case_rr(mov,);
case jit_code_movi:
if (node->flag & jit_flag_node) {
diff --git a/lib/jit_hppa.c b/lib/jit_hppa.c
index 45004d1..e4749eb 100644
--- a/lib/jit_hppa.c
+++ b/lib/jit_hppa.c
@@ -1050,6 +1050,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
+ case_rr(ext, _i);
+ case_rr(ext, _ui);
case_rr(hton, _us);
case_rr(hton, _ui);
case_rr(bswap, _us);
diff --git a/lib/jit_mips.c b/lib/jit_mips.c
index 856a6b8..56cb7c0 100644
--- a/lib/jit_mips.c
+++ b/lib/jit_mips.c
@@ -1429,10 +1429,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
-#if __WORDSIZE == 64
case_rr(ext, _i);
case_rr(ext, _ui);
-#endif
case_rr(mov,);
case jit_code_movi:
if (node->flag & jit_flag_node) {
diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c
index 66ad1fb..f0bc5a7 100644
--- a/lib/jit_ppc.c
+++ b/lib/jit_ppc.c
@@ -1347,10 +1347,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
-# if __WORDSIZE == 64
case_rr(ext, _i);
case_rr(ext, _ui);
-# endif
case_rr(hton, _us);
case_rr(hton, _ui);
# if __WORDSIZE == 64
diff --git a/lib/jit_s390-cpu.c b/lib/jit_s390-cpu.c
index f8342e2..03e9f70 100644
--- a/lib/jit_s390-cpu.c
+++ b/lib/jit_s390-cpu.c
@@ -1083,9 +1083,8 @@ static void
_xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
# define extr_uc(r0,r1) LLGCR(r0,r1)
# define extr_s(r0,r1) LGHR(r0,r1)
# define extr_us(r0,r1) LLGHR(r0,r1)
-# if __WORDSIZE == 64
-# define extr_i(r0,r1) LGFR(r0,r1)
-# define extr_ui(r0,r1) LLGFR(r0,r1)
+# define extr_i(r0,r1) LGFR(r0,r1)
+# define extr_ui(r0,r1) LLGFR(r0,r1)
# endif
# define ldr_c(r0,r1) LGB(r0,0,0,r1)
# define ldi_c(r0,i0) _ldi_c(_jit,r0,i0)
diff --git a/lib/jit_s390.c b/lib/jit_s390.c
index 3685fa1..7d3fda9 100644
--- a/lib/jit_s390.c
+++ b/lib/jit_s390.c
@@ -1161,10 +1161,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
-#if __WORDSIZE == 64
case_rr(ext, _i);
case_rr(ext, _ui);
-#endif
case_rr(mov,);
case jit_code_movi:
if (node->flag & jit_flag_node) {
diff --git a/lib/jit_sparc.c b/lib/jit_sparc.c
index a9dbfa8..24bcc5c 100644
--- a/lib/jit_sparc.c
+++ b/lib/jit_sparc.c
@@ -1473,10 +1473,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
-#if __WORDSIZE == 64
case_rr(ext, _i);
case_rr(ext, _ui);
-#endif
case_rr(mov,);
case jit_code_movi:
if (node->flag & jit_flag_node) {
diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c
index ba75386..229030e 100644
--- a/lib/jit_x86-cpu.c
+++ b/lib/jit_x86-cpu.c
@@ -389,7 +389,10 @@ static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
static void _extr_uc(jit_state_t*,jit_int32_t,jit_int32_t);
# define extr_s(r0, r1) movsr(r0, r1)
# define extr_us(r0, r1) movsr_u(r0, r1)
-# if __X64 && !__X64_32
+# if __X64_32
+# define extr_i(r0,r1) movr(r0,r1)
+# define extr_ui(r0,r1) movr(r0,r1)
+# elif __X64
# define extr_i(r0, r1) movir(r0, r1)
# define extr_ui(r0, r1) movir_u(r0, r1)
# endif
diff --git a/lib/jit_x86.c b/lib/jit_x86.c
index cc2641d..3b2424c 100644
--- a/lib/jit_x86.c
+++ b/lib/jit_x86.c
@@ -1706,10 +1706,8 @@ _emit_code(jit_state_t *_jit)
case_rr(ext, _uc);
case_rr(ext, _s);
case_rr(ext, _us);
-#if __X64 && !__X64_32
case_rr(ext, _i);
case_rr(ext, _ui);
-#endif
case_rf(trunc, _f_i);
case_rf(trunc, _d_i);
#if __X64
diff --git a/lib/lightning.c b/lib/lightning.c
index 96eca37..1210672 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -3445,6 +3445,11 @@ _patch_register(jit_state_t *_jit, jit_node_t *node,
jit_node_t *link,
}
}
+#if __WORDSIZE == 32
+# define extr_i(r0,r1) movr(r0,r1)
+# define extr_ui(r0,r1) movr(r0,r1)
+#endif
+
#if __BYTE_ORDER == __LITTLE_ENDIAN
# define htonr_us(r0,r1) bswapr_us(r0,r1)
# define htonr_ui(r0,r1) bswapr_ui(r0,r1)
--
2.23.0