| Previous | 199869 Revisions | Next |
| r20986 Tuesday 12th February, 2013 at 15:43:07 UTC by Carl |
|---|
| i386: fix undefined shift behavior (nw) |
| [src/emu/cpu/i386] | i386op16.c i386ops.c |
| r20985 | r20986 | |
|---|---|---|
| 1 | 1 | static UINT8 I386OP(shift_rotate8)(i386_state *cpustate, UINT8 modrm, UINT32 value, UINT8 shift) |
| 2 | 2 | { |
| 3 | UINT | |
| 3 | UINT32 src = value & 0xff; | |
| 4 | 4 | UINT8 dst = value; |
| 5 | 5 | |
| 6 | 6 | if( shift == 0 ) { |
| r20985 | r20986 | |
| 115 | 115 | case 6: |
| 116 | 116 | shift &= 31; |
| 117 | 117 | dst = src << shift; |
| 118 | cpustate->CF = (src >> (8 - shift)) | |
| 118 | cpustate->CF = (shift <= 8) && (src >> (8 - shift)); | |
| 119 | 119 | SetSZPF8(dst); |
| 120 | 120 | CYCLES_RM(cpustate,modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); |
| 121 | 121 | break; |
| r20985 | r20986 | |
|---|---|---|
| 1 | 1 | static UINT16 I386OP(shift_rotate16)(i386_state *cpustate, UINT8 modrm, UINT32 value, UINT8 shift) |
| 2 | 2 | { |
| 3 | UINT | |
| 3 | UINT32 src = value & 0xffff; | |
| 4 | 4 | UINT16 dst = value; |
| 5 | 5 | |
| 6 | 6 | if( shift == 0 ) { |
| r20985 | r20986 | |
| 114 | 114 | case 6: |
| 115 | 115 | shift &= 31; |
| 116 | 116 | dst = src << shift; |
| 117 | cpustate->CF = (src & (1 << (16-shift))) | |
| 117 | cpustate->CF = (shift <= 16) && (src & (1 << (16-shift))); | |
| 118 | 118 | SetSZPF16(dst); |
| 119 | 119 | CYCLES_RM(cpustate,modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); |
| 120 | 120 | break; |
| Previous | 199869 Revisions | Next |