mv.swizzle
Links
TODO: evaluate whether this will fit with mv.vec
the encoding embeds predication into the swizzle as well as constants 1/1.0 and 0/0.0
Format
0.5 | 6.10 | 11.15 | 16.20 | 21.....25 | 26.....30 | 31 | name |
---|---|---|---|---|---|---|---|
19 | RT | RA | XO[0:4] | XO[5:9] | Rc | XL-Form | |
19 | RT | RA | imm | imm | 01 M im | 0 | mv.vec.swiz |
19 | RT | RA | imm | imm | 01 M im | 1 | fmv.vec.swiz |
19 | RT | RA | imm | imm | 11 0 im | 0 | mv.swiz |
19 | RT | RA | imm | imm | 11 0 im | 1 | fmv.swiz |
this gives a 12 bit immediate across bits 16 to 25 and 29-30.
- 3 bits X
- 3 bits Y
- 3 bits Z
- 3 bits W
except that the options are:
- 0b0NN index 0 thru 3 to place subelement in pos XYZW
- 0b110 to indicate "skip". this is equivalent to predicate masking
- 0b100 to indicate "constant 0"
- 0b101 to indicate "constant 1" (or 1.0)
- 0b111 is not needed.
Evaluating efforts to encode 12 bit swizzle into less proved unsuccessful: 74 comes out to 2,400 which is larger than 11 bits.
Note that 7 options are needed (not 6) because the 7th option allows predicate masking to be encoded within the swizzle immediate.
Mode M is described in mv.vec and allows for merge and split of vectors.