!sum
- go: ShiftAllLeft
  nameAndSizeCheck: true
  specialLower: sftimm
  commutative: false
  documentation: !string |-
    // NAME shifts each element to the left by y bits.
- go: ShiftAllRight
  signed: false
  nameAndSizeCheck: true
  specialLower: sftimm
  commutative: false
  documentation: !string |-
    // NAME performs an unsigned right shift on each element by y bits.
- go: ShiftAllRight
  signed: true
  specialLower: sftimm
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME performs a signed right shift on each element by y bits.
- go: shiftAllLeftConst # no APIs, only ssa ops.
  noTypes: "true"
  noGenericOps: "true"
  SSAVariant: "const" # to avoid its name colliding with reg version of this instruction, amend this to its ssa op name.
  nameAndSizeCheck: true
  commutative: false
- go: shiftAllRightConst # no APIs, only ssa ops.
  noTypes: "true"
  noGenericOps: "true"
  SSAVariant: "const"
  signed: false
  nameAndSizeCheck: true
  commutative: false
- go: shiftAllRightConst # no APIs, only ssa ops.
  noTypes: "true"
  noGenericOps: "true"
  SSAVariant: "const"
  signed: true
  nameAndSizeCheck: true
  commutative: false

- go: ShiftLeft
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME shifts each element in x to the left by the number of bits specified in y's corresponding elements.
- go: ShiftRight
  signed: false
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME performs an unsigned right shift on each element in x by the number of bits specified in y's corresponding elements.
- go: ShiftRight
  signed: true
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME performs a signed right shift on each element in x by the number of bits specified in y's corresponding elements.
- go: RotateAllLeft
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME rotates each element to the left by the number of bits specified by shift.
- go: RotateLeft
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME rotates each element in x to the left by the number of bits specified by y's corresponding elements.
- go: RotateAllRight
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME rotates each element to the right by the number of bits specified by shift.
- go: RotateRight
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME rotates each element in x to the right by the number of bits specified by y's corresponding elements.
- go: ShiftAllLeftConcat
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME shifts each element of x to the left by the number of bits specified by
    // shift (only the lower 5 bits are used), and then copies the upper bits of y to the emptied lower bits of the shifted x.
- go: ShiftAllRightConcat
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME shifts each element of x to the right by the number of bits specified by
    // shift (only the lower 5 bits are used), and then copies the lower bits of y to the emptied upper bits of the shifted x.
- go: ShiftLeftConcat
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME shifts each element of x to the left by the number of bits specified by the
    // corresponding elements in y (only the lower 5 bits are used), and then copies the upper bits of z to the emptied lower bits of the shifted x.
- go: ShiftRightConcat
  nameAndSizeCheck: true
  commutative: false
  documentation: !string |-
    // NAME shifts each element of x to the right by the number of bits specified by the
    // corresponding elements in y (only the lower 5 bits are used), and then copies the lower bits of z to the emptied upper bits of the shifted x.
