about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-02-07 16:57:56 +0800
committerGitHub <noreply@github.com>2025-02-07 09:57:56 +0100
commit6c60ad4695c167ac0a9f75b4b139eb46f5abaab9 (patch)
tree1c5f11ce00c633de5b168c182a2a756bfb86835c /src
parent37697e2ec7484a9bcc00d70a46147365121617a1 (diff)
downloadbox64-6c60ad4695c167ac0a9f75b4b139eb46f5abaab9.tar.gz
box64-6c60ad4695c167ac0a9f75b4b139eb46f5abaab9.zip
[RV64_DYNAREC] Small optim to 64 A1/A3 opcodes (#2320)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_64.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_64.c b/src/dynarec/rv64/dynarec_rv64_64.c
index c7b7885e..8d1e2d7f 100644
--- a/src/dynarec/rv64/dynarec_rv64_64.c
+++ b/src/dynarec/rv64/dynarec_rv64_64.c
@@ -496,9 +496,12 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                 u64 = F32;
             else
                 u64 = F64;
-            // TODO: could be optimized.
-            MOV64z(x1, u64);
-            ADDz(x1, x1, x4);
+            if (u64 < 0x800) {
+                ADDIz(x1, x4, u64);
+            } else {
+                MOV64z(x1, u64);
+                ADDz(x1, x1, x4);
+            }
             LDxw(xRAX, x1, 0);
             break;
 
@@ -509,9 +512,12 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                 u64 = F32;
             else
                 u64 = F64;
-            // TODO: could be optimized.
-            MOV64z(x1, u64);
-            ADDz(x1, x1, x4);
+            if (u64 < 0x800) {
+                ADDIz(x1, x4, u64);
+            } else {
+                MOV64z(x1, u64);
+                ADDz(x1, x1, x4);
+            }
             SDxw(xRAX, x1, 0);
             SMWRITE2();
             break;