sh-dis/sh4/MAC.L @Rm+,@Rn+

34 lines
900 B
Plaintext

0000nnnnmmmm1111
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 ← SignExtend32(ReadMemory32(ZeroExtend32(n_address)));
n_address ← n_address + 4;
IF (n_field = m_field)
{
m_address ← m_address + 4;
n_address ← n_address + 4;
}
value1 ← SignExtend32(ReadMemory32(ZeroExtend32(m_address)));
m_address ← m_address + 4;
mul ← value2 × value1;
mac ← (mach << 32) + macl;
result ← mac + mul;
IF (s = 1)
IF (((result ⊕ mac) ∧ (result ⊕ mul))< 63 FOR 1 > = 1)
IF (mac< 63 FOR 1 > = 0)
result ← 247 - 1;
ELSE
ELSEresult ← - 247;
result ← SignedSaturate48(result);
macl ← result;
mach ← result >> 32;
Rm ← Register(m_address);
Rn ← Register(n_address);
MACL ← ZeroExtend32(macl);
MACH ← ZeroExtend32(mach);