36 lines
913 B
Plaintext
36 lines
913 B
Plaintext
0100nnnnmmmm1111
|
|
macl ← ZeroExtend32(MACL);
|
|
mach ← ZeroExtend32(MACH);
|
|
s ← ZeroExtend1(S);
|
|
m_field ← ZeroExtend4(m);
|
|
n_field ← ZeroExtend4(n);
|
|
m_address ← SignExtend32(Rm);
|
|
n_address ← SignExtend32(Rn);
|
|
value2 ← SignExtend16(ReadMemory16(ZeroExtend32(n_address)));
|
|
n_address ← n_address + 2;
|
|
IF (n_field = m_field)
|
|
{
|
|
m_address ← m_address + 2;
|
|
n_address ← n_address + 2;
|
|
}
|
|
value1 ← SignExtend16(ReadMemory16(ZeroExtend32(m_address)));
|
|
m_address ← m_address + 2;
|
|
mul ← value2 × value1;
|
|
IF (s = 1)
|
|
{
|
|
macl ← SignExtend32(macl) + mul;
|
|
temp ← SignedSaturate32(macl);
|
|
IF (macl = temp)
|
|
result ← (mach << 32) ∨ ZeroExtend32(macl);
|
|
ELSE
|
|
result ← (0x1 << 32) ∨ ZeroExtend32(temp);
|
|
}
|
|
ELSE
|
|
result ← ((mach << 32) + macl) + mul;
|
|
macl ← result;
|
|
mach ← result >> 32;
|
|
Rm ← Register(m_address);
|
|
Rn ← Register(n_address);
|
|
MACL ← ZeroExtend32(macl);
|
|
MACH ← ZeroExtend32(mach);
|