comparison jagcpu.c @ 1095:920d796ea6a2

Correct disassembly of r14/r15 relative loads and stores
author Michael Pavone <pavone@retrodev.com>
date Mon, 31 Oct 2016 18:36:17 -0700
parents 1dba006bad47
children 1ab30d427db8
comparison
equal deleted inserted replaced
1094:1dba006bad47 1095:920d796ea6a2
217 labels ? "%s %s, ADR_%X" : "%s %s, $W%X", 217 labels ? "%s %s, ADR_%X" : "%s %s, $W%X",
218 mnemonics[opcode], jag_cc(inst), jag_jr_dest(inst, address) 218 mnemonics[opcode], jag_cc(inst), jag_jr_dest(inst, address)
219 ); 219 );
220 case JAG_JUMP: 220 case JAG_JUMP:
221 return sprintf(dst, "%s %s, (r%d)", mnemonics[opcode], jag_cc(inst), jag_reg1(inst)); 221 return sprintf(dst, "%s %s, (r%d)", mnemonics[opcode], jag_cc(inst), jag_reg1(inst));
222 case JAG_LOAD_R14_REL:
223 case JAG_LOAD_R15_REL:
224 return sprintf(dst, "%s (r%d+%d), r%d",
225 mnemonics[opcode],
226 opcode == JAG_LOAD_R14_REL ? 14 : 15,
227 jag_quick(inst),
228 jag_reg2(inst)
229 );
230 break;
231 case JAG_STORE_R14_REL:
232 case JAG_STORE_R15_REL:
233 return sprintf(dst, "%s r%d, (r%d+%d)",
234 mnemonics[opcode],
235 jag_reg2(inst),
236 opcode == JAG_STORE_R14_REL ? 14 : 15,
237 jag_quick(inst)
238 );
239 break;
240 case JAG_LOAD_R14_INDEXED:
241 case JAG_LOAD_R15_INDEXED:
242 return sprintf(dst, "%s (r%d+r%d), r%d",
243 mnemonics[opcode],
244 opcode == JAG_LOAD_R14_INDEXED ? 14 : 15,
245 jag_reg1(inst),
246 jag_reg2(inst)
247 );
248 break;
249 case JAG_STORE_R14_INDEXED:
250 case JAG_STORE_R15_INDEXED:
251 return sprintf(dst, "%s r%d, (r%d+r%d)",
252 mnemonics[opcode],
253 jag_reg2(inst),
254 opcode == JAG_STORE_R14_INDEXED ? 14 : 15,
255 jag_reg1(inst)
256 );
257 break;
222 default: 258 default:
223 if (is_quick_1_32_opcode(opcode, is_gpu)) { 259 if (is_quick_1_32_opcode(opcode, is_gpu)) {
224 return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_quick(inst), jag_reg2(inst)); 260 return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_quick(inst), jag_reg2(inst));
225 } else if (is_quick_0_31_opcode(opcode)) { 261 } else if (is_quick_0_31_opcode(opcode)) {
226 return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst)); 262 return sprintf(dst, "%s %d, r%d", mnemonics[opcode], jag_reg1(inst), jag_reg2(inst));