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.