[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 358/437: Add new --enable-devel-disassembler configure o
From: |
Andy Wingo |
Subject: |
[Guile-commits] 358/437: Add new --enable-devel-disassembler configure option |
Date: |
Mon, 2 Jul 2018 05:14:54 -0400 (EDT) |
wingo pushed a commit to branch lightning
in repository guile.
commit 678280734e66dffc5b4653934f76ab221b40e436
Author: Paulo Andrade <address@hidden>
Date: Mon Feb 2 20:49:22 2015 -0200
Add new --enable-devel-disassembler configure option
* configure.ac, include/lightning/jit_private.h,
lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c,
lib/jit_disasm.c, lib/jit_hppa.c, lib/jit_ia64.c,
lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c,
lib/jit_s390.c, lib/jit_sparc.c, lib/jit_x86.c: Add a new
--enable-devel-disassembler option, that should be used
during development, or lightning debug. This option
intermixes previous jit_print and jit_disassemble
output, making it easier to visualize what lightning
call was used, and what code was generated.
---
ChangeLog | 13 ++
configure.ac | 11 ++
include/lightning/jit_private.h | 6 +
lib/jit_aarch64.c | 3 +
lib/jit_alpha.c | 3 +
lib/jit_arm.c | 3 +
lib/jit_disasm.c | 15 ++
lib/jit_hppa.c | 3 +
lib/jit_ia64.c | 4 +
lib/jit_mips.c | 3 +
lib/jit_ppc.c | 3 +
lib/jit_print.c | 303 ++++++++++++++++++++--------------------
lib/jit_s390.c | 3 +
lib/jit_sparc.c | 3 +
lib/jit_x86.c | 3 +
15 files changed, 230 insertions(+), 149 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 29f7dac..d352f0c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2015-02-02 Paulo Andrade <address@hidden>
+
+ * configure.ac, include/lightning/jit_private.h,
+ lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c,
+ lib/jit_disasm.c, lib/jit_hppa.c, lib/jit_ia64.c,
+ lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c,
+ lib/jit_s390.c, lib/jit_sparc.c, lib/jit_x86.c: Add a new
+ --enable-devel-disassembler option, that should be used
+ during development, or lightning debug. This option
+ intermixes previous jit_print and jit_disassemble
+ output, making it easier to visualize what lightning
+ call was used, and what code was generated.
+
2015-01-31 Paulo Andrade <address@hidden>
* lib/jit_arm-cpu.c, lib/jit_arm.c: Only limit to 24 bit
diff --git a/configure.ac b/configure.ac
index d26e777..b27da4a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -95,6 +95,17 @@ if test "x$DISASSEMBLER" != "xno"; then
LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DDISASSEMBLER=1"
fi
+AC_ARG_ENABLE(devel-disassembler,
+ AS_HELP_STRING([--enable-devel-disassembler],
+ [Enable extra disassembly options]),
+ [DEVEL_DISASSEMBLER=$enableval], [DEVEL_DISASSEMBLER=no])
+if test "x$DEVEL_DISASSEMBLER" != "xno"; then
+ if test "x$DISASSEMBLER" = "xno"; then
+ AC_MSG_ERROR(devel-disassembler needs disassembler enabled)
+ fi
+ LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DDEVEL_DISASSEMBLER=1"
+fi
+
AC_ARG_ENABLE(assertions,
AS_HELP_STRING([--enable-assertions],
[Enable runtime code generation assertions]),
diff --git a/include/lightning/jit_private.h b/include/lightning/jit_private.h
index 32aa31c..b88463b 100644
--- a/include/lightning/jit_private.h
+++ b/include/lightning/jit_private.h
@@ -303,6 +303,9 @@ struct jit_node {
jit_data_t v;
jit_data_t w;
jit_node_t *link;
+#if DEVEL_DISASSEMBLER
+ jit_uword_t offset;
+#endif
};
struct jit_block {
@@ -618,6 +621,9 @@ extern void _jit_set_note(jit_state_t*, jit_note_t*, char*,
int, jit_int32_t);
#define jit_annotate() _jit_annotate(_jit)
extern void _jit_annotate(jit_state_t*);
+#define jit_print_node(u) _jit_print_node(_jit,u)
+extern void _jit_print_node(jit_state_t*,jit_node_t*);
+
extern jit_pointer_t jit_memcpy(jit_pointer_t,const void*,jit_word_t);
extern jit_pointer_t jit_memmove(jit_pointer_t,const void*,jit_word_t);
extern void jit_alloc(jit_pointer_t*, jit_word_t);
diff --git a/lib/jit_aarch64.c b/lib/jit_aarch64.c
index 7da15a5..4115719 100644
--- a/lib/jit_aarch64.c
+++ b/lib/jit_aarch64.c
@@ -791,6 +791,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_alpha.c b/lib/jit_alpha.c
index e3c78ca..cfd91cf 100644
--- a/lib/jit_alpha.c
+++ b/lib/jit_alpha.c
@@ -784,6 +784,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_arm.c b/lib/jit_arm.c
index 8b5abb1..7746638 100644
--- a/lib/jit_arm.c
+++ b/lib/jit_arm.c
@@ -1186,6 +1186,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_disasm.c b/lib/jit_disasm.c
index 86e5441..7b45aa1 100644
--- a/lib/jit_disasm.c
+++ b/lib/jit_disasm.c
@@ -327,6 +327,9 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code,
jit_int32_t length)
bfd_vma pc = (jit_uword_t)code;
bfd_vma end = (jit_uword_t)code + length;
char buffer[address_buffer_length];
+#if DEVEL_DISASSEMBLER
+ jit_node_t *node;
+#endif
#if __arm__
data_info = _jitc && _jitc->data_info.ptr;
@@ -338,7 +341,19 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code,
jit_int32_t length)
old_file = old_name = NULL;
old_line = 0;
disasm_jit = _jit;
+#if DEVEL_DISASSEMBLER
+ node = _jitc->head;
+#endif
while (pc < end) {
+#if DEVEL_DISASSEMBLER
+ while (node && node->offset < (jit_uword_t)pc)
+ node = node->next;
+ while (node && node->offset == (jit_uword_t)pc) {
+ jit_print_node(node);
+ fputc('\n', stdout);
+ node = node->next;
+ }
+#endif
#if __arm__
again:
if (data_info) {
diff --git a/lib/jit_hppa.c b/lib/jit_hppa.c
index 37f3650..3a79138 100644
--- a/lib/jit_hppa.c
+++ b/lib/jit_hppa.c
@@ -804,6 +804,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_ia64.c b/lib/jit_ia64.c
index 86fea13..59c9153 100644
--- a/lib/jit_ia64.c
+++ b/lib/jit_ia64.c
@@ -914,6 +914,10 @@ _emit_code(jit_state_t *_jit)
#if GET_JIT_SIZE
sync();
#endif
+#if DEVEL_DISASSEMBLER
+ sync();
+ node->offset = _jit->pc.w;
+#endif
jit_regarg_set(node, value);
switch (node->code) {
case jit_code_align:
diff --git a/lib/jit_mips.c b/lib/jit_mips.c
index 60ec598..6ee35fb 100644
--- a/lib/jit_mips.c
+++ b/lib/jit_mips.c
@@ -1069,6 +1069,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c
index a5e4a76..3abaf75 100644
--- a/lib/jit_ppc.c
+++ b/lib/jit_ppc.c
@@ -931,6 +931,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_print.c b/lib/jit_print.c
index 790a268..073568e 100644
--- a/lib/jit_print.c
+++ b/lib/jit_print.c
@@ -45,51 +45,58 @@ void
_jit_print(jit_state_t *_jit)
{
jit_node_t *node;
+
+ if ((node = _jitc->head)) {
+ jit_print_node(node);
+ for (node = node->next; node; node = node->next) {
+ print_chr('\n');
+ jit_print_node(node);
+ }
+ print_chr('\n');
+ }
+}
+
+void
+_jit_print_node(jit_state_t *_jit, jit_node_t *node)
+{
jit_block_t *block;
- jit_bool_t first;
jit_int32_t value;
jit_int32_t offset;
- first = 0;
- for (node = _jitc->head; node; node = node->next) {
- if (!first)
- print_chr('\n');
- else
- first = 0;
- if (node->code == jit_code_label ||
- node->code == jit_code_prolog || node->code == jit_code_epilog) {
- print_chr('L');
- print_dec(node->v.w);
- print_chr(':');
- block = _jitc->blocks.ptr + node->v.w;
- for (offset = 0; offset < _jitc->reglen; offset++) {
- if (jit_regset_tstbit(&block->reglive, offset)) {
- print_chr(' ');
- print_reg(offset);
- }
- }
- if (node->code == jit_code_prolog ||
- node->code == jit_code_epilog) {
- print_str(" /* ");
- print_str(code_name[node->code]);
- print_str(" */");
+ if (node->code == jit_code_label ||
+ node->code == jit_code_prolog || node->code == jit_code_epilog) {
+ print_chr('L');
+ print_dec(node->v.w);
+ print_chr(':');
+ block = _jitc->blocks.ptr + node->v.w;
+ for (offset = 0; offset < _jitc->reglen; offset++) {
+ if (jit_regset_tstbit(&block->reglive, offset)) {
+ print_chr(' ');
+ print_reg(offset);
}
- continue;
}
- value = jit_classify(node->code) &
- (jit_cc_a0_int|jit_cc_a0_jmp|jit_cc_a0_reg|jit_cc_a0_rlh|
- jit_cc_a1_reg|jit_cc_a1_int|jit_cc_a1_flt|jit_cc_a1_dbl|
- jit_cc_a2_reg|jit_cc_a2_int|jit_cc_a2_flt|jit_cc_a2_dbl);
- if (value & jit_cc_a0_jmp)
- print_str(" ");
- else
- print_chr('\t');
- print_str(code_name[node->code]);
- switch (node->code) {
+ if (node->code == jit_code_prolog ||
+ node->code == jit_code_epilog) {
+ print_str(" /* ");
+ print_str(code_name[node->code]);
+ print_str(" */");
+ }
+ return;
+ }
+ value = jit_classify(node->code) &
+ (jit_cc_a0_int|jit_cc_a0_jmp|jit_cc_a0_reg|jit_cc_a0_rlh|
+ jit_cc_a1_reg|jit_cc_a1_int|jit_cc_a1_flt|jit_cc_a1_dbl|
+ jit_cc_a2_reg|jit_cc_a2_int|jit_cc_a2_flt|jit_cc_a2_dbl);
+ if (value & jit_cc_a0_jmp)
+ print_str(" ");
+ else
+ print_chr('\t');
+ print_str(code_name[node->code]);
+ switch (node->code) {
r:
- print_chr(' '); print_reg(node->u.w); continue;
+ print_chr(' '); print_reg(node->u.w); return;
w:
- print_chr(' '); print_hex(node->u.w); continue;
+ print_chr(' '); print_hex(node->u.w); return;
n:
print_chr(' ');
if (!(node->flag & jit_flag_node))
@@ -98,72 +105,72 @@ _jit_print(jit_state_t *_jit)
print_chr('L');
print_dec(node->u.n->v.w);
}
- continue;
+ return;
r_r:
- print_chr(' '); print_reg(node->u.w);
- print_chr(' '); print_reg(node->v.w); continue;
+ print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_reg(node->v.w); return;
r_w:
- print_chr(' '); print_reg(node->u.w);
- print_chr(' '); print_hex(node->v.w); continue;
+ print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_hex(node->v.w); return;
r_f:
- print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_reg(node->u.w);
print_chr(' ');
if (node->flag & jit_flag_data)
print_flt(*(jit_float32_t *)node->v.n->u.w);
else
print_flt(node->v.f);
- continue;
+ return;
r_d:
- print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_reg(node->u.w);
print_chr(' ');
if (node->flag & jit_flag_data)
print_flt(*(jit_float64_t *)node->v.n->u.w);
else
print_flt(node->v.d);
- continue;
+ return;
w_r:
- print_chr(' '); print_hex(node->u.w);
- print_chr(' '); print_reg(node->v.w); continue;
+ print_chr(' '); print_hex(node->u.w);
+ print_chr(' '); print_reg(node->v.w); return;
r_r_r:
- print_chr(' '); print_reg(node->u.w);
- print_chr(' '); print_reg(node->v.w);
- print_chr(' '); print_reg(node->w.w); continue;
+ print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->w.w); return;
r_r_w:
- print_chr(' '); print_reg(node->u.w);
- print_chr(' '); print_reg(node->v.w);
- print_chr(' '); print_hex(node->w.w); continue;
+ print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_hex(node->w.w); return;
q_r_r:
- print_str(" ("); print_reg(node->u.q.l);
- print_chr(' '); print_reg(node->u.q.h);
- print_str(") "); print_reg(node->v.w);
- print_chr(' '); print_reg(node->w.w); continue;
+ print_str(" ("); print_reg(node->u.q.l);
+ print_chr(' '); print_reg(node->u.q.h);
+ print_str(") "); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->w.w); return;
q_r_w:
- print_str(" ("); print_reg(node->u.q.l);
- print_chr(' '); print_reg(node->u.q.h);
- print_str(") "); print_reg(node->v.w);
- print_chr(' '); print_hex(node->w.w); continue;
+ print_str(" ("); print_reg(node->u.q.l);
+ print_chr(' '); print_reg(node->u.q.h);
+ print_str(") "); print_reg(node->v.w);
+ print_chr(' '); print_hex(node->w.w); return;
r_r_f:
- print_chr(' '); print_reg(node->u.w);
- print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_reg(node->v.w);
print_chr(' ');
if (node->flag & jit_flag_data)
print_flt(*(jit_float32_t *)node->w.n->u.w);
else
print_flt(node->w.f);
- continue;
+ return;
r_r_d:
- print_chr(' '); print_reg(node->u.w);
- print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->u.w);
+ print_chr(' '); print_reg(node->v.w);
print_chr(' ');
if (node->flag & jit_flag_data)
print_flt(*(jit_float64_t *)node->w.n->u.w);
else
print_flt(node->w.d);
- continue;
+ return;
w_r_r:
- print_chr(' '); print_hex(node->u.w);
- print_chr(' '); print_reg(node->v.w);
- print_chr(' '); print_reg(node->w.w); continue;
+ print_chr(' '); print_hex(node->u.w);
+ print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->w.w); return;
n_r_r:
print_chr(' ');
if (!(node->flag & jit_flag_node))
@@ -172,8 +179,8 @@ _jit_print(jit_state_t *_jit)
print_chr('L');
print_dec(node->u.n->v.w);
}
- print_chr(' '); print_reg(node->v.w);
- print_chr(' '); print_reg(node->w.w); continue;
+ print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->w.w); return;
n_r_w:
print_chr(' ');
if (!(node->flag & jit_flag_node))
@@ -182,8 +189,8 @@ _jit_print(jit_state_t *_jit)
print_chr('L');
print_dec(node->u.n->v.w);
}
- print_chr(' '); print_reg(node->v.w);
- print_chr(' '); print_hex(node->w.w); continue;
+ print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_hex(node->w.w); return;
n_r_f:
print_chr(' ');
if (!(node->flag & jit_flag_node))
@@ -192,13 +199,13 @@ _jit_print(jit_state_t *_jit)
print_chr('L');
print_dec(node->u.n->v.w);
}
- print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->v.w);
print_chr(' ');
if (node->flag & jit_flag_data)
print_flt(*(jit_float32_t *)node->w.n->u.w);
else
print_flt(node->w.f);
- continue;
+ return;
n_r_d:
print_chr(' ');
if (!(node->flag & jit_flag_node))
@@ -207,82 +214,80 @@ _jit_print(jit_state_t *_jit)
print_chr('L');
print_dec(node->u.n->v.w);
}
- print_chr(' '); print_reg(node->v.w);
+ print_chr(' '); print_reg(node->v.w);
print_chr(' ');
if (node->flag & jit_flag_data)
print_flt(*(jit_float64_t *)node->w.n->u.w);
else
print_flt(node->w.d);
- continue;
- case jit_code_name:
- print_chr(' ');
- if (node->v.p && _jitc->emit)
- print_str(node->v.n->u.p);
- break;
- case jit_code_note:
- print_chr(' ');
- if (node->v.p && _jitc->emit)
- print_str(node->v.n->u.p);
- if (node->v.p && _jitc->emit && node->w.w)
- print_chr(':');
- if (node->w.w)
- print_dec(node->w.w);
- break;
- case jit_code_data:
- case jit_code_label:
- case jit_code_prolog: case jit_code_epilog:
- break;
- case jit_code_save: case jit_code_load:
- goto r;
- default:
- switch (value) {
- case jit_cc_a0_reg:
- case jit_cc_a0_reg|jit_cc_a0_chg:
- case jit_cc_a0_reg|jit_cc_a0_jmp:
- goto r;
- case jit_cc_a0_int:
- goto w;
- case jit_cc_a0_jmp:
- goto n;
- case jit_cc_a0_reg|jit_cc_a1_reg:
- goto r_r;
- case jit_cc_a0_reg|jit_cc_a1_int:
- goto r_w;
- case jit_cc_a0_reg|jit_cc_a1_flt:
- goto r_f;
- case jit_cc_a0_reg|jit_cc_a1_dbl:
- goto r_d;
- case jit_cc_a0_int|jit_cc_a1_reg:
- goto w_r;
- case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_reg:
- goto r_r_r;
- case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_int:
- goto r_r_w;
- case jit_cc_a0_reg|jit_cc_a0_rlh|
- jit_cc_a1_reg|jit_cc_a2_reg:
- goto q_r_r;
- case jit_cc_a0_reg|jit_cc_a0_rlh|
- jit_cc_a1_reg|jit_cc_a2_int:
- goto q_r_w;
- case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_flt:
- goto r_r_f;
- case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_dbl:
- goto r_r_d;
- case jit_cc_a0_int|jit_cc_a1_reg|jit_cc_a2_reg:
- goto w_r_r;
- case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_reg:
- goto n_r_r;
- case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_int:
- goto n_r_w;
- case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_flt:
- goto n_r_f;
- case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_dbl:
- goto n_r_d;
- default:
- abort();
- }
- break;
- }
+ return;
+ case jit_code_name:
+ print_chr(' ');
+ if (node->v.p && _jitc->emit)
+ print_str(node->v.n->u.p);
+ break;
+ case jit_code_note:
+ print_chr(' ');
+ if (node->v.p && _jitc->emit)
+ print_str(node->v.n->u.p);
+ if (node->v.p && _jitc->emit && node->w.w)
+ print_chr(':');
+ if (node->w.w)
+ print_dec(node->w.w);
+ break;
+ case jit_code_data:
+ case jit_code_label:
+ case jit_code_prolog: case jit_code_epilog:
+ break;
+ case jit_code_save: case jit_code_load:
+ goto r;
+ default:
+ switch (value) {
+ case jit_cc_a0_reg:
+ case jit_cc_a0_reg|jit_cc_a0_chg:
+ case jit_cc_a0_reg|jit_cc_a0_jmp:
+ goto r;
+ case jit_cc_a0_int:
+ goto w;
+ case jit_cc_a0_jmp:
+ goto n;
+ case jit_cc_a0_reg|jit_cc_a1_reg:
+ goto r_r;
+ case jit_cc_a0_reg|jit_cc_a1_int:
+ goto r_w;
+ case jit_cc_a0_reg|jit_cc_a1_flt:
+ goto r_f;
+ case jit_cc_a0_reg|jit_cc_a1_dbl:
+ goto r_d;
+ case jit_cc_a0_int|jit_cc_a1_reg:
+ goto w_r;
+ case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_reg:
+ goto r_r_r;
+ case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_int:
+ goto r_r_w;
+ case jit_cc_a0_reg|jit_cc_a0_rlh|
+ jit_cc_a1_reg|jit_cc_a2_reg:
+ goto q_r_r;
+ case jit_cc_a0_reg|jit_cc_a0_rlh|
+ jit_cc_a1_reg|jit_cc_a2_int:
+ goto q_r_w;
+ case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_flt:
+ goto r_r_f;
+ case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_dbl:
+ goto r_r_d;
+ case jit_cc_a0_int|jit_cc_a1_reg|jit_cc_a2_reg:
+ goto w_r_r;
+ case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_reg:
+ goto n_r_r;
+ case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_int:
+ goto n_r_w;
+ case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_flt:
+ goto n_r_f;
+ case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_dbl:
+ goto n_r_d;
+ default:
+ abort();
+ }
+ break;
}
- print_chr('\n');
}
diff --git a/lib/jit_s390.c b/lib/jit_s390.c
index bbeb86b..c811ace 100644
--- a/lib/jit_s390.c
+++ b/lib/jit_s390.c
@@ -808,6 +808,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_sparc.c b/lib/jit_sparc.c
index 8924cf9..a0ebd94 100644
--- a/lib/jit_sparc.c
+++ b/lib/jit_sparc.c
@@ -823,6 +823,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
diff --git a/lib/jit_x86.c b/lib/jit_x86.c
index 87f6dc2..7b43bd3 100644
--- a/lib/jit_x86.c
+++ b/lib/jit_x86.c
@@ -1351,6 +1351,9 @@ _emit_code(jit_state_t *_jit)
if (_jit->pc.uc >= _jitc->code.end)
return (NULL);
+#if DEVEL_DISASSEMBLER
+ node->offset = _jit->pc.w;
+#endif
value = jit_classify(node->code);
jit_regarg_set(node, value);
switch (node->code) {
- [Guile-commits] 310/437: Allow jit_jmpi on an immediate constant address., (continued)
- [Guile-commits] 310/437: Allow jit_jmpi on an immediate constant address., Andy Wingo, 2018/07/02
- [Guile-commits] 264/437: ARM: Do not use ldrt/strt by default, Andy Wingo, 2018/07/02
- [Guile-commits] 244/437: HPPA: Correct bogus logic when calling function pointers., Andy Wingo, 2018/07/02
- [Guile-commits] 273/437: x86: Ensure the x87 stack is empty when calling a function., Andy Wingo, 2018/07/02
- [Guile-commits] 126/437: Cleanup on preparation for lightning rework., Andy Wingo, 2018/07/02
- [Guile-commits] 364/437: GNU lightning 2.1.0 release, Andy Wingo, 2018/07/02
- [Guile-commits] 242/437: Add missing jit_clear_state to documentation sample., Andy Wingo, 2018/07/02
- [Guile-commits] 417/437: HPPA: Correct wrong regarg_p check, Andy Wingo, 2018/07/02
- [Guile-commits] 333/437: Implement jit_flush, Andy Wingo, 2018/07/02
- [Guile-commits] 316/437: Implement the jit_rsb* interface., Andy Wingo, 2018/07/02
- [Guile-commits] 358/437: Add new --enable-devel-disassembler configure option,
Andy Wingo <=
- [Guile-commits] 262/437: Rerun tests on supported backends after bogus self test correction, Andy Wingo, 2018/07/02
- [Guile-commits] 399/437: mips: Pass tests for variadic jit functions on new abi, Andy Wingo, 2018/07/02
- [Guile-commits] 408/437: GNU lightning 2.1.1 release, Andy Wingo, 2018/07/02
- [Guile-commits] 349/437: Implement jit_putarg*, Andy Wingo, 2018/07/02
- [Guile-commits] 120/437: Change _ASM_SAFETY register width check to accept valid alternate values., Andy Wingo, 2018/07/02
- [Guile-commits] 393/437: Intermediate, fully functional, rework for variadic functions, Andy Wingo, 2018/07/02
- [Guile-commits] 361/437: Correct the reason the simplify_stxi bug was not noticed before, Andy Wingo, 2018/07/02
- [Guile-commits] 356/437: ARM: Do not limit to 24 bit displacement jump to unknown address, Andy Wingo, 2018/07/02
- [Guile-commits] 422/437: Remove lightning unit tests, Andy Wingo, 2018/07/02
- [Guile-commits] 226/437: New aarch64 port built on the Foundation v8 emulator., Andy Wingo, 2018/07/02