// Code generated by 'go run -C $GOROOT/src/simd/archsimd/_gen/midway'; DO NOT EDIT.

//go:build goexperiment.simd && (amd64 || wasm || arm64)

// Computed intersection of methods for supported SIMD architectures and vector widths

package simd

// LoadInt8 loads a slice of int8 into an Int8s vector.
func LoadInt8s([]int8) Int8s

// LoadInt8Part loads a partial slice of int8 into an Int8s vector, returning the vector and the number of elements loaded.
func LoadInt8sPart([]int8) (Int8s, int)

// BroadcastInt8 fills the elements of a slice with its argument value.
func BroadcastInt8s(int8) Int8s

// Abs returns the element-wise absolute value of x.
func (x Int8s) Abs() Int8s

// Add returns the element-wise sum of x and y.
func (x Int8s) Add(y Int8s) Int8s

// AddSaturated returns the element-wise saturated sum of x and y.
func (x Int8s) AddSaturated(y Int8s) Int8s

// And returns the bitwise AND of x and y.
func (x Int8s) And(y Int8s) Int8s

// AndNot returns the bitwise AND NOT of x and y.
func (x Int8s) AndNot(y Int8s) Int8s

// ConvertToUint8 converts the vector elements to uint8.
func (x Int8s) ConvertToUint8() Uint8s

// Equal returns a mask indicating where x and y are equal.
func (x Int8s) Equal(y Int8s) Mask8s

// Greater returns a mask indicating where x is greater than y.
func (x Int8s) Greater(y Int8s) Mask8s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Int8s) GreaterEqual(y Int8s) Mask8s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Int8s) IfElse(mask Mask8s, y Int8s) Int8s

// Len returns the number of elements in the vector.
func (x Int8s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Int8s) Less(y Int8s) Mask8s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Int8s) LessEqual(y Int8s) Mask8s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Int8s) Masked(mask Mask8s) Int8s

// Max returns the element-wise maximum of x and y.
func (x Int8s) Max(y Int8s) Int8s

// Min returns the element-wise minimum of x and y.
func (x Int8s) Min(y Int8s) Int8s

// Mul returns the element-wise product of x and y.
func (x Int8s) Mul(y Int8s) Int8s

// Neg returns the element-wise negation of x.
func (x Int8s) Neg() Int8s

// Not returns the bitwise NOT of x.
func (x Int8s) Not() Int8s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Int8s) NotEqual(y Int8s) Mask8s

// Or returns the bitwise OR of x and y.
func (x Int8s) Or(y Int8s) Int8s

// Store stores the vector elements into the slice s.
func (x Int8s) Store(s []int8)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Int8s) StorePart(s []int8) int

// String returns a string representation of the vector.
func (x Int8s) String() string

// Sub returns the element-wise difference of x and y.
func (x Int8s) Sub(y Int8s) Int8s

// SubSaturated returns the element-wise saturated difference of x and y.
func (x Int8s) SubSaturated(y Int8s) Int8s

// ToBits reinterprets the vector bits as an unsigned integer vector.
func (x Int8s) ToBits() Uint8s

// ToMask returns a mask representation of the vector.
func (x Int8s) ToMask() (to Mask8s)

// Xor returns the bitwise XOR of x and y.
func (x Int8s) Xor(y Int8s) Int8s

// LoadInt16 loads a slice of int16 into an Int16s vector.
func LoadInt16s([]int16) Int16s

// LoadInt16Part loads a partial slice of int16 into an Int16s vector, returning the vector and the number of elements loaded.
func LoadInt16sPart([]int16) (Int16s, int)

// BroadcastInt16 fills the elements of a slice with its argument value.
func BroadcastInt16s(int16) Int16s

// Abs returns the element-wise absolute value of x.
func (x Int16s) Abs() Int16s

// Add returns the element-wise sum of x and y.
func (x Int16s) Add(y Int16s) Int16s

// AddSaturated returns the element-wise saturated sum of x and y.
func (x Int16s) AddSaturated(y Int16s) Int16s

// And returns the bitwise AND of x and y.
func (x Int16s) And(y Int16s) Int16s

// AndNot returns the bitwise AND NOT of x and y.
func (x Int16s) AndNot(y Int16s) Int16s

// ConvertToUint16 converts the vector elements to uint16.
func (x Int16s) ConvertToUint16() Uint16s

// Equal returns a mask indicating where x and y are equal.
func (x Int16s) Equal(y Int16s) Mask16s

// Greater returns a mask indicating where x is greater than y.
func (x Int16s) Greater(y Int16s) Mask16s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Int16s) GreaterEqual(y Int16s) Mask16s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Int16s) IfElse(mask Mask16s, y Int16s) Int16s

// Len returns the number of elements in the vector.
func (x Int16s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Int16s) Less(y Int16s) Mask16s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Int16s) LessEqual(y Int16s) Mask16s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Int16s) Masked(mask Mask16s) Int16s

// Max returns the element-wise maximum of x and y.
func (x Int16s) Max(y Int16s) Int16s

// Min returns the element-wise minimum of x and y.
func (x Int16s) Min(y Int16s) Int16s

// Mul returns the element-wise product of x and y.
func (x Int16s) Mul(y Int16s) Int16s

// Neg returns the element-wise negation of x.
func (x Int16s) Neg() Int16s

// Not returns the bitwise NOT of x.
func (x Int16s) Not() Int16s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Int16s) NotEqual(y Int16s) Mask16s

// Or returns the bitwise OR of x and y.
func (x Int16s) Or(y Int16s) Int16s

// RotatesAllLeft rotates all elements left by y bits.
func (x Int16s) RotateAllLeft(dist uint64) Int16s

// RotatesAllRight rotates all elements right by y bits.
func (x Int16s) RotateAllRight(dist uint64) Int16s

// ShiftAllLeft shifts all elements left by y bits.
func (x Int16s) ShiftAllLeft(shift uint64) Int16s

// ShiftAllRight shifts all elements right by y bits.
func (x Int16s) ShiftAllRight(shift uint64) Int16s

// Store stores the vector elements into the slice s.
func (x Int16s) Store(s []int16)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Int16s) StorePart(s []int16) int

// String returns a string representation of the vector.
func (x Int16s) String() string

// Sub returns the element-wise difference of x and y.
func (x Int16s) Sub(y Int16s) Int16s

// SubSaturated returns the element-wise saturated difference of x and y.
func (x Int16s) SubSaturated(y Int16s) Int16s

// ToBits reinterprets the vector bits as an unsigned integer vector.
func (x Int16s) ToBits() Uint16s

// ToMask returns a mask representation of the vector.
func (x Int16s) ToMask() (to Mask16s)

// Xor returns the bitwise XOR of x and y.
func (x Int16s) Xor(y Int16s) Int16s

// LoadInt32 loads a slice of int32 into an Int32s vector.
func LoadInt32s([]int32) Int32s

// LoadInt32Part loads a partial slice of int32 into an Int32s vector, returning the vector and the number of elements loaded.
func LoadInt32sPart([]int32) (Int32s, int)

// BroadcastInt32 fills the elements of a slice with its argument value.
func BroadcastInt32s(int32) Int32s

// Abs returns the element-wise absolute value of x.
func (x Int32s) Abs() Int32s

// Add returns the element-wise sum of x and y.
func (x Int32s) Add(y Int32s) Int32s

// And returns the bitwise AND of x and y.
func (x Int32s) And(y Int32s) Int32s

// AndNot returns the bitwise AND NOT of x and y.
func (x Int32s) AndNot(y Int32s) Int32s

// ConvertToFloat32 converts the vector elements to float32.
func (x Int32s) ConvertToFloat32() Float32s

// ConvertToUint32 converts the vector elements to uint32.
func (x Int32s) ConvertToUint32() Uint32s

// Equal returns a mask indicating where x and y are equal.
func (x Int32s) Equal(y Int32s) Mask32s

// Greater returns a mask indicating where x is greater than y.
func (x Int32s) Greater(y Int32s) Mask32s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Int32s) GreaterEqual(y Int32s) Mask32s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Int32s) IfElse(mask Mask32s, y Int32s) Int32s

// Len returns the number of elements in the vector.
func (x Int32s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Int32s) Less(y Int32s) Mask32s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Int32s) LessEqual(y Int32s) Mask32s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Int32s) Masked(mask Mask32s) Int32s

// Max returns the element-wise maximum of x and y.
func (x Int32s) Max(y Int32s) Int32s

// Min returns the element-wise minimum of x and y.
func (x Int32s) Min(y Int32s) Int32s

// Mul returns the element-wise product of x and y.
func (x Int32s) Mul(y Int32s) Int32s

// Neg returns the element-wise negation of x.
func (x Int32s) Neg() Int32s

// Not returns the bitwise NOT of x.
func (x Int32s) Not() Int32s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Int32s) NotEqual(y Int32s) Mask32s

// Or returns the bitwise OR of x and y.
func (x Int32s) Or(y Int32s) Int32s

// RotatesAllLeft rotates all elements left by y bits.
func (x Int32s) RotateAllLeft(dist uint64) Int32s

// RotatesAllRight rotates all elements right by y bits.
func (x Int32s) RotateAllRight(dist uint64) Int32s

// ShiftAllLeft shifts all elements left by y bits.
func (x Int32s) ShiftAllLeft(shift uint64) Int32s

// ShiftAllRight shifts all elements right by y bits.
func (x Int32s) ShiftAllRight(shift uint64) Int32s

// Store stores the vector elements into the slice s.
func (x Int32s) Store(s []int32)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Int32s) StorePart(s []int32) int

// String returns a string representation of the vector.
func (x Int32s) String() string

// Sub returns the element-wise difference of x and y.
func (x Int32s) Sub(y Int32s) Int32s

// ToBits reinterprets the vector bits as an unsigned integer vector.
func (x Int32s) ToBits() Uint32s

// ToMask returns a mask representation of the vector.
func (x Int32s) ToMask() (to Mask32s)

// Xor returns the bitwise XOR of x and y.
func (x Int32s) Xor(y Int32s) Int32s

// LoadInt64 loads a slice of int64 into an Int64s vector.
func LoadInt64s([]int64) Int64s

// LoadInt64Part loads a partial slice of int64 into an Int64s vector, returning the vector and the number of elements loaded.
func LoadInt64sPart([]int64) (Int64s, int)

// BroadcastInt64 fills the elements of a slice with its argument value.
func BroadcastInt64s(int64) Int64s

// Add returns the element-wise sum of x and y.
func (x Int64s) Add(y Int64s) Int64s

// And returns the bitwise AND of x and y.
func (x Int64s) And(y Int64s) Int64s

// AndNot returns the bitwise AND NOT of x and y.
func (x Int64s) AndNot(y Int64s) Int64s

// ConvertToUint64 converts the vector elements to uint64.
func (x Int64s) ConvertToUint64() Uint64s

// Equal returns a mask indicating where x and y are equal.
func (x Int64s) Equal(y Int64s) Mask64s

// Greater returns a mask indicating where x is greater than y.
func (x Int64s) Greater(y Int64s) Mask64s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Int64s) GreaterEqual(y Int64s) Mask64s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Int64s) IfElse(mask Mask64s, y Int64s) Int64s

// Len returns the number of elements in the vector.
func (x Int64s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Int64s) Less(y Int64s) Mask64s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Int64s) LessEqual(y Int64s) Mask64s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Int64s) Masked(mask Mask64s) Int64s

// Neg returns the element-wise negation of x.
func (x Int64s) Neg() Int64s

// Not returns the bitwise NOT of x.
func (x Int64s) Not() Int64s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Int64s) NotEqual(y Int64s) Mask64s

// Or returns the bitwise OR of x and y.
func (x Int64s) Or(y Int64s) Int64s

// RotatesAllLeft rotates all elements left by y bits.
func (x Int64s) RotateAllLeft(dist uint64) Int64s

// RotatesAllRight rotates all elements right by y bits.
func (x Int64s) RotateAllRight(dist uint64) Int64s

// ShiftAllLeft shifts all elements left by y bits.
func (x Int64s) ShiftAllLeft(shift uint64) Int64s

// Store stores the vector elements into the slice s.
func (x Int64s) Store(s []int64)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Int64s) StorePart(s []int64) int

// String returns a string representation of the vector.
func (x Int64s) String() string

// Sub returns the element-wise difference of x and y.
func (x Int64s) Sub(y Int64s) Int64s

// ToBits reinterprets the vector bits as an unsigned integer vector.
func (x Int64s) ToBits() Uint64s

// ToMask returns a mask representation of the vector.
func (x Int64s) ToMask() (to Mask64s)

// Xor returns the bitwise XOR of x and y.
func (x Int64s) Xor(y Int64s) Int64s

// LoadUint8 loads a slice of uint8 into an Uint8s vector.
func LoadUint8s([]uint8) Uint8s

// LoadUint8Part loads a partial slice of uint8 into an Uint8s vector, returning the vector and the number of elements loaded.
func LoadUint8sPart([]uint8) (Uint8s, int)

// BroadcastUint8 fills the elements of a slice with its argument value.
func BroadcastUint8s(uint8) Uint8s

// Add returns the element-wise sum of x and y.
func (x Uint8s) Add(y Uint8s) Uint8s

// AddSaturated returns the element-wise saturated sum of x and y.
func (x Uint8s) AddSaturated(y Uint8s) Uint8s

// And returns the bitwise AND of x and y.
func (x Uint8s) And(y Uint8s) Uint8s

// AndNot returns the bitwise AND NOT of x and y.
func (x Uint8s) AndNot(y Uint8s) Uint8s

// Average returns the element-wise average of x and y.
func (x Uint8s) Average(y Uint8s) Uint8s

// BitsToInt8 reinterprets the vector bits as an Int8s vector.
func (x Uint8s) BitsToInt8() Int8s

// ConvertToInt8 converts the vector elements to int8.
func (x Uint8s) ConvertToInt8() Int8s

// Equal returns a mask indicating where x and y are equal.
func (x Uint8s) Equal(y Uint8s) Mask8s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Uint8s) IfElse(mask Mask8s, y Uint8s) Uint8s

// Len returns the number of elements in the vector.
func (x Uint8s) Len() int

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Uint8s) Masked(mask Mask8s) Uint8s

// Max returns the element-wise maximum of x and y.
func (x Uint8s) Max(y Uint8s) Uint8s

// Min returns the element-wise minimum of x and y.
func (x Uint8s) Min(y Uint8s) Uint8s

// Mul returns the element-wise product of x and y.
func (x Uint8s) Mul(y Uint8s) Uint8s

// Not returns the bitwise NOT of x.
func (x Uint8s) Not() Uint8s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Uint8s) NotEqual(y Uint8s) Mask8s

// Or returns the bitwise OR of x and y.
func (x Uint8s) Or(y Uint8s) Uint8s

// ReshapeToUint16s reinterprets the vector bits as a Uint16s vector.
func (x Uint8s) ReshapeToUint16s() Uint16s

// ReshapeToUint32s reinterprets the vector bits as a Uint32s vector.
func (x Uint8s) ReshapeToUint32s() Uint32s

// ReshapeToUint64s reinterprets the vector bits as a Uint64s vector.
func (x Uint8s) ReshapeToUint64s() Uint64s

// Store stores the vector elements into the slice s.
func (x Uint8s) Store(s []uint8)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Uint8s) StorePart(s []uint8) int

// String returns a string representation of the vector.
func (x Uint8s) String() string

// Sub returns the element-wise difference of x and y.
func (x Uint8s) Sub(y Uint8s) Uint8s

// SubSaturated returns the element-wise saturated difference of x and y.
func (x Uint8s) SubSaturated(y Uint8s) Uint8s

// Xor returns the bitwise XOR of x and y.
func (x Uint8s) Xor(y Uint8s) Uint8s

// LoadUint16 loads a slice of uint16 into an Uint16s vector.
func LoadUint16s([]uint16) Uint16s

// LoadUint16Part loads a partial slice of uint16 into an Uint16s vector, returning the vector and the number of elements loaded.
func LoadUint16sPart([]uint16) (Uint16s, int)

// BroadcastUint16 fills the elements of a slice with its argument value.
func BroadcastUint16s(uint16) Uint16s

// Add returns the element-wise sum of x and y.
func (x Uint16s) Add(y Uint16s) Uint16s

// AddSaturated returns the element-wise saturated sum of x and y.
func (x Uint16s) AddSaturated(y Uint16s) Uint16s

// And returns the bitwise AND of x and y.
func (x Uint16s) And(y Uint16s) Uint16s

// AndNot returns the bitwise AND NOT of x and y.
func (x Uint16s) AndNot(y Uint16s) Uint16s

// Average returns the element-wise average of x and y.
func (x Uint16s) Average(y Uint16s) Uint16s

// BitsToInt16 reinterprets the vector bits as an Int16s vector.
func (x Uint16s) BitsToInt16() Int16s

// ConvertToInt16 converts the vector elements to int16.
func (x Uint16s) ConvertToInt16() Int16s

// Equal returns a mask indicating where x and y are equal.
func (x Uint16s) Equal(y Uint16s) Mask16s

// Greater returns a mask indicating where x is greater than y.
func (x Uint16s) Greater(y Uint16s) Mask16s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Uint16s) GreaterEqual(y Uint16s) Mask16s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Uint16s) IfElse(mask Mask16s, y Uint16s) Uint16s

// Len returns the number of elements in the vector.
func (x Uint16s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Uint16s) Less(y Uint16s) Mask16s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Uint16s) LessEqual(y Uint16s) Mask16s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Uint16s) Masked(mask Mask16s) Uint16s

// Max returns the element-wise maximum of x and y.
func (x Uint16s) Max(y Uint16s) Uint16s

// Min returns the element-wise minimum of x and y.
func (x Uint16s) Min(y Uint16s) Uint16s

// Mul returns the element-wise product of x and y.
func (x Uint16s) Mul(y Uint16s) Uint16s

// Not returns the bitwise NOT of x.
func (x Uint16s) Not() Uint16s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Uint16s) NotEqual(y Uint16s) Mask16s

// Or returns the bitwise OR of x and y.
func (x Uint16s) Or(y Uint16s) Uint16s

// ReshapeToUint32s reinterprets the vector bits as a Uint32s vector.
func (x Uint16s) ReshapeToUint32s() Uint32s

// ReshapeToUint64s reinterprets the vector bits as a Uint64s vector.
func (x Uint16s) ReshapeToUint64s() Uint64s

// ReshapeToUint8s reinterprets the vector bits as a Uint8s vector.
func (x Uint16s) ReshapeToUint8s() Uint8s

// RotatesAllLeft rotates all elements left by y bits.
func (x Uint16s) RotateAllLeft(dist uint64) Uint16s

// RotatesAllRight rotates all elements right by y bits.
func (x Uint16s) RotateAllRight(dist uint64) Uint16s

// ShiftAllLeft shifts all elements left by y bits.
func (x Uint16s) ShiftAllLeft(shift uint64) Uint16s

// ShiftAllRight shifts all elements right by y bits.
func (x Uint16s) ShiftAllRight(shift uint64) Uint16s

// Store stores the vector elements into the slice s.
func (x Uint16s) Store(s []uint16)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Uint16s) StorePart(s []uint16) int

// String returns a string representation of the vector.
func (x Uint16s) String() string

// Sub returns the element-wise difference of x and y.
func (x Uint16s) Sub(y Uint16s) Uint16s

// SubSaturated returns the element-wise saturated difference of x and y.
func (x Uint16s) SubSaturated(y Uint16s) Uint16s

// Xor returns the bitwise XOR of x and y.
func (x Uint16s) Xor(y Uint16s) Uint16s

// LoadUint32 loads a slice of uint32 into an Uint32s vector.
func LoadUint32s([]uint32) Uint32s

// LoadUint32Part loads a partial slice of uint32 into an Uint32s vector, returning the vector and the number of elements loaded.
func LoadUint32sPart([]uint32) (Uint32s, int)

// BroadcastUint32 fills the elements of a slice with its argument value.
func BroadcastUint32s(uint32) Uint32s

// Add returns the element-wise sum of x and y.
func (x Uint32s) Add(y Uint32s) Uint32s

// And returns the bitwise AND of x and y.
func (x Uint32s) And(y Uint32s) Uint32s

// AndNot returns the bitwise AND NOT of x and y.
func (x Uint32s) AndNot(y Uint32s) Uint32s

// BitsToFloat32 reinterprets the vector bits as a Float32s vector.
func (x Uint32s) BitsToFloat32() Float32s

// BitsToInt32 reinterprets the vector bits as an Int32s vector.
func (x Uint32s) BitsToInt32() Int32s

// ConvertToInt32 converts the vector elements to int32.
func (x Uint32s) ConvertToInt32() Int32s

// Equal returns a mask indicating where x and y are equal.
func (x Uint32s) Equal(y Uint32s) Mask32s

// Greater returns a mask indicating where x is greater than y.
func (x Uint32s) Greater(y Uint32s) Mask32s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Uint32s) GreaterEqual(y Uint32s) Mask32s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Uint32s) IfElse(mask Mask32s, y Uint32s) Uint32s

// Len returns the number of elements in the vector.
func (x Uint32s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Uint32s) Less(y Uint32s) Mask32s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Uint32s) LessEqual(y Uint32s) Mask32s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Uint32s) Masked(mask Mask32s) Uint32s

// Max returns the element-wise maximum of x and y.
func (x Uint32s) Max(y Uint32s) Uint32s

// Min returns the element-wise minimum of x and y.
func (x Uint32s) Min(y Uint32s) Uint32s

// Mul returns the element-wise product of x and y.
func (x Uint32s) Mul(y Uint32s) Uint32s

// Not returns the bitwise NOT of x.
func (x Uint32s) Not() Uint32s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Uint32s) NotEqual(y Uint32s) Mask32s

// Or returns the bitwise OR of x and y.
func (x Uint32s) Or(y Uint32s) Uint32s

// ReshapeToUint16s reinterprets the vector bits as a Uint16s vector.
func (x Uint32s) ReshapeToUint16s() Uint16s

// ReshapeToUint64s reinterprets the vector bits as a Uint64s vector.
func (x Uint32s) ReshapeToUint64s() Uint64s

// ReshapeToUint8s reinterprets the vector bits as a Uint8s vector.
func (x Uint32s) ReshapeToUint8s() Uint8s

// RotatesAllLeft rotates all elements left by y bits.
func (x Uint32s) RotateAllLeft(dist uint64) Uint32s

// RotatesAllRight rotates all elements right by y bits.
func (x Uint32s) RotateAllRight(dist uint64) Uint32s

// ShiftAllLeft shifts all elements left by y bits.
func (x Uint32s) ShiftAllLeft(shift uint64) Uint32s

// ShiftAllRight shifts all elements right by y bits.
func (x Uint32s) ShiftAllRight(shift uint64) Uint32s

// Store stores the vector elements into the slice s.
func (x Uint32s) Store(s []uint32)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Uint32s) StorePart(s []uint32) int

// String returns a string representation of the vector.
func (x Uint32s) String() string

// Sub returns the element-wise difference of x and y.
func (x Uint32s) Sub(y Uint32s) Uint32s

// Xor returns the bitwise XOR of x and y.
func (x Uint32s) Xor(y Uint32s) Uint32s

// LoadUint64 loads a slice of uint64 into an Uint64s vector.
func LoadUint64s([]uint64) Uint64s

// LoadUint64Part loads a partial slice of uint64 into an Uint64s vector, returning the vector and the number of elements loaded.
func LoadUint64sPart([]uint64) (Uint64s, int)

// BroadcastUint64 fills the elements of a slice with its argument value.
func BroadcastUint64s(uint64) Uint64s

// Add returns the element-wise sum of x and y.
func (x Uint64s) Add(y Uint64s) Uint64s

// And returns the bitwise AND of x and y.
func (x Uint64s) And(y Uint64s) Uint64s

// AndNot returns the bitwise AND NOT of x and y.
func (x Uint64s) AndNot(y Uint64s) Uint64s

// BitsToFloat64 reinterprets the vector bits as a Float64s vector.
func (x Uint64s) BitsToFloat64() Float64s

// BitsToInt64 reinterprets the vector bits as an Int64s vector.
func (x Uint64s) BitsToInt64() Int64s

// CarrylessMultiplyOdd computes the carryless
// multiplications of selected even indexed elements of x and y.
// Each product is 128 bits wide and fills the corresponding
// even-odd pairs in the result.
//
// A carryless multiplication uses bitwise XOR instead of
// add-with-carry, for example (in base two):
//
//	11 * 11 = 11 * (10 ^ 1) = (11 * 10) ^ (11 * 1) = 110 ^ 11 = 101
//
// This also models multiplication of polynomials with coefficients
// from GF(2) -- 11 * 11 models (x+1)*(x+1) = x**2 + (1^1)x + 1 =
// x**2 + 0x + 1 = x**2 + 1 modeled by 101.  (Note that "+" adds
// polynomial terms, but coefficients "add" with XOR.)"
func (x Uint64s) CarrylessMultiplyEven(y Uint64s) Uint64s

// CarrylessMultiplyOdd computes the carryless
// multiplications of selected odd indexed elements of x and y.
// Each product is 128 bits wide and fills the corresponding
// even-odd pairs in the result.
//
// A carryless multiplication uses bitwise XOR instead of
// add-with-carry, for example (in base two):
//
//	11 * 11 = 11 * (10 ^ 1) = (11 * 10) ^ (11 * 1) = 110 ^ 11 = 101
//
// This also models multiplication of polynomials with coefficients
// from GF(2) -- 11 * 11 models (x+1)*(x+1) = x**2 + (1^1)x + 1 =
// x**2 + 0x + 1 = x**2 + 1 modeled by 101.  (Note that "+" adds
// polynomial terms, but coefficients "add" with XOR.)"
func (x Uint64s) CarrylessMultiplyOdd(y Uint64s) Uint64s

// ConvertToInt64 converts the vector elements to int64.
func (x Uint64s) ConvertToInt64() Int64s

// Equal returns a mask indicating where x and y are equal.
func (x Uint64s) Equal(y Uint64s) Mask64s

// Greater returns a mask indicating where x is greater than y.
func (x Uint64s) Greater(y Uint64s) Mask64s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Uint64s) GreaterEqual(y Uint64s) Mask64s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Uint64s) IfElse(mask Mask64s, y Uint64s) Uint64s

// Len returns the number of elements in the vector.
func (x Uint64s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Uint64s) Less(y Uint64s) Mask64s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Uint64s) LessEqual(y Uint64s) Mask64s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Uint64s) Masked(mask Mask64s) Uint64s

// Not returns the bitwise NOT of x.
func (x Uint64s) Not() Uint64s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Uint64s) NotEqual(y Uint64s) Mask64s

// Or returns the bitwise OR of x and y.
func (x Uint64s) Or(y Uint64s) Uint64s

// ReshapeToUint16s reinterprets the vector bits as a Uint16s vector.
func (x Uint64s) ReshapeToUint16s() Uint16s

// ReshapeToUint32s reinterprets the vector bits as a Uint32s vector.
func (x Uint64s) ReshapeToUint32s() Uint32s

// ReshapeToUint8s reinterprets the vector bits as a Uint8s vector.
func (x Uint64s) ReshapeToUint8s() Uint8s

// RotatesAllLeft rotates all elements left by y bits.
func (x Uint64s) RotateAllLeft(dist uint64) Uint64s

// RotatesAllRight rotates all elements right by y bits.
func (x Uint64s) RotateAllRight(dist uint64) Uint64s

// ShiftAllLeft shifts all elements left by y bits.
func (x Uint64s) ShiftAllLeft(shift uint64) Uint64s

// ShiftAllRight shifts all elements right by y bits.
func (x Uint64s) ShiftAllRight(shift uint64) Uint64s

// Store stores the vector elements into the slice s.
func (x Uint64s) Store(s []uint64)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Uint64s) StorePart(s []uint64) int

// String returns a string representation of the vector.
func (x Uint64s) String() string

// Sub returns the element-wise difference of x and y.
func (x Uint64s) Sub(y Uint64s) Uint64s

// Xor returns the bitwise XOR of x and y.
func (x Uint64s) Xor(y Uint64s) Uint64s

// LoadFloat32 loads a slice of float32 into an Float32s vector.
func LoadFloat32s([]float32) Float32s

// LoadFloat32Part loads a partial slice of float32 into an Float32s vector, returning the vector and the number of elements loaded.
func LoadFloat32sPart([]float32) (Float32s, int)

// BroadcastFloat32 fills the elements of a slice with its argument value.
func BroadcastFloat32s(float32) Float32s

// Abs returns the element-wise absolute value of x.
func (x Float32s) Abs() Float32s

// Add returns the element-wise sum of x and y.
func (x Float32s) Add(y Float32s) Float32s

// ConvertToInt32 converts the vector elements to int32.
func (x Float32s) ConvertToInt32() Int32s

// Div returns the element-wise quotient of x and y.
func (x Float32s) Div(y Float32s) Float32s

// Equal returns a mask indicating where x and y are equal.
func (x Float32s) Equal(y Float32s) Mask32s

// Greater returns a mask indicating where x is greater than y.
func (x Float32s) Greater(y Float32s) Mask32s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Float32s) GreaterEqual(y Float32s) Mask32s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Float32s) IfElse(mask Mask32s, y Float32s) Float32s

// Len returns the number of elements in the vector.
func (x Float32s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Float32s) Less(y Float32s) Mask32s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Float32s) LessEqual(y Float32s) Mask32s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Float32s) Masked(mask Mask32s) Float32s

// Max returns the element-wise maximum of x and y.
func (x Float32s) Max(y Float32s) Float32s

// Min returns the element-wise minimum of x and y.
func (x Float32s) Min(y Float32s) Float32s

// Mul returns the element-wise product of x and y.
func (x Float32s) Mul(y Float32s) Float32s

// MulAdd returns x * y + z element-wise.
func (x Float32s) MulAdd(y Float32s, z Float32s) Float32s

// Neg returns the element-wise negation of x.
func (x Float32s) Neg() Float32s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Float32s) NotEqual(y Float32s) Mask32s

// Sqrt returns the element-wise square root of x.
func (x Float32s) Sqrt() Float32s

// Store stores the vector elements into the slice s.
func (x Float32s) Store(s []float32)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Float32s) StorePart(s []float32) int

// String returns a string representation of the vector.
func (x Float32s) String() string

// Sub returns the element-wise difference of x and y.
func (x Float32s) Sub(y Float32s) Float32s

// ToBits reinterprets the vector bits as an unsigned integer vector.
func (x Float32s) ToBits() Uint32s

// LoadFloat64 loads a slice of float64 into an Float64s vector.
func LoadFloat64s([]float64) Float64s

// LoadFloat64Part loads a partial slice of float64 into an Float64s vector, returning the vector and the number of elements loaded.
func LoadFloat64sPart([]float64) (Float64s, int)

// BroadcastFloat64 fills the elements of a slice with its argument value.
func BroadcastFloat64s(float64) Float64s

// Abs returns the element-wise absolute value of x.
func (x Float64s) Abs() Float64s

// Add returns the element-wise sum of x and y.
func (x Float64s) Add(y Float64s) Float64s

// Div returns the element-wise quotient of x and y.
func (x Float64s) Div(y Float64s) Float64s

// Equal returns a mask indicating where x and y are equal.
func (x Float64s) Equal(y Float64s) Mask64s

// Greater returns a mask indicating where x is greater than y.
func (x Float64s) Greater(y Float64s) Mask64s

// GreaterEqual returns a mask indicating where x is greater than or equal to y.
func (x Float64s) GreaterEqual(y Float64s) Mask64s

// IfElse returns a new vector with elements from x where mask is true, and y where mask is false.
func (x Float64s) IfElse(mask Mask64s, y Float64s) Float64s

// Len returns the number of elements in the vector.
func (x Float64s) Len() int

// Less returns a mask indicating where x is less than y.
func (x Float64s) Less(y Float64s) Mask64s

// LessEqual returns a mask indicating where x is less than or equal to y.
func (x Float64s) LessEqual(y Float64s) Mask64s

// Masked returns a new vector with elements from x where mask is true, and zero elsewhere.
func (x Float64s) Masked(mask Mask64s) Float64s

// Max returns the element-wise maximum of x and y.
func (x Float64s) Max(y Float64s) Float64s

// Min returns the element-wise minimum of x and y.
func (x Float64s) Min(y Float64s) Float64s

// Mul returns the element-wise product of x and y.
func (x Float64s) Mul(y Float64s) Float64s

// MulAdd returns x * y + z element-wise.
func (x Float64s) MulAdd(y Float64s, z Float64s) Float64s

// Neg returns the element-wise negation of x.
func (x Float64s) Neg() Float64s

// NotEqual returns a mask indicating where x and y are not equal.
func (x Float64s) NotEqual(y Float64s) Mask64s

// Sqrt returns the element-wise square root of x.
func (x Float64s) Sqrt() Float64s

// Store stores the vector elements into the slice s.
func (x Float64s) Store(s []float64)

// StorePart stores a partial vector into the slice s and returns the number actually stored.
func (x Float64s) StorePart(s []float64) int

// String returns a string representation of the vector.
func (x Float64s) String() string

// Sub returns the element-wise difference of x and y.
func (x Float64s) Sub(y Float64s) Float64s

// ToBits reinterprets the vector bits as an unsigned integer vector.
func (x Float64s) ToBits() Uint64s

// And returns the bitwise AND of x and y.
func (x Mask8s) And(y Mask8s) Mask8s

// Or returns the bitwise OR of x and y.
func (x Mask8s) Or(y Mask8s) Mask8s

// String returns a string representation of the vector.
func (x Mask8s) String() string

// ToInt8s converts the mask to an Int8s vector.
func (x Mask8s) ToInt8s() (to Int8s)

// And returns the bitwise AND of x and y.
func (x Mask16s) And(y Mask16s) Mask16s

// Or returns the bitwise OR of x and y.
func (x Mask16s) Or(y Mask16s) Mask16s

// String returns a string representation of the vector.
func (x Mask16s) String() string

// ToInt16s converts the mask to an Int16s vector.
func (x Mask16s) ToInt16s() (to Int16s)

// And returns the bitwise AND of x and y.
func (x Mask32s) And(y Mask32s) Mask32s

// Or returns the bitwise OR of x and y.
func (x Mask32s) Or(y Mask32s) Mask32s

// String returns a string representation of the vector.
func (x Mask32s) String() string

// ToInt32s converts the mask to an Int32s vector.
func (x Mask32s) ToInt32s() (to Int32s)

// And returns the bitwise AND of x and y.
func (x Mask64s) And(y Mask64s) Mask64s

// Or returns the bitwise OR of x and y.
func (x Mask64s) Or(y Mask64s) Mask64s

// String returns a string representation of the vector.
func (x Mask64s) String() string

// ToInt64s converts the mask to an Int64s vector.
func (x Mask64s) ToInt64s() (to Int64s)
