diff options
| author | Haichen Wu <www.wxmqq@gmail.com> | 2024-03-04 22:15:22 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-04 15:15:22 +0100 |
| commit | d5176ba278d53d231730bd151d6817e2432a3cfd (patch) | |
| tree | b9b9d3a0773759ef58b76c893da0571f99b7840e /src | |
| parent | 13a8108e1efaef7c797bf0046dbbc8bb8a2db9b5 (diff) | |
| download | box64-d5176ba278d53d231730bd151d6817e2432a3cfd.tar.gz box64-d5176ba278d53d231730bd151d6817e2432a3cfd.zip | |
[LA64_DYNAREC] Added more opcodes (#1322)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_00.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c index c7374442..26c300d4 100644 --- a/src/dynarec/la64/dynarec_la64_00.c +++ b/src/dynarec/la64/dynarec_la64_00.c @@ -238,6 +238,19 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0x66: addr = dynarec64_66(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); 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); + LD_W(x1, x3, 0); + PUSH1z(x1); + } else { + MOV64z(x3, i64); + PUSH1z(x3); + } + break; #define GO(GETFLAGS, NO, YES, F, I) \ READFLAGS(F); \ @@ -527,6 +540,11 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SMWRITELOCK(lock); } break; + case 0xC9: + INST_NAME("LEAVE"); + MVz(xRSP, xRBP); + POP1z(xRBP); + break; case 0xCC: SETFLAGS(X_ALL, SF_SET); SKIPTEST(x1); @@ -815,6 +833,12 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni *need_epilog = 0; *ok = 0; break; + case 6: // Push Ed + INST_NAME("PUSH Ed"); + GETEDz(0); + PUSH1z(ed); + break; + default: DEFAULT; } |