diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_0f38.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c index 128863f4..cf5db08c 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c @@ -171,9 +171,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; @@ -211,9 +216,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) ORRw_mask(xFlags, xFlags, 30, 0); //mask=0x04 + } } break; |