diff options
| author | phorcys <phorcys@126.com> | 2025-08-12 20:38:15 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-12 14:38:15 +0200 |
| commit | abe29cc0ba1d55e5c2925fc7313c37c7bc1273f4 (patch) | |
| tree | 58e031971cf299e2c909c21bc4a33a6896370663 /src | |
| parent | c4e50cdbb1d41186286bfaccc84d25d5307c8807 (diff) | |
| download | box64-abe29cc0ba1d55e5c2925fc7313c37c7bc1273f4.tar.gz box64-abe29cc0ba1d55e5c2925fc7313c37c7bc1273f4.zip | |
[LA64_DYNAREC] Fix B3 BTR eflags when cpuext.lbt == 1. Fix 16bits AND when cpuext.lbt == 1. (#2929)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_0f.c | 6 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_emit_logic.c | 2 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c index bf013d98..913e9cd1 100644 --- a/src/dynarec/la64/dynarec_la64_0f.c +++ b/src/dynarec/la64/dynarec_la64_0f.c @@ -1672,7 +1672,11 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } ANDI(x2, gd, rex.w ? 0x3f : 0x1f); SRL_D(x4, ed, x2); - BSTRINS_D(xFlags, x4, 0, 0); + if(cpuext.lbt) { + X64_SET_EFLAGS(x4, X_CF); + } else { + BSTRINS_D(xFlags, x4, 0, 0); + } ADDI_D(x4, xZR, 1); ANDI(x2, gd, rex.w ? 0x3f : 0x1f); SLL_D(x4, x4, x2); diff --git a/src/dynarec/la64/dynarec_la64_emit_logic.c b/src/dynarec/la64/dynarec_la64_emit_logic.c index d11ec8e9..e600061e 100644 --- a/src/dynarec/la64/dynarec_la64_emit_logic.c +++ b/src/dynarec/la64/dynarec_la64_emit_logic.c @@ -347,7 +347,7 @@ void emit_and16(dynarec_la64_t* dyn, int ninst, int s1, int s2, int s3, int s4) } IFXA (X_ALL, cpuext.lbt) { - X64_AND_W(s1, s2); + X64_AND_H(s1, s2); } AND(s1, s1, s2); // res = s1 & s2 |