about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-18 09:15:28 +0000
committerptitSeb <sebastien.chev@gmail.com>2023-03-18 09:15:28 +0000
commit2d3aafefe1756e6ffca6af99240fa1ff25d18871 (patch)
tree3915d02008d9f048dea0c7ab106de3702853fcf2 /src
parent5b1f16d7e9741181c5b9c6650137b2648d836611 (diff)
downloadbox64-2d3aafefe1756e6ffca6af99240fa1ff25d18871.tar.gz
box64-2d3aafefe1756e6ffca6af99240fa1ff25d18871.zip
[RV64_DYNAREC] Added 66 C7 MOV opcode
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_66.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_66.c b/src/dynarec/rv64/dynarec_rv64_66.c
index f42ca1fb..ecfe34b0 100644
--- a/src/dynarec/rv64/dynarec_rv64_66.c
+++ b/src/dynarec/rv64/dynarec_rv64_66.c
@@ -85,6 +85,26 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             // just use regular conditional jump
             return dynarec64_00(dyn, addr-1, ip, ninst, rex, rep, ok, need_epilog);
 
+        case 0xC7:
+            INST_NAME("MOV Ew, Iw");
+            nextop = F8;
+            if(MODREG) {
+                ed = xRAX+(nextop&7)+(rex.b<<3);
+                ADDI(x1, xZR, -1);
+                SRLI(x1, x1, 48);
+                AND(ed, ed, x1);
+                u16 = F16;
+                MOV32w(x1, u16);
+                ORI(ed, ed, x1);
+            } else {
+                addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 2);
+                u16 = F16;
+                MOV32w(x1, u16);
+                SH(x1, ed, fixedaddress);
+                SMWRITELOCK(lock);
+            }
+            break;
+
         default:
             DEFAULT;
     }