summaryrefslogtreecommitdiff
path: root/libguile/lightening
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2019-05-27 18:30:16 +0200
committerAndy Wingo <wingo@pobox.com>2019-05-27 18:30:16 +0200
commit49fa49c42d7d970334d856a154cddb908dfc8073 (patch)
tree5c420ebb2a9fb9d8c26b716f59c36c2822287133 /libguile/lightening
parent09e4fc45c13259827190c8603fc2d1af9ff87cd0 (diff)
parent84b9ef087b49e0685848826156baaed02655efb4 (diff)
downloadguile-49fa49c42d7d970334d856a154cddb908dfc8073.tar.gz
Merge remote-tracking branch 'lightening/master'
Diffstat (limited to 'libguile/lightening')
-rw-r--r--libguile/lightening/lightening.h2
-rw-r--r--libguile/lightening/lightening/aarch64-cpu.c13
-rw-r--r--libguile/lightening/lightening/arm-cpu.c13
-rw-r--r--libguile/lightening/lightening/x86-cpu.c6
4 files changed, 34 insertions, 0 deletions
diff --git a/libguile/lightening/lightening.h b/libguile/lightening/lightening.h
index d9e8e1f79..7fd96f2ae 100644
--- a/libguile/lightening/lightening.h
+++ b/libguile/lightening/lightening.h
@@ -600,6 +600,8 @@ jit_load_args_3(jit_state_t *_jit, jit_operand_t a, jit_operand_t b,
M(_F___, retval_f) \
M(_F___, retval_d) \
\
+ M(_____, breakpoint) \
+ \
M(_FF__, negr_f) \
M(_FF__, negr_d) \
M(_FF__, absr_f) \
diff --git a/libguile/lightening/lightening/aarch64-cpu.c b/libguile/lightening/lightening/aarch64-cpu.c
index 39ca06a34..e99c69633 100644
--- a/libguile/lightening/lightening/aarch64-cpu.c
+++ b/libguile/lightening/lightening/aarch64-cpu.c
@@ -273,6 +273,7 @@ oxxrs(jit_state_t *_jit, int32_t Op,
#define A64_MOVN 0x12800000
#define A64_MOVZ 0x52800000
#define A64_MOVK 0x72800000
+#define A64_BRK 0xd4200000
static void
SBFM(jit_state_t *_jit, int32_t Rd, int32_t Rn, int32_t ImmR, int32_t ImmS)
@@ -926,6 +927,12 @@ NOP(jit_state_t *_jit)
return emit_u32_with_pool(_jit, 0xd503201f);
}
+static void
+BRK(jit_state_t *_jit)
+{
+ emit_u32_with_pool(_jit, A64_BRK);
+}
+
static jit_reloc_t
movi_from_pool(jit_state_t *_jit, int32_t Rt)
{
@@ -2540,3 +2547,9 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc, int32_t expected,
movr(_jit, dst, dst_or_tmp);
unget_temp_gpr(_jit);
}
+
+static void
+breakpoint(jit_state_t *_jit)
+{
+ BRK(_jit);
+}
diff --git a/libguile/lightening/lightening/arm-cpu.c b/libguile/lightening/lightening/arm-cpu.c
index b4e1660b9..a280ca192 100644
--- a/libguile/lightening/lightening/arm-cpu.c
+++ b/libguile/lightening/lightening/arm-cpu.c
@@ -182,6 +182,7 @@
#define THUMB_DMB 0xf3bf8f50
#define THUMB_LDREX 0xe8500f00
#define THUMB_STREX 0xe8400000
+#define THUMB_BRK 0xbe00
#define _NOREG (jit_gpr_regno(_PC))
@@ -1342,6 +1343,12 @@ T2_STRIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
}
static void
+T1_BRK(jit_state_t *_jit)
+{
+ emit_u16_with_pool(_jit, THUMB_BRK);
+}
+
+static void
nop(jit_state_t *_jit, int32_t i0)
{
for (; i0 > 0; i0 -= 2)
@@ -3053,3 +3060,9 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc, int32_t expected,
movr(_jit, dst, dst_or_tmp);
unget_temp_gpr(_jit);
}
+
+static void
+breakpoint(jit_state_t *_jit)
+{
+ T1_BRK(_jit);
+}
diff --git a/libguile/lightening/lightening/x86-cpu.c b/libguile/lightening/lightening/x86-cpu.c
index 28ec73886..aa2bbdd78 100644
--- a/libguile/lightening/lightening/x86-cpu.c
+++ b/libguile/lightening/lightening/x86-cpu.c
@@ -2753,3 +2753,9 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc, int32_t expected,
unget_temp_gpr(_jit);
}
}
+
+static void
+breakpoint(jit_state_t *_jit)
+{
+ ic(_jit, 0xcc);
+}