diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-08-10 09:34:09 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-08-10 09:34:09 +0200 |
| commit | bd4454d8ad925cb17ccf3beaa6c872440fede753 (patch) | |
| tree | b70e56850118569cf906ce01ab3290ed87c4a24b /src | |
| parent | 4187581be52e6cd638c5b2f8f7cf9db44019ea26 (diff) | |
| download | box64-bd4454d8ad925cb17ccf3beaa6c872440fede753.tar.gz box64-bd4454d8ad925cb17ccf3beaa6c872440fede753.zip | |
[ARM64_DYNAREC] Fixed pending flags for large 8 & 16 bit const shifts
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_emit_shift.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_emit_shift.c b/src/dynarec/arm64/dynarec_arm64_emit_shift.c index 84166055..5516a8ce 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_shift.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_shift.c @@ -366,6 +366,9 @@ void emit_shl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s BFXILw(xFlags, s3, 7, 1); // insert F_CF from s3[7:1] } MOVw_REG(s1, xZR); + IFX(X_PEND) { + STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); + } IFX(X_OF) { BFCw(xFlags, F_OF, 1); } @@ -630,6 +633,9 @@ void emit_shl16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int BFXILw(xFlags, s3, 15, 1); // insert F_CF from s3[15:1] } MOVw_REG(s1, xZR); + IFX(X_PEND) { + STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); + } IFX(X_OF) { BFCw(xFlags, F_OF, 1); } |