about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorxctan <axunlei@gmail.com>2023-03-13 19:50:32 +0800
committerGitHub <noreply@github.com>2023-03-13 12:50:32 +0100
commita5f9bda13150e5548d0e3524bc6245c2e8ad5c54 (patch)
tree8b125522f1bbc6d2324d746d4b41b23989d4d00f /src
parent327b2355c178b88f908d42d71e709c88d60bb9f1 (diff)
downloadbox64-a5f9bda13150e5548d0e3524bc6245c2e8ad5c54.tar.gz
box64-a5f9bda13150e5548d0e3524bc6245c2e8ad5c54.zip
[RV64_DYNAREC] Added 8B MOV opcode (#555)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00.c13
-rw-r--r--src/dynarec/rv64/rv64_emitter.h2
2 files changed, 15 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c
index 489d870e..2849dfbb 100644
--- a/src/dynarec/rv64/dynarec_rv64_00.c
+++ b/src/dynarec/rv64/dynarec_rv64_00.c
@@ -106,6 +106,19 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             }
             break;
 
+        case 0x8B:
+            INST_NAME("MOV Gd, Ed");
+            nextop=F8;
+            GETGD;
+            if(MODREG) {
+                MVxw(gd, xRAX+(nextop&7)+(rex.b<<3));
+            } else {
+                addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0);
+                SMREADLOCK(lock);
+                LDxw(gd, ed, fixedaddress);
+            }
+            break;
+
         case 0x8D:
             INST_NAME("LEA Gd, Ed");
             nextop=F8;
diff --git a/src/dynarec/rv64/rv64_emitter.h b/src/dynarec/rv64/rv64_emitter.h
index a5cb0167..cdfddea0 100644
--- a/src/dynarec/rv64/rv64_emitter.h
+++ b/src/dynarec/rv64/rv64_emitter.h
@@ -221,6 +221,8 @@ f28–31  ft8–11  FP temporaries                  Caller
 
 // rd = [rs1 + imm12]
 #define LD(rd, rs1, imm12)          EMIT(I_type(imm12, rs1, 0b011, rd, 0b0000011))
+// rd = [rs1 + imm12]
+#define LDxw(rd, rs1, imm12)        EMIT(I_type(imm12, rs1, 0b011<<(1-rex.w), rd, 0b0000011))
 // [rs1 + imm12] = rs2
 #define SD(rs2, rs1, imm12)         EMIT(S_type(imm12, rs2, rs1, 0b011, 0b0100011))
 // [rs1 + imm12] = rs2