Encoding:

MSA

011110

111

df

wt

ws

wd

3R

010000

6

3

2

5

5

5

6

Format:

AVER_U.df 

Vector Unsigned Average Rounded

AVER_U.B wd,ws,wt

MSA

Vector Unsigned Average Rounded

AVER_U.H wd,ws,wt

MSA

Vector Unsigned Average Rounded

AVER_U.W wd,ws,wt

MSA

Vector Unsigned Average Rounded

AVER_U.D wd,ws,wt

MSA

Vector Unsigned Average Rounded

Purpose:

Vector Unsigned Average Rounded

Vector average rounded using the unsigned values.

Description:

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

The elements in vector wt are added to the elements in vector ws. The addition of the elements plus 1 (for rounding) 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:

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

Exceptions:

Reserved Instruction Exception, MSA Disabled Exception.