diff options
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_64.c | 12 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_f0.c | 8 |
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);} |