about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYang Liu <numbksco@gmail.com>2024-05-20 20:08:52 +0800
committerGitHub <noreply@github.com>2024-05-20 14:08:52 +0200
commit8a701755d8679f2625a1f2c7ab153cab126b188e (patch)
tree18bb6bb2f75cdacf4181996f5b9ac5ebdfa326d8
parentaead503f0290eef0e56de76ff4001477f0e8d812 (diff)
downloadbox64-8a701755d8679f2625a1f2c7ab153cab126b188e.tar.gz
box64-8a701755d8679f2625a1f2c7ab153cab126b188e.zip
[LA64_DYNAREC] Fixed LOCK ADD opcode (#1507)
-rw-r--r--src/dynarec/la64/dynarec_la64_f0.c8
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);