IMACL P,loc32,*XAR7/++
6-102
Example
; Calculate sum of product using 32-bit multiply and retain
; 64-bit result:
; int32 X[N]; // Data information
; int32 C[N]; // Coefficient information (located in
// low 4M)
; int64 sum = 0;
; for(i=0; i < N; i++)
; sum = sum + (X[i] * C[i]) >> 5;
; Calculate low 32 bits:
MOVL XAR2,#X ; XAR2 = pointer to X
MOVL XAR7,#C ; XAR7 = pointer to C
SPM −5 ; Set product shift to ”>> 5”
ZAPA ; Zero ACC, P, OVCU
RPT #(N−1) ; Repeat next instruction N times
||IMACL P,*XAR2++,*XAR7++ ; OVCU:ACC = OVCU:ACC + P,
; P = (X[i] * C[i]) << 5,
; i++
ADDUL ACC,@P ; OVCU:ACC = OVCU:ACC + P
MOVL @sum+0,ACC ; Store low 32 bits result into sum
; Calculate high 32 bits:
MOVU @AL,OVC ; ACC = OVCU (carry count)
MOVB AH,#0
MPYB P,T,#0 ; P = 0
MOVL XAR2,#X ; XAR2 = pointer to X
MOVL XAR7,#C ; XAR7 = pointer to C
RPT #(N−1) ; Repeat next instruction N times
||QMACL P,*XAR2++,*XAR7++ ; ACC = ACC + P >> 5,
; P = (X[i] * C[i]) >> 32,
; i++
ADDL ACC,P << PM ; ACC = ACC + P >> 5
MOVL @sum+2,ACC ; Store high 32 bits result into sum