From f21ecb32bbd2bb1452cda4db10ed63a14afa86cc Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 1 Apr 2023 18:42:59 +0000 Subject: [RV64_DYNAREC] Added F3 0F 2C opcode, and worked on rounding --- src/dynarec/rv64/dynarec_rv64_df.c | 4 +-- src/dynarec/rv64/dynarec_rv64_f30f.c | 27 +++++++++++++++++-- src/dynarec/rv64/rv64_emitter.h | 51 +++++++++++++++++++++++++++++------- 3 files changed, 68 insertions(+), 14 deletions(-) diff --git a/src/dynarec/rv64/dynarec_rv64_df.c b/src/dynarec/rv64/dynarec_rv64_df.c index 9eb96ad1..b1e24231 100644 --- a/src/dynarec/rv64/dynarec_rv64_df.c +++ b/src/dynarec/rv64/dynarec_rv64_df.c @@ -106,9 +106,9 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni addr = geted(dyn, addr, ninst, nextop, &wback, x3, x4, &fixedaddress, rex, NULL, 1, 0); LH(x1, wback, fixedaddress); if(ST_IS_F(0)) { - FCVTSL(v1, x1); + FCVTSL(v1, x1, RD_RNE); } else { - FCVTDL(v1, x1); + FCVTDL(v1, x1, RD_RNE); } break; default: diff --git a/src/dynarec/rv64/dynarec_rv64_f30f.c b/src/dynarec/rv64/dynarec_rv64_f30f.c index 53e1daa9..9c11eec8 100644 --- a/src/dynarec/rv64/dynarec_rv64_f30f.c +++ b/src/dynarec/rv64/dynarec_rv64_f30f.c @@ -92,9 +92,32 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETGXSS(v0); GETED(0); if(rex.w) { - FCVTSL(v0, ed); + FCVTSL(v0, ed, RD_RNE); } else { - FCVTSW(v0, ed); + FCVTSW(v0, ed, RD_RNE); + } + break; + + case 0x2C: + INST_NAME("CVTTSS2SI Gd, Ex"); + nextop = F8; + GETGD; + GETEXSS(d0, 0); + if(!box64_dynarec_fastround) { + FSFLAGSI(xZR); // // reset all bits + } + FCVTSxw(gd, d0, RD_RTZ); + if(!rex.w) + ZEROUP(gd); + if(!box64_dynarec_fastround) { + FRFLAGS(x5); // get back FPSR to check the IOC bit + ANDI(x5, x5, (1<