about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_f0.c26
1 files changed, 11 insertions, 15 deletions
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<<F_ZF);
                                 B_MARK3_nocond;
                                 MARK;
-                                ADDI(xRAX, x3, 0);
-                                ADDI(xRDX, x5, 0);
-                                AND(xRAX, xRAX, xMASK);
-                                AND(xRDX, xRDX, xMASK);
+                                SLLI(xRDX, x2, 32);
+                                AND(xRAX, x2, xMASK);
                                 MARK3;
                                 SMDMB();
                             }