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.