target-m68k: manage pre-dec et post-inc in CAS
authorLaurent Vivier <laurent@vivier.eu>
Fri, 13 Jan 2017 18:36:31 +0000 (19:36 +0100)
committerLaurent Vivier <laurent@vivier.eu>
Sat, 14 Jan 2017 09:06:21 +0000 (10:06 +0100)
In these cases we must update the address register after
the operation.

Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Message-Id: <1484332593-16782-4-git-send-email-laurent@vivier.eu>

target/m68k/translate.c

index 0e97900b2c3cc583793956ade4a2d78ff228a0d4..23e2b06205483bf9228f481155b46b4cecd1a030 100644 (file)
@@ -1963,6 +1963,15 @@ DISAS_INSN(cas)
     gen_partset_reg(opsize, DREG(ext, 0), load);
 
     tcg_temp_free(load);
+
+    switch (extract32(insn, 3, 3)) {
+    case 3: /* Indirect postincrement.  */
+        tcg_gen_addi_i32(AREG(insn, 0), addr, opsize_bytes(opsize));
+        break;
+    case 4: /* Indirect predecrememnt.  */
+        tcg_gen_mov_i32(AREG(insn, 0), addr);
+        break;
+    }
 }
 
 DISAS_INSN(cas2w)