Encoding:

MSA

011110

100

df

wt

ws

wd

3R

010000

6

3

2

5

5

5

6

Format:

AVE_S.df 

Vector Signed Average

AVE_S.B wd,ws,wt

MSA

Vector Signed Average

AVE_S.H wd,ws,wt

MSA

Vector Signed Average

AVE_S.W wd,ws,wt

MSA

Vector Signed Average

AVE_S.D wd,ws,wt

MSA

Vector Signed Average

Purpose:

Vector Signed Average

Vector average using the signed 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 signed with full precision, i.e. the result has one extra bit. Signed division by 2 (or arithmetic 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_S.B:
   for i in 0 .. WRLEN/8-1
      WR[wd]8i+7..8i = ave_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
   endfor
AVE_S.H:
   for i in 0 .. WRLEN/16-1
      WR[wd]16i+15..16i = ave_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
   endfor
AVE_S.W:
   for i in 0 .. WRLEN/32-1
      WR[wd]32i+31..32i = ave_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
   endfor
AVE_S.D:
   for i in 0 .. WRLEN/64-1
      WR[wd]64i+63..64i = ave_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
   endfor
function ave_s(ts, tt, n)
   t = (tsn-1 || ts) + (ttn-1 || tt)
   return tn..1
endfunction ave_s

Exceptions:

Reserved Instruction Exception, MSA Disabled Exception.