Encoding:

MSA

011110

011

df

wt

ws

wd

3R

010011

6

3

2

5

5

5

6

Format:

DPADD_U.df 

Vector Unsigned Dot Product and Add

DPADD_U.H wd,ws,wt

MSA

Vector Unsigned Dot Product and Add

DPADD_U.W wd,ws,wt

MSA

Vector Unsigned Dot Product and Add

DPADD_U.D wd,ws,wt

MSA

Vector Unsigned Dot Product and Add

Purpose:

Vector Unsigned Dot Product and Add

Vector unsigned dot product (multiply and then pairwise add the adjacent multiplication results) and add to double width results.

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 v ector wt are multiplied by unsigned integer elements in vector ws producing a result twice the size of the input operands. The multiplication results of adjacent odd/even elements are added to the integer elements in vector wd.

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:

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