From e08d10af6786d729eff199760011df91ab49067d Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 9 Oct 2018 12:11:59 +0200 Subject: [PATCH] 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 2bb50f28f..e4a6699f2 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: