about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorxctan <xctan@cirno.icu>2023-03-16 23:06:38 +0800
committerGitHub <noreply@github.com>2023-03-16 16:06:38 +0100
commitfa4584555d8d6bdc1ae7e16eff5bb40ffc07d124 (patch)
tree3c37fbf43c9d5c6abde06cb7d55a97bde2dc23a7
parent4b2a340bc72293f9bb6b9c9093759ab6ec0710cb (diff)
downloadbox64-fa4584555d8d6bdc1ae7e16eff5bb40ffc07d124.tar.gz
box64-fa4584555d8d6bdc1ae7e16eff5bb40ffc07d124.zip
[RV64_DYNAREC] Added 68 PUSH opcode (#575)
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c
index bcd59c0b..58811afa 100644
--- a/src/dynarec/rv64/dynarec_rv64_00.c
+++ b/src/dynarec/rv64/dynarec_rv64_00.c
@@ -130,6 +130,20 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             }
             break;
 
+        case 0x68:
+            INST_NAME("PUSH Id");
+            i64 = F32S;
+            if(PK(0)==0xC3) {
+                MESSAGE(LOG_DUMP, "PUSH then RET, using indirect\n");
+                TABLE64(x3, addr-4);
+                LW(x1, x3, 0);
+                PUSH1(x1);
+            } else {
+                MOV64x(x3, i64);
+                PUSH1(x3);
+            }
+            break;
+
         #define GO(GETFLAGS, NO, YES, F)                                \
             READFLAGS(F);                                               \
             i8 = F8S;                                                   \
@@ -159,7 +173,7 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
         GOCOND(0x70, "J", "ib");
 
         #undef GO
-
+        
         case 0x80:
             nextop = F8;
             switch((nextop>>3)&7) {