[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 02/02: Fix JIT of 64-bit comparisons on 32-bit architect
From: |
Andy Wingo |
Subject: |
[Guile-commits] 02/02: Fix JIT of 64-bit comparisons on 32-bit architectures |
Date: |
Tue, 9 Oct 2018 06:32:46 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit e08d10af6786d729eff199760011df91ab49067d
Author: Andy Wingo <address@hidden>
Date: Tue Oct 9 12:11:59 2018 +0200
Fix JIT of 64-bit comparisons on 32-bit architectures
* libguile/jit.c (compile_u64_imm_less): Compare high word using
not-equal, to avoid a signedness compare.
(compile_s64_imm_less, compile_imm_s64_less): Fix the not-less cases.
---
libguile/jit.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/libguile/jit.c b/libguile/jit.c
index 2bb50f2..e4a6699 100644
--- a/libguile/jit.c
+++ b/libguile/jit.c
@@ -3779,7 +3779,7 @@ compile_u64_imm_less (scm_jit_state *j, uint16_t a,
uint16_t b)
add_inter_instruction_patch (j, k2, target);
break;
case scm_op_jnl:
- k1 = jit_bgti (T1, 0);
+ k1 = jit_bnei (T1, 0);
k2 = jit_bgei_u (T0, b);
add_inter_instruction_patch (j, k1, target);
add_inter_instruction_patch (j, k2, target);
@@ -3867,16 +3867,16 @@ compile_s64_imm_less (scm_jit_state *j, uint16_t a,
int16_t b)
k1 = jit_blti (T1, sign);
k2 = jit_bnei (T1, sign);
k3 = jit_blti (T0, b);
- jit_patch (k2);
add_inter_instruction_patch (j, k1, target);
+ jit_patch (k2);
add_inter_instruction_patch (j, k3, target);
break;
case scm_op_jnl:
- k1 = jit_bgti (T1, sign);
+ k1 = jit_blti (T1, sign);
k2 = jit_bnei (T1, sign);
k3 = jit_bgei (T0, b);
- jit_patch (k2);
- add_inter_instruction_patch (j, k1, target);
+ jit_patch (k1);
+ add_inter_instruction_patch (j, k2, target);
add_inter_instruction_patch (j, k3, target);
break;
default:
@@ -3922,11 +3922,11 @@ compile_imm_s64_less (scm_jit_state *j, uint16_t a,
int16_t b)
add_inter_instruction_patch (j, k3, target);
break;
case scm_op_jnl:
- k1 = jit_bgti (T1, sign);
+ k1 = jit_blti (T1, sign);
k2 = jit_bnei (T1, sign);
k3 = jit_blei (T0, b);
- jit_patch (k1);
- add_inter_instruction_patch (j, k2, target);
+ add_inter_instruction_patch (j, k1, target);
+ jit_patch (k2);
add_inter_instruction_patch (j, k3, target);
break;
default: