changeset 1096:1ab30d427db8

Better disassembly of GPU/DSP load store instructions
author Michael Pavone <pavone@retrodev.com>
date Mon, 31 Oct 2016 18:41:42 -0700
parents 920d796ea6a2
children faa3a4617f62
files jagcpu.c
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/jagcpu.c	Mon Oct 31 18:36:17 2016 -0700
+++ b/jagcpu.c	Mon Oct 31 18:41:42 2016 -0700
@@ -143,6 +143,22 @@
 		|| opcode == JAG_BCLR;
 }
 
+uint8_t is_load(uint16_t opcode, uint8_t is_gpu)
+{
+	return opcode == JAG_LOAD
+		|| opcode == JAG_LOADB
+		|| opcode == JAG_LOADW
+		|| (is_gpu && opcode == GPU_LOADP);
+}
+
+uint8_t is_store(uint16_t opcode, uint8_t is_gpu)
+{
+	return opcode == JAG_STORE
+		|| opcode == JAG_STOREB
+		|| opcode == JAG_STOREW
+		|| (is_gpu && opcode == GPU_STOREP);
+}
+
 char * jag_cc_names[] = {
 	"t",
 	"ne",
@@ -260,6 +276,10 @@
 			return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_quick(inst), jag_reg2(inst));
 		} else if (is_quick_0_31_opcode(opcode)) {
 			return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst));
+		} else if (is_load(opcode, is_gpu)) {
+			return sprintf(dst, "%s (r%d), r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst));
+		} else if (is_store(opcode, is_gpu)) {
+			return sprintf(dst, "%s r%d, (r%d)", mnemonics[opcode], jag_reg2(inst), jag_reg1(inst));
 		} else {
 			return sprintf(dst, "%s r%d, r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst));
 		}