Skip to contentSkip to conversation

m68k: fix subx mem, mem instruction

PATCH In review Pavel Dovgalyuk 2 participants 2 messages Apr 18, 2018

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 m68k: fix subx mem, mem instruction

This patch fixes decrement of the pointers for subx mem, mem instructions. Without the patch pointers are decremented by OS_* constant value instead of retrieving the corresponding data size and using it as a decrement.

---
 target/m68k/translate.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
target/m68k/translate.c +2 -2
index 6beaf9e..e407ba2 100644
@@ -3166,11 +3166,11 @@ DISAS_INSN(subx_mem)
     opsize = insn_opsize(insn);
 
     addr_src = AREG(insn, 0);
-    tcg_gen_subi_i32(addr_src, addr_src, opsize);
+    tcg_gen_subi_i32(addr_src, addr_src, opsize_bytes(opsize));
     src = gen_load(s, opsize, addr_src, 1, IS_USER(s));
 
     addr_dest = AREG(insn, 9);
-    tcg_gen_subi_i32(addr_dest, addr_dest, opsize);
+    tcg_gen_subi_i32(addr_dest, addr_dest, opsize_bytes(opsize));
     dest = gen_load(s, opsize, addr_dest, 1, IS_USER(s));
 
     gen_subx(s, src, dest, opsize);
Reviewed-by on v1 1/1
#1 lore raw

Le 18/04/2018 à 08:41, Pavel Dovgalyuk a écrit :

Quoted 18 lines

This patch fixes decrement of the pointers for subx mem, mem instructions. Without the patch pointers are decremented by OS_* constant value instead of retrieving the corresponding data size and using it as a decrement.

---
 target/m68k/translate.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
target/m68k/translate.c +0 -0
index 6beaf9e..e407ba2 100644
@@ -3166,11 +3166,11 @@ DISAS_INSN(subx_mem)
     opsize = insn_opsize(insn);
 
     addr_src = AREG(insn, 0);

target/m68k/translate.c DISAS_INSN(subx_mem) · line 3176

Quoted 10 lines
target/m68k/translate.c +2 -2
-    tcg_gen_subi_i32(addr_src, addr_src, opsize);
+    tcg_gen_subi_i32(addr_src, addr_src, opsize_bytes(opsize));
     src = gen_load(s, opsize, addr_src, 1, IS_USER(s));
 
     addr_dest = AREG(insn, 9);
-    tcg_gen_subi_i32(addr_dest, addr_dest, opsize);
+    tcg_gen_subi_i32(addr_dest, addr_dest, opsize_bytes(opsize));
     dest = gen_load(s, opsize, addr_dest, 1, IS_USER(s));
 
     gen_subx(s, src, dest, opsize);