From 3bf4a93a4469dc2da9e99925955c71eaefed953b Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Thu, 13 Apr 2023 20:47:20 +0800 Subject: [RV64_DYNAREC] Added 0F AE /0,/1 opcodes (#696) --- src/dynarec/rv64/dynarec_rv64_0f.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index 72c61e4a..3cded7b4 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -531,7 +531,31 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SMDMB(); } else { switch((nextop>>3)&7) { - case 2: + case 0: + INST_NAME("FXSAVE Ed"); + MESSAGE(LOG_DUMP, "Need Optimization\n"); + fpu_purgecache(dyn, ninst, 0, x1, x2, x3); + if(MODREG) { + DEFAULT; + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x3, &fixedaddress, rex, NULL, 0, 0); + if(ed!=x1) {MV(x1, ed);} + CALL(rex.w?((void*)fpu_fxsave64):((void*)fpu_fxsave32), -1); + } + break; + case 1: + INST_NAME("FXRSTOR Ed"); + MESSAGE(LOG_DUMP, "Need Optimization\n"); + fpu_purgecache(dyn, ninst, 0, x1, x2, x3); + if(MODREG) { + DEFAULT; + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x3, &fixedaddress, rex, NULL, 0, 0); + if(ed!=x1) {MV(x1, ed);} + CALL(rex.w?((void*)fpu_fxrstor64):((void*)fpu_fxrstor32), -1); + } + break; + case 2: INST_NAME("LDMXCSR Md"); GETED(0); SW(ed, xEmu, offsetof(x64emu_t, mxcsr)); -- cgit 1.4.1