summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/am29000/am29ops.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/am29000/am29ops.h')
-rw-r--r--src/devices/cpu/am29000/am29ops.h53
1 files changed, 21 insertions, 32 deletions
diff --git a/src/devices/cpu/am29000/am29ops.h b/src/devices/cpu/am29000/am29ops.h
index 3c44c506077..d594a7485ab 100644
--- a/src/devices/cpu/am29000/am29ops.h
+++ b/src/devices/cpu/am29000/am29ops.h
@@ -390,7 +390,6 @@ void am29000_cpu_device::MUL()
uint32_t a = GET_RA_VAL;
uint32_t b = INST_M_BIT ? I8 : GET_RB_VAL;
uint32_t r;
- uint64_t v;
uint32_t sign;
if (m_q & 1)
@@ -404,10 +403,9 @@ void am29000_cpu_device::MUL()
sign = b >> 31;
}
- v = ((((uint64_t)r << 32) | m_q) >> 1) | ((uint64_t)sign << 63);
- m_q = v & 0xffffffff;
-
- m_r[RC] = v >> 32;
+ // Shift combined value right one bit position, entering sign into bit 31 of destination
+ m_r[RC] = (r >> 1) | (sign << 31);
+ m_q = (m_q >> 1) | (r << 31);
}
void am29000_cpu_device::MULL()
@@ -416,7 +414,6 @@ void am29000_cpu_device::MULL()
uint32_t a = GET_RA_VAL;
uint32_t b = INST_M_BIT ? I8 : GET_RB_VAL;
uint32_t r;
- uint64_t v;
uint32_t sign;
if (m_q & 1)
@@ -430,10 +427,9 @@ void am29000_cpu_device::MULL()
sign = b >> 31;
}
- v = ((((uint64_t)r << 32) | m_q) >> 1) | ((uint64_t)sign << 63);
- m_q = v & 0xffffffff;
-
- m_r[RC] = v >> 32;
+ // Shift combined value right one bit position, entering sign into bit 31 of destination
+ m_r[RC] = (r >> 1) | (sign << 31);
+ m_q = (m_q >> 1) | (r << 31);
}
void am29000_cpu_device::MULU()
@@ -442,7 +438,6 @@ void am29000_cpu_device::MULU()
uint32_t a = GET_RA_VAL;
uint32_t b = INST_M_BIT ? I8 : GET_RB_VAL;
uint32_t r;
- uint64_t v;
uint32_t c;
if (m_q & 1)
@@ -456,10 +451,9 @@ void am29000_cpu_device::MULU()
c = 0;
}
- v = ((((uint64_t)r << 32) | m_q) >> 1) | ((uint64_t)c << 63);
- m_q = v & 0xffffffff;
-
- m_r[RC] = v >> 32;
+ // Shift combined value right one bit position, entering carry into bit 31 of destination
+ m_r[RC] = (r >> 1) | (c << 31);
+ m_q = (m_q >> 1) | (r << 31);
}
void am29000_cpu_device::DIVIDE()
@@ -479,7 +473,6 @@ void am29000_cpu_device::DIVIDU()
void am29000_cpu_device::DIV0()
{
uint32_t b = INST_M_BIT ? I8: GET_RB_VAL;
- uint64_t v;
if (!FREEZE_MODE)
{
@@ -487,11 +480,9 @@ void am29000_cpu_device::DIV0()
SET_ALU_N(b);
}
- v = (((uint64_t)b << 32) | m_q) << 1;
-
- m_q = v & 0xffffffff;
-
- m_r[RC] = v >> 32;
+ // Shift combined value left one bit position, zeroing bit 0 of Q
+ m_r[RC] = (b << 1) | (m_q >> 31);
+ m_q <<= 1;
}
void am29000_cpu_device::DIV()
@@ -500,7 +491,6 @@ void am29000_cpu_device::DIV()
uint32_t b = INST_M_BIT ? I8: GET_RB_VAL;
uint32_t c;
uint32_t r;
- uint64_t r64;
uint32_t df;
if (m_alu & ALU_DF)
@@ -524,10 +514,9 @@ void am29000_cpu_device::DIV()
SET_ALU_N(r);
}
- r64 = ((((uint64_t)r << 32) | m_q) << 1) | df;
- m_q = r64 & 0xffffffff;
-
- m_r[RC] = r64 >> 32;
+ // Shift combined value left one bit position, entering DF into bit 0 of Q
+ m_r[RC] = (r << 1) | (m_q >> 31);
+ m_q = (m_q << 1) | df;
}
void am29000_cpu_device::DIVL()
@@ -947,7 +936,7 @@ void am29000_cpu_device::LOAD()
return;
}
- r = m_data->read_dword(addr);
+ r = m_data.read_dword(addr);
}
}
@@ -1013,7 +1002,7 @@ void am29000_cpu_device::LOADM()
return;
}
- r = m_data->read_dword(addr);
+ r = m_data.read_dword(addr);
}
}
@@ -1035,7 +1024,7 @@ void am29000_cpu_device::LOADM()
for (int32_t cnt = 0; cnt <= GET_CHC_CR; ++cnt)
{
- m_r[r] = m_data->read_dword(addr);
+ m_r[r] = m_data.read_dword(addr);
// SET_CHC_CR(cnt - 1);
addr += 4;
@@ -1076,7 +1065,7 @@ void am29000_cpu_device::STORE()
}
}
- m_data->write_dword(addr, m_r[RA]);
+ m_data.write_dword(addr, m_r[RA]);
if (!FREEZE_MODE)
{
@@ -1148,7 +1137,7 @@ void am29000_cpu_device::STOREM()
for (int32_t cnt = 0; cnt <= GET_CHC_CR; ++cnt)
{
- m_data->write_dword(addr, m_r[r]);
+ m_data.write_dword(addr, m_r[r]);
addr += 4;
@@ -1396,7 +1385,7 @@ void am29000_cpu_device::CLZ()
{
uint32_t b = INST_M_BIT ? I8: GET_RB_VAL;
- m_r[RC] = count_leading_zeros(b);
+ m_r[RC] = count_leading_zeros_32(b);
}
void am29000_cpu_device::SETIP()