diff options
| author | Yang Liu <numbksco@gmail.com> | 2024-05-20 20:08:52 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-20 14:08:52 +0200 |
| commit | 8a701755d8679f2625a1f2c7ab153cab126b188e (patch) | |
| tree | 18bb6bb2f75cdacf4181996f5b9ac5ebdfa326d8 | |
| parent | aead503f0290eef0e56de76ff4001477f0e8d812 (diff) | |
| download | box64-8a701755d8679f2625a1f2c7ab153cab126b188e.tar.gz box64-8a701755d8679f2625a1f2c7ab153cab126b188e.zip | |
[LA64_DYNAREC] Fixed LOCK ADD opcode (#1507)
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_f0.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/dynarec/la64/dynarec_la64_f0.c b/src/dynarec/la64/dynarec_la64_f0.c index 545f4287..afb27243 100644 --- a/src/dynarec/la64/dynarec_la64_f0.c +++ b/src/dynarec/la64/dynarec_la64_f0.c @@ -207,7 +207,7 @@ uintptr_t dynarec64_F0(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (i64 >= -2048 && i64 < 2048) { ADDIxw(x4, x1, i64); } else { - ADDxw(x4, x1, x4); + ADDxw(x4, x1, x3); } SCxw(x4, wback, 0); BEQZ_MARKLOCK(x4); @@ -237,13 +237,15 @@ uintptr_t dynarec64_F0(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni i64 = F32S; else i64 = F8S; + if (i64 <= -2048 || i64 > 2048) { + MOV64xw(x3, i64); + } MARKLOCK; LLxw(x1, wback, 0); if (i64 > -2048 && i64 <= 2048) { ADDIxw(x4, x1, -i64); } else { - MOV64xw(x4, i64); - SUBxw(x4, x1, x4); + SUBxw(x4, x1, x3); } SCxw(x4, wback, 0); BEQZ_MARKLOCK(x4); |