diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-11-15 21:05:41 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-11-15 21:05:41 +0100 |
| commit | 385a31ec1183eeed8ed357ab58bf5a6da582622c (patch) | |
| tree | 00c9ef97d02d76777c500ad5ec49aa6d7a7500a3 /src/emu | |
| parent | 5c49954f6993959d425aee316b391e6221e35165 (diff) | |
| download | box64-385a31ec1183eeed8ed357ab58bf5a6da582622c.tar.gz box64-385a31ec1183eeed8ed357ab58bf5a6da582622c.zip | |
[ARM64_DYNAREC] Various fixes and improvments to a few random opcodes
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run_private.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index 6027a744..a2bc6020 100644 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -216,6 +216,15 @@ void UpdateFlags(x64emu_t *emu) CONDITIONAL_SET_FLAG(XOR2(cc >> 6), F_OF); CONDITIONAL_SET_FLAG(cc & 0x8, F_AF); break; + case d_add8b: + CONDITIONAL_SET_FLAG(((uint16_t)emu->op1.u8+emu->op2.u8) & 0x100, F_CF); + CONDITIONAL_SET_FLAG(!emu->res.u8, F_ZF); + CONDITIONAL_SET_FLAG(emu->res.u8 & 0x80, F_SF); + CONDITIONAL_SET_FLAG(PARITY(emu->res.u8), F_PF); + cc = (emu->op1.u8 & emu->op2.u8) | ((~emu->res.u8) & (emu->op1.u8 | emu->op2.u8)); + CONDITIONAL_SET_FLAG(XOR2(cc >> 6), F_OF); + CONDITIONAL_SET_FLAG(cc & 0x8, F_AF); + break; case d_add16: CONDITIONAL_SET_FLAG(emu->res.u32 & 0x10000, F_CF); CONDITIONAL_SET_FLAG(!emu->res.u16, F_ZF); @@ -225,6 +234,15 @@ void UpdateFlags(x64emu_t *emu) CONDITIONAL_SET_FLAG(XOR2(cc >> 14), F_OF); CONDITIONAL_SET_FLAG(cc & 0x8, F_AF); break; + case d_add16b: + CONDITIONAL_SET_FLAG(((uint32_t)emu->op1.u16+emu->op2.u16) & 0x10000, F_CF); + CONDITIONAL_SET_FLAG(!emu->res.u16, F_ZF); + CONDITIONAL_SET_FLAG(emu->res.u16 & 0x8000, F_SF); + CONDITIONAL_SET_FLAG(PARITY(emu->res.u8), F_PF); + cc = (emu->op1.u16 & emu->op2.u16) | ((~emu->res.u16) & (emu->op1.u16 | emu->op2.u16)); + CONDITIONAL_SET_FLAG(XOR2(cc >> 14), F_OF); + CONDITIONAL_SET_FLAG(cc & 0x8, F_AF); + break; case d_add32: CONDITIONAL_SET_FLAG(emu->res.u64 & 0x100000000LL, F_CF); CONDITIONAL_SET_FLAG(!emu->res.u32, F_ZF); |