mirror of
https://github.com/holub/mame
synced 2025-07-01 16:19:38 +03:00
fixed logical shifts, removed unneeded int32_t casts
This commit is contained in:
parent
20114c432e
commit
b31e3f8c13
@ -433,53 +433,53 @@ int clipper_device::execute_instruction (uint16_t insn)
|
|||||||
|
|
||||||
case 0x30:
|
case 0x30:
|
||||||
// shaw: shift arithmetic word
|
// shaw: shift arithmetic word
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] > 0)
|
if (m_r[m_ssw.fields.u][R1] > 0)
|
||||||
m_r[m_ssw.fields.u][R2] = (int32_t)m_r[m_ssw.fields.u][R2] << m_r[m_ssw.fields.u][R1];
|
m_r[m_ssw.fields.u][R2] <<= m_r[m_ssw.fields.u][R1];
|
||||||
else
|
else
|
||||||
m_r[m_ssw.fields.u][R2] = (int32_t)m_r[m_ssw.fields.u][R2] >> -(int32_t)m_r[m_ssw.fields.u][R1];
|
m_r[m_ssw.fields.u][R2] >>= -m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: 0VZN
|
// FLAGS: 0VZN
|
||||||
break;
|
break;
|
||||||
case 0x31:
|
case 0x31:
|
||||||
// shal: shift arithmetic longword
|
// shal: shift arithmetic longword
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] > 0)
|
if (m_r[m_ssw.fields.u][R1] > 0)
|
||||||
((int64_t *)m_r[m_ssw.fields.u])[R2 >> 1] <<= m_r[m_ssw.fields.u][R1];
|
((int64_t *)m_r[m_ssw.fields.u])[R2 >> 1] <<= m_r[m_ssw.fields.u][R1];
|
||||||
else
|
else
|
||||||
((int64_t *)m_r[m_ssw.fields.u])[R2 >> 1] >>= -(int32_t)m_r[m_ssw.fields.u][R1];
|
((int64_t *)m_r[m_ssw.fields.u])[R2 >> 1] >>= -m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: 0VZN
|
// FLAGS: 0VZN
|
||||||
break;
|
break;
|
||||||
case 0x32:
|
case 0x32:
|
||||||
// shlw: shift logical word
|
// shlw: shift logical word
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] > 0)
|
if (m_r[m_ssw.fields.u][R1] > 0)
|
||||||
m_r[m_ssw.fields.u][R2] <<= m_r[m_ssw.fields.u][R1];
|
m_r[m_ssw.fields.u][R2] <<= m_r[m_ssw.fields.u][R1];
|
||||||
else
|
else
|
||||||
m_r[m_ssw.fields.u][R2] >>= -(int32_t)m_r[m_ssw.fields.u][R1];
|
((uint32_t *)m_r[m_ssw.fields.u])[R2] >>= -m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: 00ZN
|
// FLAGS: 00ZN
|
||||||
FLAGS(0, 0, m_r[m_ssw.fields.u][R2] == 0, BIT(m_r[m_ssw.fields.u][R2], 31));
|
FLAGS(0, 0, m_r[m_ssw.fields.u][R2] == 0, BIT(m_r[m_ssw.fields.u][R2], 31));
|
||||||
break;
|
break;
|
||||||
case 0x33:
|
case 0x33:
|
||||||
// shll: shift logical longword
|
// shll: shift logical longword
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] > 0)
|
if (m_r[m_ssw.fields.u][R1] > 0)
|
||||||
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] <<= m_r[m_ssw.fields.u][R1];
|
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] <<= m_r[m_ssw.fields.u][R1];
|
||||||
else
|
else
|
||||||
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] >>= -(int32_t)m_r[m_ssw.fields.u][R1];
|
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] >>= -m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: 00ZN
|
// FLAGS: 00ZN
|
||||||
FLAGS(0, 0, ((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] == 0, BIT(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], 63));
|
FLAGS(0, 0, ((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] == 0, BIT(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], 63));
|
||||||
break;
|
break;
|
||||||
case 0x34:
|
case 0x34:
|
||||||
// rotw: rotate word
|
// rotw: rotate word
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] > 0)
|
if (m_r[m_ssw.fields.u][R1] > 0)
|
||||||
m_r[m_ssw.fields.u][R2] = _rotl(m_r[m_ssw.fields.u][R2], m_r[m_ssw.fields.u][R1]);
|
m_r[m_ssw.fields.u][R2] = _rotl(m_r[m_ssw.fields.u][R2], m_r[m_ssw.fields.u][R1]);
|
||||||
else
|
else
|
||||||
m_r[m_ssw.fields.u][R2] = _rotr(m_r[m_ssw.fields.u][R2], -(int32_t)m_r[m_ssw.fields.u][R1]);
|
m_r[m_ssw.fields.u][R2] = _rotr(m_r[m_ssw.fields.u][R2], -m_r[m_ssw.fields.u][R1]);
|
||||||
// FLAGS: 00ZN
|
// FLAGS: 00ZN
|
||||||
FLAGS(0, 0, m_r[m_ssw.fields.u][R2] == 0, BIT(m_r[m_ssw.fields.u][R2], 31));
|
FLAGS(0, 0, m_r[m_ssw.fields.u][R2] == 0, BIT(m_r[m_ssw.fields.u][R2], 31));
|
||||||
break;
|
break;
|
||||||
case 0x35:
|
case 0x35:
|
||||||
// rotl: rotate longword
|
// rotl: rotate longword
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] > 0)
|
if (m_r[m_ssw.fields.u][R1] > 0)
|
||||||
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] = _rotl64(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], m_r[m_ssw.fields.u][R1]);
|
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] = _rotl64(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], m_r[m_ssw.fields.u][R1]);
|
||||||
else
|
else
|
||||||
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] = _rotr64(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], -(int32_t)m_r[m_ssw.fields.u][R1]);
|
((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] = _rotr64(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], -m_r[m_ssw.fields.u][R1]);
|
||||||
// FLAGS: 00ZN
|
// FLAGS: 00ZN
|
||||||
FLAGS(0, 0, ((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] == 0, BIT(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], 63));
|
FLAGS(0, 0, ((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1] == 0, BIT(((uint64_t *)m_r[m_ssw.fields.u])[R2 >> 1], 63));
|
||||||
break;
|
break;
|
||||||
@ -487,9 +487,9 @@ int clipper_device::execute_instruction (uint16_t insn)
|
|||||||
case 0x38:
|
case 0x38:
|
||||||
// shai: shift arithmetic immediate
|
// shai: shift arithmetic immediate
|
||||||
if (m_info.op.imm > 0)
|
if (m_info.op.imm > 0)
|
||||||
m_r[m_ssw.fields.u][R2] = (int32_t)m_r[m_ssw.fields.u][R2] << m_info.op.imm;
|
m_r[m_ssw.fields.u][R2] <<= m_info.op.imm;
|
||||||
else
|
else
|
||||||
m_r[m_ssw.fields.u][R2] = (int32_t)m_r[m_ssw.fields.u][R2] >> -m_info.op.imm;
|
m_r[m_ssw.fields.u][R2] >>= -m_info.op.imm;
|
||||||
// FLAGS: 0VZN
|
// FLAGS: 0VZN
|
||||||
// TRAPS: I
|
// TRAPS: I
|
||||||
break;
|
break;
|
||||||
@ -507,7 +507,7 @@ int clipper_device::execute_instruction (uint16_t insn)
|
|||||||
if (m_info.op.imm > 0)
|
if (m_info.op.imm > 0)
|
||||||
m_r[m_ssw.fields.u][R2] <<= m_info.op.imm;
|
m_r[m_ssw.fields.u][R2] <<= m_info.op.imm;
|
||||||
else
|
else
|
||||||
m_r[m_ssw.fields.u][R2] >>= -m_info.op.imm;
|
((uint32_t *)m_r[m_ssw.fields.u])[R2] >>= -m_info.op.imm;
|
||||||
// FLAGS: 00ZN
|
// FLAGS: 00ZN
|
||||||
FLAGS(0, 0, m_r[m_ssw.fields.u][R2] == 0, BIT(m_r[m_ssw.fields.u][R2], 31));
|
FLAGS(0, 0, m_r[m_ssw.fields.u][R2] == 0, BIT(m_r[m_ssw.fields.u][R2], 31));
|
||||||
// TRAPS: I
|
// TRAPS: I
|
||||||
@ -821,13 +821,13 @@ int clipper_device::execute_instruction (uint16_t insn)
|
|||||||
|
|
||||||
case 0x93:
|
case 0x93:
|
||||||
// negw: negate word
|
// negw: negate word
|
||||||
m_r[m_ssw.fields.u][R2] = -(int32_t)m_r[m_ssw.fields.u][R1];
|
m_r[m_ssw.fields.u][R2] = -m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: CVZN
|
// FLAGS: CVZN
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x98:
|
case 0x98:
|
||||||
// mulw: multiply word
|
// mulw: multiply word
|
||||||
m_r[m_ssw.fields.u][R2] = (int32_t)m_r[m_ssw.fields.u][R2] * (int32_t)m_r[m_ssw.fields.u][R1];
|
m_r[m_ssw.fields.u][R2] = m_r[m_ssw.fields.u][R2] * m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: 0V00
|
// FLAGS: 0V00
|
||||||
break;
|
break;
|
||||||
case 0x99:
|
case 0x99:
|
||||||
@ -847,19 +847,19 @@ int clipper_device::execute_instruction (uint16_t insn)
|
|||||||
break;
|
break;
|
||||||
case 0x9c:
|
case 0x9c:
|
||||||
// divw: divide word
|
// divw: divide word
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] == 0)
|
if (m_r[m_ssw.fields.u][R1] == 0)
|
||||||
next_pc = intrap(EXCEPTION_INTEGER_DIVIDE_BY_ZERO, next_pc, CTS_DIVIDE_BY_ZERO);
|
next_pc = intrap(EXCEPTION_INTEGER_DIVIDE_BY_ZERO, next_pc, CTS_DIVIDE_BY_ZERO);
|
||||||
else
|
else
|
||||||
m_r[m_ssw.fields.u][R2] = (int32_t)m_r[m_ssw.fields.u][R2] / (int32_t)m_r[m_ssw.fields.u][R1];
|
m_r[m_ssw.fields.u][R2] = m_r[m_ssw.fields.u][R2] / m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: 0V00
|
// FLAGS: 0V00
|
||||||
// TRAPS: D
|
// TRAPS: D
|
||||||
break;
|
break;
|
||||||
case 0x9d:
|
case 0x9d:
|
||||||
// modw: modulus word
|
// modw: modulus word
|
||||||
if ((int32_t)m_r[m_ssw.fields.u][R1] == 0)
|
if (m_r[m_ssw.fields.u][R1] == 0)
|
||||||
next_pc = intrap(EXCEPTION_INTEGER_DIVIDE_BY_ZERO, next_pc, CTS_DIVIDE_BY_ZERO);
|
next_pc = intrap(EXCEPTION_INTEGER_DIVIDE_BY_ZERO, next_pc, CTS_DIVIDE_BY_ZERO);
|
||||||
else
|
else
|
||||||
m_r[m_ssw.fields.u][R2] = (int32_t)m_r[m_ssw.fields.u][R2] % (int32_t)m_r[m_ssw.fields.u][R1];
|
m_r[m_ssw.fields.u][R2] = m_r[m_ssw.fields.u][R2] % m_r[m_ssw.fields.u][R1];
|
||||||
// FLAGS: 0V00
|
// FLAGS: 0V00
|
||||||
// TRAPS: D
|
// TRAPS: D
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user