// halves of the output. The selection is chosen by the constant parameter h1h0l1l0
// where each {h,l}{1,0} is two bits specify which element from y or x to select.
// For example, {0,1,2,3}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7}) returns
- // {2, 1, 4, 6} (don't forget that the binary constant is written big-endian).
+ // {2, 0, 5, 7} (don't forget that the binary constant is written big-endian).
- go: concatSelectedConstant
commutative: false
// NAME concatenates selected elements from x and y into the lower and upper
// halves of the output. The selection is chosen by the constant parameter hilo
// where hi and lo are each one bit specifying which 64-bit element to select
- // from y and x. For example {4,5}.concatSelectedConstant(0b10, {6,7})
+ // from y and x. For example {4,5}.NAME(0b10, {6,7})
// returns {4,7}; bit 0, selecting from x, is zero, and selects 4, and bit 1,
// selecting from y, is 1, and selects 7.
commutative: false
out:
- elemBits: 32
+ bits: 256
documentation: !string |-
// NAME concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// The selection is chosen by the constant parameter h1h0l1l0
- // where each {h,l}{1,0} is two bits specify which element from y or x to select.
+ // where each {h,l}{1,0} is two bits specifying which element from y or x to select.
// For example,
- // {0,1,2,3,8,9,10,11}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
+ // {0,1,2,3,8,9,10,11}.NAME(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
// returns {2,0,5,7,10,8,13,15}
// (don't forget that the binary constant is written big-endian).
commutative: false
out:
- elemBits: 64
+ bits: 256
documentation: !string |-
// NAME concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// hi and lo pair select 64-bit elements from the corresponding 128-bit
// subvectors of x and y.
//
- // For example {4,5,8,9}.concatSelectedConstant(0b_11_10, {6,7,10,11})
+ // For example {4,5,8,9}.NAME(0b_11_10, {6,7,10,11})
// returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
// 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
// then 1, selecting element 1 from x's upper 128 bits (9), then 1,
// This differs from the same method applied to a 32x8 vector, where
// the 8-bit constant performs the same selection on both subvectors.
+- go: concatSelectedConstantGrouped
+ commutative: false
+ out:
+ - elemBits: 32
+ bits: 512
+ documentation: !string |-
+ // NAME concatenates selected elements from 128-bit subvectors of x and y
+ // into the lower and upper halves of corresponding subvectors of the output.
+ // The selection is chosen by the constant parameter h1h0l1l0
+ // where each {h,l}{1,0} is two bits specifying which element from y or x to select.
+ // For example,
+ // {0,1,2,3,8,9,10,11, 20,21,22,23,28,29,210,211}.NAME(
+ // 0b_11_01_00_10, {4,5,6,7,12,13,14,15, 24,25,26,27,212,213,214,215})
+ // returns {2,0,5,7,10,8,13,15, 22,20,25,27,210,28,213,215}
+ // (don't forget that the binary constant is written big-endian).
+
+- go: concatSelectedConstantGrouped
+ commutative: false
+ out:
+ - elemBits: 64
+ bits: 512
+ documentation: !string |-
+ // NAME concatenates selected elements from 128-bit subvectors of x and y
+ // into the lower and upper halves of corresponding subvectors of the output.
+ // The selections are specified by the constant parameter hilos where each
+ // hi and lo pair select 64-bit elements from the corresponding 128-bit
+ // subvectors of x and y.
+ //
+ // For example {4,5,8,9,12,13,16,17}.NAME(0b11_00_11_10, {6,7,10,11,14,15,18,19})
+ // returns {4,7,9,11,12,14,17,19}; bit 0 is zero, selecting element 0 from x's
+ // least 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
+ // then 1, selecting element 1 from x's next 128 bits (9), then 1,
+ // selecting element 1 from y's upper 128 bits (11). The next two 0 bits select
+ // the lower elements from x and y's 3rd 128 bit groups (12, 14), the last two
+ // 1 bits select the upper elements from x and y's last 128 bits (17, 19).
+ // This differs from the same method applied to a 32x8 or 32x16 vector, where
+ // the 8-bit constant performs the same selection on all the subvectors.
+
- go: Select128FromPair
commutative: false
documentation: !string |-
// halves of the output. The selection is chosen by the constant parameter h1h0l1l0
// where each {h,l}{1,0} is two bits specify which element from y or x to select.
// For example, {0,1,2,3}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7}) returns
-// {2, 1, 4, 6} (don't forget that the binary constant is written big-endian).
+// {2, 0, 5, 7} (don't forget that the binary constant is written big-endian).
//
// h1h0l1l0 results in better performance when it's a constant, a non-constant value will be translated into a jump table.
//
// halves of the output. The selection is chosen by the constant parameter h1h0l1l0
// where each {h,l}{1,0} is two bits specify which element from y or x to select.
// For example, {0,1,2,3}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7}) returns
-// {2, 1, 4, 6} (don't forget that the binary constant is written big-endian).
+// {2, 0, 5, 7} (don't forget that the binary constant is written big-endian).
//
// h1h0l1l0 results in better performance when it's a constant, a non-constant value will be translated into a jump table.
//
// halves of the output. The selection is chosen by the constant parameter h1h0l1l0
// where each {h,l}{1,0} is two bits specify which element from y or x to select.
// For example, {0,1,2,3}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7}) returns
-// {2, 1, 4, 6} (don't forget that the binary constant is written big-endian).
+// {2, 0, 5, 7} (don't forget that the binary constant is written big-endian).
//
// h1h0l1l0 results in better performance when it's a constant, a non-constant value will be translated into a jump table.
//
// concatSelectedConstantGrouped concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// The selection is chosen by the constant parameter h1h0l1l0
-// where each {h,l}{1,0} is two bits specify which element from y or x to select.
+// where each {h,l}{1,0} is two bits specifying which element from y or x to select.
// For example,
-// {0,1,2,3,8,9,10,11}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
+// {0,1,2,3,8,9,10,11}.concatSelectedConstantGrouped(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
// returns {2,0,5,7,10,8,13,15}
// (don't forget that the binary constant is written big-endian).
//
// concatSelectedConstantGrouped concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// The selection is chosen by the constant parameter h1h0l1l0
-// where each {h,l}{1,0} is two bits specify which element from y or x to select.
+// where each {h,l}{1,0} is two bits specifying which element from y or x to select.
// For example,
-// {0,1,2,3,8,9,10,11}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
-// returns {2,0,5,7,10,8,13,15}
+// {0,1,2,3,8,9,10,11, 20,21,22,23,28,29,210,211}.concatSelectedConstantGrouped(
+//
+// 0b_11_01_00_10, {4,5,6,7,12,13,14,15, 24,25,26,27,212,213,214,215})
+//
+// returns {2,0,5,7,10,8,13,15, 22,20,25,27,210,28,213,215}
// (don't forget that the binary constant is written big-endian).
//
// h1h0l1l0 results in better performance when it's a constant, a non-constant value will be translated into a jump table.
// hi and lo pair select 64-bit elements from the corresponding 128-bit
// subvectors of x and y.
//
-// For example {4,5,8,9}.concatSelectedConstant(0b_11_10, {6,7,10,11})
+// For example {4,5,8,9}.concatSelectedConstantGrouped(0b_11_10, {6,7,10,11})
// returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
// 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
// then 1, selecting element 1 from x's upper 128 bits (9), then 1,
// hi and lo pair select 64-bit elements from the corresponding 128-bit
// subvectors of x and y.
//
-// For example {4,5,8,9}.concatSelectedConstant(0b_11_10, {6,7,10,11})
-// returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
-// 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
-// then 1, selecting element 1 from x's upper 128 bits (9), then 1,
-// selecting element 1 from y's upper 128 bits (11).
-// This differs from the same method applied to a 32x8 vector, where
-// the 8-bit constant performs the same selection on both subvectors.
+// For example {4,5,8,9,12,13,16,17}.concatSelectedConstantGrouped(0b11_00_11_10, {6,7,10,11,14,15,18,19})
+// returns {4,7,9,11,12,14,17,19}; bit 0 is zero, selecting element 0 from x's
+// least 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
+// then 1, selecting element 1 from x's next 128 bits (9), then 1,
+// selecting element 1 from y's upper 128 bits (11). The next two 0 bits select
+// the lower elements from x and y's 3rd 128 bit groups (12, 14), the last two
+// 1 bits select the upper elements from x and y's last 128 bits (17, 19).
+// This differs from the same method applied to a 32x8 or 32x16 vector, where
+// the 8-bit constant performs the same selection on all the subvectors.
//
// hilos results in better performance when it's a constant, a non-constant value will be translated into a jump table.
//
// concatSelectedConstantGrouped concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// The selection is chosen by the constant parameter h1h0l1l0
-// where each {h,l}{1,0} is two bits specify which element from y or x to select.
+// where each {h,l}{1,0} is two bits specifying which element from y or x to select.
// For example,
-// {0,1,2,3,8,9,10,11}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
+// {0,1,2,3,8,9,10,11}.concatSelectedConstantGrouped(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
// returns {2,0,5,7,10,8,13,15}
// (don't forget that the binary constant is written big-endian).
//
// concatSelectedConstantGrouped concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// The selection is chosen by the constant parameter h1h0l1l0
-// where each {h,l}{1,0} is two bits specify which element from y or x to select.
+// where each {h,l}{1,0} is two bits specifying which element from y or x to select.
// For example,
-// {0,1,2,3,8,9,10,11}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
-// returns {2,0,5,7,10,8,13,15}
+// {0,1,2,3,8,9,10,11, 20,21,22,23,28,29,210,211}.concatSelectedConstantGrouped(
+//
+// 0b_11_01_00_10, {4,5,6,7,12,13,14,15, 24,25,26,27,212,213,214,215})
+//
+// returns {2,0,5,7,10,8,13,15, 22,20,25,27,210,28,213,215}
// (don't forget that the binary constant is written big-endian).
//
// h1h0l1l0 results in better performance when it's a constant, a non-constant value will be translated into a jump table.
// hi and lo pair select 64-bit elements from the corresponding 128-bit
// subvectors of x and y.
//
-// For example {4,5,8,9}.concatSelectedConstant(0b_11_10, {6,7,10,11})
+// For example {4,5,8,9}.concatSelectedConstantGrouped(0b_11_10, {6,7,10,11})
// returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
// 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
// then 1, selecting element 1 from x's upper 128 bits (9), then 1,
// hi and lo pair select 64-bit elements from the corresponding 128-bit
// subvectors of x and y.
//
-// For example {4,5,8,9}.concatSelectedConstant(0b_11_10, {6,7,10,11})
-// returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
-// 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
-// then 1, selecting element 1 from x's upper 128 bits (9), then 1,
-// selecting element 1 from y's upper 128 bits (11).
-// This differs from the same method applied to a 32x8 vector, where
-// the 8-bit constant performs the same selection on both subvectors.
+// For example {4,5,8,9,12,13,16,17}.concatSelectedConstantGrouped(0b11_00_11_10, {6,7,10,11,14,15,18,19})
+// returns {4,7,9,11,12,14,17,19}; bit 0 is zero, selecting element 0 from x's
+// least 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
+// then 1, selecting element 1 from x's next 128 bits (9), then 1,
+// selecting element 1 from y's upper 128 bits (11). The next two 0 bits select
+// the lower elements from x and y's 3rd 128 bit groups (12, 14), the last two
+// 1 bits select the upper elements from x and y's last 128 bits (17, 19).
+// This differs from the same method applied to a 32x8 or 32x16 vector, where
+// the 8-bit constant performs the same selection on all the subvectors.
//
// hilos results in better performance when it's a constant, a non-constant value will be translated into a jump table.
//
// concatSelectedConstantGrouped concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// The selection is chosen by the constant parameter h1h0l1l0
-// where each {h,l}{1,0} is two bits specify which element from y or x to select.
+// where each {h,l}{1,0} is two bits specifying which element from y or x to select.
// For example,
-// {0,1,2,3,8,9,10,11}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
+// {0,1,2,3,8,9,10,11}.concatSelectedConstantGrouped(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
// returns {2,0,5,7,10,8,13,15}
// (don't forget that the binary constant is written big-endian).
//
// concatSelectedConstantGrouped concatenates selected elements from 128-bit subvectors of x and y
// into the lower and upper halves of corresponding subvectors of the output.
// The selection is chosen by the constant parameter h1h0l1l0
-// where each {h,l}{1,0} is two bits specify which element from y or x to select.
+// where each {h,l}{1,0} is two bits specifying which element from y or x to select.
// For example,
-// {0,1,2,3,8,9,10,11}.concatSelectedConstant(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
-// returns {2,0,5,7,10,8,13,15}
+// {0,1,2,3,8,9,10,11, 20,21,22,23,28,29,210,211}.concatSelectedConstantGrouped(
+//
+// 0b_11_01_00_10, {4,5,6,7,12,13,14,15, 24,25,26,27,212,213,214,215})
+//
+// returns {2,0,5,7,10,8,13,15, 22,20,25,27,210,28,213,215}
// (don't forget that the binary constant is written big-endian).
//
// h1h0l1l0 results in better performance when it's a constant, a non-constant value will be translated into a jump table.
// hi and lo pair select 64-bit elements from the corresponding 128-bit
// subvectors of x and y.
//
-// For example {4,5,8,9}.concatSelectedConstant(0b_11_10, {6,7,10,11})
+// For example {4,5,8,9}.concatSelectedConstantGrouped(0b_11_10, {6,7,10,11})
// returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
// 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
// then 1, selecting element 1 from x's upper 128 bits (9), then 1,
// hi and lo pair select 64-bit elements from the corresponding 128-bit
// subvectors of x and y.
//
-// For example {4,5,8,9}.concatSelectedConstant(0b_11_10, {6,7,10,11})
-// returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
-// 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
-// then 1, selecting element 1 from x's upper 128 bits (9), then 1,
-// selecting element 1 from y's upper 128 bits (11).
-// This differs from the same method applied to a 32x8 vector, where
-// the 8-bit constant performs the same selection on both subvectors.
+// For example {4,5,8,9,12,13,16,17}.concatSelectedConstantGrouped(0b11_00_11_10, {6,7,10,11,14,15,18,19})
+// returns {4,7,9,11,12,14,17,19}; bit 0 is zero, selecting element 0 from x's
+// least 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
+// then 1, selecting element 1 from x's next 128 bits (9), then 1,
+// selecting element 1 from y's upper 128 bits (11). The next two 0 bits select
+// the lower elements from x and y's 3rd 128 bit groups (12, 14), the last two
+// 1 bits select the upper elements from x and y's last 128 bits (17, 19).
+// This differs from the same method applied to a 32x8 or 32x16 vector, where
+// the 8-bit constant performs the same selection on all the subvectors.
//
// hilos results in better performance when it's a constant, a non-constant value will be translated into a jump table.
//