Encoding:

MSA

011110

100

df

wt

ws

wd

3R

010011

6

3

2

5

5

5

6

Format:

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

Purpose:

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.

Description:

(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.

Restrictions:

No data-dependent exceptions are possible.

Operation:

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

Exceptions:

Reserved Instruction Exception, MSA Disabled Exception.