Encoding:

MSA

011110

101

df

wt

ws

wd

3R

010011

6

3

2

5

5

5

6

Format:

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

Purpose:

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.

Description:

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

Restrictions:

No data-dependent exceptions are possible.

Operation:

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

Exceptions:

Reserved Instruction Exception, MSA Disabled Exception.