From 050af0bc519fa2924a77c5648830da2f88cbe993 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 31 Aug 2026 03:35:08 +0000 Subject: [PATCH] Revert "[dynarmic] fix windows perf regression due to reordered CPR" This reverts commit 403cc0ab66eb4a6ca09edc03999b639fb3872702. --- src/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h | 6 +++--- src/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h | 8 +++++--- src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp | 2 +- src/dynarmic/src/dynarmic/backend/x64/block_of_code.h | 7 ++----- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h b/src/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h index c61f7723a1..ad151e6092 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h +++ b/src/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h @@ -39,6 +39,9 @@ struct A32JitState { u32 cpsr_q = 0; u32 cpsr_nzcv = 0; u32 cpsr_jaifm = 0; + u32 fpsr_exc = 0; + u32 fpsr_qc = 0; + u32 fpsr_nzcv = 0; alignas(16) std::array ExtReg{}; // Extension registers. @@ -53,9 +56,6 @@ struct A32JitState { u32 rsb_ptr = 0; std::array rsb_location_descriptors; std::array rsb_codeptrs; - u32 fpsr_exc = 0; - u32 fpsr_qc = 0; - u32 fpsr_nzcv = 0; u32 Cpsr() const; void SetCpsr(u32 cpsr); diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h b/src/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h index 6de15b4709..c3d8b04d1e 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h +++ b/src/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h @@ -39,7 +39,12 @@ struct A64JitState { u64 sp = 0; u64 pc = 0; u32 cpsr_nzcv = 0; + u32 fpsr_exc = 0; + u32 fpsr_qc = 0; + u32 fpcr = 0; + alignas(16) std::array vec{}; // Extension registers. + // For internal use (See: BlockOfCode::RunCode) u32 guest_MXCSR = 0x00001f80; u32 asimd_MXCSR = 0x00009fc0; @@ -50,9 +55,6 @@ struct A64JitState { u32 rsb_ptr = 0; std::array rsb_location_descriptors; std::array rsb_codeptrs; - u32 fpsr_exc = 0; - u32 fpsr_qc = 0; - u32 fpcr = 0; u32 GetPstate() const { return NZCV::FromX64(cpsr_nzcv); diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp index 38a666397b..c57ab6a1aa 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp @@ -171,9 +171,9 @@ BlockOfCode::BlockOfCode(RunCodeCallbacks cb, JitStateInfo jsi, size_t total_cod , nullptr //Allow RWE #endif , nullptr) + , constant_pool(*this, CONSTANT_POOL_SIZE) , jsi(jsi) , cb(std::move(cb)) - , constant_pool(*this, CONSTANT_POOL_SIZE) { EnableWriting(); EnsureMemoryCommitted(PRELUDE_COMMIT_SIZE); diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h index b154d1ddc4..20012a070f 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h @@ -173,15 +173,12 @@ private: static constexpr size_t MXCSR_ALREADY_EXITED = 1 << 0; static constexpr size_t FORCE_RETURN = 1 << 1; - // dont change the order of these - // Windows hates when jsi -> cb -> constant-pool are not in that - // specific order - JitStateInfo jsi; - RunCodeCallbacks cb; ConstantPool constant_pool; + JitStateInfo jsi; std::array return_from_run_code; RunCodeFuncType run_code = nullptr; RunCodeFuncType step_code = nullptr; + RunCodeCallbacks cb; CodePtr code_begin = nullptr; #ifdef _WIN32 size_t committed_size = 0;