Assembleur SuperH | MAC.L |
---|---|
SuperH | Multiply and Accumulate Calculation Long |
Syntaxe
MAC.L @Rm+,@Rn+ |
Description
Cette instruction permet d'effectuer une multiplication entière (signé) d'opérandes 32 bits en utilisant le contenu d'un registre général et d'un registre d'adresse.
Algorithme
MODULE MACL(m,n) * MAC.L @Rm+,@Rn+ tempn ← (long)Read_Long(R[n]) R[n] ← R[n] + 4 tempm ←(long)Read_Long(R[m]) R[m] ← R[m] + 4 SI (long)(tempn ^ tempm) < 0 ALORS fnLmL ← -1 SINON fnLmL ← 0 FIN SI SI tempn < 0 ALORS tempn ← 0 - tempn FIN SI SI tempm < 0 ALORS tempm ← 0 - tempm FIN SI temp1 ← (unsigned long)tempn temp2 ← (unsigned long)tempm RnL ← temp1 ∩ 0000FFFFh RnH ← (temp1 >> 16) ∩ 0000FFFFh RmL ← temp2 ∩ 0000FFFFh RmH ← (temp2 >> 16) ∩ 0000FFFFh temp0 ← RmL x RnL temp1 ← RmH x RnL temp2 ← RmL x RnH temp3 ← RmH x RnH Res2 ← 0 Res1 ← temp1 + temp2 SI Res1 < temp1 ALORS Res2 ← Res2 + 00010000h FIN SI temp1 ← (Res1 << 16) ∩ FFFF0000h Res0 ← temp0 + temp1 SI Res0 < temp0 ALORS Res2 ← Res2 + 1 FIN SI Res2 ← Res2 + ((Res1 >> 16) ∩ 0000FFFFh) + temp3 SI fnLm < 0 ALORS Res2 ← ~Res2 SI Res0 = 0 ALORS Res2 ← Res2 + 1 SINON Res0 ← (~Res0) + 1 FIN SI FIN SI SI S = 1 ALORS Res0 ← MACL + Res0 SI MACL > Res0 ALORS Res2 ← Res2 + 1 FIN Res2 ← Res2 + MACH ∩ 0000FFFFh SI ((long)Res2 < 0) ET (Res2 < FFFF8000h) ALORS Res2 ← 00008000h Res0 ← 00000000h FIN SI SI (((long)Res2 > 0) ET (Res2 > 00007FFFh)) ALORS Res2 ← 00007FFFh Res0 ← FFFFFFFFh FIN SI MACH ← Res2 MACL ← Res0 SINON Res0 ← MACL + Res0 SI MACL > Res0 ALORS Res2 ← Res2 + 1 FIN SI Res2 ← Res2 + MACH MACH ← Res2 MACL ← Res0 FIN SI PC ← PC + 2 |
Mnémonique
Instruction | Abstrait | Opcode | Cycle |
---|---|---|---|
MAC.L @Rm+, @Rn+ | Opération de signe, MAC ← (Rn) × (Rm) + MAC | 0000nnnnmmmm1111 | 3/(2 de 4) |
Dernière mise à jour : Mardi, le 28 juillet 2015