From 16a46dd8e74da806cf564b98f56098fffc01bbe5 Mon Sep 17 00:00:00 2001 From: julianb0 Date: Tue, 2 Jul 2019 20:57:40 +0200 Subject: [PATCH] dump --- vm/pc/decode.c | 3 ++- vm/pc/dump.c | 31 ++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/vm/pc/decode.c b/vm/pc/decode.c index 03b1961..9cbf26a 100644 --- a/vm/pc/decode.c +++ b/vm/pc/decode.c @@ -135,7 +135,8 @@ void extract_param(ctx_t *ctx, acc_t *p, uchar fmt) p->imm2 = 0; } - p->addr = R(p->reg1) + R(p->reg2) * p->imm1 + p->addr = R(p->reg1) + R(p->reg2) + * (long)(short)p->imm1 + (long)(short)p->imm2; break; diff --git a/vm/pc/dump.c b/vm/pc/dump.c index 1829c7a..b4097d1 100644 --- a/vm/pc/dump.c +++ b/vm/pc/dump.c @@ -3,6 +3,8 @@ #include +#define ABS(x) ((short)(x) < 0 ? -x : x) + char *cond_suffixes[] = { "-", @@ -115,24 +117,31 @@ void dump_acc(ctx_t *ctx, acc_t *p) else if (mfmt == AM_RRI) { if (p->reg1 && p->reg2) - trace("%s+%s+%hd]", ctx->r[p->reg1].name, - ctx->r[p->reg2].name, p->imm2); - - else trace("%s+%hd]", - ctx->r[p->reg1 ? p->reg1 : p->reg2].name, p->imm2); + trace("%s+%s%c%hd]", + ctx->r[p->reg1].name, + ctx->r[p->reg2].name, + ((short)p->imm2 < 0 ? '-' : '+'), + ABS(p->imm2)); + + else trace("%s%c%hd]", + ctx->r[p->reg1 ? p->reg1 : p->reg2].name, + ((short)p->imm2 < 0 ? '-' : '+'), + ABS(p->imm2)); } else if (mfmt == AM_RRII) { if (p->reg1) - trace("%s+%s*%u+%hd]", + trace("%s+%s*%hd%c%hd]", ctx->r[p->reg1].name, - ctx->r[p->reg2].name, - p->imm1, p->imm2); + ctx->r[p->reg2].name, p->imm1, + ((short)p->imm2 < 0 ? '-' : '+'), + ABS(p->imm2)); else - trace("%s*%u+%hd]", - ctx->r[p->reg2].name, - p->imm1, p->imm2); + trace("%s*%hd%c%hd]", + ctx->r[p->reg2].name, p->imm1, + ((short)p->imm2 < 0 ? '-' : '+'), + ABS(p->imm2)); } } }