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