Section courante

A propos

Section administrative du site

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