From 14876b8dbdb2cb36572b4fe8776798f89b4c2551 Mon Sep 17 00:00:00 2001 From: zhaixiang Date: Mon, 2 Dec 2024 17:22:35 +0800 Subject: [PATCH] [LA64_DYNAREC] Added INSB, INSD, OUTSB and OUTSD opcodes --- src/dynarec/la64/dynarec_la64_00.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c index ab786d7b21..f571e4e92d 100644 --- a/src/dynarec/la64/dynarec_la64_00.c +++ b/src/dynarec/la64/dynarec_la64_00.c @@ -662,6 +662,30 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ZEROUP(gd); } break; + case 0x6C: + case 0x6D: + INST_NAME(opcode == 0x6C ? "INSB" : "INSD"); + SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state + GETIP(ip); + STORE_XEMU_CALL(); + CALL(native_priv, -1); + LOAD_XEMU_CALL(); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + break; + case 0x6E: + case 0x6F: + INST_NAME(opcode == 0x6C ? "OUTSB" : "OUTSD"); + SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state + GETIP(ip); + STORE_XEMU_CALL(); + CALL(native_priv, -1); + LOAD_XEMU_CALL(); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + break; #define GO(GETFLAGS, NO, YES, F, I) \ READFLAGS(F); \