|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
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 |
Vector Signed Average
Vector average using the signed values.
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.
No data-dependent exceptions are possible.
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
Reserved Instruction Exception, MSA Disabled Exception.