|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 010011 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DPSUB_U.df |
Vector Unsigned Dot Product and Subtract | |
DPSUB_U.H wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Subtract |
DPSUB_U.W wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Subtract |
DPSUB_U.D wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Subtract |
Vector Unsigned Dot Product and Subtract
Vector unsigned dot product (multiply and then pairwise add the adjacent multiplication results) and subtract from double width elements.
(wd[2i+1], wd[2i]) = (wd[2i+1], wd[2i]) - (unsigned(ws[2i+1]) * unsigned(wt[2i+1]) + unsigned(ws[2i]) * unsigned(wt[2i]))
The unsigned integer elements in vector wt are multiplied by unsigned integer elements in vector ws producing a positive, unsigned result twice the size of the input operands. The sum of multiplication results of adjacent odd/even elements is subtracted from the integer elements in vector wd to a signed result.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
DPSUB_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
WR[wd]16i+15..16i - dotp_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
DPSUB_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
WR[wd]32i+31..32i - dotp_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
DPSUB_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
WR[wd]64i+63..64i - dotp_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function mulx_u(ts, tt, n)
s = 0n || tsn-1..0
t = 0n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function dotp_u(ts, tt, n)
p1 = mulx_u(ts2n-1..n, tt2n-1..n, n)
p0 = mulx_u(tsn-1..0, ttn-1..0, n)
p = p1 + p0
return p2n-1..0
endfunction dotp_u
Reserved Instruction Exception, MSA Disabled Exception.