diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-02-18 00:06:47 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-17 17:06:47 +0100 |
| commit | f85b9ac664fedafe2fba8d40a01456bf197b5228 (patch) | |
| tree | 54ba5c4575ace87dd29b4cd2f026b8f6d0bcbe76 /src | |
| parent | ee5a41e21e01dfc3bf51a8f893ffdea2f2791e52 (diff) | |
| download | box64-f85b9ac664fedafe2fba8d40a01456bf197b5228.tar.gz box64-f85b9ac664fedafe2fba8d40a01456bf197b5228.zip | |
[INTERP] Added more nops ([DYNAREC] too) (#2377)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_64.c | 8 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_64.c | 14 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_64.c | 7 | ||||
| -rw-r--r-- | src/emu/x64run64.c | 7 |
4 files changed, 35 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index 3aa3571b..ee1d22f1 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -194,7 +194,13 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin DEFAULT; } break; - + case 0x18: + case 0x19: + case 0x1F: + INST_NAME("NOP (multibyte)"); + nextop = F8; + FAKEED; + break; case 0x28: switch(rep) { case 0: diff --git a/src/dynarec/la64/dynarec_la64_64.c b/src/dynarec/la64/dynarec_la64_64.c index 2af080ef..6e076719 100644 --- a/src/dynarec/la64/dynarec_la64_64.c +++ b/src/dynarec/la64/dynarec_la64_64.c @@ -79,6 +79,20 @@ uintptr_t dynarec64_64(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETEDO(x4, 0); emit_or32(dyn, ninst, rex, gd, ed, x3, x4); break; + case 0x0F: + opcode = F8; + switch (opcode) { + case 0x18: + case 0x19: + case 0x1F: + INST_NAME("NOP (multibyte)"); + nextop = F8; + FAKEED; + break; + default: + DEFAULT; + } + break; case 0x2B: INST_NAME("SUB Gd, Seg:Ed"); SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); diff --git a/src/dynarec/rv64/dynarec_rv64_64.c b/src/dynarec/rv64/dynarec_rv64_64.c index 6447c7f2..69503d77 100644 --- a/src/dynarec/rv64/dynarec_rv64_64.c +++ b/src/dynarec/rv64/dynarec_rv64_64.c @@ -131,6 +131,13 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } break; + case 0x18: + case 0x19: + case 0x1F: + INST_NAME("NOP (multibyte)"); + nextop = F8; + FAKEED; + break; default: DEFAULT; } diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index 0470d92a..33f1e806 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -178,6 +178,13 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) return 0; } break; + + case 0x18: + case 0x19: + case 0x1F: /* NOP (multi-byte) */ + nextop = F8; + FAKEED(0); + break; case 0x28: switch(rep) { case 0: /* MOVAPS Gx, FS:Ex */ |