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