mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
i386: fix undefined shift behavior (nw)
This commit is contained in:
parent
7e6fabfb9e
commit
64cdd0bf76
@ -1,6 +1,6 @@
|
|||||||
static UINT16 I386OP(shift_rotate16)(i386_state *cpustate, UINT8 modrm, UINT32 value, UINT8 shift)
|
static UINT16 I386OP(shift_rotate16)(i386_state *cpustate, UINT8 modrm, UINT32 value, UINT8 shift)
|
||||||
{
|
{
|
||||||
UINT16 src = value;
|
UINT32 src = value & 0xffff;
|
||||||
UINT16 dst = value;
|
UINT16 dst = value;
|
||||||
|
|
||||||
if( shift == 0 ) {
|
if( shift == 0 ) {
|
||||||
@ -114,7 +114,7 @@ static UINT16 I386OP(shift_rotate16)(i386_state *cpustate, UINT8 modrm, UINT32 v
|
|||||||
case 6:
|
case 6:
|
||||||
shift &= 31;
|
shift &= 31;
|
||||||
dst = src << shift;
|
dst = src << shift;
|
||||||
cpustate->CF = (src & (1 << (16-shift))) ? 1 : 0;
|
cpustate->CF = (shift <= 16) && (src & (1 << (16-shift)));
|
||||||
SetSZPF16(dst);
|
SetSZPF16(dst);
|
||||||
CYCLES_RM(cpustate,modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);
|
CYCLES_RM(cpustate,modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);
|
||||||
break;
|
break;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
static UINT8 I386OP(shift_rotate8)(i386_state *cpustate, UINT8 modrm, UINT32 value, UINT8 shift)
|
static UINT8 I386OP(shift_rotate8)(i386_state *cpustate, UINT8 modrm, UINT32 value, UINT8 shift)
|
||||||
{
|
{
|
||||||
UINT8 src = value;
|
UINT32 src = value & 0xff;
|
||||||
UINT8 dst = value;
|
UINT8 dst = value;
|
||||||
|
|
||||||
if( shift == 0 ) {
|
if( shift == 0 ) {
|
||||||
@ -115,7 +115,7 @@ static UINT8 I386OP(shift_rotate8)(i386_state *cpustate, UINT8 modrm, UINT32 val
|
|||||||
case 6:
|
case 6:
|
||||||
shift &= 31;
|
shift &= 31;
|
||||||
dst = src << shift;
|
dst = src << shift;
|
||||||
cpustate->CF = (src >> (8 - shift)) & 0x1;
|
cpustate->CF = (shift <= 8) && (src >> (8 - shift));
|
||||||
SetSZPF8(dst);
|
SetSZPF8(dst);
|
||||||
CYCLES_RM(cpustate,modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);
|
CYCLES_RM(cpustate,modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user