# HG changeset patch # User Michael Pavone # Date 1477964177 25200 # Node ID 920d796ea6a265a312785f6099470dba78c81c1d # Parent 1dba006bad4725a2fe5f844eb72602d5545453c5 Correct disassembly of r14/r15 relative loads and stores diff -r 1dba006bad47 -r 920d796ea6a2 jagcpu.c --- a/jagcpu.c Mon Oct 31 09:23:25 2016 -0700 +++ b/jagcpu.c Mon Oct 31 18:36:17 2016 -0700 @@ -219,6 +219,42 @@ ); case JAG_JUMP: return sprintf(dst, "%s %s, (r%d)", mnemonics[opcode], jag_cc(inst), jag_reg1(inst)); + case JAG_LOAD_R14_REL: + case JAG_LOAD_R15_REL: + return sprintf(dst, "%s (r%d+%d), r%d", + mnemonics[opcode], + opcode == JAG_LOAD_R14_REL ? 14 : 15, + jag_quick(inst), + jag_reg2(inst) + ); + break; + case JAG_STORE_R14_REL: + case JAG_STORE_R15_REL: + return sprintf(dst, "%s r%d, (r%d+%d)", + mnemonics[opcode], + jag_reg2(inst), + opcode == JAG_STORE_R14_REL ? 14 : 15, + jag_quick(inst) + ); + break; + case JAG_LOAD_R14_INDEXED: + case JAG_LOAD_R15_INDEXED: + return sprintf(dst, "%s (r%d+r%d), r%d", + mnemonics[opcode], + opcode == JAG_LOAD_R14_INDEXED ? 14 : 15, + jag_reg1(inst), + jag_reg2(inst) + ); + break; + case JAG_STORE_R14_INDEXED: + case JAG_STORE_R15_INDEXED: + return sprintf(dst, "%s r%d, (r%d+r%d)", + mnemonics[opcode], + jag_reg2(inst), + opcode == JAG_STORE_R14_INDEXED ? 14 : 15, + jag_reg1(inst) + ); + break; default: if (is_quick_1_32_opcode(opcode, is_gpu)) { return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_quick(inst), jag_reg2(inst));