From 2038df85c0fc289acc7ff1dce4cd6b416031f7f5 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 30 May 2025 21:38:43 +0200 Subject: [ARM64_DYNAREC] Try to optimise Windows INT n version on 64bits (TODO: Interp and 32bits and wowbox64) --- src/emu/x87emu_private.c | 6 +++++- src/emu/x87emu_private.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src/emu') diff --git a/src/emu/x87emu_private.c b/src/emu/x87emu_private.c index 5d95a8e5..4936bf6c 100644 --- a/src/emu/x87emu_private.c +++ b/src/emu/x87emu_private.c @@ -476,10 +476,14 @@ void fpu_xsave(x64emu_t* emu, void* ed, int is32bits) void fpu_xrstor(x64emu_t* emu, void* ed, int is32bits) { + uint64_t mask = R_EAX | (((uint64_t)R_EDX)<<32); + return fpu_xrstor_mask(emu, ed, is32bits, mask); +} + +void fpu_xrstor_mask(x64emu_t* emu, void* ed, int is32bits, uint64_t mask) { xsave64_t *p = (xsave64_t*)ed; xsaveheader_t *h = (xsaveheader_t*)(p+1); int compressed = (h->xcomp_bv>>63); - uint64_t mask = R_EAX | (((uint64_t)R_EDX)<<32); uint32_t rfbm = (0b111&mask); uint32_t to_restore = rfbm & h->xstate_bv; uint32_t to_init = rfbm & ~h->xstate_bv; diff --git a/src/emu/x87emu_private.h b/src/emu/x87emu_private.h index 74758acf..ff42d440 100644 --- a/src/emu/x87emu_private.h +++ b/src/emu/x87emu_private.h @@ -219,6 +219,7 @@ void fpu_fxrstor64(x64emu_t* emu, void* ed); void fpu_xsave(x64emu_t* emu, void* ed, int is32bits); void fpu_xsave_mask(x64emu_t* emu, void* ed, int is32bits, uint64_t mask); void fpu_xrstor(x64emu_t* emu, void* ed, int is32bits); +void fpu_xrstor_mask(x64emu_t* emu, void* ed, int is32bits, uint64_t mask); uint32_t cvtf16_32(uint16_t v); uint16_t cvtf32_16(uint32_t v, uint8_t rounding); -- cgit 1.4.1