From 45a4fc34d1e37a6cb931e5181d9834c5bb1cb4fd Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 2 May 2023 09:13:21 +0000 Subject: [RV64_DYNAREC] Improved 66 0F 3A 0B opcode --- src/dynarec/rv64/dynarec_rv64_660f.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_660f.c b/src/dynarec/rv64/dynarec_rv64_660f.c index ee89c010..ed0ab0f8 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f.c +++ b/src/dynarec/rv64/dynarec_rv64_660f.c @@ -349,27 +349,28 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEXSD(d0, 0); GETGXSD_empty(v0); d1 = fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); u8 = F8; FEQD(x2, d0, d0); BNEZ_MARK(x2); - FADDD(v0, d0, d0); + if (v0!=d0) FMVD(v0, d0); B_NEXT_nocond; MARK; // d0 is not nan - FABSD(v0, d0); + FABSD(v1, d0); MOV64x(x3, 1ULL << __DBL_MANT_DIG__); FCVTDL(d1, x3, RD_RTZ); - FLTD(x3, v0, d1); + FLTD(x3, v1, d1); BNEZ_MARK2(x3); if (v0!=d0) FMVD(v0, d0); B_NEXT_nocond; MARK2; if(u8&4) { u8 = sse_setround(dyn, ninst, x4, x2); - FCVTLD(x5, d0, RD_DYN); + FCVTLD(x5, v1, RD_DYN); FCVTDL(v0, x5, RD_DYN); x87_restoreround(dyn, ninst, u8); } else { - FCVTLD(x5, d0, round_round[u8&3]); + FCVTLD(x5, v1, round_round[u8&3]); FCVTDL(v0, x5, round_round[u8&3]); } FSGNJD(v0, v0, d0); -- cgit 1.4.1