[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH 2/2] jit: Resume the method _after_ the interrup
From: |
Holger Hans Peter Freyther |
Subject: |
[Help-smalltalk] [PATCH 2/2] jit: Resume the method _after_ the interrupt check |
Date: |
Mon, 23 Dec 2013 16:15:02 +0100 |
For single stepping through a method we should continue _after_ the
interrupt check or otherwise the interrupt check will _always_
trigger. This makes the DebugTools continue a bit.
2013-12-23 Holger Hans Peter Freyther <address@hidden>
* xlat.c: Change emitted code in emit_interrupt_check.
---
libgst/ChangeLog | 4 ++++
libgst/xlat.c | 7 ++++---
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/libgst/ChangeLog b/libgst/ChangeLog
index c7bfdec..c4dc93c 100644
--- a/libgst/ChangeLog
+++ b/libgst/ChangeLog
@@ -1,5 +1,9 @@
2013-12-23 Holger Hans Peter Freyther <address@hidden>
+ * xlat.c: Change emitted code in emit_interrupt_check.
+
+2013-12-23 Holger Hans Peter Freyther <address@hidden>
+
* xlat.c: Add ipOffset parameter to emit_interrupt_check.
2013-12-22 Holger Hans Peter Freyther <address@hidden>
diff --git a/libgst/xlat.c b/libgst/xlat.c
index fbae8f7..9f45b33 100644
--- a/libgst/xlat.c
+++ b/libgst/xlat.c
@@ -2500,10 +2500,9 @@ emit_deferred_sends (deferred_send *ds)
void
emit_interrupt_check (int restartReg, int ipOffset)
{
- jit_insn *jmp, *begin;
+ jit_insn *jmp, *restart = NULL;
jit_align (2);
- begin = jit_get_label ();
jit_ldi_i (JIT_R2, &_gst_except_flag);
jmp = jit_beqi_i (jit_forward (), JIT_R2, 0);
@@ -2517,11 +2516,13 @@ emit_interrupt_check (int restartReg, int ipOffset)
/* Where to restart?*/
if (restartReg == JIT_NOREG)
- jit_movi_p (JIT_RET, begin);
+ restart = jit_movi_p (JIT_RET, jit_forward());
else
jit_movr_p (JIT_RET, restartReg);
jit_ret ();
+ if (restart)
+ jit_patch_movi (restart, jit_get_label());
jit_patch (jmp);
}
--
1.8.5.1