diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-05-15 16:47:49 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-05-15 16:47:49 +0200 |
| commit | f6cd825ab96ae489026fd5062d0d61321a618482 (patch) | |
| tree | 17f197d94706408b34c7a7dc7d2e392eadafe087 /src | |
| parent | f8fa4387286a2df51c2020c9a29badd6cc7e5375 (diff) | |
| download | box64-f6cd825ab96ae489026fd5062d0d61321a618482.tar.gz box64-f6cd825ab96ae489026fd5062d0d61321a618482.zip | |
[ARM64_DYNAREC] Fixed a potential issue with 0F B1 opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_0f.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index 8f6a46e9..1172789a 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -1899,7 +1899,13 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin UFLAG_IF {emit_cmp32(dyn, ninst, rex, xRAX, ed, x3, x4, x5);} MOVxw_REG(x1, ed); // save value CMPSxw_REG(xRAX, x1); - CSELxw(ed, gd, ed, cEQ); + if(rex.w) { + CSELxw(ed, gd, ed, cEQ); + } else { + B_MARK2(cNE); + MOVw_REG(ed, gd); + MARK2; + } } else { addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, &unscaled, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, NULL, 0, 0); LDxw(x1, wback, fixedaddress); |