about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorxctan <xctan@cirno.icu>2023-03-21 15:31:41 +0800
committerGitHub <noreply@github.com>2023-03-21 08:31:41 +0100
commit67690748bdcaca0e5191a53ce91783a9a50f4e37 (patch)
treec0d7fd4e8d195e38e8e92d55b2dc333441d59f9f /src
parent218ceb8a2af68b7ae467a9aa8f910bc5c05a315e (diff)
downloadbox64-67690748bdcaca0e5191a53ce91783a9a50f4e37.tar.gz
box64-67690748bdcaca0e5191a53ce91783a9a50f4e37.zip
[RV64_DYNAREC] Added B0 MOV opcode and small optim (#607)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c
index 1c0f5918..9aec9fb6 100644
--- a/src/dynarec/rv64/dynarec_rv64_00.c
+++ b/src/dynarec/rv64/dynarec_rv64_00.c
@@ -620,18 +620,32 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             MOV64xw(x2, i64);
             emit_test32(dyn, ninst, rex, xRAX, x2, x3, x4, x5);
             break;
+
+        case 0xB0:
+        case 0xB1:
+        case 0xB2:
+        case 0xB3:
+            INST_NAME("MOV xL, Ib");
+            u8 = F8;
+            if(rex.rex)
+                gb1 = xRAX+(opcode&7)+(rex.b<<3);
+            else
+                gb1 = xRAX+(opcode&3);
+            ANDI(gb1, gb1, ~0xff);
+            ORI(gb1, gb1, u8);
+            break;
         case 0xB4:
         case 0xB5:
         case 0xB6:
         case 0xB7:
             INST_NAME("MOV xH, Ib");
             u8 = F8;
-            MOV32w(x1, u8);
             if(rex.rex) {
                 gb1 = xRAX+(opcode&7)+(rex.b<<3);
                 ANDI(gb1, gb1, ~0xff);
-                OR(gb1, gb1, x1);
+                ORI(gb1, gb1, u8);
             } else {
+                MOV32w(x1, u8);
                 gb1 = xRAX+(opcode&3);
                 MOV64x(x2, 0xffffffffffff00ffLL);
                 AND(gb1, gb1, x2);