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_64.c12
-rw-r--r--src/dynarec/rv64/dynarec_rv64_f0.c8
2 files changed, 7 insertions, 13 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_64.c b/src/dynarec/rv64/dynarec_rv64_64.c
index 9ab951e4..96fe8288 100644
--- a/src/dynarec/rv64/dynarec_rv64_64.c
+++ b/src/dynarec/rv64/dynarec_rv64_64.c
@@ -191,9 +191,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     SETFLAGS(X_ALL, SF_SET_PENDING);
                     GETEDO(x6, (opcode==0x81)?4:1, x5);
                     if(opcode==0x81) i64 = F32S; else i64 = F8S;
-                    SD(x6, xEmu, offsetof(x64emu_t, scratch));
-                    emit_add32c(dyn, ninst, rex, ed, i64, x3, x4, x5, x6);
-                    LD(x6, xEmu, offsetof(x64emu_t, scratch));
+                    emit_add32c(dyn, ninst, rex, ed, i64, x3, x4, x5, x9);
                     WBACKO(x6);
                     break;
                 case 1: // OR
@@ -223,9 +221,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     GETEDO(x6, (opcode==0x81)?4:1, x5);
                     if(opcode==0x81) i64 = F32S; else i64 = F8S;
                     MOV64xw(x5, i64);
-                    SD(x6, xEmu, offsetof(x64emu_t, scratch));
-                    emit_sbb32(dyn, ninst, rex, ed, x5, x3, x4, x6);
-                    LD(x6, xEmu, offsetof(x64emu_t, scratch));
+                    emit_sbb32(dyn, ninst, rex, ed, x5, x3, x4, x9);
                     WBACKO(x6);
                     break;
                 case 4: // AND
@@ -241,9 +237,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     SETFLAGS(X_ALL, SF_SET_PENDING);
                     GETEDO(x6, (opcode==0x81)?4:1, x5);
                     if(opcode==0x81) i64 = F32S; else i64 = F8S;
-                    SD(x6, xEmu, offsetof(x64emu_t, scratch));
-                    emit_sub32c(dyn, ninst, rex, ed, i64, x3, x4, x5, x6);
-                    LD(x6, xEmu, offsetof(x64emu_t, scratch));
+                    emit_sub32c(dyn, ninst, rex, ed, i64, x3, x4, x5, x9);
                     WBACKO(x6);
                     break;
                 case 6: // XOR
diff --git a/src/dynarec/rv64/dynarec_rv64_f0.c b/src/dynarec/rv64/dynarec_rv64_f0.c
index 617b8df1..9e184343 100644
--- a/src/dynarec/rv64/dynarec_rv64_f0.c
+++ b/src/dynarec/rv64/dynarec_rv64_f0.c
@@ -160,10 +160,10 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                                     gb1 = xRAX+(gd&3);
                                 }
                                 addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, LOCK_LOCK, 0, 0);
-                                MARKLOCK;
-                                ANDI(x2, wback, ~0b11); // align to 32bit
                                 ANDI(x5, wback, 0b11);
                                 SLLI(x5, x5, 3);        // shamt
+                                MARKLOCK;
+                                ANDI(x2, wback, ~0b11); // align to 32bit
                                 LWU(x1, x2, 0);
                                 LR_W(x4, x2, 1, 1);
                                 SRL(x4, x4, x5);
@@ -184,8 +184,8 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                                 SLL(x1, x1, x5);
                                 OR(x1, x1, x2);
                                 ANDI(x2, wback, ~0b11); // align to 32bit again
-                                SC_W(x5, x1, x2, 1, 1);
-                                BNEZ_MARKLOCK(x5);
+                                SC_W(x9, x1, x2, 1, 1);
+                                BNEZ_MARKLOCK(x9);
                                 // done
                                 MARK;
                                 UFLAG_IF {emit_cmp8(dyn, ninst, x6, x4, x1, x2, x3, x5);}