diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-05-30 21:38:43 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-05-30 21:38:43 +0200 |
| commit | 2038df85c0fc289acc7ff1dce4cd6b416031f7f5 (patch) | |
| tree | 0f9d73ad0b29388b8452f812fca9028eed8d0339 /src/dynarec | |
| parent | b142c5a1817fb788b9692870ff6aa0cb3e622aea (diff) | |
| download | box64-2038df85c0fc289acc7ff1dce4cd6b416031f7f5.tar.gz box64-2038df85c0fc289acc7ff1dce4cd6b416031f7f5.zip | |
[ARM64_DYNAREC] Try to optimise Windows INT n version on 64bits (TODO: Interp and 32bits and wowbox64)
Diffstat (limited to 'src/dynarec')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 2 | ||||
| -rw-r--r-- | src/dynarec/dynarec_native_functions.c | 6 | ||||
| -rw-r--r-- | src/dynarec/dynarec_native_functions.h | 1 |
3 files changed, 8 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 7b227e24..84f134fc 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2672,13 +2672,13 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOV32w(x1, u8); CALL(native_int, -1); LOAD_XEMU_CALL(xRIP); + LOAD_XEMU_REM(); TABLE64(x3, addr); // expected return address CMPSx_REG(xRIP, x3); B_MARK(cNE); LDRw_U12(w1, xEmu, offsetof(x64emu_t, quit)); CBZw_NEXT(w1); MARK; - LOAD_XEMU_REM(); jump_to_epilog(dyn, 0, xRIP, ninst); } else if (u8==0x80) { INST_NAME("32bits SYSCALL"); diff --git a/src/dynarec/dynarec_native_functions.c b/src/dynarec/dynarec_native_functions.c index a97e22c4..555b2eba 100644 --- a/src/dynarec/dynarec_native_functions.c +++ b/src/dynarec/dynarec_native_functions.c @@ -208,6 +208,12 @@ void native_int(x64emu_t* emu, int num) EmitInterruption(emu, num, (void*)R_RIP); } +void native_wineint(x64emu_t* emu, int num) +{ + emu->test.test = 0; + EmitWineInt(emu, num, (void*)R_RIP); +} + void native_int3(x64emu_t* emu) { EmitSignal(emu, SIGTRAP, NULL, 3); diff --git a/src/dynarec/dynarec_native_functions.h b/src/dynarec/dynarec_native_functions.h index 0df058f2..eca8568f 100644 --- a/src/dynarec/dynarec_native_functions.h +++ b/src/dynarec/dynarec_native_functions.h @@ -57,6 +57,7 @@ void native_br(x64emu_t* emu); void native_priv(x64emu_t* emu); void native_int3(x64emu_t* emu); void native_int(x64emu_t* emu, int num); +void native_wineint(x64emu_t* emu, int num); void native_div0(x64emu_t* emu); // Caches transformation (for loops) // Specific, need to be written par backend |