MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010100 |
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ILVL.df |
Vector Interleave Left | |
ILVL.B wd,ws,wt |
MSA |
Vector Interleave Left |
ILVL.H wd,ws,wt |
MSA |
Vector Interleave Left |
ILVL.W wd,ws,wt |
MSA |
Vector Interleave Left |
ILVL.D wd,ws,wt |
MSA |
Vector Interleave Left |
Vector Interleave Left
Vector left elements interleave.
wd[2i] = left_half(wt)[i]; wd[2i+1] = left_half(ws)[i]
The left half elements in vectors ws and wt are copied to vector wd alternating one element from ws with one element from wt.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ILVL.B for i in 0 .. WRLEN/16-1 j = 2 * i k = 2 * i + 1 WR[wd]8j+7..8j = WR[wt]8i+7+WRLEN/2..8i+WRLEN/2 WR[wd]8k+7..8k = WR[ws]8i+7+WRLEN/2..8i+WRLEN/2 endfor ILVL.H for i in 0 .. WRLEN/32-1 j = 2 * i k = 2 * i + 1 WR[wd]16j+15..16j = WR[wt]16i+15+WRLEN/2..16i+WRLEN/2 WR[wd]16k+15..16k = WR[ws]16i+15+WRLEN/2..16i+WRLEN/2 endfor ILVL.W for i in 0 .. WRLEN/64-1 j = 2 * i k = 2 * i + 1 WR[wd]32j+31..32j = WR[wt]32i+31+WRLEN/2..32i+WRLEN/2 WR[wd]32k+31..32k = WR[ws]32i+31+WRLEN/2..32i+WRLEN/2 endfor ILVL.D for i in 0 .. WRLEN/128-1 j = 2 * i k = 2 * i + 1 WR[wd]64j+63..64j = WR[wt]64i+63+WRLEN/2..64i+WRLEN/2 WR[wd]64k+63..64k = WR[ws]64i+63+WRLEN/2..64i+WRLEN/2 endfor
Reserved Instruction Exception, MSA Disabled Exception.