diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-25 10:59:15 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-25 10:59:15 +0200 |
| commit | 48a1b112819d3a4a7b48025236b36845c2b077e4 (patch) | |
| tree | 34043077ea7dd730c8f116f272db8c2737d25abc /src | |
| parent | 3698763bbe08dbc1f5d22894e1f8f1e13c51c765 (diff) | |
| download | box64-48a1b112819d3a4a7b48025236b36845c2b077e4.tar.gz box64-48a1b112819d3a4a7b48025236b36845c2b077e4.zip | |
[INTERP] More work on UD flags
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_0f38.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c index cf5db08c..66ea1753 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c @@ -132,9 +132,14 @@ uintptr_t dynarec64_AVX_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, i IFX(X_OF) { IFNATIVE(NF_VF) {} else { BFCw(xFlags, F_OF, 1); } } - if (BOX64ENV(dynarec_test)) { + if (BOX64ENV(dynarec_safeflags)) { + // those are UD flags IFX(X_AF) BFCw(xFlags, F_AF, 1); - IFX(X_PF) BFCw(xFlags, F_PF, 1); + if(BOX64ENV(cputype)) { + IFX(X_PF) BFCw(xFlags, F_PF, 1); + } else { + IFX(X_PF) emit_pf(dyn, ninst, vd, x3); + } } break; @@ -222,7 +227,7 @@ uintptr_t dynarec64_AVX_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, i if(BOX64ENV(cputype)) { IFX(X_PF) BFCw(xFlags, F_PF, 1); } else { - IFX(X_PF) ORRw_mask(xFlags, xFlags, 30, 0); //mask=0x04 + IFX(X_PF) emit_pf(dyn, ninst, vd, x3); } } break; @@ -269,11 +274,18 @@ uintptr_t dynarec64_AVX_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, i BFIw(xFlags, x3, F_SF, 1); } } - IFX(X_AF) BFCw(xFlags, F_AF, 1); - IFX(X_PF) BFCw(xFlags, F_PF, 1); IFX(X_OF) { IFNATIVE(NF_VF) {} else { BFCw(xFlags, F_OF, 1); } } + if (BOX64ENV(dynarec_safeflags)) { + // those are UD flags + IFX(X_AF) BFCw(xFlags, F_AF, 1); + if(BOX64ENV(cputype)) { + IFX(X_PF) BFCw(xFlags, F_PF, 1); + } else { + IFX(X_PF) emit_pf(dyn, ninst, vd, x3); + } + } break; case 0xF7: |