@@ -599,17 +599,25 @@ enum NodeType {
599
599
// / vector, but not the other way around.
600
600
EXTRACT_SUBVECTOR,
601
601
602
- // / VECTOR_DEINTERLEAVE(VEC1, VEC2) - Returns two vectors with all input and
603
- // / output vectors having the same type. The first output contains the even
604
- // / indices from CONCAT_VECTORS(VEC1, VEC2), with the second output
605
- // / containing the odd indices. The relative order of elements within an
606
- // / output match that of the concatenated input.
602
+ // / VECTOR_DEINTERLEAVE(VEC1, VEC2, ...) - Returns N vectors from N input
603
+ // / vectors, where N is the factor to deinterleave. All input and output
604
+ // / vectors must have the same type.
605
+ // /
606
+ // / Each output contains the deinterleaved indices for a specific field from
607
+ // / CONCAT_VECTORS(VEC1, VEC2, ...):
608
+ // /
609
+ // / Result[I][J] = CONCAT_VECTORS(...)[I + N * J]
607
610
VECTOR_DEINTERLEAVE,
608
611
609
- // / VECTOR_INTERLEAVE(VEC1, VEC2) - Returns two vectors with all input and
610
- // / output vectors having the same type. The first output contains the
611
- // / result of interleaving the low half of CONCAT_VECTORS(VEC1, VEC2), with
612
- // / the second output containing the result of interleaving the high half.
612
+ // / VECTOR_INTERLEAVE(VEC1, VEC2, ...) - Returns N vectors from N input
613
+ // / vectors, where N is the factor to interleave. All input and
614
+ // / output vectors must have the same type.
615
+ // /
616
+ // / All input vectors are interleaved into one wide vector, which is then
617
+ // / chunked into equal sized parts:
618
+ // /
619
+ // / Interleaved[I] = VEC(I % N)[I / N]
620
+ // / Result[J] = EXTRACT_SUBVECTOR(Interleaved, J * getVectorMinNumElements())
613
621
VECTOR_INTERLEAVE,
614
622
615
623
// / VECTOR_REVERSE(VECTOR) - Returns a vector, of the same type as VECTOR,
0 commit comments