3 # SV Vector Prefix Swizzle
5 * <https://bugs.libre-soc.org/show_bug.cgi?id=139>
6 * <https://libre-soc.org/simple_v_extension/specification/mv.x/>
8 3D GPU operations on batches of vec2, vec3 and vec4 often require re-ordering of the elements in an "out of lane" fashion with respect to standard high performance non-GPU-centric Vector Processors. Examples include:
10 * Normalisation of Vectors of XYZ with respect to one dimension
11 * Alteration of ARGB pixel vectors with respect to opacity (A)
12 * Adjustment of YUV vectors with respect to luminosity
14 and many more. Lane-based Vector Processors not having the 2/3/4 inter-lane crossing have some difficulty processing such data and require it to be pushed into memory and retrieved, which is prohibitively costly in both instructions, time, and power consumption.
16 The lane reordering cost is so great and the requirement so common that it easily justifies augmenting the ISA of a GPU to be able to specify the reordering of vec2/3/4 elements, often drastically increasing the instruction size in the process.
18 The reason for the dramatic increase is that the reordering of each element in vec4 requires 2 bits per element, plus a predicate mask. This means a minimum of 3 bits per element: 12 bits for a vec4, and if there are 2 src operands this is a whopping 24 bits of immediate data, per instruction.
20 There is also benefit to encoding some useful immediates into src operands, on a per sub-element basis: being able to specify for example that the Z element of a vec4 is to be 1.0 saves a complex LD-immediate merging operation for that lane.
24 ## Predication plus indices
26 * 4 bits for predication
31 * SUBVL specifies the length (vec2/3/4)
32 * However index selection is 2 bits per element
33 * Therefore the src SUBVL must be separate and distinct from the dest SUBVL
35 ## Predication mixed with immediates and indices
37 * Three bits per element.
38 * One encoding (0b000) indicates "mask"
39 * Four encodings (0b1NN) indicate vec4 selection
40 * Three remaining indices indicate constants
43 - -1 (or -1.0) or some other option?
47 is definitely needed. TBD encoding. requires 1 src, 1 dest, and 12 bits immediate minimum.