diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-28 12:10:13 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-28 12:10:13 +0100 |
| commit | 4aaa0b5d24fc3aad2032615ecf661cc0710b11bc (patch) | |
| tree | 4e887be61d15e44f971996ebe2acccd9aedbcfa5 /src | |
| parent | c0829b807cc0c2b4aa96d1f6261f7b1add48670e (diff) | |
| download | box64-4aaa0b5d24fc3aad2032615ecf661cc0710b11bc.tar.gz box64-4aaa0b5d24fc3aad2032615ecf661cc0710b11bc.zip | |
[ARM64_DYNAREC] Fixed and improved flags for F3 0F B8 opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_f30f.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_f30f.c b/src/dynarec/arm64/dynarec_arm64_f30f.c index e223f321..c13079f0 100644 --- a/src/dynarec/arm64/dynarec_arm64_f30f.c +++ b/src/dynarec/arm64/dynarec_arm64_f30f.c @@ -480,10 +480,18 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n UADDLV_8(v1, v1); VMOVQDto(gd, v1, 0); IFX(X_ALL) { - MOV32w(x1, (1<<F_OF) | (1<<F_SF) | (1<<F_ZF) | (1<<F_AF) | (1<<F_CF) | (1<<F_PF)); - BICw(xFlags, xFlags, x1); - CBNZx(gd, 4+4); - BFIw(xFlags, xFlags, F_ZF, 1); + IFX(X_AF|X_PF|X_SF|X_OF|X_CF) { + MOV32w(x1, (1<<F_OF) | (1<<F_SF) | (1<<F_ZF) | (1<<F_AF) | (1<<F_CF) | (1<<F_PF)); + BICw(xFlags, xFlags, x1); + } + IFX(X_ZF) { + CMPSw_U12(gd, 0); + IFNATIVE(NF_EQ) {} + else { + CSETw(x1, cEQ); + BFIw(xFlags, x1, F_ZF, 1); + } + } } break; |