diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-02-21 15:28:31 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-02-21 15:28:31 +0100 |
| commit | 63c3e4fcf5351fbab35efaa1bcce92e74e970313 (patch) | |
| tree | b06f15866c042e3ec5b352543c49eefe1b816446 /src | |
| parent | c740590bcda896f360b7af091ff32d6d26ed6de9 (diff) | |
| download | box64-63c3e4fcf5351fbab35efaa1bcce92e74e970313.tar.gz box64-63c3e4fcf5351fbab35efaa1bcce92e74e970313.zip | |
[INTERP] Fixed ror/rol flags on cputype=0
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64primop.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/emu/x64primop.c b/src/emu/x64primop.c index b201900f..f29b9ad9 100644 --- a/src/emu/x64primop.c +++ b/src/emu/x64primop.c @@ -796,6 +796,7 @@ uint8_t rol8(x64emu_t *emu, uint8_t d, uint8_t s) s = s&0x1f; if(!s) return d; + CHECK_FLAGS(emu); /* OF flag is set if s == 1; OF = CF _XOR_ MSB of result */ if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d>>6), F_OF); @@ -803,7 +804,6 @@ uint8_t rol8(x64emu_t *emu, uint8_t d, uint8_t s) if((cnt = s % 8) != 0) { d = (d << cnt) + ((d >> (8 - cnt)) & ((1 << cnt) - 1)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG((d + (d >> 7)) & 1, F_OF); @@ -819,12 +819,12 @@ uint16_t rol16(x64emu_t *emu, uint16_t d, uint8_t s) s = s&0x1f; if(!s) return d; + CHECK_FLAGS(emu); if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d>>14), F_OF); if((cnt = s % 16) != 0) { d = (d << cnt) + ((d >> (16 - cnt)) & ((1 << cnt) - 1)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG((d + (d >> 15)) & 1, F_OF); @@ -839,12 +839,12 @@ uint32_t rol32(x64emu_t *emu, uint32_t d, uint8_t s) s = s&0x1f; if(!s) return d; + CHECK_FLAGS(emu); if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d>>30), F_OF); if((cnt = s % 32) != 0) { d = (d << cnt) + ((d >> (32 - cnt)) & ((1 << cnt) - 1)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG((d + (d >> 31)) & 1, F_OF); @@ -859,12 +859,12 @@ uint64_t rol64(x64emu_t *emu, uint64_t d, uint8_t s) s = s&0x3f; if(!s) return d; + CHECK_FLAGS(emu); if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d>>62), F_OF); if((cnt = s % 64) != 0) { d = (d << cnt) + ((d >> (64 - cnt)) & ((1L << cnt) - 1)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG((d + (d >> 63)) & 1, F_OF); @@ -883,13 +883,13 @@ uint8_t ror8(x64emu_t *emu, uint8_t d, uint8_t s) s = s&0x1f; if(!s) return d; + CHECK_FLAGS(emu); if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(((d >> 7)^d)&1, F_OF); if((cnt = s % 8) != 0) { d = (d << (8 - cnt)) + ((d >> (cnt)) & ((1 << (8 - cnt)) - 1)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d >> 6), F_OF); @@ -905,13 +905,13 @@ uint16_t ror16(x64emu_t *emu, uint16_t d, uint8_t s) s = s&0x1f; if(!s) return d; + CHECK_FLAGS(emu); if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(((d >> 15)^d)&1, F_OF); if((cnt = s % 16) != 0) { d = (d << (16 - cnt)) + ((d >> (cnt)) & ((1 << (16 - cnt)) - 1)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d >> 14), F_OF); @@ -927,13 +927,13 @@ uint32_t ror32(x64emu_t *emu, uint32_t d, uint8_t s) s = s&0x1f; if(!s) return d; + CHECK_FLAGS(emu); if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(((d >> 31)^d)&1, F_OF); if((cnt = s % 32) != 0) { d = (d << (32 - cnt)) + ((d >> (cnt)) & ((1 << (32 - cnt)) - 1)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d >> 30), F_OF); @@ -949,13 +949,13 @@ uint64_t ror64(x64emu_t *emu, uint64_t d, uint8_t s) s = s&0x3f; if(!s) return d; + CHECK_FLAGS(emu); if(!BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(((d >> 63)^d)&1, F_OF); if((cnt = s % 64) != 0) { d = (d << (64 - cnt)) + ((d >> (cnt)) & ((1L << (64 - cnt)) - 1L)); } - CHECK_FLAGS(emu); if(BOX64ENV(cputype)) CONDITIONAL_SET_FLAG(XOR2(d >> 62), F_OF); |