diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index 3a99ebf631..cc678f853b 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -552,19 +552,20 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr, int* step) GX->ud[0]=(tmp8s)?0xffffffff:0; break; - case 0xC7: - CHECK_FLAGS(emu); - nextop = F8; - GETE8xw(0); - switch(tmp8u&7) { - case 6: /* RDPID Ed */ - ED->q[0] = helper_getcpu(emu); - SET_FLAG(F_CF); - break; - default: - return 0; - } - GX->ud[0]=(tmp8s)?0xffffffff:0; + case 0xC7: + nextop = F8; + tmp8u = nextop >> 3; + switch(tmp8u&7) { + case 7: /* RDPID Ed */ + if (!MODREG) { + return 0; + } + GETED(0); + ED->q[0] = helper_getcpu(emu); + break; + default: + return 0; + } break; case 0xD6: /* MOVQ2DQ Gx, Em */ diff --git a/src/emu/x64tls.c b/src/emu/x64tls.c index a427186ebe..6ebe541b70 100644 --- a/src/emu/x64tls.c +++ b/src/emu/x64tls.c @@ -137,7 +137,7 @@ uint32_t my_modify_ldt(x64emu_t* emu, int op, thread_area_32_t* td, int size) static const char* arch_prctl_param(int code) { - static char ret[10] = {0}; + static char ret[12] = {0}; switch (code) { case 0x1001: return "ARCH_SET_GS"; case 0x1002: return "ARCH_SET_FS";