diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-11 17:53:17 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-11 17:53:17 +0100 |
| commit | 7c000adb8704eee81395a6e2bb52010c8254b4ce (patch) | |
| tree | 7b6d504d8209ae0b3f27e97d2150911a950e26e9 /src | |
| parent | 2d4f073925aebb93f9f19122fe5cd9c55caf1df3 (diff) | |
| download | box64-7c000adb8704eee81395a6e2bb52010c8254b4ce.tar.gz box64-7c000adb8704eee81395a6e2bb52010c8254b4ce.zip | |
[INTERPRETER][COSIM] Better flags for btx opcode familly when running cosim
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: |