about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorxctan <xctan@cirno.icu>2023-03-16 22:29:07 +0800
committerGitHub <noreply@github.com>2023-03-16 15:29:07 +0100
commit4b2a340bc72293f9bb6b9c9093759ab6ec0710cb (patch)
tree71e2b99a3a48d59602e60dabaf1c5176a61cee13 /src
parent7cb9a5064a586c2599bded030e229d376c97e6cf (diff)
downloadbox64-4b2a340bc72293f9bb6b9c9093759ab6ec0710cb.tar.gz
box64-4b2a340bc72293f9bb6b9c9093759ab6ec0710cb.zip
[RV64_DYNAREC] Added 98 CWDE opcode (#574)
* [RV64_DYNAREC] Added 98 CWDE opcode

* [RV64_DYNAREC] Added 90 XCHG opcode
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c
index 72c10f90..bcd59c0b 100644
--- a/src/dynarec/rv64/dynarec_rv64_00.c
+++ b/src/dynarec/rv64/dynarec_rv64_00.c
@@ -266,6 +266,37 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                 }
             }
             break;
+
+        case 0x90:
+        case 0x91:
+        case 0x92:
+        case 0x93:
+        case 0x94:
+        case 0x95:
+        case 0x96:
+        case 0x97:
+            gd = xRAX+(opcode&0x07)+(rex.b<<3);
+            if(gd==xRAX) {
+                INST_NAME("NOP");
+            } else {
+                INST_NAME("XCHG EAX, Reg");
+                MVxw(x2, xRAX);
+                MVxw(xRAX, gd);
+                MVxw(gd, x2);
+            }
+            break;
+        case 0x98:
+            INST_NAME("CWDE");
+            if(rex.w) {
+                SEXT_W(xRAX, xRAX);
+            } else {
+                SLLI(xRAX, xRAX, 16);
+                SRAIW(xRAX, xRAX, 16);
+                ZEROUP(xRAX);
+            }
+            break;
+
+
         case 0xB8:
         case 0xB9:
         case 0xBA: