Re: [Qemu-devel] [PATCH] target/m68k: implement rtd

2017-06-07 Thread John Paul Adrian Glaubitz
> Add "Return and Deallocate" (rtd) instruction.
>
>   RTD #d
>
> (SP) -> PC
> SP + 4 + d -> SP

Tested-By: John Paul Adrian Glaubitz 

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - glaub...@debian.org
`. `'   Freie Universitaet Berlin - glaub...@physik.fu-berlin.de
  `-GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913



Re: [Qemu-devel] [PATCH] target/m68k: implement rtd

2017-06-06 Thread Richard Henderson

On 06/05/2017 03:00 AM, Laurent Vivier wrote:

Add "Return and Deallocate" (rtd) instruction.

   RTD #d

 (SP) -> PC
 SP + 4 + d -> SP

Signed-off-by: Laurent Vivier
---
  target/m68k/cpu.c   |  2 ++
  target/m68k/cpu.h   |  1 +
  target/m68k/translate.c | 11 +++
  3 files changed, 14 insertions(+)


Reviewed-by: Richard Henderson 


r~



[Qemu-devel] [PATCH] target/m68k: implement rtd

2017-06-05 Thread Laurent Vivier
Add "Return and Deallocate" (rtd) instruction.

  RTD #d

(SP) -> PC
SP + 4 + d -> SP

Signed-off-by: Laurent Vivier 
---
 target/m68k/cpu.c   |  2 ++
 target/m68k/cpu.h   |  1 +
 target/m68k/translate.c | 11 +++
 3 files changed, 14 insertions(+)

diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
index fa10b6e..f068922 100644
--- a/target/m68k/cpu.c
+++ b/target/m68k/cpu.c
@@ -130,6 +130,7 @@ static void m68020_cpu_initfn(Object *obj)
 m68k_set_feature(env, M68K_FEATURE_FPU);
 m68k_set_feature(env, M68K_FEATURE_CAS);
 m68k_set_feature(env, M68K_FEATURE_BKPT);
+m68k_set_feature(env, M68K_FEATURE_RTD);
 }
 #define m68030_cpu_initfn m68020_cpu_initfn
 #define m68040_cpu_initfn m68020_cpu_initfn
@@ -151,6 +152,7 @@ static void m68060_cpu_initfn(Object *obj)
 m68k_set_feature(env, M68K_FEATURE_FPU);
 m68k_set_feature(env, M68K_FEATURE_CAS);
 m68k_set_feature(env, M68K_FEATURE_BKPT);
+m68k_set_feature(env, M68K_FEATURE_RTD);
 }
 
 static void m5208_cpu_initfn(Object *obj)
diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h
index 8095822..384ec5d 100644
--- a/target/m68k/cpu.h
+++ b/target/m68k/cpu.h
@@ -251,6 +251,7 @@ enum m68k_features {
 M68K_FEATURE_FPU,
 M68K_FEATURE_CAS,
 M68K_FEATURE_BKPT,
+M68K_FEATURE_RTD,
 };
 
 static inline int m68k_feature(CPUM68KState *env, int feature)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index 9f60fbc..ad4d4ef 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -2483,6 +2483,16 @@ DISAS_INSN(nop)
 {
 }
 
+DISAS_INSN(rtd)
+{
+TCGv tmp;
+int16_t offset = read_im16(env, s);
+
+tmp = gen_load(s, OS_LONG, QREG_SP, 0);
+tcg_gen_addi_i32(QREG_SP, QREG_SP, offset + 4);
+gen_jmp(s, tmp);
+}
+
 DISAS_INSN(rts)
 {
 TCGv tmp;
@@ -4904,6 +4914,7 @@ void register_m68k_insns (CPUM68KState *env)
 BASE(nop,   4e71, );
 BASE(stop,  4e72, );
 BASE(rte,   4e73, );
+INSN(rtd,   4e74, , RTD);
 BASE(rts,   4e75, );
 INSN(movec, 4e7b, , CF_ISA_A);
 BASE(jump,  4e80, ffc0);
-- 
2.9.4