XMAC P,loc16,*(pma)
6-379
PM The value in the PM bits sets the shift mode for the output operation from the
product register. If the product shift value is positive (logical left shift
operation), then the low bits are zero filled. If the product shift value is
negative (arithmetic right shift operation), the upper bits are sign extended.
Repeat This instruction is repeatable. If the operation follows a RPT instruction,
then it will be executed N+1 times. The state of the Z, N, C and OVC flags
will reflect the final result. The V flag will be set if an intermediate overflow
occurs. When repeated, the program-memory address is incremented by
1 during each repetition.
Example
; Calculate sum of product using 16-bit multiply:
; int16 X[N] ; Data information
; int16 C[N] ; Coefficient information, located in high 64K
; sum = 0;
; for(i=0; i < N; i++)
; sum = sum + (X[i] * C[i]) >> 5;
MOVL XAR2,#X ; XAR2 = pointer to X
SPM −5 ; Set product shift to ”>> 5”
ZAPA ; Zero ACC, P, OVC
RPT #N−1 ; Repeat next instruction N times
||XMAC P,*XAR2++,*(C) ; ACC = ACC + P >> 5,
; P = *XAR2++ * *C++
ADDL ACC,P << PM ; Perform final accumulate
MOVL @sum,ACC ; Store final result into sum