// 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

// internal SIMD marker.
type _simd struct {
	_ [0]func(*_simd) *_simd
}

// Int8s represents a vector of 8-bit signed integers.
type Int8s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Int16s represents a vector of 16-bit signed integers.
type Int16s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Int32s represents a vector of 32-bit signed integers.
type Int32s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Int64s represents a vector of 64-bit signed integers.
type Int64s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Uint8s represents a vector of 8-bit unsigned integers.
type Uint8s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Uint16s represents a vector of 16-bit unsigned integers.
type Uint16s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Uint32s represents a vector of 32-bit unsigned integers.
type Uint32s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Uint64s represents a vector of 64-bit unsigned integers.
type Uint64s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Float32s represents a vector of 32-bit floating-point numbers.
type Float32s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Float64s represents a vector of 64-bit floating-point numbers.
type Float64s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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

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

// StoreSlicePart stores a partial vector into the slice s.
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

// Mask8s represents a boolean mask for Int8s/Uint8s vectors.
type Mask8s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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)

// Mask16s represents a boolean mask for Int16s/Uint16s vectors.
type Mask16s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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)

// Mask32s represents a boolean mask for Int32s/Uint32s vectors.
type Mask32s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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)

// Mask64s represents a boolean mask for Int64s/Uint64s vectors.
type Mask64s struct {
	_       _simd
	atLeast [2]uint64 // the actual vector size may be larger.
}

// 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)
