diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-12-25 00:50:41 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-24 17:50:41 +0100 |
| commit | 3b15ef1cb57180d3d68d56b67126101a46672188 (patch) | |
| tree | 555ac7fa2b74d08748bc7439e1e0080597dfe0b8 /src | |
| parent | 9ac695b9bee3a1023995cb2027f255df1ebbe415 (diff) | |
| download | box64-3b15ef1cb57180d3d68d56b67126101a46672188.tar.gz box64-3b15ef1cb57180d3d68d56b67126101a46672188.zip | |
[LA64_DYNAREC] Fixed 66 0F PTEST opcode (#2201)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_660f.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c index 0380f173..03261d5e 100644 --- a/src/dynarec/la64/dynarec_la64_660f.c +++ b/src/dynarec/la64/dynarec_la64_660f.c @@ -361,7 +361,11 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int SETFLAGS(X_ALL, SF_SET); GETGX(q0, 0); GETEX(q1, 0, 0); - CLEAR_FLAGS(x3); + if (!la64_lbt) { + CLEAR_FLAGS(x3); + } else IFX (X_ALL) { + X64_SET_EFLAGS(xZR, X_ALL); + } SET_DFNONE(); v0 = fpu_get_scratch(dyn); IFX (X_ZF) { @@ -370,7 +374,7 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int BCEQZ_MARK(fcc0); if (la64_lbt) { ADDI_D(x3, xZR, 1 << F_ZF); - X64_SET_EFLAGS(x3, X_ZF); + X64_SET_EFLAGS(x3, X_ALL); } else { ORI(xFlags, xFlags, 1 << F_ZF); } @@ -382,7 +386,7 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int BCEQZ_MARK2(fcc0); if (la64_lbt) { ADDI_D(x3, xZR, 1 << F_CF); - X64_SET_EFLAGS(x3, X_CF); + X64_SET_EFLAGS(x3, X_ALL); } else { ORI(xFlags, xFlags, 1 << F_CF); } |