if ((using_prefetch || using_ce) && using_exception_3 && getv != 0 && size != sz_byte && !movem) {
int setapdiback = 0;
int fcmodeflags = 0;
+ int exp3rw = getv == 2;
printf("\tif (%sa & 1) {\n", name);
if (getv == 2) {
move_68000_address_error(mode, size, &setapdiback, &fcmodeflags);
}
+ } else if (g_instr->mnemo == i_MVSR2) {
+ // If MOVE from SR generates address error exception,
+ // RW field is set to Read!
+ exp3rw = 0;
}
if (setapdiback) {
printf("\t\t%sa += %d;\n", name, flags & GF_REVERSE2 ? -2 : 2);
printf("\t\texception3_%s(opcode, %sa, %d);\n",
- getv == 2 ? "write" : "read", name,
+ exp3rw ? "write" : "read", name,
// PC-relative: FC=2
(getv == 1 && (g_instr->smode == PC16 || g_instr->smode == PC8r) ? 2 : 1) | fcmodeflags);