28.2.45 __builtin_mpyn
Description
Computes -a
x b
; 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.
For example:
volatile register int16_t result asm("A");
int16_t *xmemory;
int16_t *ymemory;
int16_t xVal, yVal;
result = __builtin_mpy(xVal, yVal, &xmemory, &xVal, 2, &ymemory, &yVal, 2);
might generate:
mpy.n w4*w5, A, [w8]+=2, w4, [w10]+=2, w5
Prototype
int16_t __builtin_mpyn(int16_t a
, int16_t b
,
int16_t **xptr
, int16_t *xval
, int16_t xincr
,
int16_t **yptr
, int16_t *yval
, int16_t yincr
);
Arguments
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
– Integer pointer to accumulator selection.
Return Value
Returns the value of -a
x b
.
Machine Instruction
mpyn
Error Messages
An error message will be displayed if:
- the result is not an accumulator register
xval
is a null value butxptr
is not nullyval
is a null value butyptr
is not null