From 01d1ea0b90ed171c33ff18b27966fabf652f4eba Mon Sep 17 00:00:00 2001 From: xctan Date: Sun, 19 Mar 2023 16:40:52 +0800 Subject: Added FF /0 INC opcode (#592) --- src/dynarec/rv64/dynarec_rv64_00.c | 6 +++- src/dynarec/rv64/dynarec_rv64_emit_math.c | 56 +++++++++++++++++++++++++++++++ src/dynarec/rv64/dynarec_rv64_helper.h | 2 +- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c index 8fb6a9ae..926f3d6a 100644 --- a/src/dynarec/rv64/dynarec_rv64_00.c +++ b/src/dynarec/rv64/dynarec_rv64_00.c @@ -1059,7 +1059,11 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni nextop = F8; switch((nextop>>3)&7) { case 0: // INC Ed - DEFAULT; + INST_NAME("INC Ed"); + SETFLAGS(X_ALL&~X_CF, SF_SUBSET_PENDING); + GETED(0); + emit_inc32(dyn, ninst, rex, ed, x3, x4, x5, x6); + WBACK; break; case 1: //DEC Ed DEFAULT; diff --git a/src/dynarec/rv64/dynarec_rv64_emit_math.c b/src/dynarec/rv64/dynarec_rv64_emit_math.c index a201d639..8b735f32 100644 --- a/src/dynarec/rv64/dynarec_rv64_emit_math.c +++ b/src/dynarec/rv64/dynarec_rv64_emit_math.c @@ -294,3 +294,59 @@ void emit_sub32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i emit_pf(dyn, ninst, s1, s3, s4); } } + +// emit INC32 instruction, from s1, store result in s1 using s3 and s4 as scratch +void emit_inc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4, int s5) +{ + IFX(X_ALL) { + ANDI(xFlags, xFlags, ~((1UL<