diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run0f.c | 48 | ||||
| -rw-r--r-- | src/emu/x64run64.c | 24 | ||||
| -rw-r--r-- | src/emu/x64runf0.c | 36 |
3 files changed, 108 insertions, 0 deletions
diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index 673f2d2b..041b8320 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -1156,6 +1156,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) else CLEAR_FLAG(F_CF); } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 0xA4: /* SHLD Ed,Gd,Ib */ nextop = F8; @@ -1237,6 +1243,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 0xAC: /* SHRD Ed,Gd,Ib */ case 0xAD: /* SHRD Ed,Gd,CL */ @@ -1400,6 +1412,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 0xB6: /* MOVZX Gd,Eb */ @@ -1435,6 +1453,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) else CLEAR_FLAG(F_CF); } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 5: /* BTS Ed, Ib */ CHECK_FLAGS(emu); @@ -1459,6 +1483,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 6: /* BTR Ed, Ib */ CHECK_FLAGS(emu); @@ -1481,6 +1511,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 7: /* BTC Ed, Ib */ CHECK_FLAGS(emu); @@ -1503,6 +1539,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; default: @@ -1544,6 +1586,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 0xBC: /* BSF Ed,Gd */ RESET_FLAGS(emu); diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index 9523fbb8..9d8b920e 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -321,6 +321,12 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) else CLEAR_FLAG(F_CF); } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 5: /* BTS Ed, Ib */ CHECK_FLAGS(emu); @@ -345,6 +351,12 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 6: /* BTR Ed, Ib */ CHECK_FLAGS(emu); @@ -367,6 +379,12 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 7: /* BTC Ed, Ib */ CHECK_FLAGS(emu); @@ -389,6 +407,12 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) if(MODREG) ED->dword[1] = 0; } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; default: diff --git a/src/emu/x64runf0.c b/src/emu/x64runf0.c index 0f6c9297..df381e5a 100644 --- a/src/emu/x64runf0.c +++ b/src/emu/x64runf0.c @@ -290,6 +290,12 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) } pthread_mutex_unlock(&my_context->mutex_lock); #endif + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 0xB0: /* CMPXCHG Eb,Gb */ @@ -472,6 +478,12 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) } pthread_mutex_unlock(&my_context->mutex_lock); #endif + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 0xBA: @@ -494,6 +506,12 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) else CLEAR_FLAG(F_CF); } + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 5: /* BTS Ed, Ib */ CHECK_FLAGS(emu); @@ -562,6 +580,12 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) } pthread_mutex_unlock(&my_context->mutex_lock); #endif + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 6: /* BTR Ed, Ib */ CHECK_FLAGS(emu); @@ -614,6 +638,12 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) } pthread_mutex_unlock(&my_context->mutex_lock); #endif + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; case 7: /* BTC Ed, Ib */ CHECK_FLAGS(emu); @@ -662,6 +692,12 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) } pthread_mutex_unlock(&my_context->mutex_lock); #endif + if(box64_dynarec_test) { + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_PF); + } break; default: |