Encoding:

MSA

011110

101

df

wt

ws

wd

3R

010000

6

3

2

5

5

5

6

Format:

AVE_U.df 

Vector Unsigned Average

AVE_U.B wd,ws,wt

MSA

Vector Unsigned Average

AVE_U.H wd,ws,wt

MSA

Vector Unsigned Average

AVE_U.W wd,ws,wt

MSA

Vector Unsigned Average

AVE_U.D wd,ws,wt

MSA

Vector Unsigned Average

Purpose:

Vector Unsigned Average

Vector average using the unsigned values.

Description:

wd[i] = (ws[i] + wt[i]) / 2

The elements in vector wt are added to the elements in vector ws. The addition is done unsigned with full precision, i.e. the result has one extra bit. Unsigned division by 2 (or logical shift right by one bit) is performed before writing the result to vector wd.

The operands and results are values in integer data format df.

Restrictions:

No data-dependent exceptions are possible.

Operation:

AVE_U.B:
   for i in 0 .. WRLEN/8-1
      WR[wd]8i+7..8i = ave_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
   endfor
AVE_U.H:
   for i in 0 .. WRLEN/16-1
      WR[wd]16i+15..16i = ave_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
   endfor
AVE_U.W:
   for i in 0 .. WRLEN/32-1
      WR[wd]32i+31..32i = ave_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
   endfor
AVE_U.D:
   for i in 0 .. WRLEN/64-1
      WR[wd]64i+63..64i = ave_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
   endfor
function ave_u(ts, tt, n)
   t = (0 || ts) + (0 || tt)
   return tn..1
endfunction ave_u

Exceptions:

Reserved Instruction Exception, MSA Disabled Exception.