about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorYang Liu <numbksco@gmail.com>2023-06-26 14:36:11 +0800
committerGitHub <noreply@github.com>2023-06-26 08:36:11 +0200
commit7e514ce4bd3a255ef7555f4867659e9c41d0719b (patch)
tree2edeb94ea6923bc313bab75122088ab621a1243d /src/dynarec
parent42dc36ad5af78da0e7d255df7662e9148cdfdde2 (diff)
downloadbox64-7e514ce4bd3a255ef7555f4867659e9c41d0719b.tar.gz
box64-7e514ce4bd3a255ef7555f4867659e9c41d0719b.zip
[DYNAREC_RV64] Fixed A0 MOV AL,Ob (#866)
* [DYNAREC_RV64] Fixed A0 MOV AL,Ob

* Fixed rv64_move32
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00_2.c4
-rw-r--r--src/dynarec/rv64/dynarec_rv64_helper.c2
2 files changed, 4 insertions, 2 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_00_2.c b/src/dynarec/rv64/dynarec_rv64_00_2.c
index 3fe52cef..7a5794b9 100644
--- a/src/dynarec/rv64/dynarec_rv64_00_2.c
+++ b/src/dynarec/rv64/dynarec_rv64_00_2.c
@@ -520,7 +520,9 @@ uintptr_t dynarec64_00_2(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int
             INST_NAME("MOV AL,Ob");
             if(rex.is32bits) u64 = F32; else u64 = F64;
             MOV64z(x1, u64);
-            LBU(xRAX, x1, 0);
+            LBU(x1, x1, 0);
+            ANDI(xRAX, xRAX, ~0xff);
+            OR(xRAX, xRAX, x1);
             break;
         case 0xA1:
             INST_NAME("MOV EAX,Od");
diff --git a/src/dynarec/rv64/dynarec_rv64_helper.c b/src/dynarec/rv64/dynarec_rv64_helper.c
index 3342880e..a005c3b9 100644
--- a/src/dynarec/rv64/dynarec_rv64_helper.c
+++ b/src/dynarec/rv64/dynarec_rv64_helper.c
@@ -2047,7 +2047,7 @@ void rv64_move32(dynarec_rv64_t* dyn, int ninst, int reg, int32_t val, int zerou
         LUI(reg, hi20);
         src = reg;
     }
-    if (lo12 || !hi20) ADDI(reg, src, lo12);
+    if (lo12 || !hi20) ADDIW(reg, src, lo12);
     if((zeroup && ((hi20&0x80000) || (!hi20 && (lo12&0x800)))
     || (!zeroup && !(val&0x80000000) && ((hi20&0x80000) || (!hi20 && (lo12&0x800)))))) {
         ZEROUP(reg);