28.2.31 __builtin_mac
Description
Computes a
x b
and sums with accumulator;
also prefetches data ready for a future MAC operation.
xptr
may be null to signify no X prefetch to be performed, in
which case the values of xincr
and xval
are ignored, but required.
yptr
may be null to signify no Y prefetch to be performed, in
which case the values of yincr
and yval
are ignored, but required.
xval
and yval
nominate the address of a C
variable where the prefetched value will be stored.
xincr
and yincr
may be the literal
values: -6, -4, -2, 0, 2, 4, 6 or an integer value.
If AWB
is non null, the other accumulator will be written back
into the referenced variable.
For example:
volatile register int result asm("A");
volatile register int B asm("B");
int *xmemory;
int *ymemory;
int xVal, yVal;
result = __builtin_mac(result, xVal, yVal,
&xmemory, &xVal, 2,
&ymemory, &yVal, 2, 0, B);
might generate:
mac w4*w5, A, [w8]+=2, w4, [w10]+=2, w
5
Prototype
int __builtin_mac(int Accum, int a
, int b
,
int **xptr
, int *xval
, int xincr
,
int **yptr
, int *yval
, int yincr
,
int *AWB
, int AWB_accum
);
Argument
Accum
– Accumulator to sum.
a
– Integer multiplicand.
b
– Integer multiplier.
xptr
– Integer pointer to pointer to x prefetch.
xval
– Integer pointer to value of x prefetch.
xincr
– Integer increment value of x prefetch.
yptr
– Integer pointer to pointer to y prefetch.
yval
– Integer pointer to value of y prefetch.
yincr
– Integer increment value of y prefetch.
AWB
– Accumulator write back location.
AWB_accum
– Accumulator to write back.
Return Value
Returns the value of accumulator plus the result of a x b.
Assembler Operator/ Machine Instruction
mac
Error Messages
An error message will be displayed if:
- the result is not an accumulator register
Accum
is not an accumulator registerxval
is a null value but xptr is not nullyval
is a null value but yptr is not nullAWB_accum
is not an accumulator register andAWB
is not null