From ee58b6a7347cadb33a721dc492bb6a7cc587b2ca Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 30 Apr 2024 21:43:09 +0200 Subject: [RV64_DYNAREC] Optimized F0 0F C7 32bits opcode --- src/dynarec/rv64/dynarec_rv64_f0.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_f0.c b/src/dynarec/rv64/dynarec_rv64_f0.c index 5b61d340..0f9c97ea 100644 --- a/src/dynarec/rv64/dynarec_rv64_f0.c +++ b/src/dynarec/rv64/dynarec_rv64_f0.c @@ -323,26 +323,22 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni AMOSWAP_W(xZR, xZR, x9, 1, 1); } else { SMDMB(); + AND(x3, xRAX, xMASK); + SLLI(x2, xRDX, 32); + OR(x3, x3, x2); + AND(x4, xRBX, xMASK); + SLLI(x2, xRCX, 32); + OR(x4, x4, x2); MARKLOCK; LR_D(x2, wback, 1, 1); - AND(x3, x2, xMASK); - AND(x4, xRAX, xMASK); - SRLI(x5, x2, 32); - AND(x6, xRDX, xMASK); - BNE_MARK(x3, x4); // EAX != Ed[0] - BNE_MARK(x5, x6); // EDX != Ed[1] - SLLI(x2, xRCX, 32); - AND(x3, xRBX, xMASK); - OR(x2, x2, x3); - SC_D(x3, x2, wback, 1, 1); - BNEZ_MARKLOCK(x3); + BNE_MARK(x2, x3); // EDX_EAX != Ed + SC_D(x5, x4, wback, 1, 1); + BNEZ_MARKLOCK(x5); ORI(xFlags, xFlags, 1<