From be2f566fbfa1486ef278daae81cb8448b5f3b8aa Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 3 Sep 2025 18:28:07 +0200 Subject: [DYNAREC] Better handling of 32bits 2E & 36 prefix (silent some false negative with Cosim on some multi-bytes NOP) --- src/dynarec/dynarec_native_pass.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c index b88cfb41..a90206fb 100644 --- a/src/dynarec/dynarec_native_pass.c +++ b/src/dynarec/dynarec_native_pass.c @@ -168,11 +168,16 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int #endif rep = 0; + rex.is32bits = is32bits; uint8_t pk = PK(0); - while((pk==0xF2) || (pk==0xF3) || (pk==0x3E) || (pk==0x26)) { + while((pk==0xF2) || (pk==0xF3) || (pk==0x3E) || (pk==0x26) + || (is32bits && ((pk==0x2E) || (pk==0x36))) + ) { switch(pk) { case 0xF2: rep = 1; break; case 0xF3: rep = 2; break; + case 0x2E: + case 0x36: case 0x3E: case 0x26: /* ignored */ break; } @@ -180,7 +185,6 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int pk = PK(0); } rex.rex = 0; - rex.is32bits = is32bits; if(!rex.is32bits) while(pk>=0x40 && pk<=0x4f) { rex.rex = pk; -- cgit 1.4.1