MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010011 |
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DPSUB_S.df |
Vector Signed Dot Product and Subtract | |
DPSUB_S.H wd,ws,wt |
MSA |
Vector Signed Dot Product and Subtract |
DPSUB_S.W wd,ws,wt |
MSA |
Vector Signed Dot Product and Subtract |
DPSUB_S.D wd,ws,wt |
MSA |
Vector Signed Dot Product and Subtract |
Vector Signed Dot Product and Subtract
Vector signed 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]) - (signed(ws[2i+1]) * signed(wt[2i+1]) + signed(ws[2i]) * signed(wt[2i]))
The signed integer elements in vector wt are multiplied by signed integer elements in vector ws producing a signed result twice the size of the input ope rands. 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_S.H for i in 0 .. WRLEN/16-1 WR[wd]16i+15..16i = WR[wd]16i+15..16i - dotp_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8) endfor DPSUB_S.W for i in 0 .. WRLEN/32-1 WR[wd]32i+31..32i = WR[wd]32i+31..32i - dotp_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16) endfor DPSUB_S.D for i in 0 .. WRLEN/64-1 WR[wd]64i+63..64i = WR[wd]64i+63..64i - dotp_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32) endfor function mulx_s(ts, tt, n) s = (tsn-1)n || tsn-1..0 t = (ttn-1)n || ttn-1..0 p = s * t return p2n-1..0 endfunction mulx_s function dotp_s(ts, tt, n) p1 = mulx_s(ts2n-1..n, tt2n-1..n, n) p0 = mulx_s(tsn-1..0, ttn-1..0, n) p = p1 + p0 return p2n-1..0 endfunction dotp_s
Reserved Instruction Exception, MSA Disabled Exception.