Text file src/simd/_gen/simdgen/ops/Moves/categories.yaml

     1  !sum
     2  - go: SetElem
     3    commutative: false
     4    documentation: !string |-
     5      // NAME sets a single constant-indexed element's value.
     6  - go: GetElem
     7    commutative: false
     8    documentation: !string |-
     9      // NAME retrieves a single constant-indexed element's value.
    10  - go: SetLo
    11    commutative: false
    12    constImm: 0
    13    documentation: !string |-
    14      // NAME returns x with its lower half set to y.
    15  - go: GetLo
    16    commutative: false
    17    constImm: 0
    18    documentation: !string |-
    19      // NAME returns the lower half of x.
    20  - go: SetHi
    21    commutative: false
    22    constImm: 1
    23    documentation: !string |-
    24      // NAME returns x with its upper half set to y.
    25  - go: GetHi
    26    commutative: false
    27    constImm: 1
    28    documentation: !string |-
    29      // NAME returns the upper half of x.
    30  - go: PermuteOrZero
    31    commutative: false
    32    documentation: !string |-
    33      // NAME performs a full permutation of vector x using indices:
    34      // result := {x[indices[0]], x[indices[1]], ..., x[indices[n]]}
    35  - go: Permute
    36    commutative: false
    37    documentation: !string |-
    38      // NAME performs a full permutation of vector x using indices:
    39      // result := {x[indices[0]], x[indices[1]], ..., x[indices[n]]}
    40  - go: ConcatPermute # ConcatPermute is only available on or after AVX512
    41    commutative: false
    42    documentation: !string |-
    43      // NAME performs a full permutation of vector x, y using indices:
    44      // result := {xy[indices[0]], xy[indices[1]], ..., xy[indices[n]]}
    45      // where xy is the concatenation of x (lower half) and y (upper half).
    46      // Only the needed bits to represent xy's index are used in indices' elements.
    47  - go: Compress
    48    commutative: false
    49    documentation: !string |-
    50      // NAME performs a compression on vector x using mask by
    51      // selecting elements as indicated by mask, and pack them to lower indexed elements.
    52  - go: blend
    53    commutative: false
    54    documentation: !string |-
    55      // NAME blends two vectors based on mask values, choosing either
    56      // the first or the second based on whether the third is false or true
    57  - go: move
    58    commutative: false
    59    noTypes: "true"
    60    noGenericOps: "true"
    61  - go: Expand
    62    commutative: false
    63    documentation: !string |-
    64      // NAME performs an expansion on a vector x whose elements are packed to lower parts.
    65      // The expansion is to distribute elements as indexed by mask, from lower mask elements to upper in order.
    66  - go: Broadcast128
    67    commutative: false
    68    documentation: !string |-
    69      // NAME copies element zero of its (128-bit) input to all elements of
    70      // the 128-bit output vector.
    71  - go: Broadcast256
    72    commutative: false
    73    documentation: !string |-
    74      // NAME copies element zero of its (128-bit) input to all elements of
    75      // the 256-bit output vector.
    76  - go: Broadcast512
    77    commutative: false
    78    documentation: !string |-
    79      // NAME copies element zero of its (128-bit) input to all elements of
    80      // the 512-bit output vector.
    81  - go: PermuteOrZeroGrouped
    82    commutative: false
    83    documentation: !string |- # Detailed documentation will rely on the specific ops.
    84      // NAME performs a grouped permutation of vector x using indices:
    85  - go: PermuteGrouped
    86    commutative: false
    87    documentation: !string |- # Detailed documentation will rely on the specific ops.
    88      // NAME performs a grouped permutation of vector x using indices:
    89  - go: permuteScalars
    90    commutative: false
    91    documentation: !string |- # Detailed documentation will rely on the specific ops.
    92      // NAME performs a permutation of vector x using constant indices:
    93  - go: permuteScalarsGrouped
    94    commutative: false
    95    documentation: !string |- # Detailed documentation will rely on the specific ops.
    96      // NAME performs a grouped permutation of vector x using constant indices:
    97  - go: permuteScalarsLo
    98    commutative: false
    99    documentation: !string |- # Detailed documentation will rely on the specific ops.
   100      // NAME performs a permutation of vector x using constant indices:
   101  - go: permuteScalarsLoGrouped
   102    commutative: false
   103    documentation: !string |- # Detailed documentation will rely on the specific ops.
   104      // NAME performs a grouped permutation of vector x using constant indices:
   105  - go: permuteScalarsHi
   106    commutative: false
   107    documentation: !string |- # Detailed documentation will rely on the specific ops.
   108      // NAME performs a permutation of vector x using constant indices:
   109  - go: permuteScalarsHiGrouped
   110    commutative: false
   111    documentation: !string |- # Detailed documentation will rely on the specific ops.
   112      // NAME performs a grouped permutation of vector x using constant indices:
   113  - go: InterleaveHi
   114    commutative: false
   115    documentation: !string |-
   116      // NAME interleaves the elements of the high halves of x and y.
   117  - go: InterleaveLo
   118    commutative: false
   119    documentation: !string |-
   120      // NAME interleaves the elements of the low halves of x and y.
   121  - go: InterleaveHiGrouped
   122    commutative: false
   123    documentation: !string |-
   124      // NAME interleaves the elements of the high half of each 128-bit subvector of x and y.
   125  - go: InterleaveLoGrouped
   126    commutative: false
   127    documentation: !string |-
   128      // NAME interleaves the elements of the low half of each 128-bit subvector of x and y.
   129  
   130  - go: concatSelectedConstant
   131    commutative: false
   132    out:
   133      - elemBits: 32
   134    documentation: !string |-
   135      // NAME concatenates selected elements from x and y into the lower and upper
   136      // halves of the output.  The selection is chosen by the constant parameter h1h0l1l0
   137      // where each {h,l}{1,0} is two bits specify which element from y or x to select.
   138      // For example, {0,1,2,3}.NAME(0b_11_01_00_10, {4,5,6,7}) returns
   139      // {2, 0, 5, 7} (don't forget that the binary constant is written big-endian).
   140  
   141  - go: concatSelectedConstant
   142    commutative: false
   143    out:
   144      - elemBits: 64
   145    documentation: !string |-
   146      // NAME concatenates selected elements from x and y into the lower and upper
   147      // halves of the output.  The selection is chosen by the constant parameter hilo
   148      // where hi and lo are each one bit specifying which 64-bit element to select
   149      // from y and x.  For example {4,5}.NAME(0b10, {6,7})
   150      // returns {4,7}; bit 0, selecting from x, is zero, and selects 4, and bit 1,
   151      // selecting from y, is 1, and selects 7.
   152  
   153  - go: concatSelectedConstantGrouped
   154    commutative: false
   155    out:
   156      - elemBits: 32
   157        bits: 256
   158    documentation: !string |-
   159      // NAME concatenates selected elements from 128-bit subvectors of x and y
   160      // into the lower and upper halves of corresponding subvectors of the output.
   161      // The selection is chosen by the constant parameter h1h0l1l0
   162      // where each {h,l}{1,0} is two bits specifying which element from y or x to select.
   163      // For example,
   164      // {0,1,2,3,8,9,10,11}.NAME(0b_11_01_00_10, {4,5,6,7,12,13,14,15})
   165      // returns {2,0,5,7,10,8,13,15}
   166      // (don't forget that the binary constant is written big-endian).
   167  
   168  - go: concatSelectedConstantGrouped
   169    commutative: false
   170    out:
   171      - elemBits: 64
   172        bits: 256
   173    documentation: !string |-
   174      // NAME concatenates selected elements from 128-bit subvectors of x and y
   175      // into the lower and upper halves of corresponding subvectors of the output.
   176      // The selections are specified by the constant parameter hilos where each
   177      // hi and lo pair select 64-bit elements from the corresponding 128-bit
   178      // subvectors of x and y.
   179      //
   180      // For example {4,5,8,9}.NAME(0b_11_10, {6,7,10,11})
   181      // returns {4,7,9,11}; bit 0 is zero, selecting element 0 from x's least
   182      // 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
   183      // then 1, selecting element 1 from x's upper 128 bits (9), then 1,
   184      // selecting element 1 from y's upper 128 bits (11).
   185      // This differs from the same method applied to a 32x8 vector, where
   186      // the 8-bit constant performs the same selection on both subvectors.
   187  
   188  - go: concatSelectedConstantGrouped
   189    commutative: false
   190    out:
   191      - elemBits: 32
   192        bits: 512
   193    documentation: !string |-
   194      // NAME concatenates selected elements from 128-bit subvectors of x and y
   195      // into the lower and upper halves of corresponding subvectors of the output.
   196      // The selection is chosen by the constant parameter h1h0l1l0
   197      // where each {h,l}{1,0} is two bits specifying which element from y or x to select.
   198      // For example,
   199      //
   200      //   {0,1,2,3,8,9,10,11, 20,21,22,23,28,29,210,211}.NAME(
   201      //    0b_11_01_00_10, {4,5,6,7,12,13,14,15, 24,25,26,27,212,213,214,215})
   202      //
   203      // returns {2,0,5,7,10,8,13,15, 22,20,25,27,210,28,213,215}
   204      //
   205      // (don't forget that the binary constant is written big-endian).
   206  
   207  - go: concatSelectedConstantGrouped
   208    commutative: false
   209    out:
   210      - elemBits: 64
   211        bits: 512
   212    documentation: !string |-
   213      // NAME concatenates selected elements from 128-bit subvectors of x and y
   214      // into the lower and upper halves of corresponding subvectors of the output.
   215      // The selections are specified by the constant parameter hilos where each
   216      // hi and lo pair select 64-bit elements from the corresponding 128-bit
   217      // subvectors of x and y.
   218      //
   219      // For example {4,5,8,9,12,13,16,17}.NAME(0b11_00_11_10, {6,7,10,11,14,15,18,19})
   220      // returns {4,7,9,11,12,14,17,19}; bit 0 is zero, selecting element 0 from x's
   221      // least 128-bits (4), then 1, selects the element 1 from y's least 128-bits (7),
   222      // then 1, selecting element 1 from x's next 128 bits (9), then 1,
   223      // selecting element 1 from y's upper 128 bits (11).  The next two 0 bits select
   224      // the lower elements from x and y's 3rd 128 bit groups (12, 14), the last two
   225      // 1 bits select the upper elements from x and y's last 128 bits (17, 19).
   226      // This differs from the same method applied to a 32x8 or 32x16 vector, where
   227      // the 8-bit constant performs the same selection on all the subvectors.
   228  
   229  - go: Select128FromPair
   230    commutative: false
   231    documentation: !string |-
   232      // NAME treats the 256-bit vectors x and y as a single vector of four
   233      // 128-bit elements, and returns a 256-bit result formed by
   234      // concatenating the two elements specified by lo and hi.
   235  
   236  - go: ConcatShiftBytesRight
   237    commutative: false
   238    documentation: !string |-
   239      // NAME concatenates x and y and shift it right by constant bytes.
   240      // The result vector will be the lower half of the concatenated vector.
   241  
   242  - go: ConcatShiftBytesRightGrouped
   243    commutative: false
   244    documentation: !string |-
   245      // NAME concatenates x and y and shift it right by constant bytes.
   246      // The result vector will be the lower half of the concatenated vector.
   247      // This operation is performed grouped by each 16 byte.
   248  

View as plain text