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.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;