diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-05-09 22:03:25 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-05-09 22:03:25 +0200 |
| commit | ff755facc0c0ec502b4476d1144b61055abb3e7b (patch) | |
| tree | 911d30c96c337df8fa401cb405eed1e24ecd6bf9 /src/emu | |
| parent | d38f659f428544de524fe6f2a49355a104055555 (diff) | |
| download | box64-ff755facc0c0ec502b4476d1144b61055abb3e7b.tar.gz box64-ff755facc0c0ec502b4476d1144b61055abb3e7b.zip | |
[ARM64_DYNAREC] Fix and improvments on rcl/rcr helper
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run_private.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index 2891b04c..016092b3 100644 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -1064,11 +1064,22 @@ void UpdateFlags(x64emu_t *emu) // new CF CONDITIONAL_SET_FLAG(((cnt==1)?emu->op1.u8:(emu->op1.u8>>(cnt-1))) & 1, F_CF); break; - case d_rcl16: + cnt = emu->op2.u16%17; + CONDITIONAL_SET_FLAG(emu->op1.u16>>(17-cnt) & 1, F_CF); + // should for cnt==1 + CONDITIONAL_SET_FLAG(((emu->res.u16>>15) ^ ACCESS_FLAG(F_CF)) & 1, F_OF); + break; + case d_rcr16: + cnt = emu->op2.u16%17; + // should for cnt==1, using "before" CF + CONDITIONAL_SET_FLAG(((emu->res.u16>>15) ^ ACCESS_FLAG(F_CF)) & 1, F_OF); + // new CF + CONDITIONAL_SET_FLAG(((cnt==1)?emu->op1.u16:(emu->op1.u16>>(cnt-1))) & 1, F_CF); + break; + case d_rcl32: case d_rcl64: - case d_rcr16: case d_rcr32: case d_rcr64: case d_unknown: |