1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-23 04:50:28 +02:00

Fix errors in 32-bit JIT support

* libguile/jit.c (compile_ursh_immediate):
(compile_ulsh_immediate): Fix immediate/register variant calling.
Happily a benefit of lightening, as type safety did this for us.
(DEFINE_CLOBBER_RECORDING_EMITTER_R_R_2): Pass JIT state.
This commit is contained in:
Andy Wingo 2019-04-28 13:47:42 +02:00
parent 61c6a0d3dd
commit fb1f3ba051

View file

@ -492,7 +492,7 @@ emit_##stem (scm_jit_state *j, \
jit_##typ##_t dst1, jit_##typ##_t dst2, \ jit_##typ##_t dst1, jit_##typ##_t dst2, \
jit_##typ##_t a, jit_##typ##_t b) \ jit_##typ##_t a, jit_##typ##_t b) \
{ \ { \
jit_##stem (dst1, dst2, a, b); \ jit_##stem (j->jit, dst1, dst2, a, b); \
record_##typ##_clobber (j, dst1); \ record_##typ##_clobber (j, dst1); \
record_##typ##_clobber (j, dst2); \ record_##typ##_clobber (j, dst2); \
} }
@ -2945,7 +2945,7 @@ compile_ursh_immediate (scm_jit_state *j, uint8_t dst, uint8_t a, uint8_t b)
else if (b == 32) else if (b == 32)
{ {
/* hi = 0, lo = hi */ /* hi = 0, lo = hi */
emit_movi (j, T0, T1); emit_movr (j, T0, T1);
emit_movi (j, T1, 0); emit_movi (j, T1, 0);
} }
else /* b > 32 */ else /* b > 32 */
@ -2985,13 +2985,13 @@ compile_ulsh_immediate (scm_jit_state *j, uint8_t dst, uint8_t a, uint8_t b)
else if (b == 32) else if (b == 32)
{ {
/* hi = lo, lo = 0 */ /* hi = lo, lo = 0 */
emit_movi (j, T1, T0); emit_movr (j, T1, T0);
emit_movi (j, T0, 0); emit_movi (j, T0, 0);
} }
else /* b > 32 */ else /* b > 32 */
{ {
/* hi = lo << (s-32), lo = 0 */ /* hi = lo << (s-32), lo = 0 */
emit_lshr (j, T1, T0, b - 32); emit_lshi (j, T1, T0, b - 32);
emit_movi (j, T0, 0); emit_movi (j, T0, 0);
} }
emit_sp_set_u64 (j, dst, T0, T1); emit_sp_set_u64 (j, dst, T0, T1);