// Code generated by 'refgen'. DO NOT EDIT.

package simdref

import "simd/internal/spec"

type (
	Mask16s    struct{ v []spec.Mask16 }
	Mask16x8   struct{ v []spec.Mask16 }
	Mask16x16  struct{ v []spec.Mask16 }
	Mask16x32  struct{ v []spec.Mask16 }
	Mask32s    struct{ v []spec.Mask32 }
	Mask32x4   struct{ v []spec.Mask32 }
	Mask32x8   struct{ v []spec.Mask32 }
	Mask32x16  struct{ v []spec.Mask32 }
	Mask64s    struct{ v []spec.Mask64 }
	Mask64x2   struct{ v []spec.Mask64 }
	Mask64x4   struct{ v []spec.Mask64 }
	Mask64x8   struct{ v []spec.Mask64 }
	Mask8s     struct{ v []spec.Mask8 }
	Mask8x16   struct{ v []spec.Mask8 }
	Mask8x32   struct{ v []spec.Mask8 }
	Mask8x64   struct{ v []spec.Mask8 }
	Float32s   struct{ v []float32 }
	Float32x4  struct{ v []float32 }
	Float32x8  struct{ v []float32 }
	Float32x16 struct{ v []float32 }
	Float64s   struct{ v []float64 }
	Float64x2  struct{ v []float64 }
	Float64x4  struct{ v []float64 }
	Float64x8  struct{ v []float64 }
	Int16s     struct{ v []int16 }
	Int16x8    struct{ v []int16 }
	Int16x16   struct{ v []int16 }
	Int16x32   struct{ v []int16 }
	Int32s     struct{ v []int32 }
	Int32x4    struct{ v []int32 }
	Int32x8    struct{ v []int32 }
	Int32x16   struct{ v []int32 }
	Int64s     struct{ v []int64 }
	Int64x2    struct{ v []int64 }
	Int64x4    struct{ v []int64 }
	Int64x8    struct{ v []int64 }
	Int8s      struct{ v []int8 }
	Int8x16    struct{ v []int8 }
	Int8x32    struct{ v []int8 }
	Int8x64    struct{ v []int8 }
	Uint16s    struct{ v []uint16 }
	Uint16x8   struct{ v []uint16 }
	Uint16x16  struct{ v []uint16 }
	Uint16x32  struct{ v []uint16 }
	Uint32s    struct{ v []uint32 }
	Uint32x4   struct{ v []uint32 }
	Uint32x8   struct{ v []uint32 }
	Uint32x16  struct{ v []uint32 }
	Uint64s    struct{ v []uint64 }
	Uint64x2   struct{ v []uint64 }
	Uint64x4   struct{ v []uint64 }
	Uint64x8   struct{ v []uint64 }
	Uint8s     struct{ v []uint8 }
	Uint8x16   struct{ v []uint8 }
	Uint8x32   struct{ v []uint8 }
	Uint8x64   struct{ v []uint8 }
)

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int8x16) OnesCount() (z Int8x16) {
	return Int8x16{spec.OnesCount[int8, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int8x32) OnesCount() (z Int8x32) {
	return Int8x32{spec.OnesCount[int8, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int8x64) OnesCount() (z Int8x64) {
	return Int8x64{spec.OnesCount[int8, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int8s) OnesCount() (z Int8s) {
	return Int8s{spec.OnesCount[int8, spec.WidthScalable](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int16x8) OnesCount() (z Int16x8) {
	return Int16x8{spec.OnesCount[int16, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int16x16) OnesCount() (z Int16x16) {
	return Int16x16{spec.OnesCount[int16, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int16x32) OnesCount() (z Int16x32) {
	return Int16x32{spec.OnesCount[int16, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int16s) OnesCount() (z Int16s) {
	return Int16s{spec.OnesCount[int16, spec.WidthScalable](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int32x4) OnesCount() (z Int32x4) {
	return Int32x4{spec.OnesCount[int32, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int32x8) OnesCount() (z Int32x8) {
	return Int32x8{spec.OnesCount[int32, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int32x16) OnesCount() (z Int32x16) {
	return Int32x16{spec.OnesCount[int32, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int32s) OnesCount() (z Int32s) {
	return Int32s{spec.OnesCount[int32, spec.WidthScalable](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int64x2) OnesCount() (z Int64x2) {
	return Int64x2{spec.OnesCount[int64, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int64x4) OnesCount() (z Int64x4) {
	return Int64x4{spec.OnesCount[int64, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int64x8) OnesCount() (z Int64x8) {
	return Int64x8{spec.OnesCount[int64, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Int64s) OnesCount() (z Int64s) {
	return Int64s{spec.OnesCount[int64, spec.WidthScalable](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint8x16) OnesCount() (z Uint8x16) {
	return Uint8x16{spec.OnesCount[uint8, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint8x32) OnesCount() (z Uint8x32) {
	return Uint8x32{spec.OnesCount[uint8, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint8x64) OnesCount() (z Uint8x64) {
	return Uint8x64{spec.OnesCount[uint8, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint8s) OnesCount() (z Uint8s) {
	return Uint8s{spec.OnesCount[uint8, spec.WidthScalable](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint16x8) OnesCount() (z Uint16x8) {
	return Uint16x8{spec.OnesCount[uint16, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint16x16) OnesCount() (z Uint16x16) {
	return Uint16x16{spec.OnesCount[uint16, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint16x32) OnesCount() (z Uint16x32) {
	return Uint16x32{spec.OnesCount[uint16, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint16s) OnesCount() (z Uint16s) {
	return Uint16s{spec.OnesCount[uint16, spec.WidthScalable](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint32x4) OnesCount() (z Uint32x4) {
	return Uint32x4{spec.OnesCount[uint32, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint32x8) OnesCount() (z Uint32x8) {
	return Uint32x8{spec.OnesCount[uint32, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint32x16) OnesCount() (z Uint32x16) {
	return Uint32x16{spec.OnesCount[uint32, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint32s) OnesCount() (z Uint32s) {
	return Uint32s{spec.OnesCount[uint32, spec.WidthScalable](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint64x2) OnesCount() (z Uint64x2) {
	return Uint64x2{spec.OnesCount[uint64, spec.Width128](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint64x4) OnesCount() (z Uint64x4) {
	return Uint64x4{spec.OnesCount[uint64, spec.Width256](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint64x8) OnesCount() (z Uint64x8) {
	return Uint64x8{spec.OnesCount[uint64, spec.Width512](x.v)}
}

// OnesCount counts the number of one bits ("population count") in
// each element.
//
//	z[i] = bits.OnesCount(x[i])
func (x Uint64s) OnesCount() (z Uint64s) {
	return Uint64s{spec.OnesCount[uint64, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int8x16) LeadingZeros() (z Int8x16) {
	return Int8x16{spec.LeadingZeros[int8, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int8x32) LeadingZeros() (z Int8x32) {
	return Int8x32{spec.LeadingZeros[int8, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int8x64) LeadingZeros() (z Int8x64) {
	return Int8x64{spec.LeadingZeros[int8, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int8s) LeadingZeros() (z Int8s) {
	return Int8s{spec.LeadingZeros[int8, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int16x8) LeadingZeros() (z Int16x8) {
	return Int16x8{spec.LeadingZeros[int16, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int16x16) LeadingZeros() (z Int16x16) {
	return Int16x16{spec.LeadingZeros[int16, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int16x32) LeadingZeros() (z Int16x32) {
	return Int16x32{spec.LeadingZeros[int16, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int16s) LeadingZeros() (z Int16s) {
	return Int16s{spec.LeadingZeros[int16, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int32x4) LeadingZeros() (z Int32x4) {
	return Int32x4{spec.LeadingZeros[int32, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int32x8) LeadingZeros() (z Int32x8) {
	return Int32x8{spec.LeadingZeros[int32, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int32x16) LeadingZeros() (z Int32x16) {
	return Int32x16{spec.LeadingZeros[int32, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int32s) LeadingZeros() (z Int32s) {
	return Int32s{spec.LeadingZeros[int32, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int64x2) LeadingZeros() (z Int64x2) {
	return Int64x2{spec.LeadingZeros[int64, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int64x4) LeadingZeros() (z Int64x4) {
	return Int64x4{spec.LeadingZeros[int64, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int64x8) LeadingZeros() (z Int64x8) {
	return Int64x8{spec.LeadingZeros[int64, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Int64s) LeadingZeros() (z Int64s) {
	return Int64s{spec.LeadingZeros[int64, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint8x16) LeadingZeros() (z Uint8x16) {
	return Uint8x16{spec.LeadingZeros[uint8, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint8x32) LeadingZeros() (z Uint8x32) {
	return Uint8x32{spec.LeadingZeros[uint8, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint8x64) LeadingZeros() (z Uint8x64) {
	return Uint8x64{spec.LeadingZeros[uint8, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint8s) LeadingZeros() (z Uint8s) {
	return Uint8s{spec.LeadingZeros[uint8, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint16x8) LeadingZeros() (z Uint16x8) {
	return Uint16x8{spec.LeadingZeros[uint16, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint16x16) LeadingZeros() (z Uint16x16) {
	return Uint16x16{spec.LeadingZeros[uint16, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint16x32) LeadingZeros() (z Uint16x32) {
	return Uint16x32{spec.LeadingZeros[uint16, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint16s) LeadingZeros() (z Uint16s) {
	return Uint16s{spec.LeadingZeros[uint16, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint32x4) LeadingZeros() (z Uint32x4) {
	return Uint32x4{spec.LeadingZeros[uint32, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint32x8) LeadingZeros() (z Uint32x8) {
	return Uint32x8{spec.LeadingZeros[uint32, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint32x16) LeadingZeros() (z Uint32x16) {
	return Uint32x16{spec.LeadingZeros[uint32, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint32s) LeadingZeros() (z Uint32s) {
	return Uint32s{spec.LeadingZeros[uint32, spec.WidthScalable](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint64x2) LeadingZeros() (z Uint64x2) {
	return Uint64x2{spec.LeadingZeros[uint64, spec.Width128](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint64x4) LeadingZeros() (z Uint64x4) {
	return Uint64x4{spec.LeadingZeros[uint64, spec.Width256](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint64x8) LeadingZeros() (z Uint64x8) {
	return Uint64x8{spec.LeadingZeros[uint64, spec.Width512](x.v)}
}

// LeadingZeros counts the leading zero bits of each element in x,
// starting from the most significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.LeadingZeros(x[i])
func (x Uint64s) LeadingZeros() (z Uint64s) {
	return Uint64s{spec.LeadingZeros[uint64, spec.WidthScalable](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint8x16) TrailingZeros() (z Uint8x16) {
	return Uint8x16{spec.TrailingZeros[uint8, spec.Width128](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint8x32) TrailingZeros() (z Uint8x32) {
	return Uint8x32{spec.TrailingZeros[uint8, spec.Width256](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint8x64) TrailingZeros() (z Uint8x64) {
	return Uint8x64{spec.TrailingZeros[uint8, spec.Width512](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 8.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint8s) TrailingZeros() (z Uint8s) {
	return Uint8s{spec.TrailingZeros[uint8, spec.WidthScalable](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint16x8) TrailingZeros() (z Uint16x8) {
	return Uint16x8{spec.TrailingZeros[uint16, spec.Width128](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint16x16) TrailingZeros() (z Uint16x16) {
	return Uint16x16{spec.TrailingZeros[uint16, spec.Width256](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint16x32) TrailingZeros() (z Uint16x32) {
	return Uint16x32{spec.TrailingZeros[uint16, spec.Width512](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 16.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint16s) TrailingZeros() (z Uint16s) {
	return Uint16s{spec.TrailingZeros[uint16, spec.WidthScalable](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint32x4) TrailingZeros() (z Uint32x4) {
	return Uint32x4{spec.TrailingZeros[uint32, spec.Width128](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint32x8) TrailingZeros() (z Uint32x8) {
	return Uint32x8{spec.TrailingZeros[uint32, spec.Width256](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint32x16) TrailingZeros() (z Uint32x16) {
	return Uint32x16{spec.TrailingZeros[uint32, spec.Width512](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 32.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint32s) TrailingZeros() (z Uint32s) {
	return Uint32s{spec.TrailingZeros[uint32, spec.WidthScalable](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint64x2) TrailingZeros() (z Uint64x2) {
	return Uint64x2{spec.TrailingZeros[uint64, spec.Width128](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint64x4) TrailingZeros() (z Uint64x4) {
	return Uint64x4{spec.TrailingZeros[uint64, spec.Width256](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint64x8) TrailingZeros() (z Uint64x8) {
	return Uint64x8{spec.TrailingZeros[uint64, spec.Width512](x.v)}
}

// TrailingZeros counts the trailing zero bits of each element in x,
// starting from the least significant bit.
// If an element is 0, the result is 64.
//
//	z[i] = bits.TrailingZeros(x[i])
func (x Uint64s) TrailingZeros() (z Uint64s) {
	return Uint64s{spec.TrailingZeros[uint64, spec.WidthScalable](x.v)}
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 16.
func (x Mask8x16) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask8, spec.Width128](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 32.
func (x Mask8x32) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask8, spec.Width256](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 64.
func (x Mask8x64) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask8, spec.Width512](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns x.Len().
func (x Mask8s) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask8, spec.WidthScalable](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 8.
func (x Mask16x8) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask16, spec.Width128](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 16.
func (x Mask16x16) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask16, spec.Width256](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 32.
func (x Mask16x32) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask16, spec.Width512](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns x.Len().
func (x Mask16s) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask16, spec.WidthScalable](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 4.
func (x Mask32x4) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask32, spec.Width128](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 8.
func (x Mask32x8) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask32, spec.Width256](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 16.
func (x Mask32x16) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask32, spec.Width512](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns x.Len().
func (x Mask32s) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask32, spec.WidthScalable](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 2.
func (x Mask64x2) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask64, spec.Width128](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 4.
func (x Mask64x4) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask64, spec.Width256](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns 8.
func (x Mask64x8) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask64, spec.Width512](x.v)
}

// TrailingZeros returns the number of low-order false (zero) elements in mask
// x. If the mask is entirely false, it returns x.Len().
func (x Mask64s) TrailingZeros() int {
	return spec.TrailingZerosMask[spec.Mask64, spec.WidthScalable](x.v)
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint8x16) CarrylessMultiplyEven(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.CarrylessMultiplyEven[uint8, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint8x32) CarrylessMultiplyEven(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.CarrylessMultiplyEven[uint8, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint8x64) CarrylessMultiplyEven(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.CarrylessMultiplyEven[uint8, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint8s) CarrylessMultiplyEven(y Uint8s) (z Uint8s) {
	return Uint8s{spec.CarrylessMultiplyEven[uint8, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint16x8) CarrylessMultiplyEven(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.CarrylessMultiplyEven[uint16, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint16x16) CarrylessMultiplyEven(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.CarrylessMultiplyEven[uint16, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint16x32) CarrylessMultiplyEven(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.CarrylessMultiplyEven[uint16, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint16s) CarrylessMultiplyEven(y Uint16s) (z Uint16s) {
	return Uint16s{spec.CarrylessMultiplyEven[uint16, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint32x4) CarrylessMultiplyEven(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.CarrylessMultiplyEven[uint32, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint32x8) CarrylessMultiplyEven(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.CarrylessMultiplyEven[uint32, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint32x16) CarrylessMultiplyEven(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.CarrylessMultiplyEven[uint32, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint32s) CarrylessMultiplyEven(y Uint32s) (z Uint32s) {
	return Uint32s{spec.CarrylessMultiplyEven[uint32, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint64x2) CarrylessMultiplyEven(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.CarrylessMultiplyEven[uint64, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint64x4) CarrylessMultiplyEven(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.CarrylessMultiplyEven[uint64, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint64x8) CarrylessMultiplyEven(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.CarrylessMultiplyEven[uint64, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEven computes the elementwise carryless multiplication of
// even-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i])
//
// A carryless multiplication uses bitwise XOR instead of add-with-carry.
// For example, to compute the carryless multiply of 0b1110 and 0b1011:
//
//	     1110
//	   ⊗ 1011
//	  ───────
//	     1110
//	    1110
//	   0000
//	⊕ 1110
//	  ───────
//	  1100010
//
// Carryless multiply can also be viewed as multiplying polynomials with
// coefficients from GF(2). For example, the above example can be represented as
//
//	  (x^3 + x^2 + x^1) * (x^3 + x^1 + x^0)
//	= (x^6 + x^5 + (1^1)x^4 + (1^1)x^3 + (1^1)x^2 + x^1)
//	= (x^6 + x^5 + x^1)
func (x Uint64s) CarrylessMultiplyEven(y Uint64s) (z Uint64s) {
	return Uint64s{spec.CarrylessMultiplyEven[uint64, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x16) CarrylessMultiplyEvenOdd(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.CarrylessMultiplyEvenOdd[uint8, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x32) CarrylessMultiplyEvenOdd(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.CarrylessMultiplyEvenOdd[uint8, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x64) CarrylessMultiplyEvenOdd(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.CarrylessMultiplyEvenOdd[uint8, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8s) CarrylessMultiplyEvenOdd(y Uint8s) (z Uint8s) {
	return Uint8s{spec.CarrylessMultiplyEvenOdd[uint8, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x8) CarrylessMultiplyEvenOdd(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.CarrylessMultiplyEvenOdd[uint16, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x16) CarrylessMultiplyEvenOdd(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.CarrylessMultiplyEvenOdd[uint16, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x32) CarrylessMultiplyEvenOdd(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.CarrylessMultiplyEvenOdd[uint16, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16s) CarrylessMultiplyEvenOdd(y Uint16s) (z Uint16s) {
	return Uint16s{spec.CarrylessMultiplyEvenOdd[uint16, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x4) CarrylessMultiplyEvenOdd(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.CarrylessMultiplyEvenOdd[uint32, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x8) CarrylessMultiplyEvenOdd(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.CarrylessMultiplyEvenOdd[uint32, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x16) CarrylessMultiplyEvenOdd(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.CarrylessMultiplyEvenOdd[uint32, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32s) CarrylessMultiplyEvenOdd(y Uint32s) (z Uint32s) {
	return Uint32s{spec.CarrylessMultiplyEvenOdd[uint32, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x2) CarrylessMultiplyEvenOdd(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.CarrylessMultiplyEvenOdd[uint64, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x4) CarrylessMultiplyEvenOdd(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.CarrylessMultiplyEvenOdd[uint64, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x8) CarrylessMultiplyEvenOdd(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.CarrylessMultiplyEvenOdd[uint64, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyEvenOdd computes the elementwise carryless multiplication of
// even-indexed elements of x and odd-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64s) CarrylessMultiplyEvenOdd(y Uint64s) (z Uint64s) {
	return Uint64s{spec.CarrylessMultiplyEvenOdd[uint64, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x16) CarrylessMultiplyOdd(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.CarrylessMultiplyOdd[uint8, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x32) CarrylessMultiplyOdd(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.CarrylessMultiplyOdd[uint8, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x64) CarrylessMultiplyOdd(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.CarrylessMultiplyOdd[uint8, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8s) CarrylessMultiplyOdd(y Uint8s) (z Uint8s) {
	return Uint8s{spec.CarrylessMultiplyOdd[uint8, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x8) CarrylessMultiplyOdd(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.CarrylessMultiplyOdd[uint16, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x16) CarrylessMultiplyOdd(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.CarrylessMultiplyOdd[uint16, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x32) CarrylessMultiplyOdd(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.CarrylessMultiplyOdd[uint16, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16s) CarrylessMultiplyOdd(y Uint16s) (z Uint16s) {
	return Uint16s{spec.CarrylessMultiplyOdd[uint16, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x4) CarrylessMultiplyOdd(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.CarrylessMultiplyOdd[uint32, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x8) CarrylessMultiplyOdd(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.CarrylessMultiplyOdd[uint32, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x16) CarrylessMultiplyOdd(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.CarrylessMultiplyOdd[uint32, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32s) CarrylessMultiplyOdd(y Uint32s) (z Uint32s) {
	return Uint32s{spec.CarrylessMultiplyOdd[uint32, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x2) CarrylessMultiplyOdd(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.CarrylessMultiplyOdd[uint64, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x4) CarrylessMultiplyOdd(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.CarrylessMultiplyOdd[uint64, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x8) CarrylessMultiplyOdd(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.CarrylessMultiplyOdd[uint64, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOdd computes the elementwise carryless multiplication of
// odd-indexed elements of x and y. The result of each carryless multiply is
// twice the width of the input elements. The high bits are stored in elements
// z[2*i+1] and the low bits are stored in elements z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i+1])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64s) CarrylessMultiplyOdd(y Uint64s) (z Uint64s) {
	return Uint64s{spec.CarrylessMultiplyOdd[uint64, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x16) CarrylessMultiplyOddEven(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.CarrylessMultiplyOddEven[uint8, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x32) CarrylessMultiplyOddEven(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.CarrylessMultiplyOddEven[uint8, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8x64) CarrylessMultiplyOddEven(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.CarrylessMultiplyOddEven[uint8, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint8s) CarrylessMultiplyOddEven(y Uint8s) (z Uint8s) {
	return Uint8s{spec.CarrylessMultiplyOddEven[uint8, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x8) CarrylessMultiplyOddEven(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.CarrylessMultiplyOddEven[uint16, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x16) CarrylessMultiplyOddEven(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.CarrylessMultiplyOddEven[uint16, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16x32) CarrylessMultiplyOddEven(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.CarrylessMultiplyOddEven[uint16, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint16s) CarrylessMultiplyOddEven(y Uint16s) (z Uint16s) {
	return Uint16s{spec.CarrylessMultiplyOddEven[uint16, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x4) CarrylessMultiplyOddEven(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.CarrylessMultiplyOddEven[uint32, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x8) CarrylessMultiplyOddEven(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.CarrylessMultiplyOddEven[uint32, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32x16) CarrylessMultiplyOddEven(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.CarrylessMultiplyOddEven[uint32, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint32s) CarrylessMultiplyOddEven(y Uint32s) (z Uint32s) {
	return Uint32s{spec.CarrylessMultiplyOddEven[uint32, spec.WidthScalable](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x2) CarrylessMultiplyOddEven(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.CarrylessMultiplyOddEven[uint64, spec.Width128](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x4) CarrylessMultiplyOddEven(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.CarrylessMultiplyOddEven[uint64, spec.Width256](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64x8) CarrylessMultiplyOddEven(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.CarrylessMultiplyOddEven[uint64, spec.Width512](x.v, y.v)}
}

// CarrylessMultiplyOddEven computes the elementwise carryless multiplication of
// odd-indexed elements of x and even-indexed elements of y. The result of each
// carryless multiply is twice the width of the input elements. The high bits
// are stored in elements z[2*i+1] and the low bits are stored in elements
// z[2*i].
//
//	concat(z[2*i+1], z[2*i]) = clmul(x[2*i+1], y[2*i])
//
// See [CarrylessMultiplyEven] for details about carryless multiply.
func (x Uint64s) CarrylessMultiplyOddEven(y Uint64s) (z Uint64s) {
	return Uint64s{spec.CarrylessMultiplyOddEven[uint64, spec.WidthScalable](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float32x4) Equal(y Float32x4) (z Mask32x4) {
	return Mask32x4{spec.Equal[float32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float32x8) Equal(y Float32x8) (z Mask32x8) {
	return Mask32x8{spec.Equal[float32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float32x16) Equal(y Float32x16) (z Mask32x16) {
	return Mask32x16{spec.Equal[float32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float32s) Equal(y Float32s) (z Mask32s) {
	return Mask32s{spec.Equal[float32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float64x2) Equal(y Float64x2) (z Mask64x2) {
	return Mask64x2{spec.Equal[float64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float64x4) Equal(y Float64x4) (z Mask64x4) {
	return Mask64x4{spec.Equal[float64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float64x8) Equal(y Float64x8) (z Mask64x8) {
	return Mask64x8{spec.Equal[float64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Float64s) Equal(y Float64s) (z Mask64s) {
	return Mask64s{spec.Equal[float64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int8x16) Equal(y Int8x16) (z Mask8x16) {
	return Mask8x16{spec.Equal[int8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int8x32) Equal(y Int8x32) (z Mask8x32) {
	return Mask8x32{spec.Equal[int8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int8x64) Equal(y Int8x64) (z Mask8x64) {
	return Mask8x64{spec.Equal[int8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int8s) Equal(y Int8s) (z Mask8s) {
	return Mask8s{spec.Equal[int8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int16x8) Equal(y Int16x8) (z Mask16x8) {
	return Mask16x8{spec.Equal[int16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int16x16) Equal(y Int16x16) (z Mask16x16) {
	return Mask16x16{spec.Equal[int16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int16x32) Equal(y Int16x32) (z Mask16x32) {
	return Mask16x32{spec.Equal[int16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int16s) Equal(y Int16s) (z Mask16s) {
	return Mask16s{spec.Equal[int16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int32x4) Equal(y Int32x4) (z Mask32x4) {
	return Mask32x4{spec.Equal[int32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int32x8) Equal(y Int32x8) (z Mask32x8) {
	return Mask32x8{spec.Equal[int32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int32x16) Equal(y Int32x16) (z Mask32x16) {
	return Mask32x16{spec.Equal[int32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int32s) Equal(y Int32s) (z Mask32s) {
	return Mask32s{spec.Equal[int32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int64x2) Equal(y Int64x2) (z Mask64x2) {
	return Mask64x2{spec.Equal[int64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int64x4) Equal(y Int64x4) (z Mask64x4) {
	return Mask64x4{spec.Equal[int64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int64x8) Equal(y Int64x8) (z Mask64x8) {
	return Mask64x8{spec.Equal[int64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Int64s) Equal(y Int64s) (z Mask64s) {
	return Mask64s{spec.Equal[int64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint8x16) Equal(y Uint8x16) (z Mask8x16) {
	return Mask8x16{spec.Equal[uint8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint8x32) Equal(y Uint8x32) (z Mask8x32) {
	return Mask8x32{spec.Equal[uint8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint8x64) Equal(y Uint8x64) (z Mask8x64) {
	return Mask8x64{spec.Equal[uint8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint8s) Equal(y Uint8s) (z Mask8s) {
	return Mask8s{spec.Equal[uint8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint16x8) Equal(y Uint16x8) (z Mask16x8) {
	return Mask16x8{spec.Equal[uint16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint16x16) Equal(y Uint16x16) (z Mask16x16) {
	return Mask16x16{spec.Equal[uint16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint16x32) Equal(y Uint16x32) (z Mask16x32) {
	return Mask16x32{spec.Equal[uint16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint16s) Equal(y Uint16s) (z Mask16s) {
	return Mask16s{spec.Equal[uint16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint32x4) Equal(y Uint32x4) (z Mask32x4) {
	return Mask32x4{spec.Equal[uint32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint32x8) Equal(y Uint32x8) (z Mask32x8) {
	return Mask32x8{spec.Equal[uint32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint32x16) Equal(y Uint32x16) (z Mask32x16) {
	return Mask32x16{spec.Equal[uint32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint32s) Equal(y Uint32s) (z Mask32s) {
	return Mask32s{spec.Equal[uint32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint64x2) Equal(y Uint64x2) (z Mask64x2) {
	return Mask64x2{spec.Equal[uint64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint64x4) Equal(y Uint64x4) (z Mask64x4) {
	return Mask64x4{spec.Equal[uint64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint64x8) Equal(y Uint64x8) (z Mask64x8) {
	return Mask64x8{spec.Equal[uint64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Uint64s) Equal(y Uint64s) (z Mask64s) {
	return Mask64s{spec.Equal[uint64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask8x16) Equal(y Mask8x16) (z Mask8x16) {
	return Mask8x16{spec.Equal[spec.Mask8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask8x32) Equal(y Mask8x32) (z Mask8x32) {
	return Mask8x32{spec.Equal[spec.Mask8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask8x64) Equal(y Mask8x64) (z Mask8x64) {
	return Mask8x64{spec.Equal[spec.Mask8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask8s) Equal(y Mask8s) (z Mask8s) {
	return Mask8s{spec.Equal[spec.Mask8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask16x8) Equal(y Mask16x8) (z Mask16x8) {
	return Mask16x8{spec.Equal[spec.Mask16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask16x16) Equal(y Mask16x16) (z Mask16x16) {
	return Mask16x16{spec.Equal[spec.Mask16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask16x32) Equal(y Mask16x32) (z Mask16x32) {
	return Mask16x32{spec.Equal[spec.Mask16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask16s) Equal(y Mask16s) (z Mask16s) {
	return Mask16s{spec.Equal[spec.Mask16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask32x4) Equal(y Mask32x4) (z Mask32x4) {
	return Mask32x4{spec.Equal[spec.Mask32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask32x8) Equal(y Mask32x8) (z Mask32x8) {
	return Mask32x8{spec.Equal[spec.Mask32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask32x16) Equal(y Mask32x16) (z Mask32x16) {
	return Mask32x16{spec.Equal[spec.Mask32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask32s) Equal(y Mask32s) (z Mask32s) {
	return Mask32s{spec.Equal[spec.Mask32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask64x2) Equal(y Mask64x2) (z Mask64x2) {
	return Mask64x2{spec.Equal[spec.Mask64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask64x4) Equal(y Mask64x4) (z Mask64x4) {
	return Mask64x4{spec.Equal[spec.Mask64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask64x8) Equal(y Mask64x8) (z Mask64x8) {
	return Mask64x8{spec.Equal[spec.Mask64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Equal returns a mask indicating which elements of x and y are equal.
func (x Mask64s) Equal(y Mask64s) (z Mask64s) {
	return Mask64s{spec.Equal[spec.Mask64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float32x4) NotEqual(y Float32x4) (z Mask32x4) {
	return Mask32x4{spec.NotEqual[float32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float32x8) NotEqual(y Float32x8) (z Mask32x8) {
	return Mask32x8{spec.NotEqual[float32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float32x16) NotEqual(y Float32x16) (z Mask32x16) {
	return Mask32x16{spec.NotEqual[float32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float32s) NotEqual(y Float32s) (z Mask32s) {
	return Mask32s{spec.NotEqual[float32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float64x2) NotEqual(y Float64x2) (z Mask64x2) {
	return Mask64x2{spec.NotEqual[float64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float64x4) NotEqual(y Float64x4) (z Mask64x4) {
	return Mask64x4{spec.NotEqual[float64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float64x8) NotEqual(y Float64x8) (z Mask64x8) {
	return Mask64x8{spec.NotEqual[float64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Float64s) NotEqual(y Float64s) (z Mask64s) {
	return Mask64s{spec.NotEqual[float64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int8x16) NotEqual(y Int8x16) (z Mask8x16) {
	return Mask8x16{spec.NotEqual[int8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int8x32) NotEqual(y Int8x32) (z Mask8x32) {
	return Mask8x32{spec.NotEqual[int8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int8x64) NotEqual(y Int8x64) (z Mask8x64) {
	return Mask8x64{spec.NotEqual[int8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int8s) NotEqual(y Int8s) (z Mask8s) {
	return Mask8s{spec.NotEqual[int8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int16x8) NotEqual(y Int16x8) (z Mask16x8) {
	return Mask16x8{spec.NotEqual[int16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int16x16) NotEqual(y Int16x16) (z Mask16x16) {
	return Mask16x16{spec.NotEqual[int16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int16x32) NotEqual(y Int16x32) (z Mask16x32) {
	return Mask16x32{spec.NotEqual[int16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int16s) NotEqual(y Int16s) (z Mask16s) {
	return Mask16s{spec.NotEqual[int16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int32x4) NotEqual(y Int32x4) (z Mask32x4) {
	return Mask32x4{spec.NotEqual[int32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int32x8) NotEqual(y Int32x8) (z Mask32x8) {
	return Mask32x8{spec.NotEqual[int32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int32x16) NotEqual(y Int32x16) (z Mask32x16) {
	return Mask32x16{spec.NotEqual[int32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int32s) NotEqual(y Int32s) (z Mask32s) {
	return Mask32s{spec.NotEqual[int32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int64x2) NotEqual(y Int64x2) (z Mask64x2) {
	return Mask64x2{spec.NotEqual[int64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int64x4) NotEqual(y Int64x4) (z Mask64x4) {
	return Mask64x4{spec.NotEqual[int64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int64x8) NotEqual(y Int64x8) (z Mask64x8) {
	return Mask64x8{spec.NotEqual[int64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Int64s) NotEqual(y Int64s) (z Mask64s) {
	return Mask64s{spec.NotEqual[int64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint8x16) NotEqual(y Uint8x16) (z Mask8x16) {
	return Mask8x16{spec.NotEqual[uint8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint8x32) NotEqual(y Uint8x32) (z Mask8x32) {
	return Mask8x32{spec.NotEqual[uint8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint8x64) NotEqual(y Uint8x64) (z Mask8x64) {
	return Mask8x64{spec.NotEqual[uint8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint8s) NotEqual(y Uint8s) (z Mask8s) {
	return Mask8s{spec.NotEqual[uint8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint16x8) NotEqual(y Uint16x8) (z Mask16x8) {
	return Mask16x8{spec.NotEqual[uint16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint16x16) NotEqual(y Uint16x16) (z Mask16x16) {
	return Mask16x16{spec.NotEqual[uint16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint16x32) NotEqual(y Uint16x32) (z Mask16x32) {
	return Mask16x32{spec.NotEqual[uint16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint16s) NotEqual(y Uint16s) (z Mask16s) {
	return Mask16s{spec.NotEqual[uint16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint32x4) NotEqual(y Uint32x4) (z Mask32x4) {
	return Mask32x4{spec.NotEqual[uint32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint32x8) NotEqual(y Uint32x8) (z Mask32x8) {
	return Mask32x8{spec.NotEqual[uint32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint32x16) NotEqual(y Uint32x16) (z Mask32x16) {
	return Mask32x16{spec.NotEqual[uint32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint32s) NotEqual(y Uint32s) (z Mask32s) {
	return Mask32s{spec.NotEqual[uint32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint64x2) NotEqual(y Uint64x2) (z Mask64x2) {
	return Mask64x2{spec.NotEqual[uint64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint64x4) NotEqual(y Uint64x4) (z Mask64x4) {
	return Mask64x4{spec.NotEqual[uint64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint64x8) NotEqual(y Uint64x8) (z Mask64x8) {
	return Mask64x8{spec.NotEqual[uint64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Uint64s) NotEqual(y Uint64s) (z Mask64s) {
	return Mask64s{spec.NotEqual[uint64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask8x16) NotEqual(y Mask8x16) (z Mask8x16) {
	return Mask8x16{spec.NotEqual[spec.Mask8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask8x32) NotEqual(y Mask8x32) (z Mask8x32) {
	return Mask8x32{spec.NotEqual[spec.Mask8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask8x64) NotEqual(y Mask8x64) (z Mask8x64) {
	return Mask8x64{spec.NotEqual[spec.Mask8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask8s) NotEqual(y Mask8s) (z Mask8s) {
	return Mask8s{spec.NotEqual[spec.Mask8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask16x8) NotEqual(y Mask16x8) (z Mask16x8) {
	return Mask16x8{spec.NotEqual[spec.Mask16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask16x16) NotEqual(y Mask16x16) (z Mask16x16) {
	return Mask16x16{spec.NotEqual[spec.Mask16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask16x32) NotEqual(y Mask16x32) (z Mask16x32) {
	return Mask16x32{spec.NotEqual[spec.Mask16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask16s) NotEqual(y Mask16s) (z Mask16s) {
	return Mask16s{spec.NotEqual[spec.Mask16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask32x4) NotEqual(y Mask32x4) (z Mask32x4) {
	return Mask32x4{spec.NotEqual[spec.Mask32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask32x8) NotEqual(y Mask32x8) (z Mask32x8) {
	return Mask32x8{spec.NotEqual[spec.Mask32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask32x16) NotEqual(y Mask32x16) (z Mask32x16) {
	return Mask32x16{spec.NotEqual[spec.Mask32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask32s) NotEqual(y Mask32s) (z Mask32s) {
	return Mask32s{spec.NotEqual[spec.Mask32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask64x2) NotEqual(y Mask64x2) (z Mask64x2) {
	return Mask64x2{spec.NotEqual[spec.Mask64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask64x4) NotEqual(y Mask64x4) (z Mask64x4) {
	return Mask64x4{spec.NotEqual[spec.Mask64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask64x8) NotEqual(y Mask64x8) (z Mask64x8) {
	return Mask64x8{spec.NotEqual[spec.Mask64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// NotEqual returns a mask indicating which elements of x and y are not equal.
func (x Mask64s) NotEqual(y Mask64s) (z Mask64s) {
	return Mask64s{spec.NotEqual[spec.Mask64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float32x4) Less(y Float32x4) (z Mask32x4) {
	return Mask32x4{spec.Less[float32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float32x8) Less(y Float32x8) (z Mask32x8) {
	return Mask32x8{spec.Less[float32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float32x16) Less(y Float32x16) (z Mask32x16) {
	return Mask32x16{spec.Less[float32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float32s) Less(y Float32s) (z Mask32s) {
	return Mask32s{spec.Less[float32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float64x2) Less(y Float64x2) (z Mask64x2) {
	return Mask64x2{spec.Less[float64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float64x4) Less(y Float64x4) (z Mask64x4) {
	return Mask64x4{spec.Less[float64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float64x8) Less(y Float64x8) (z Mask64x8) {
	return Mask64x8{spec.Less[float64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Float64s) Less(y Float64s) (z Mask64s) {
	return Mask64s{spec.Less[float64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int8x16) Less(y Int8x16) (z Mask8x16) {
	return Mask8x16{spec.Less[int8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int8x32) Less(y Int8x32) (z Mask8x32) {
	return Mask8x32{spec.Less[int8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int8x64) Less(y Int8x64) (z Mask8x64) {
	return Mask8x64{spec.Less[int8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int8s) Less(y Int8s) (z Mask8s) {
	return Mask8s{spec.Less[int8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int16x8) Less(y Int16x8) (z Mask16x8) {
	return Mask16x8{spec.Less[int16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int16x16) Less(y Int16x16) (z Mask16x16) {
	return Mask16x16{spec.Less[int16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int16x32) Less(y Int16x32) (z Mask16x32) {
	return Mask16x32{spec.Less[int16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int16s) Less(y Int16s) (z Mask16s) {
	return Mask16s{spec.Less[int16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int32x4) Less(y Int32x4) (z Mask32x4) {
	return Mask32x4{spec.Less[int32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int32x8) Less(y Int32x8) (z Mask32x8) {
	return Mask32x8{spec.Less[int32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int32x16) Less(y Int32x16) (z Mask32x16) {
	return Mask32x16{spec.Less[int32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int32s) Less(y Int32s) (z Mask32s) {
	return Mask32s{spec.Less[int32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int64x2) Less(y Int64x2) (z Mask64x2) {
	return Mask64x2{spec.Less[int64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int64x4) Less(y Int64x4) (z Mask64x4) {
	return Mask64x4{spec.Less[int64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int64x8) Less(y Int64x8) (z Mask64x8) {
	return Mask64x8{spec.Less[int64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Int64s) Less(y Int64s) (z Mask64s) {
	return Mask64s{spec.Less[int64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint8x16) Less(y Uint8x16) (z Mask8x16) {
	return Mask8x16{spec.Less[uint8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint8x32) Less(y Uint8x32) (z Mask8x32) {
	return Mask8x32{spec.Less[uint8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint8x64) Less(y Uint8x64) (z Mask8x64) {
	return Mask8x64{spec.Less[uint8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint8s) Less(y Uint8s) (z Mask8s) {
	return Mask8s{spec.Less[uint8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint16x8) Less(y Uint16x8) (z Mask16x8) {
	return Mask16x8{spec.Less[uint16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint16x16) Less(y Uint16x16) (z Mask16x16) {
	return Mask16x16{spec.Less[uint16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint16x32) Less(y Uint16x32) (z Mask16x32) {
	return Mask16x32{spec.Less[uint16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint16s) Less(y Uint16s) (z Mask16s) {
	return Mask16s{spec.Less[uint16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint32x4) Less(y Uint32x4) (z Mask32x4) {
	return Mask32x4{spec.Less[uint32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint32x8) Less(y Uint32x8) (z Mask32x8) {
	return Mask32x8{spec.Less[uint32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint32x16) Less(y Uint32x16) (z Mask32x16) {
	return Mask32x16{spec.Less[uint32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint32s) Less(y Uint32s) (z Mask32s) {
	return Mask32s{spec.Less[uint32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint64x2) Less(y Uint64x2) (z Mask64x2) {
	return Mask64x2{spec.Less[uint64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint64x4) Less(y Uint64x4) (z Mask64x4) {
	return Mask64x4{spec.Less[uint64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint64x8) Less(y Uint64x8) (z Mask64x8) {
	return Mask64x8{spec.Less[uint64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Less returns a mask indicating which elements of x are less than y.
//
//	z[i] = x[i] < y[i]
func (x Uint64s) Less(y Uint64s) (z Mask64s) {
	return Mask64s{spec.Less[uint64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float32x4) LessEqual(y Float32x4) (z Mask32x4) {
	return Mask32x4{spec.LessEqual[float32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float32x8) LessEqual(y Float32x8) (z Mask32x8) {
	return Mask32x8{spec.LessEqual[float32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float32x16) LessEqual(y Float32x16) (z Mask32x16) {
	return Mask32x16{spec.LessEqual[float32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float32s) LessEqual(y Float32s) (z Mask32s) {
	return Mask32s{spec.LessEqual[float32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float64x2) LessEqual(y Float64x2) (z Mask64x2) {
	return Mask64x2{spec.LessEqual[float64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float64x4) LessEqual(y Float64x4) (z Mask64x4) {
	return Mask64x4{spec.LessEqual[float64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float64x8) LessEqual(y Float64x8) (z Mask64x8) {
	return Mask64x8{spec.LessEqual[float64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Float64s) LessEqual(y Float64s) (z Mask64s) {
	return Mask64s{spec.LessEqual[float64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int8x16) LessEqual(y Int8x16) (z Mask8x16) {
	return Mask8x16{spec.LessEqual[int8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int8x32) LessEqual(y Int8x32) (z Mask8x32) {
	return Mask8x32{spec.LessEqual[int8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int8x64) LessEqual(y Int8x64) (z Mask8x64) {
	return Mask8x64{spec.LessEqual[int8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int8s) LessEqual(y Int8s) (z Mask8s) {
	return Mask8s{spec.LessEqual[int8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int16x8) LessEqual(y Int16x8) (z Mask16x8) {
	return Mask16x8{spec.LessEqual[int16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int16x16) LessEqual(y Int16x16) (z Mask16x16) {
	return Mask16x16{spec.LessEqual[int16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int16x32) LessEqual(y Int16x32) (z Mask16x32) {
	return Mask16x32{spec.LessEqual[int16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int16s) LessEqual(y Int16s) (z Mask16s) {
	return Mask16s{spec.LessEqual[int16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int32x4) LessEqual(y Int32x4) (z Mask32x4) {
	return Mask32x4{spec.LessEqual[int32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int32x8) LessEqual(y Int32x8) (z Mask32x8) {
	return Mask32x8{spec.LessEqual[int32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int32x16) LessEqual(y Int32x16) (z Mask32x16) {
	return Mask32x16{spec.LessEqual[int32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int32s) LessEqual(y Int32s) (z Mask32s) {
	return Mask32s{spec.LessEqual[int32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int64x2) LessEqual(y Int64x2) (z Mask64x2) {
	return Mask64x2{spec.LessEqual[int64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int64x4) LessEqual(y Int64x4) (z Mask64x4) {
	return Mask64x4{spec.LessEqual[int64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int64x8) LessEqual(y Int64x8) (z Mask64x8) {
	return Mask64x8{spec.LessEqual[int64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Int64s) LessEqual(y Int64s) (z Mask64s) {
	return Mask64s{spec.LessEqual[int64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint8x16) LessEqual(y Uint8x16) (z Mask8x16) {
	return Mask8x16{spec.LessEqual[uint8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint8x32) LessEqual(y Uint8x32) (z Mask8x32) {
	return Mask8x32{spec.LessEqual[uint8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint8x64) LessEqual(y Uint8x64) (z Mask8x64) {
	return Mask8x64{spec.LessEqual[uint8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint8s) LessEqual(y Uint8s) (z Mask8s) {
	return Mask8s{spec.LessEqual[uint8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint16x8) LessEqual(y Uint16x8) (z Mask16x8) {
	return Mask16x8{spec.LessEqual[uint16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint16x16) LessEqual(y Uint16x16) (z Mask16x16) {
	return Mask16x16{spec.LessEqual[uint16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint16x32) LessEqual(y Uint16x32) (z Mask16x32) {
	return Mask16x32{spec.LessEqual[uint16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint16s) LessEqual(y Uint16s) (z Mask16s) {
	return Mask16s{spec.LessEqual[uint16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint32x4) LessEqual(y Uint32x4) (z Mask32x4) {
	return Mask32x4{spec.LessEqual[uint32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint32x8) LessEqual(y Uint32x8) (z Mask32x8) {
	return Mask32x8{spec.LessEqual[uint32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint32x16) LessEqual(y Uint32x16) (z Mask32x16) {
	return Mask32x16{spec.LessEqual[uint32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint32s) LessEqual(y Uint32s) (z Mask32s) {
	return Mask32s{spec.LessEqual[uint32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint64x2) LessEqual(y Uint64x2) (z Mask64x2) {
	return Mask64x2{spec.LessEqual[uint64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint64x4) LessEqual(y Uint64x4) (z Mask64x4) {
	return Mask64x4{spec.LessEqual[uint64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint64x8) LessEqual(y Uint64x8) (z Mask64x8) {
	return Mask64x8{spec.LessEqual[uint64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// LessEqual returns a mask indicating which elements of x are less than or
// equal to y.
//
//	z[i] = x[i] <= y[i]
func (x Uint64s) LessEqual(y Uint64s) (z Mask64s) {
	return Mask64s{spec.LessEqual[uint64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float32x4) Greater(y Float32x4) (z Mask32x4) {
	return Mask32x4{spec.Greater[float32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float32x8) Greater(y Float32x8) (z Mask32x8) {
	return Mask32x8{spec.Greater[float32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float32x16) Greater(y Float32x16) (z Mask32x16) {
	return Mask32x16{spec.Greater[float32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float32s) Greater(y Float32s) (z Mask32s) {
	return Mask32s{spec.Greater[float32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float64x2) Greater(y Float64x2) (z Mask64x2) {
	return Mask64x2{spec.Greater[float64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float64x4) Greater(y Float64x4) (z Mask64x4) {
	return Mask64x4{spec.Greater[float64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float64x8) Greater(y Float64x8) (z Mask64x8) {
	return Mask64x8{spec.Greater[float64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Float64s) Greater(y Float64s) (z Mask64s) {
	return Mask64s{spec.Greater[float64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int8x16) Greater(y Int8x16) (z Mask8x16) {
	return Mask8x16{spec.Greater[int8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int8x32) Greater(y Int8x32) (z Mask8x32) {
	return Mask8x32{spec.Greater[int8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int8x64) Greater(y Int8x64) (z Mask8x64) {
	return Mask8x64{spec.Greater[int8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int8s) Greater(y Int8s) (z Mask8s) {
	return Mask8s{spec.Greater[int8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int16x8) Greater(y Int16x8) (z Mask16x8) {
	return Mask16x8{spec.Greater[int16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int16x16) Greater(y Int16x16) (z Mask16x16) {
	return Mask16x16{spec.Greater[int16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int16x32) Greater(y Int16x32) (z Mask16x32) {
	return Mask16x32{spec.Greater[int16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int16s) Greater(y Int16s) (z Mask16s) {
	return Mask16s{spec.Greater[int16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int32x4) Greater(y Int32x4) (z Mask32x4) {
	return Mask32x4{spec.Greater[int32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int32x8) Greater(y Int32x8) (z Mask32x8) {
	return Mask32x8{spec.Greater[int32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int32x16) Greater(y Int32x16) (z Mask32x16) {
	return Mask32x16{spec.Greater[int32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int32s) Greater(y Int32s) (z Mask32s) {
	return Mask32s{spec.Greater[int32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int64x2) Greater(y Int64x2) (z Mask64x2) {
	return Mask64x2{spec.Greater[int64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int64x4) Greater(y Int64x4) (z Mask64x4) {
	return Mask64x4{spec.Greater[int64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int64x8) Greater(y Int64x8) (z Mask64x8) {
	return Mask64x8{spec.Greater[int64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Int64s) Greater(y Int64s) (z Mask64s) {
	return Mask64s{spec.Greater[int64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint8x16) Greater(y Uint8x16) (z Mask8x16) {
	return Mask8x16{spec.Greater[uint8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint8x32) Greater(y Uint8x32) (z Mask8x32) {
	return Mask8x32{spec.Greater[uint8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint8x64) Greater(y Uint8x64) (z Mask8x64) {
	return Mask8x64{spec.Greater[uint8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint8s) Greater(y Uint8s) (z Mask8s) {
	return Mask8s{spec.Greater[uint8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint16x8) Greater(y Uint16x8) (z Mask16x8) {
	return Mask16x8{spec.Greater[uint16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint16x16) Greater(y Uint16x16) (z Mask16x16) {
	return Mask16x16{spec.Greater[uint16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint16x32) Greater(y Uint16x32) (z Mask16x32) {
	return Mask16x32{spec.Greater[uint16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint16s) Greater(y Uint16s) (z Mask16s) {
	return Mask16s{spec.Greater[uint16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint32x4) Greater(y Uint32x4) (z Mask32x4) {
	return Mask32x4{spec.Greater[uint32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint32x8) Greater(y Uint32x8) (z Mask32x8) {
	return Mask32x8{spec.Greater[uint32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint32x16) Greater(y Uint32x16) (z Mask32x16) {
	return Mask32x16{spec.Greater[uint32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint32s) Greater(y Uint32s) (z Mask32s) {
	return Mask32s{spec.Greater[uint32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint64x2) Greater(y Uint64x2) (z Mask64x2) {
	return Mask64x2{spec.Greater[uint64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint64x4) Greater(y Uint64x4) (z Mask64x4) {
	return Mask64x4{spec.Greater[uint64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint64x8) Greater(y Uint64x8) (z Mask64x8) {
	return Mask64x8{spec.Greater[uint64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// Greater returns a mask indicating which elements of x are greater than y.
//
//	z[i] = x[i] > y[i]
func (x Uint64s) Greater(y Uint64s) (z Mask64s) {
	return Mask64s{spec.Greater[uint64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float32x4) GreaterEqual(y Float32x4) (z Mask32x4) {
	return Mask32x4{spec.GreaterEqual[float32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float32x8) GreaterEqual(y Float32x8) (z Mask32x8) {
	return Mask32x8{spec.GreaterEqual[float32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float32x16) GreaterEqual(y Float32x16) (z Mask32x16) {
	return Mask32x16{spec.GreaterEqual[float32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float32s) GreaterEqual(y Float32s) (z Mask32s) {
	return Mask32s{spec.GreaterEqual[float32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float64x2) GreaterEqual(y Float64x2) (z Mask64x2) {
	return Mask64x2{spec.GreaterEqual[float64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float64x4) GreaterEqual(y Float64x4) (z Mask64x4) {
	return Mask64x4{spec.GreaterEqual[float64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float64x8) GreaterEqual(y Float64x8) (z Mask64x8) {
	return Mask64x8{spec.GreaterEqual[float64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Float64s) GreaterEqual(y Float64s) (z Mask64s) {
	return Mask64s{spec.GreaterEqual[float64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int8x16) GreaterEqual(y Int8x16) (z Mask8x16) {
	return Mask8x16{spec.GreaterEqual[int8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int8x32) GreaterEqual(y Int8x32) (z Mask8x32) {
	return Mask8x32{spec.GreaterEqual[int8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int8x64) GreaterEqual(y Int8x64) (z Mask8x64) {
	return Mask8x64{spec.GreaterEqual[int8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int8s) GreaterEqual(y Int8s) (z Mask8s) {
	return Mask8s{spec.GreaterEqual[int8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int16x8) GreaterEqual(y Int16x8) (z Mask16x8) {
	return Mask16x8{spec.GreaterEqual[int16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int16x16) GreaterEqual(y Int16x16) (z Mask16x16) {
	return Mask16x16{spec.GreaterEqual[int16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int16x32) GreaterEqual(y Int16x32) (z Mask16x32) {
	return Mask16x32{spec.GreaterEqual[int16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int16s) GreaterEqual(y Int16s) (z Mask16s) {
	return Mask16s{spec.GreaterEqual[int16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int32x4) GreaterEqual(y Int32x4) (z Mask32x4) {
	return Mask32x4{spec.GreaterEqual[int32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int32x8) GreaterEqual(y Int32x8) (z Mask32x8) {
	return Mask32x8{spec.GreaterEqual[int32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int32x16) GreaterEqual(y Int32x16) (z Mask32x16) {
	return Mask32x16{spec.GreaterEqual[int32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int32s) GreaterEqual(y Int32s) (z Mask32s) {
	return Mask32s{spec.GreaterEqual[int32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int64x2) GreaterEqual(y Int64x2) (z Mask64x2) {
	return Mask64x2{spec.GreaterEqual[int64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int64x4) GreaterEqual(y Int64x4) (z Mask64x4) {
	return Mask64x4{spec.GreaterEqual[int64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int64x8) GreaterEqual(y Int64x8) (z Mask64x8) {
	return Mask64x8{spec.GreaterEqual[int64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Int64s) GreaterEqual(y Int64s) (z Mask64s) {
	return Mask64s{spec.GreaterEqual[int64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint8x16) GreaterEqual(y Uint8x16) (z Mask8x16) {
	return Mask8x16{spec.GreaterEqual[uint8, spec.Width128, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint8x32) GreaterEqual(y Uint8x32) (z Mask8x32) {
	return Mask8x32{spec.GreaterEqual[uint8, spec.Width256, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint8x64) GreaterEqual(y Uint8x64) (z Mask8x64) {
	return Mask8x64{spec.GreaterEqual[uint8, spec.Width512, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint8s) GreaterEqual(y Uint8s) (z Mask8s) {
	return Mask8s{spec.GreaterEqual[uint8, spec.WidthScalable, spec.Mask8](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint16x8) GreaterEqual(y Uint16x8) (z Mask16x8) {
	return Mask16x8{spec.GreaterEqual[uint16, spec.Width128, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint16x16) GreaterEqual(y Uint16x16) (z Mask16x16) {
	return Mask16x16{spec.GreaterEqual[uint16, spec.Width256, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint16x32) GreaterEqual(y Uint16x32) (z Mask16x32) {
	return Mask16x32{spec.GreaterEqual[uint16, spec.Width512, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint16s) GreaterEqual(y Uint16s) (z Mask16s) {
	return Mask16s{spec.GreaterEqual[uint16, spec.WidthScalable, spec.Mask16](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint32x4) GreaterEqual(y Uint32x4) (z Mask32x4) {
	return Mask32x4{spec.GreaterEqual[uint32, spec.Width128, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint32x8) GreaterEqual(y Uint32x8) (z Mask32x8) {
	return Mask32x8{spec.GreaterEqual[uint32, spec.Width256, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint32x16) GreaterEqual(y Uint32x16) (z Mask32x16) {
	return Mask32x16{spec.GreaterEqual[uint32, spec.Width512, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint32s) GreaterEqual(y Uint32s) (z Mask32s) {
	return Mask32s{spec.GreaterEqual[uint32, spec.WidthScalable, spec.Mask32](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint64x2) GreaterEqual(y Uint64x2) (z Mask64x2) {
	return Mask64x2{spec.GreaterEqual[uint64, spec.Width128, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint64x4) GreaterEqual(y Uint64x4) (z Mask64x4) {
	return Mask64x4{spec.GreaterEqual[uint64, spec.Width256, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint64x8) GreaterEqual(y Uint64x8) (z Mask64x8) {
	return Mask64x8{spec.GreaterEqual[uint64, spec.Width512, spec.Mask64](x.v, y.v)}
}

// GreaterEqual returns a mask indicating which elements of x are greater than
// or equal to y.
//
//	z[i] = x[i] >= y[i]
func (x Uint64s) GreaterEqual(y Uint64s) (z Mask64s) {
	return Mask64s{spec.GreaterEqual[uint64, spec.WidthScalable, spec.Mask64](x.v, y.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float32x4) ToMask() (z Mask32x4) {
	return Mask32x4{spec.ToMask[float32, spec.Width128, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float32x8) ToMask() (z Mask32x8) {
	return Mask32x8{spec.ToMask[float32, spec.Width256, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float32x16) ToMask() (z Mask32x16) {
	return Mask32x16{spec.ToMask[float32, spec.Width512, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float32s) ToMask() (z Mask32s) {
	return Mask32s{spec.ToMask[float32, spec.WidthScalable, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float64x2) ToMask() (z Mask64x2) {
	return Mask64x2{spec.ToMask[float64, spec.Width128, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float64x4) ToMask() (z Mask64x4) {
	return Mask64x4{spec.ToMask[float64, spec.Width256, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float64x8) ToMask() (z Mask64x8) {
	return Mask64x8{spec.ToMask[float64, spec.Width512, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Float64s) ToMask() (z Mask64s) {
	return Mask64s{spec.ToMask[float64, spec.WidthScalable, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int8x16) ToMask() (z Mask8x16) {
	return Mask8x16{spec.ToMask[int8, spec.Width128, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int8x32) ToMask() (z Mask8x32) {
	return Mask8x32{spec.ToMask[int8, spec.Width256, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int8x64) ToMask() (z Mask8x64) {
	return Mask8x64{spec.ToMask[int8, spec.Width512, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int8s) ToMask() (z Mask8s) {
	return Mask8s{spec.ToMask[int8, spec.WidthScalable, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int16x8) ToMask() (z Mask16x8) {
	return Mask16x8{spec.ToMask[int16, spec.Width128, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int16x16) ToMask() (z Mask16x16) {
	return Mask16x16{spec.ToMask[int16, spec.Width256, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int16x32) ToMask() (z Mask16x32) {
	return Mask16x32{spec.ToMask[int16, spec.Width512, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int16s) ToMask() (z Mask16s) {
	return Mask16s{spec.ToMask[int16, spec.WidthScalable, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int32x4) ToMask() (z Mask32x4) {
	return Mask32x4{spec.ToMask[int32, spec.Width128, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int32x8) ToMask() (z Mask32x8) {
	return Mask32x8{spec.ToMask[int32, spec.Width256, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int32x16) ToMask() (z Mask32x16) {
	return Mask32x16{spec.ToMask[int32, spec.Width512, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int32s) ToMask() (z Mask32s) {
	return Mask32s{spec.ToMask[int32, spec.WidthScalable, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int64x2) ToMask() (z Mask64x2) {
	return Mask64x2{spec.ToMask[int64, spec.Width128, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int64x4) ToMask() (z Mask64x4) {
	return Mask64x4{spec.ToMask[int64, spec.Width256, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int64x8) ToMask() (z Mask64x8) {
	return Mask64x8{spec.ToMask[int64, spec.Width512, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Int64s) ToMask() (z Mask64s) {
	return Mask64s{spec.ToMask[int64, spec.WidthScalable, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint8x16) ToMask() (z Mask8x16) {
	return Mask8x16{spec.ToMask[uint8, spec.Width128, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint8x32) ToMask() (z Mask8x32) {
	return Mask8x32{spec.ToMask[uint8, spec.Width256, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint8x64) ToMask() (z Mask8x64) {
	return Mask8x64{spec.ToMask[uint8, spec.Width512, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint8s) ToMask() (z Mask8s) {
	return Mask8s{spec.ToMask[uint8, spec.WidthScalable, spec.Mask8](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint16x8) ToMask() (z Mask16x8) {
	return Mask16x8{spec.ToMask[uint16, spec.Width128, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint16x16) ToMask() (z Mask16x16) {
	return Mask16x16{spec.ToMask[uint16, spec.Width256, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint16x32) ToMask() (z Mask16x32) {
	return Mask16x32{spec.ToMask[uint16, spec.Width512, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint16s) ToMask() (z Mask16s) {
	return Mask16s{spec.ToMask[uint16, spec.WidthScalable, spec.Mask16](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint32x4) ToMask() (z Mask32x4) {
	return Mask32x4{spec.ToMask[uint32, spec.Width128, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint32x8) ToMask() (z Mask32x8) {
	return Mask32x8{spec.ToMask[uint32, spec.Width256, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint32x16) ToMask() (z Mask32x16) {
	return Mask32x16{spec.ToMask[uint32, spec.Width512, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint32s) ToMask() (z Mask32s) {
	return Mask32s{spec.ToMask[uint32, spec.WidthScalable, spec.Mask32](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint64x2) ToMask() (z Mask64x2) {
	return Mask64x2{spec.ToMask[uint64, spec.Width128, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint64x4) ToMask() (z Mask64x4) {
	return Mask64x4{spec.ToMask[uint64, spec.Width256, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint64x8) ToMask() (z Mask64x8) {
	return Mask64x8{spec.ToMask[uint64, spec.Width512, spec.Mask64](x.v)}
}

// ToMask returns a mask indicating which elements of x are non-zero.
//
//	z[i] = x[i] != 0
func (x Uint64s) ToMask() (z Mask64s) {
	return Mask64s{spec.ToMask[uint64, spec.WidthScalable, spec.Mask64](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float32x4) IsNaN() (z Mask32x4) {
	return Mask32x4{spec.IsNaN[float32, spec.Width128, spec.Mask32](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float32x8) IsNaN() (z Mask32x8) {
	return Mask32x8{spec.IsNaN[float32, spec.Width256, spec.Mask32](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float32x16) IsNaN() (z Mask32x16) {
	return Mask32x16{spec.IsNaN[float32, spec.Width512, spec.Mask32](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float32s) IsNaN() (z Mask32s) {
	return Mask32s{spec.IsNaN[float32, spec.WidthScalable, spec.Mask32](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float64x2) IsNaN() (z Mask64x2) {
	return Mask64x2{spec.IsNaN[float64, spec.Width128, spec.Mask64](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float64x4) IsNaN() (z Mask64x4) {
	return Mask64x4{spec.IsNaN[float64, spec.Width256, spec.Mask64](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float64x8) IsNaN() (z Mask64x8) {
	return Mask64x8{spec.IsNaN[float64, spec.Width512, spec.Mask64](x.v)}
}

// IsNan returns a mask indicating which elements of x are NaN.
//
//	z[i] = math.IsNaN(x[i])
func (x Float64s) IsNaN() (z Mask64s) {
	return Mask64s{spec.IsNaN[float64, spec.WidthScalable, spec.Mask64](x.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float32x4) Masked(mask Mask32x4) (z Float32x4) {
	return Float32x4{spec.Masked[float32, spec.Width128, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float32x8) Masked(mask Mask32x8) (z Float32x8) {
	return Float32x8{spec.Masked[float32, spec.Width256, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float32x16) Masked(mask Mask32x16) (z Float32x16) {
	return Float32x16{spec.Masked[float32, spec.Width512, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float32s) Masked(mask Mask32s) (z Float32s) {
	return Float32s{spec.Masked[float32, spec.WidthScalable, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float64x2) Masked(mask Mask64x2) (z Float64x2) {
	return Float64x2{spec.Masked[float64, spec.Width128, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float64x4) Masked(mask Mask64x4) (z Float64x4) {
	return Float64x4{spec.Masked[float64, spec.Width256, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float64x8) Masked(mask Mask64x8) (z Float64x8) {
	return Float64x8{spec.Masked[float64, spec.Width512, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Float64s) Masked(mask Mask64s) (z Float64s) {
	return Float64s{spec.Masked[float64, spec.WidthScalable, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int8x16) Masked(mask Mask8x16) (z Int8x16) {
	return Int8x16{spec.Masked[int8, spec.Width128, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int8x32) Masked(mask Mask8x32) (z Int8x32) {
	return Int8x32{spec.Masked[int8, spec.Width256, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int8x64) Masked(mask Mask8x64) (z Int8x64) {
	return Int8x64{spec.Masked[int8, spec.Width512, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int8s) Masked(mask Mask8s) (z Int8s) {
	return Int8s{spec.Masked[int8, spec.WidthScalable, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int16x8) Masked(mask Mask16x8) (z Int16x8) {
	return Int16x8{spec.Masked[int16, spec.Width128, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int16x16) Masked(mask Mask16x16) (z Int16x16) {
	return Int16x16{spec.Masked[int16, spec.Width256, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int16x32) Masked(mask Mask16x32) (z Int16x32) {
	return Int16x32{spec.Masked[int16, spec.Width512, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int16s) Masked(mask Mask16s) (z Int16s) {
	return Int16s{spec.Masked[int16, spec.WidthScalable, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int32x4) Masked(mask Mask32x4) (z Int32x4) {
	return Int32x4{spec.Masked[int32, spec.Width128, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int32x8) Masked(mask Mask32x8) (z Int32x8) {
	return Int32x8{spec.Masked[int32, spec.Width256, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int32x16) Masked(mask Mask32x16) (z Int32x16) {
	return Int32x16{spec.Masked[int32, spec.Width512, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int32s) Masked(mask Mask32s) (z Int32s) {
	return Int32s{spec.Masked[int32, spec.WidthScalable, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int64x2) Masked(mask Mask64x2) (z Int64x2) {
	return Int64x2{spec.Masked[int64, spec.Width128, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int64x4) Masked(mask Mask64x4) (z Int64x4) {
	return Int64x4{spec.Masked[int64, spec.Width256, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int64x8) Masked(mask Mask64x8) (z Int64x8) {
	return Int64x8{spec.Masked[int64, spec.Width512, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Int64s) Masked(mask Mask64s) (z Int64s) {
	return Int64s{spec.Masked[int64, spec.WidthScalable, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint8x16) Masked(mask Mask8x16) (z Uint8x16) {
	return Uint8x16{spec.Masked[uint8, spec.Width128, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint8x32) Masked(mask Mask8x32) (z Uint8x32) {
	return Uint8x32{spec.Masked[uint8, spec.Width256, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint8x64) Masked(mask Mask8x64) (z Uint8x64) {
	return Uint8x64{spec.Masked[uint8, spec.Width512, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint8s) Masked(mask Mask8s) (z Uint8s) {
	return Uint8s{spec.Masked[uint8, spec.WidthScalable, spec.Mask8](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint16x8) Masked(mask Mask16x8) (z Uint16x8) {
	return Uint16x8{spec.Masked[uint16, spec.Width128, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint16x16) Masked(mask Mask16x16) (z Uint16x16) {
	return Uint16x16{spec.Masked[uint16, spec.Width256, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint16x32) Masked(mask Mask16x32) (z Uint16x32) {
	return Uint16x32{spec.Masked[uint16, spec.Width512, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint16s) Masked(mask Mask16s) (z Uint16s) {
	return Uint16s{spec.Masked[uint16, spec.WidthScalable, spec.Mask16](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint32x4) Masked(mask Mask32x4) (z Uint32x4) {
	return Uint32x4{spec.Masked[uint32, spec.Width128, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint32x8) Masked(mask Mask32x8) (z Uint32x8) {
	return Uint32x8{spec.Masked[uint32, spec.Width256, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint32x16) Masked(mask Mask32x16) (z Uint32x16) {
	return Uint32x16{spec.Masked[uint32, spec.Width512, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint32s) Masked(mask Mask32s) (z Uint32s) {
	return Uint32s{spec.Masked[uint32, spec.WidthScalable, spec.Mask32](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint64x2) Masked(mask Mask64x2) (z Uint64x2) {
	return Uint64x2{spec.Masked[uint64, spec.Width128, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint64x4) Masked(mask Mask64x4) (z Uint64x4) {
	return Uint64x4{spec.Masked[uint64, spec.Width256, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint64x8) Masked(mask Mask64x8) (z Uint64x8) {
	return Uint64x8{spec.Masked[uint64, spec.Width512, spec.Mask64](x.v, mask.v)}
}

// Masked returns a vector with elements from x where mask is true, and zero
// elsewhere.
//
//	z[i] = if mask[i] { x[i] } else { 0 }
func (x Uint64s) Masked(mask Mask64s) (z Uint64s) {
	return Uint64s{spec.Masked[uint64, spec.WidthScalable, spec.Mask64](x.v, mask.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float32x4) IfElse(mask Mask32x4, y Float32x4) (z Float32x4) {
	return Float32x4{spec.IfElse[float32, spec.Width128, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float32x8) IfElse(mask Mask32x8, y Float32x8) (z Float32x8) {
	return Float32x8{spec.IfElse[float32, spec.Width256, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float32x16) IfElse(mask Mask32x16, y Float32x16) (z Float32x16) {
	return Float32x16{spec.IfElse[float32, spec.Width512, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float32s) IfElse(mask Mask32s, y Float32s) (z Float32s) {
	return Float32s{spec.IfElse[float32, spec.WidthScalable, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float64x2) IfElse(mask Mask64x2, y Float64x2) (z Float64x2) {
	return Float64x2{spec.IfElse[float64, spec.Width128, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float64x4) IfElse(mask Mask64x4, y Float64x4) (z Float64x4) {
	return Float64x4{spec.IfElse[float64, spec.Width256, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float64x8) IfElse(mask Mask64x8, y Float64x8) (z Float64x8) {
	return Float64x8{spec.IfElse[float64, spec.Width512, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Float64s) IfElse(mask Mask64s, y Float64s) (z Float64s) {
	return Float64s{spec.IfElse[float64, spec.WidthScalable, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int8x16) IfElse(mask Mask8x16, y Int8x16) (z Int8x16) {
	return Int8x16{spec.IfElse[int8, spec.Width128, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int8x32) IfElse(mask Mask8x32, y Int8x32) (z Int8x32) {
	return Int8x32{spec.IfElse[int8, spec.Width256, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int8x64) IfElse(mask Mask8x64, y Int8x64) (z Int8x64) {
	return Int8x64{spec.IfElse[int8, spec.Width512, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int8s) IfElse(mask Mask8s, y Int8s) (z Int8s) {
	return Int8s{spec.IfElse[int8, spec.WidthScalable, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int16x8) IfElse(mask Mask16x8, y Int16x8) (z Int16x8) {
	return Int16x8{spec.IfElse[int16, spec.Width128, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int16x16) IfElse(mask Mask16x16, y Int16x16) (z Int16x16) {
	return Int16x16{spec.IfElse[int16, spec.Width256, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int16x32) IfElse(mask Mask16x32, y Int16x32) (z Int16x32) {
	return Int16x32{spec.IfElse[int16, spec.Width512, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int16s) IfElse(mask Mask16s, y Int16s) (z Int16s) {
	return Int16s{spec.IfElse[int16, spec.WidthScalable, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int32x4) IfElse(mask Mask32x4, y Int32x4) (z Int32x4) {
	return Int32x4{spec.IfElse[int32, spec.Width128, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int32x8) IfElse(mask Mask32x8, y Int32x8) (z Int32x8) {
	return Int32x8{spec.IfElse[int32, spec.Width256, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int32x16) IfElse(mask Mask32x16, y Int32x16) (z Int32x16) {
	return Int32x16{spec.IfElse[int32, spec.Width512, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int32s) IfElse(mask Mask32s, y Int32s) (z Int32s) {
	return Int32s{spec.IfElse[int32, spec.WidthScalable, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int64x2) IfElse(mask Mask64x2, y Int64x2) (z Int64x2) {
	return Int64x2{spec.IfElse[int64, spec.Width128, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int64x4) IfElse(mask Mask64x4, y Int64x4) (z Int64x4) {
	return Int64x4{spec.IfElse[int64, spec.Width256, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int64x8) IfElse(mask Mask64x8, y Int64x8) (z Int64x8) {
	return Int64x8{spec.IfElse[int64, spec.Width512, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Int64s) IfElse(mask Mask64s, y Int64s) (z Int64s) {
	return Int64s{spec.IfElse[int64, spec.WidthScalable, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint8x16) IfElse(mask Mask8x16, y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.IfElse[uint8, spec.Width128, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint8x32) IfElse(mask Mask8x32, y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.IfElse[uint8, spec.Width256, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint8x64) IfElse(mask Mask8x64, y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.IfElse[uint8, spec.Width512, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint8s) IfElse(mask Mask8s, y Uint8s) (z Uint8s) {
	return Uint8s{spec.IfElse[uint8, spec.WidthScalable, spec.Mask8](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint16x8) IfElse(mask Mask16x8, y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.IfElse[uint16, spec.Width128, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint16x16) IfElse(mask Mask16x16, y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.IfElse[uint16, spec.Width256, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint16x32) IfElse(mask Mask16x32, y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.IfElse[uint16, spec.Width512, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint16s) IfElse(mask Mask16s, y Uint16s) (z Uint16s) {
	return Uint16s{spec.IfElse[uint16, spec.WidthScalable, spec.Mask16](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint32x4) IfElse(mask Mask32x4, y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.IfElse[uint32, spec.Width128, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint32x8) IfElse(mask Mask32x8, y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.IfElse[uint32, spec.Width256, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint32x16) IfElse(mask Mask32x16, y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.IfElse[uint32, spec.Width512, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint32s) IfElse(mask Mask32s, y Uint32s) (z Uint32s) {
	return Uint32s{spec.IfElse[uint32, spec.WidthScalable, spec.Mask32](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint64x2) IfElse(mask Mask64x2, y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.IfElse[uint64, spec.Width128, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint64x4) IfElse(mask Mask64x4, y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.IfElse[uint64, spec.Width256, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint64x8) IfElse(mask Mask64x8, y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.IfElse[uint64, spec.Width512, spec.Mask64](x.v, mask.v, y.v)}
}

// IfElse returns a vector with elements from x where mask is true, and y where
// mask is false.
//
//	z[i] = if mask[i] { x[i] } else { y[i] }
func (x Uint64s) IfElse(mask Mask64s, y Uint64s) (z Uint64s) {
	return Uint64s{spec.IfElse[uint64, spec.WidthScalable, spec.Mask64](x.v, mask.v, y.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Float32x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[float32, spec.Width128, float64, spec.Width256](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float32x4) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[float32, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float32x4) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[float32, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[float32, spec.Width128, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[float32, spec.Width128, int64, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float32x4) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[float32, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float32x4) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[float32, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[float32, spec.Width128, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[float32, spec.Width128, uint64, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Float32x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[float32, spec.Width256, float64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Float32x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[float32, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[float32, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[float32, spec.Width256, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[float32, spec.Width256, int64, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Float32x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[float32, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[float32, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[float32, spec.Width256, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[float32, spec.Width256, uint64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[float32, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[float32, spec.Width512, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[float32, spec.Width512, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[float32, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[float32, spec.Width512, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[float32, spec.Width512, uint32, spec.Width512](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32s) ConvertToInt32() (z Int32s) {
	return Int32s{spec.ConvertToZ[float32, spec.WidthScalable, int32, spec.WidthScalable](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float32s) ConvertToUint32() (z Uint32s) {
	return Uint32s{spec.ConvertToZ[float32, spec.WidthScalable, uint32, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
//
// The results are rounded to the nearest representable value, or ±inf if they
// cannot be represented.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Float64x2) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[float64, spec.Width128, float32, spec.Width128](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Float64x2) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[float64, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Float64x2) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[float64, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Float64x2) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[float64, spec.Width128, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x2) ConvertToInt64() (z Int64x2) {
	return Int64x2{spec.ConvertToZ[float64, spec.Width128, int64, spec.Width128](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Float64x2) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[float64, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Float64x2) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[float64, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Float64x2) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[float64, spec.Width128, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x2) ConvertToUint64() (z Uint64x2) {
	return Uint64x2{spec.ConvertToZ[float64, spec.Width128, uint64, spec.Width128](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
//
// The results are rounded to the nearest representable value, or ±inf if they
// cannot be represented.
func (x Float64x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[float64, spec.Width256, float32, spec.Width128](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float64x4) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[float64, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float64x4) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[float64, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[float64, spec.Width256, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[float64, spec.Width256, int64, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float64x4) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[float64, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Float64x4) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[float64, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[float64, spec.Width256, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[float64, spec.Width256, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
//
// The results are rounded to the nearest representable value, or ±inf if they
// cannot be represented.
func (x Float64x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[float64, spec.Width512, float32, spec.Width256](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Float64x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[float64, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[float64, spec.Width512, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[float64, spec.Width512, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[float64, spec.Width512, int64, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Float64x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[float64, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[float64, spec.Width512, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[float64, spec.Width512, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[float64, spec.Width512, uint64, spec.Width512](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64s) ConvertToInt64() (z Int64s) {
	return Int64s{spec.ConvertToZ[float64, spec.WidthScalable, int64, spec.WidthScalable](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
//
// When a conversion is inexact, this truncates the result (rounds toward zero).
// If the converted result would be outside the representable range, the result
// is architecture-dependent.
func (x Float64s) ConvertToUint64() (z Uint64s) {
	return Uint64s{spec.ConvertToZ[float64, spec.WidthScalable, uint64, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int8x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[int8, spec.Width128, float32, spec.Width512](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Int8x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[int8, spec.Width128, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Int8x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[int8, spec.Width128, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Int8x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int8, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int8x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[int8, spec.Width128, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int8x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[int8, spec.Width128, uint32, spec.Width512](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Int8x32) ConvertToInt16() (z Int16x32) {
	return Int16x32{spec.ConvertToZ[int8, spec.Width256, int16, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Int8x32) ConvertToUint8() (z Uint8x32) {
	return Uint8x32{spec.ConvertToZ[int8, spec.Width256, uint8, spec.Width256](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int8x32) ConvertToUint16() (z Uint16x32) {
	return Uint16x32{spec.ConvertToZ[int8, spec.Width256, uint16, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Int8x64) ConvertToUint8() (z Uint8x64) {
	return Uint8x64{spec.ConvertToZ[int8, spec.Width512, uint8, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Int8s) ConvertToUint8() (z Uint8s) {
	return Uint8s{spec.ConvertToZ[int8, spec.WidthScalable, uint8, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int16x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[int16, spec.Width128, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Int16x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[int16, spec.Width128, float64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Int16x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int16, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Int16x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[int16, spec.Width128, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Int16x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[int16, spec.Width128, int64, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Int16x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int16, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int16x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int16, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int16x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[int16, spec.Width128, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Int16x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[int16, spec.Width128, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int16x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[int16, spec.Width256, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Int16x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int16, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Int16x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[int16, spec.Width256, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Int16x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int16, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int16x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[int16, spec.Width256, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int16x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[int16, spec.Width256, uint32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Int16x32) ConvertToInt8() (z Int8x32) {
	return Int8x32{spec.ConvertToZ[int16, spec.Width512, int8, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Int16x32) ConvertToUint8() (z Uint8x32) {
	return Uint8x32{spec.ConvertToZ[int16, spec.Width512, uint8, spec.Width256](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int16x32) ConvertToUint16() (z Uint16x32) {
	return Uint16x32{spec.ConvertToZ[int16, spec.Width512, uint16, spec.Width512](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int16s) ConvertToUint16() (z Uint16s) {
	return Uint16s{spec.ConvertToZ[int16, spec.WidthScalable, uint16, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int32x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[int32, spec.Width128, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Int32x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[int32, spec.Width128, float64, spec.Width256](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int32x4) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int32, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int32x4) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[int32, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Int32x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[int32, spec.Width128, int64, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int32x4) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int32, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int32x4) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int32, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int32x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[int32, spec.Width128, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Int32x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[int32, spec.Width128, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int32x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[int32, spec.Width256, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Int32x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[int32, spec.Width256, float64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Int32x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int32, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Int32x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[int32, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Int32x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[int32, spec.Width256, int64, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Int32x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int32, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int32x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int32, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int32x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[int32, spec.Width256, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Int32x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[int32, spec.Width256, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int32x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[int32, spec.Width512, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Int32x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int32, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Int32x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[int32, spec.Width512, int16, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Int32x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int32, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int32x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[int32, spec.Width512, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int32x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[int32, spec.Width512, uint32, spec.Width512](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int32s) ConvertToFloat32() (z Float32s) {
	return Float32s{spec.ConvertToZ[int32, spec.WidthScalable, float32, spec.WidthScalable](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int32s) ConvertToUint32() (z Uint32s) {
	return Uint32s{spec.ConvertToZ[int32, spec.WidthScalable, uint32, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Int64x2) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[int64, spec.Width128, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Int64x2) ConvertToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertToZ[int64, spec.Width128, float64, spec.Width128](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Int64x2) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int64, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Int64x2) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[int64, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Int64x2) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[int64, spec.Width128, int32, spec.Width128](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Int64x2) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int64, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Int64x2) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int64, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Int64x2) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[int64, spec.Width128, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Int64x2) ConvertToUint64() (z Uint64x2) {
	return Uint64x2{spec.ConvertToZ[int64, spec.Width128, uint64, spec.Width128](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int64x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[int64, spec.Width256, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Int64x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[int64, spec.Width256, float64, spec.Width256](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int64x4) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int64, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int64x4) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[int64, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Int64x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[int64, spec.Width256, int32, spec.Width128](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int64x4) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int64, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Int64x4) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int64, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int64x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[int64, spec.Width256, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Int64x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[int64, spec.Width256, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Int64x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[int64, spec.Width512, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Int64x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[int64, spec.Width512, float64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Int64x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int64, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Int64x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[int64, spec.Width512, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Int64x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[int64, spec.Width512, int32, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Int64x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int64, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Int64x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int64, spec.Width512, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Int64x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[int64, spec.Width512, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Int64x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[int64, spec.Width512, uint64, spec.Width512](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Int64s) ConvertToFloat64() (z Float64s) {
	return Float64s{spec.ConvertToZ[int64, spec.WidthScalable, float64, spec.WidthScalable](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Int64s) ConvertToUint64() (z Uint64s) {
	return Uint64s{spec.ConvertToZ[int64, spec.WidthScalable, uint64, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint8x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[uint8, spec.Width128, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Uint8x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint8, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint8x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[uint8, spec.Width128, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint8x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[uint8, spec.Width128, int32, spec.Width512](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Uint8x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[uint8, spec.Width128, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Uint8x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[uint8, spec.Width128, uint32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Uint8x32) ConvertToInt8() (z Int8x32) {
	return Int8x32{spec.ConvertToZ[uint8, spec.Width256, int8, spec.Width256](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint8x32) ConvertToInt16() (z Int16x32) {
	return Int16x32{spec.ConvertToZ[uint8, spec.Width256, int16, spec.Width512](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Uint8x32) ConvertToUint16() (z Uint16x32) {
	return Uint16x32{spec.ConvertToZ[uint8, spec.Width256, uint16, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Uint8x64) ConvertToInt8() (z Int8x64) {
	return Int8x64{spec.ConvertToZ[uint8, spec.Width512, int8, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Uint8s) ConvertToInt8() (z Int8s) {
	return Int8s{spec.ConvertToZ[uint8, spec.WidthScalable, int8, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint16x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[uint16, spec.Width128, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Uint16x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[uint16, spec.Width128, float64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Uint16x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint16, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint16x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint16, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint16x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[uint16, spec.Width128, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Uint16x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[uint16, spec.Width128, int64, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Uint16x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint16, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Uint16x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[uint16, spec.Width128, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Uint16x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[uint16, spec.Width128, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint16x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[uint16, spec.Width256, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Uint16x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint16, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint16x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[uint16, spec.Width256, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint16x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[uint16, spec.Width256, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Uint16x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint16, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Uint16x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[uint16, spec.Width256, uint32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Uint16x32) ConvertToInt8() (z Int8x32) {
	return Int8x32{spec.ConvertToZ[uint16, spec.Width512, int8, spec.Width256](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint16x32) ConvertToInt16() (z Int16x32) {
	return Int16x32{spec.ConvertToZ[uint16, spec.Width512, int16, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Uint16x32) ConvertToUint8() (z Uint8x32) {
	return Uint8x32{spec.ConvertToZ[uint16, spec.Width512, uint8, spec.Width256](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint16s) ConvertToInt16() (z Int16s) {
	return Int16s{spec.ConvertToZ[uint16, spec.WidthScalable, int16, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint32x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[uint32, spec.Width128, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Uint32x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[uint32, spec.Width128, float64, spec.Width256](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint32x4) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint32, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint32x4) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint32, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint32x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[uint32, spec.Width128, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Uint32x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[uint32, spec.Width128, int64, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint32x4) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint32, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint32x4) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[uint32, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Uint32x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[uint32, spec.Width128, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint32x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[uint32, spec.Width256, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Uint32x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[uint32, spec.Width256, float64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Uint32x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint32, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint32x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint32, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint32x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[uint32, spec.Width256, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Uint32x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[uint32, spec.Width256, int64, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Uint32x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint32, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Uint32x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[uint32, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint64 converts each element of x to uint64.
func (x Uint32x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[uint32, spec.Width256, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint32x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[uint32, spec.Width512, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
func (x Uint32x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint32, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint32x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[uint32, spec.Width512, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint32x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[uint32, spec.Width512, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
func (x Uint32x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint32, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Uint32x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[uint32, spec.Width512, uint16, spec.Width256](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint32s) ConvertToFloat32() (z Float32s) {
	return Float32s{spec.ConvertToZ[uint32, spec.WidthScalable, float32, spec.WidthScalable](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint32s) ConvertToInt32() (z Int32s) {
	return Int32s{spec.ConvertToZ[uint32, spec.WidthScalable, int32, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Uint64x2) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[uint64, spec.Width128, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Uint64x2) ConvertToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertToZ[uint64, spec.Width128, float64, spec.Width128](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Uint64x2) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint64, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Uint64x2) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint64, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Uint64x2) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[uint64, spec.Width128, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Uint64x2) ConvertToInt64() (z Int64x2) {
	return Int64x2{spec.ConvertToZ[uint64, spec.Width128, int64, spec.Width128](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Uint64x2) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint64, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Uint64x2) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[uint64, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
//
// The low 2 elements of the result are set. The rest are zero.
func (x Uint64x2) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[uint64, spec.Width128, uint32, spec.Width128](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint64x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[uint64, spec.Width256, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Uint64x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[uint64, spec.Width256, float64, spec.Width256](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint64x4) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint64, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint64x4) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint64, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint64x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[uint64, spec.Width256, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Uint64x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[uint64, spec.Width256, int64, spec.Width256](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint64x4) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint64, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
//
// The low 4 elements of the result are set. The rest are zero.
func (x Uint64x4) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[uint64, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Uint64x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[uint64, spec.Width256, uint32, spec.Width128](x.v)}
}

// ConvertToFloat32 converts each element of x to float32.
func (x Uint64x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[uint64, spec.Width512, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Uint64x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[uint64, spec.Width512, float64, spec.Width512](x.v)}
}

// ConvertToInt8 converts each element of x to int8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Uint64x8) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint64, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts each element of x to int16.
func (x Uint64x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint64, spec.Width512, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts each element of x to int32.
func (x Uint64x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[uint64, spec.Width512, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Uint64x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[uint64, spec.Width512, int64, spec.Width512](x.v)}
}

// ConvertToUint8 converts each element of x to uint8.
//
// The low 8 elements of the result are set. The rest are zero.
func (x Uint64x8) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint64, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts each element of x to uint16.
func (x Uint64x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[uint64, spec.Width512, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts each element of x to uint32.
func (x Uint64x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[uint64, spec.Width512, uint32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts each element of x to float64.
func (x Uint64s) ConvertToFloat64() (z Float64s) {
	return Float64s{spec.ConvertToZ[uint64, spec.WidthScalable, float64, spec.WidthScalable](x.v)}
}

// ConvertToInt64 converts each element of x to int64.
func (x Uint64s) ConvertToInt64() (z Int64s) {
	return Int64s{spec.ConvertToZ[uint64, spec.WidthScalable, int64, spec.WidthScalable](x.v)}
}

// ExtendLo8ToInt16 sign-extends
// the lowest 8 vector elements to int16.
func (x Int8x16) ExtendLo8ToInt16() (z Int16x8) {
	return Int16x8{spec.ExtendLoLToZ[int8, spec.Width128, int16](x.v)}
}

// ExtendLo4ToInt32 sign-extends
// the lowest 4 vector elements to int32.
func (x Int8x16) ExtendLo4ToInt32() (z Int32x4) {
	return Int32x4{spec.ExtendLoLToZ[int8, spec.Width128, int32](x.v)}
}

// ExtendLo2ToInt64 sign-extends
// the lowest 2 vector elements to int64.
func (x Int8x16) ExtendLo2ToInt64() (z Int64x2) {
	return Int64x2{spec.ExtendLoLToZ[int8, spec.Width128, int64](x.v)}
}

// ExtendLo16ToInt16 sign-extends
// the lowest 16 vector elements to int16.
func (x Int8x32) ExtendLo16ToInt16() (z Int16x16) {
	return Int16x16{spec.ExtendLoLToZ[int8, spec.Width256, int16](x.v)}
}

// ExtendLo8ToInt32 sign-extends
// the lowest 8 vector elements to int32.
func (x Int8x32) ExtendLo8ToInt32() (z Int32x8) {
	return Int32x8{spec.ExtendLoLToZ[int8, spec.Width256, int32](x.v)}
}

// ExtendLo4ToInt64 sign-extends
// the lowest 4 vector elements to int64.
func (x Int8x32) ExtendLo4ToInt64() (z Int64x4) {
	return Int64x4{spec.ExtendLoLToZ[int8, spec.Width256, int64](x.v)}
}

// ExtendLo32ToInt16 sign-extends
// the lowest 32 vector elements to int16.
func (x Int8x64) ExtendLo32ToInt16() (z Int16x32) {
	return Int16x32{spec.ExtendLoLToZ[int8, spec.Width512, int16](x.v)}
}

// ExtendLo16ToInt32 sign-extends
// the lowest 16 vector elements to int32.
func (x Int8x64) ExtendLo16ToInt32() (z Int32x16) {
	return Int32x16{spec.ExtendLoLToZ[int8, spec.Width512, int32](x.v)}
}

// ExtendLo8ToInt64 sign-extends
// the lowest 8 vector elements to int64.
func (x Int8x64) ExtendLo8ToInt64() (z Int64x8) {
	return Int64x8{spec.ExtendLoLToZ[int8, spec.Width512, int64](x.v)}
}

// ExtendLo4ToInt32 sign-extends
// the lowest 4 vector elements to int32.
func (x Int16x8) ExtendLo4ToInt32() (z Int32x4) {
	return Int32x4{spec.ExtendLoLToZ[int16, spec.Width128, int32](x.v)}
}

// ExtendLo2ToInt64 sign-extends
// the lowest 2 vector elements to int64.
func (x Int16x8) ExtendLo2ToInt64() (z Int64x2) {
	return Int64x2{spec.ExtendLoLToZ[int16, spec.Width128, int64](x.v)}
}

// ExtendLo8ToInt32 sign-extends
// the lowest 8 vector elements to int32.
func (x Int16x16) ExtendLo8ToInt32() (z Int32x8) {
	return Int32x8{spec.ExtendLoLToZ[int16, spec.Width256, int32](x.v)}
}

// ExtendLo4ToInt64 sign-extends
// the lowest 4 vector elements to int64.
func (x Int16x16) ExtendLo4ToInt64() (z Int64x4) {
	return Int64x4{spec.ExtendLoLToZ[int16, spec.Width256, int64](x.v)}
}

// ExtendLo16ToInt32 sign-extends
// the lowest 16 vector elements to int32.
func (x Int16x32) ExtendLo16ToInt32() (z Int32x16) {
	return Int32x16{spec.ExtendLoLToZ[int16, spec.Width512, int32](x.v)}
}

// ExtendLo8ToInt64 sign-extends
// the lowest 8 vector elements to int64.
func (x Int16x32) ExtendLo8ToInt64() (z Int64x8) {
	return Int64x8{spec.ExtendLoLToZ[int16, spec.Width512, int64](x.v)}
}

// ExtendLo2ToInt64 sign-extends
// the lowest 2 vector elements to int64.
func (x Int32x4) ExtendLo2ToInt64() (z Int64x2) {
	return Int64x2{spec.ExtendLoLToZ[int32, spec.Width128, int64](x.v)}
}

// ExtendLo4ToInt64 sign-extends
// the lowest 4 vector elements to int64.
func (x Int32x8) ExtendLo4ToInt64() (z Int64x4) {
	return Int64x4{spec.ExtendLoLToZ[int32, spec.Width256, int64](x.v)}
}

// ExtendLo8ToInt64 sign-extends
// the lowest 8 vector elements to int64.
func (x Int32x16) ExtendLo8ToInt64() (z Int64x8) {
	return Int64x8{spec.ExtendLoLToZ[int32, spec.Width512, int64](x.v)}
}

// ExtendLo8ToUint16 zero-extends
// the lowest 8 vector elements to uint16.
func (x Uint8x16) ExtendLo8ToUint16() (z Uint16x8) {
	return Uint16x8{spec.ExtendLoLToZ[uint8, spec.Width128, uint16](x.v)}
}

// ExtendLo4ToUint32 zero-extends
// the lowest 4 vector elements to uint32.
func (x Uint8x16) ExtendLo4ToUint32() (z Uint32x4) {
	return Uint32x4{spec.ExtendLoLToZ[uint8, spec.Width128, uint32](x.v)}
}

// ExtendLo2ToUint64 zero-extends
// the lowest 2 vector elements to uint64.
func (x Uint8x16) ExtendLo2ToUint64() (z Uint64x2) {
	return Uint64x2{spec.ExtendLoLToZ[uint8, spec.Width128, uint64](x.v)}
}

// ExtendLo16ToUint16 zero-extends
// the lowest 16 vector elements to uint16.
func (x Uint8x32) ExtendLo16ToUint16() (z Uint16x16) {
	return Uint16x16{spec.ExtendLoLToZ[uint8, spec.Width256, uint16](x.v)}
}

// ExtendLo8ToUint32 zero-extends
// the lowest 8 vector elements to uint32.
func (x Uint8x32) ExtendLo8ToUint32() (z Uint32x8) {
	return Uint32x8{spec.ExtendLoLToZ[uint8, spec.Width256, uint32](x.v)}
}

// ExtendLo4ToUint64 zero-extends
// the lowest 4 vector elements to uint64.
func (x Uint8x32) ExtendLo4ToUint64() (z Uint64x4) {
	return Uint64x4{spec.ExtendLoLToZ[uint8, spec.Width256, uint64](x.v)}
}

// ExtendLo32ToUint16 zero-extends
// the lowest 32 vector elements to uint16.
func (x Uint8x64) ExtendLo32ToUint16() (z Uint16x32) {
	return Uint16x32{spec.ExtendLoLToZ[uint8, spec.Width512, uint16](x.v)}
}

// ExtendLo16ToUint32 zero-extends
// the lowest 16 vector elements to uint32.
func (x Uint8x64) ExtendLo16ToUint32() (z Uint32x16) {
	return Uint32x16{spec.ExtendLoLToZ[uint8, spec.Width512, uint32](x.v)}
}

// ExtendLo8ToUint64 zero-extends
// the lowest 8 vector elements to uint64.
func (x Uint8x64) ExtendLo8ToUint64() (z Uint64x8) {
	return Uint64x8{spec.ExtendLoLToZ[uint8, spec.Width512, uint64](x.v)}
}

// ExtendLo4ToUint32 zero-extends
// the lowest 4 vector elements to uint32.
func (x Uint16x8) ExtendLo4ToUint32() (z Uint32x4) {
	return Uint32x4{spec.ExtendLoLToZ[uint16, spec.Width128, uint32](x.v)}
}

// ExtendLo2ToUint64 zero-extends
// the lowest 2 vector elements to uint64.
func (x Uint16x8) ExtendLo2ToUint64() (z Uint64x2) {
	return Uint64x2{spec.ExtendLoLToZ[uint16, spec.Width128, uint64](x.v)}
}

// ExtendLo8ToUint32 zero-extends
// the lowest 8 vector elements to uint32.
func (x Uint16x16) ExtendLo8ToUint32() (z Uint32x8) {
	return Uint32x8{spec.ExtendLoLToZ[uint16, spec.Width256, uint32](x.v)}
}

// ExtendLo4ToUint64 zero-extends
// the lowest 4 vector elements to uint64.
func (x Uint16x16) ExtendLo4ToUint64() (z Uint64x4) {
	return Uint64x4{spec.ExtendLoLToZ[uint16, spec.Width256, uint64](x.v)}
}

// ExtendLo16ToUint32 zero-extends
// the lowest 16 vector elements to uint32.
func (x Uint16x32) ExtendLo16ToUint32() (z Uint32x16) {
	return Uint32x16{spec.ExtendLoLToZ[uint16, spec.Width512, uint32](x.v)}
}

// ExtendLo8ToUint64 zero-extends
// the lowest 8 vector elements to uint64.
func (x Uint16x32) ExtendLo8ToUint64() (z Uint64x8) {
	return Uint64x8{spec.ExtendLoLToZ[uint16, spec.Width512, uint64](x.v)}
}

// ExtendLo2ToUint64 zero-extends
// the lowest 2 vector elements to uint64.
func (x Uint32x4) ExtendLo2ToUint64() (z Uint64x2) {
	return Uint64x2{spec.ExtendLoLToZ[uint32, spec.Width128, uint64](x.v)}
}

// ExtendLo4ToUint64 zero-extends
// the lowest 4 vector elements to uint64.
func (x Uint32x8) ExtendLo4ToUint64() (z Uint64x4) {
	return Uint64x4{spec.ExtendLoLToZ[uint32, spec.Width256, uint64](x.v)}
}

// ExtendLo8ToUint64 zero-extends
// the lowest 8 vector elements to uint64.
func (x Uint32x16) ExtendLo8ToUint64() (z Uint64x8) {
	return Uint64x8{spec.ExtendLoLToZ[uint32, spec.Width512, uint64](x.v)}
}

// ConvertLo2ToFloat64 converts the low-indexed 2 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Float32x4) ConvertLo2ToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertLoLToZ[float32, spec.Width128, float64](x.v)}
}

// ConvertLo4ToFloat64 converts the low-indexed 4 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Float32x8) ConvertLo4ToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertLoLToZ[float32, spec.Width256, float64](x.v)}
}

// ConvertLo8ToFloat64 converts the low-indexed 8 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Float32x16) ConvertLo8ToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertLoLToZ[float32, spec.Width512, float64](x.v)}
}

// ConvertLo4ToFloat32 converts the low-indexed 4 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Int8x16) ConvertLo4ToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertLoLToZ[int8, spec.Width128, float32](x.v)}
}

// ConvertLo2ToFloat64 converts the low-indexed 2 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int8x16) ConvertLo2ToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertLoLToZ[int8, spec.Width128, float64](x.v)}
}

// ConvertLo8ToFloat32 converts the low-indexed 8 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Int8x32) ConvertLo8ToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertLoLToZ[int8, spec.Width256, float32](x.v)}
}

// ConvertLo4ToFloat64 converts the low-indexed 4 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int8x32) ConvertLo4ToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertLoLToZ[int8, spec.Width256, float64](x.v)}
}

// ConvertLo16ToFloat32 converts the low-indexed 16 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Int8x64) ConvertLo16ToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertLoLToZ[int8, spec.Width512, float32](x.v)}
}

// ConvertLo8ToFloat64 converts the low-indexed 8 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int8x64) ConvertLo8ToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertLoLToZ[int8, spec.Width512, float64](x.v)}
}

// ConvertLo4ToFloat32 converts the low-indexed 4 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Int16x8) ConvertLo4ToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertLoLToZ[int16, spec.Width128, float32](x.v)}
}

// ConvertLo2ToFloat64 converts the low-indexed 2 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int16x8) ConvertLo2ToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertLoLToZ[int16, spec.Width128, float64](x.v)}
}

// ConvertLo8ToFloat32 converts the low-indexed 8 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Int16x16) ConvertLo8ToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertLoLToZ[int16, spec.Width256, float32](x.v)}
}

// ConvertLo4ToFloat64 converts the low-indexed 4 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int16x16) ConvertLo4ToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertLoLToZ[int16, spec.Width256, float64](x.v)}
}

// ConvertLo16ToFloat32 converts the low-indexed 16 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Int16x32) ConvertLo16ToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertLoLToZ[int16, spec.Width512, float32](x.v)}
}

// ConvertLo8ToFloat64 converts the low-indexed 8 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int16x32) ConvertLo8ToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertLoLToZ[int16, spec.Width512, float64](x.v)}
}

// ConvertLo2ToFloat64 converts the low-indexed 2 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int32x4) ConvertLo2ToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertLoLToZ[int32, spec.Width128, float64](x.v)}
}

// ConvertLo4ToFloat64 converts the low-indexed 4 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int32x8) ConvertLo4ToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertLoLToZ[int32, spec.Width256, float64](x.v)}
}

// ConvertLo8ToFloat64 converts the low-indexed 8 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Int32x16) ConvertLo8ToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertLoLToZ[int32, spec.Width512, float64](x.v)}
}

// ConvertLo4ToFloat32 converts the low-indexed 4 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Uint8x16) ConvertLo4ToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertLoLToZ[uint8, spec.Width128, float32](x.v)}
}

// ConvertLo2ToFloat64 converts the low-indexed 2 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint8x16) ConvertLo2ToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertLoLToZ[uint8, spec.Width128, float64](x.v)}
}

// ConvertLo8ToFloat32 converts the low-indexed 8 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Uint8x32) ConvertLo8ToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertLoLToZ[uint8, spec.Width256, float32](x.v)}
}

// ConvertLo4ToFloat64 converts the low-indexed 4 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint8x32) ConvertLo4ToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertLoLToZ[uint8, spec.Width256, float64](x.v)}
}

// ConvertLo16ToFloat32 converts the low-indexed 16 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Uint8x64) ConvertLo16ToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertLoLToZ[uint8, spec.Width512, float32](x.v)}
}

// ConvertLo8ToFloat64 converts the low-indexed 8 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint8x64) ConvertLo8ToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertLoLToZ[uint8, spec.Width512, float64](x.v)}
}

// ConvertLo4ToFloat32 converts the low-indexed 4 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Uint16x8) ConvertLo4ToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertLoLToZ[uint16, spec.Width128, float32](x.v)}
}

// ConvertLo2ToFloat64 converts the low-indexed 2 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint16x8) ConvertLo2ToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertLoLToZ[uint16, spec.Width128, float64](x.v)}
}

// ConvertLo8ToFloat32 converts the low-indexed 8 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Uint16x16) ConvertLo8ToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertLoLToZ[uint16, spec.Width256, float32](x.v)}
}

// ConvertLo4ToFloat64 converts the low-indexed 4 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint16x16) ConvertLo4ToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertLoLToZ[uint16, spec.Width256, float64](x.v)}
}

// ConvertLo16ToFloat32 converts the low-indexed 16 elements of x to float32.
//
//	z[i] = float32(x[i])
func (x Uint16x32) ConvertLo16ToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertLoLToZ[uint16, spec.Width512, float32](x.v)}
}

// ConvertLo8ToFloat64 converts the low-indexed 8 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint16x32) ConvertLo8ToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertLoLToZ[uint16, spec.Width512, float64](x.v)}
}

// ConvertLo2ToFloat64 converts the low-indexed 2 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint32x4) ConvertLo2ToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertLoLToZ[uint32, spec.Width128, float64](x.v)}
}

// ConvertLo4ToFloat64 converts the low-indexed 4 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint32x8) ConvertLo4ToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertLoLToZ[uint32, spec.Width256, float64](x.v)}
}

// ConvertLo8ToFloat64 converts the low-indexed 8 elements of x to float64.
//
//	z[i] = float64(x[i])
func (x Uint32x16) ConvertLo8ToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertLoLToZ[uint32, spec.Width512, float64](x.v)}
}

// BroadcastFloat32x4 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat32x4(x float32) (z Float32x4) {
	return Float32x4{spec.BroadcastZ[float32, spec.Width128](x)}
}

// BroadcastFloat32x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat32x8(x float32) (z Float32x8) {
	return Float32x8{spec.BroadcastZ[float32, spec.Width256](x)}
}

// BroadcastFloat32x16 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat32x16(x float32) (z Float32x16) {
	return Float32x16{spec.BroadcastZ[float32, spec.Width512](x)}
}

// BroadcastFloat32s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat32s(x float32) (z Float32s) {
	return Float32s{spec.BroadcastZ[float32, spec.WidthScalable](x)}
}

// BroadcastFloat64x2 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat64x2(x float64) (z Float64x2) {
	return Float64x2{spec.BroadcastZ[float64, spec.Width128](x)}
}

// BroadcastFloat64x4 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat64x4(x float64) (z Float64x4) {
	return Float64x4{spec.BroadcastZ[float64, spec.Width256](x)}
}

// BroadcastFloat64x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat64x8(x float64) (z Float64x8) {
	return Float64x8{spec.BroadcastZ[float64, spec.Width512](x)}
}

// BroadcastFloat64s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastFloat64s(x float64) (z Float64s) {
	return Float64s{spec.BroadcastZ[float64, spec.WidthScalable](x)}
}

// BroadcastInt8x16 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt8x16(x int8) (z Int8x16) {
	return Int8x16{spec.BroadcastZ[int8, spec.Width128](x)}
}

// BroadcastInt8x32 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt8x32(x int8) (z Int8x32) {
	return Int8x32{spec.BroadcastZ[int8, spec.Width256](x)}
}

// BroadcastInt8x64 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt8x64(x int8) (z Int8x64) {
	return Int8x64{spec.BroadcastZ[int8, spec.Width512](x)}
}

// BroadcastInt8s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt8s(x int8) (z Int8s) {
	return Int8s{spec.BroadcastZ[int8, spec.WidthScalable](x)}
}

// BroadcastInt16x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt16x8(x int16) (z Int16x8) {
	return Int16x8{spec.BroadcastZ[int16, spec.Width128](x)}
}

// BroadcastInt16x16 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt16x16(x int16) (z Int16x16) {
	return Int16x16{spec.BroadcastZ[int16, spec.Width256](x)}
}

// BroadcastInt16x32 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt16x32(x int16) (z Int16x32) {
	return Int16x32{spec.BroadcastZ[int16, spec.Width512](x)}
}

// BroadcastInt16s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt16s(x int16) (z Int16s) {
	return Int16s{spec.BroadcastZ[int16, spec.WidthScalable](x)}
}

// BroadcastInt32x4 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt32x4(x int32) (z Int32x4) {
	return Int32x4{spec.BroadcastZ[int32, spec.Width128](x)}
}

// BroadcastInt32x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt32x8(x int32) (z Int32x8) {
	return Int32x8{spec.BroadcastZ[int32, spec.Width256](x)}
}

// BroadcastInt32x16 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt32x16(x int32) (z Int32x16) {
	return Int32x16{spec.BroadcastZ[int32, spec.Width512](x)}
}

// BroadcastInt32s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt32s(x int32) (z Int32s) {
	return Int32s{spec.BroadcastZ[int32, spec.WidthScalable](x)}
}

// BroadcastInt64x2 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt64x2(x int64) (z Int64x2) {
	return Int64x2{spec.BroadcastZ[int64, spec.Width128](x)}
}

// BroadcastInt64x4 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt64x4(x int64) (z Int64x4) {
	return Int64x4{spec.BroadcastZ[int64, spec.Width256](x)}
}

// BroadcastInt64x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt64x8(x int64) (z Int64x8) {
	return Int64x8{spec.BroadcastZ[int64, spec.Width512](x)}
}

// BroadcastInt64s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastInt64s(x int64) (z Int64s) {
	return Int64s{spec.BroadcastZ[int64, spec.WidthScalable](x)}
}

// BroadcastUint8x16 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint8x16(x uint8) (z Uint8x16) {
	return Uint8x16{spec.BroadcastZ[uint8, spec.Width128](x)}
}

// BroadcastUint8x32 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint8x32(x uint8) (z Uint8x32) {
	return Uint8x32{spec.BroadcastZ[uint8, spec.Width256](x)}
}

// BroadcastUint8x64 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint8x64(x uint8) (z Uint8x64) {
	return Uint8x64{spec.BroadcastZ[uint8, spec.Width512](x)}
}

// BroadcastUint8s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint8s(x uint8) (z Uint8s) {
	return Uint8s{spec.BroadcastZ[uint8, spec.WidthScalable](x)}
}

// BroadcastUint16x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint16x8(x uint16) (z Uint16x8) {
	return Uint16x8{spec.BroadcastZ[uint16, spec.Width128](x)}
}

// BroadcastUint16x16 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint16x16(x uint16) (z Uint16x16) {
	return Uint16x16{spec.BroadcastZ[uint16, spec.Width256](x)}
}

// BroadcastUint16x32 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint16x32(x uint16) (z Uint16x32) {
	return Uint16x32{spec.BroadcastZ[uint16, spec.Width512](x)}
}

// BroadcastUint16s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint16s(x uint16) (z Uint16s) {
	return Uint16s{spec.BroadcastZ[uint16, spec.WidthScalable](x)}
}

// BroadcastUint32x4 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint32x4(x uint32) (z Uint32x4) {
	return Uint32x4{spec.BroadcastZ[uint32, spec.Width128](x)}
}

// BroadcastUint32x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint32x8(x uint32) (z Uint32x8) {
	return Uint32x8{spec.BroadcastZ[uint32, spec.Width256](x)}
}

// BroadcastUint32x16 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint32x16(x uint32) (z Uint32x16) {
	return Uint32x16{spec.BroadcastZ[uint32, spec.Width512](x)}
}

// BroadcastUint32s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint32s(x uint32) (z Uint32s) {
	return Uint32s{spec.BroadcastZ[uint32, spec.WidthScalable](x)}
}

// BroadcastUint64x2 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint64x2(x uint64) (z Uint64x2) {
	return Uint64x2{spec.BroadcastZ[uint64, spec.Width128](x)}
}

// BroadcastUint64x4 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint64x4(x uint64) (z Uint64x4) {
	return Uint64x4{spec.BroadcastZ[uint64, spec.Width256](x)}
}

// BroadcastUint64x8 returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint64x8(x uint64) (z Uint64x8) {
	return Uint64x8{spec.BroadcastZ[uint64, spec.Width512](x)}
}

// BroadcastUint64s returns a vector with the input x assigned to all elements of the
// result.
func BroadcastUint64s(x uint64) (z Uint64s) {
	return Uint64s{spec.BroadcastZ[uint64, spec.WidthScalable](x)}
}

// LoadFloat32x4 loads a slice into a vector. If len(s) < 4, it panics.
func LoadFloat32x4(s []float32) (z Float32x4) {
	return Float32x4{spec.LoadZ[float32, spec.Width128](s)}
}

// LoadFloat32x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadFloat32x8(s []float32) (z Float32x8) {
	return Float32x8{spec.LoadZ[float32, spec.Width256](s)}
}

// LoadFloat32x16 loads a slice into a vector. If len(s) < 16, it panics.
func LoadFloat32x16(s []float32) (z Float32x16) {
	return Float32x16{spec.LoadZ[float32, spec.Width512](s)}
}

// LoadFloat32s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadFloat32s(s []float32) (z Float32s) {
	return Float32s{spec.LoadZ[float32, spec.WidthScalable](s)}
}

// LoadFloat64x2 loads a slice into a vector. If len(s) < 2, it panics.
func LoadFloat64x2(s []float64) (z Float64x2) {
	return Float64x2{spec.LoadZ[float64, spec.Width128](s)}
}

// LoadFloat64x4 loads a slice into a vector. If len(s) < 4, it panics.
func LoadFloat64x4(s []float64) (z Float64x4) {
	return Float64x4{spec.LoadZ[float64, spec.Width256](s)}
}

// LoadFloat64x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadFloat64x8(s []float64) (z Float64x8) {
	return Float64x8{spec.LoadZ[float64, spec.Width512](s)}
}

// LoadFloat64s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadFloat64s(s []float64) (z Float64s) {
	return Float64s{spec.LoadZ[float64, spec.WidthScalable](s)}
}

// LoadInt8x16 loads a slice into a vector. If len(s) < 16, it panics.
func LoadInt8x16(s []int8) (z Int8x16) {
	return Int8x16{spec.LoadZ[int8, spec.Width128](s)}
}

// LoadInt8x32 loads a slice into a vector. If len(s) < 32, it panics.
func LoadInt8x32(s []int8) (z Int8x32) {
	return Int8x32{spec.LoadZ[int8, spec.Width256](s)}
}

// LoadInt8x64 loads a slice into a vector. If len(s) < 64, it panics.
func LoadInt8x64(s []int8) (z Int8x64) {
	return Int8x64{spec.LoadZ[int8, spec.Width512](s)}
}

// LoadInt8s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadInt8s(s []int8) (z Int8s) {
	return Int8s{spec.LoadZ[int8, spec.WidthScalable](s)}
}

// LoadInt16x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadInt16x8(s []int16) (z Int16x8) {
	return Int16x8{spec.LoadZ[int16, spec.Width128](s)}
}

// LoadInt16x16 loads a slice into a vector. If len(s) < 16, it panics.
func LoadInt16x16(s []int16) (z Int16x16) {
	return Int16x16{spec.LoadZ[int16, spec.Width256](s)}
}

// LoadInt16x32 loads a slice into a vector. If len(s) < 32, it panics.
func LoadInt16x32(s []int16) (z Int16x32) {
	return Int16x32{spec.LoadZ[int16, spec.Width512](s)}
}

// LoadInt16s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadInt16s(s []int16) (z Int16s) {
	return Int16s{spec.LoadZ[int16, spec.WidthScalable](s)}
}

// LoadInt32x4 loads a slice into a vector. If len(s) < 4, it panics.
func LoadInt32x4(s []int32) (z Int32x4) {
	return Int32x4{spec.LoadZ[int32, spec.Width128](s)}
}

// LoadInt32x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadInt32x8(s []int32) (z Int32x8) {
	return Int32x8{spec.LoadZ[int32, spec.Width256](s)}
}

// LoadInt32x16 loads a slice into a vector. If len(s) < 16, it panics.
func LoadInt32x16(s []int32) (z Int32x16) {
	return Int32x16{spec.LoadZ[int32, spec.Width512](s)}
}

// LoadInt32s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadInt32s(s []int32) (z Int32s) {
	return Int32s{spec.LoadZ[int32, spec.WidthScalable](s)}
}

// LoadInt64x2 loads a slice into a vector. If len(s) < 2, it panics.
func LoadInt64x2(s []int64) (z Int64x2) {
	return Int64x2{spec.LoadZ[int64, spec.Width128](s)}
}

// LoadInt64x4 loads a slice into a vector. If len(s) < 4, it panics.
func LoadInt64x4(s []int64) (z Int64x4) {
	return Int64x4{spec.LoadZ[int64, spec.Width256](s)}
}

// LoadInt64x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadInt64x8(s []int64) (z Int64x8) {
	return Int64x8{spec.LoadZ[int64, spec.Width512](s)}
}

// LoadInt64s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadInt64s(s []int64) (z Int64s) {
	return Int64s{spec.LoadZ[int64, spec.WidthScalable](s)}
}

// LoadUint8x16 loads a slice into a vector. If len(s) < 16, it panics.
func LoadUint8x16(s []uint8) (z Uint8x16) {
	return Uint8x16{spec.LoadZ[uint8, spec.Width128](s)}
}

// LoadUint8x32 loads a slice into a vector. If len(s) < 32, it panics.
func LoadUint8x32(s []uint8) (z Uint8x32) {
	return Uint8x32{spec.LoadZ[uint8, spec.Width256](s)}
}

// LoadUint8x64 loads a slice into a vector. If len(s) < 64, it panics.
func LoadUint8x64(s []uint8) (z Uint8x64) {
	return Uint8x64{spec.LoadZ[uint8, spec.Width512](s)}
}

// LoadUint8s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadUint8s(s []uint8) (z Uint8s) {
	return Uint8s{spec.LoadZ[uint8, spec.WidthScalable](s)}
}

// LoadUint16x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadUint16x8(s []uint16) (z Uint16x8) {
	return Uint16x8{spec.LoadZ[uint16, spec.Width128](s)}
}

// LoadUint16x16 loads a slice into a vector. If len(s) < 16, it panics.
func LoadUint16x16(s []uint16) (z Uint16x16) {
	return Uint16x16{spec.LoadZ[uint16, spec.Width256](s)}
}

// LoadUint16x32 loads a slice into a vector. If len(s) < 32, it panics.
func LoadUint16x32(s []uint16) (z Uint16x32) {
	return Uint16x32{spec.LoadZ[uint16, spec.Width512](s)}
}

// LoadUint16s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadUint16s(s []uint16) (z Uint16s) {
	return Uint16s{spec.LoadZ[uint16, spec.WidthScalable](s)}
}

// LoadUint32x4 loads a slice into a vector. If len(s) < 4, it panics.
func LoadUint32x4(s []uint32) (z Uint32x4) {
	return Uint32x4{spec.LoadZ[uint32, spec.Width128](s)}
}

// LoadUint32x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadUint32x8(s []uint32) (z Uint32x8) {
	return Uint32x8{spec.LoadZ[uint32, spec.Width256](s)}
}

// LoadUint32x16 loads a slice into a vector. If len(s) < 16, it panics.
func LoadUint32x16(s []uint32) (z Uint32x16) {
	return Uint32x16{spec.LoadZ[uint32, spec.Width512](s)}
}

// LoadUint32s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadUint32s(s []uint32) (z Uint32s) {
	return Uint32s{spec.LoadZ[uint32, spec.WidthScalable](s)}
}

// LoadUint64x2 loads a slice into a vector. If len(s) < 2, it panics.
func LoadUint64x2(s []uint64) (z Uint64x2) {
	return Uint64x2{spec.LoadZ[uint64, spec.Width128](s)}
}

// LoadUint64x4 loads a slice into a vector. If len(s) < 4, it panics.
func LoadUint64x4(s []uint64) (z Uint64x4) {
	return Uint64x4{spec.LoadZ[uint64, spec.Width256](s)}
}

// LoadUint64x8 loads a slice into a vector. If len(s) < 8, it panics.
func LoadUint64x8(s []uint64) (z Uint64x8) {
	return Uint64x8{spec.LoadZ[uint64, spec.Width512](s)}
}

// LoadUint64s loads a slice into a vector. If len(s) < z.Len(), it panics.
func LoadUint64s(s []uint64) (z Uint64s) {
	return Uint64s{spec.LoadZ[uint64, spec.WidthScalable](s)}
}

// LoadFloat32x4Array loads an array into a vector.
func LoadFloat32x4Array(x *[4]float32) (z Float32x4) {
	var tmp0 spec.Array[float32, spec.Width128] = x[:]
	return Float32x4{spec.LoadZArray[float32, spec.Width128](&tmp0)}
}

// LoadFloat32x8Array loads an array into a vector.
func LoadFloat32x8Array(x *[8]float32) (z Float32x8) {
	var tmp0 spec.Array[float32, spec.Width256] = x[:]
	return Float32x8{spec.LoadZArray[float32, spec.Width256](&tmp0)}
}

// LoadFloat32x16Array loads an array into a vector.
func LoadFloat32x16Array(x *[16]float32) (z Float32x16) {
	var tmp0 spec.Array[float32, spec.Width512] = x[:]
	return Float32x16{spec.LoadZArray[float32, spec.Width512](&tmp0)}
}

// LoadFloat64x2Array loads an array into a vector.
func LoadFloat64x2Array(x *[2]float64) (z Float64x2) {
	var tmp0 spec.Array[float64, spec.Width128] = x[:]
	return Float64x2{spec.LoadZArray[float64, spec.Width128](&tmp0)}
}

// LoadFloat64x4Array loads an array into a vector.
func LoadFloat64x4Array(x *[4]float64) (z Float64x4) {
	var tmp0 spec.Array[float64, spec.Width256] = x[:]
	return Float64x4{spec.LoadZArray[float64, spec.Width256](&tmp0)}
}

// LoadFloat64x8Array loads an array into a vector.
func LoadFloat64x8Array(x *[8]float64) (z Float64x8) {
	var tmp0 spec.Array[float64, spec.Width512] = x[:]
	return Float64x8{spec.LoadZArray[float64, spec.Width512](&tmp0)}
}

// LoadInt8x16Array loads an array into a vector.
func LoadInt8x16Array(x *[16]int8) (z Int8x16) {
	var tmp0 spec.Array[int8, spec.Width128] = x[:]
	return Int8x16{spec.LoadZArray[int8, spec.Width128](&tmp0)}
}

// LoadInt8x32Array loads an array into a vector.
func LoadInt8x32Array(x *[32]int8) (z Int8x32) {
	var tmp0 spec.Array[int8, spec.Width256] = x[:]
	return Int8x32{spec.LoadZArray[int8, spec.Width256](&tmp0)}
}

// LoadInt8x64Array loads an array into a vector.
func LoadInt8x64Array(x *[64]int8) (z Int8x64) {
	var tmp0 spec.Array[int8, spec.Width512] = x[:]
	return Int8x64{spec.LoadZArray[int8, spec.Width512](&tmp0)}
}

// LoadInt16x8Array loads an array into a vector.
func LoadInt16x8Array(x *[8]int16) (z Int16x8) {
	var tmp0 spec.Array[int16, spec.Width128] = x[:]
	return Int16x8{spec.LoadZArray[int16, spec.Width128](&tmp0)}
}

// LoadInt16x16Array loads an array into a vector.
func LoadInt16x16Array(x *[16]int16) (z Int16x16) {
	var tmp0 spec.Array[int16, spec.Width256] = x[:]
	return Int16x16{spec.LoadZArray[int16, spec.Width256](&tmp0)}
}

// LoadInt16x32Array loads an array into a vector.
func LoadInt16x32Array(x *[32]int16) (z Int16x32) {
	var tmp0 spec.Array[int16, spec.Width512] = x[:]
	return Int16x32{spec.LoadZArray[int16, spec.Width512](&tmp0)}
}

// LoadInt32x4Array loads an array into a vector.
func LoadInt32x4Array(x *[4]int32) (z Int32x4) {
	var tmp0 spec.Array[int32, spec.Width128] = x[:]
	return Int32x4{spec.LoadZArray[int32, spec.Width128](&tmp0)}
}

// LoadInt32x8Array loads an array into a vector.
func LoadInt32x8Array(x *[8]int32) (z Int32x8) {
	var tmp0 spec.Array[int32, spec.Width256] = x[:]
	return Int32x8{spec.LoadZArray[int32, spec.Width256](&tmp0)}
}

// LoadInt32x16Array loads an array into a vector.
func LoadInt32x16Array(x *[16]int32) (z Int32x16) {
	var tmp0 spec.Array[int32, spec.Width512] = x[:]
	return Int32x16{spec.LoadZArray[int32, spec.Width512](&tmp0)}
}

// LoadInt64x2Array loads an array into a vector.
func LoadInt64x2Array(x *[2]int64) (z Int64x2) {
	var tmp0 spec.Array[int64, spec.Width128] = x[:]
	return Int64x2{spec.LoadZArray[int64, spec.Width128](&tmp0)}
}

// LoadInt64x4Array loads an array into a vector.
func LoadInt64x4Array(x *[4]int64) (z Int64x4) {
	var tmp0 spec.Array[int64, spec.Width256] = x[:]
	return Int64x4{spec.LoadZArray[int64, spec.Width256](&tmp0)}
}

// LoadInt64x8Array loads an array into a vector.
func LoadInt64x8Array(x *[8]int64) (z Int64x8) {
	var tmp0 spec.Array[int64, spec.Width512] = x[:]
	return Int64x8{spec.LoadZArray[int64, spec.Width512](&tmp0)}
}

// LoadUint8x16Array loads an array into a vector.
func LoadUint8x16Array(x *[16]uint8) (z Uint8x16) {
	var tmp0 spec.Array[uint8, spec.Width128] = x[:]
	return Uint8x16{spec.LoadZArray[uint8, spec.Width128](&tmp0)}
}

// LoadUint8x32Array loads an array into a vector.
func LoadUint8x32Array(x *[32]uint8) (z Uint8x32) {
	var tmp0 spec.Array[uint8, spec.Width256] = x[:]
	return Uint8x32{spec.LoadZArray[uint8, spec.Width256](&tmp0)}
}

// LoadUint8x64Array loads an array into a vector.
func LoadUint8x64Array(x *[64]uint8) (z Uint8x64) {
	var tmp0 spec.Array[uint8, spec.Width512] = x[:]
	return Uint8x64{spec.LoadZArray[uint8, spec.Width512](&tmp0)}
}

// LoadUint16x8Array loads an array into a vector.
func LoadUint16x8Array(x *[8]uint16) (z Uint16x8) {
	var tmp0 spec.Array[uint16, spec.Width128] = x[:]
	return Uint16x8{spec.LoadZArray[uint16, spec.Width128](&tmp0)}
}

// LoadUint16x16Array loads an array into a vector.
func LoadUint16x16Array(x *[16]uint16) (z Uint16x16) {
	var tmp0 spec.Array[uint16, spec.Width256] = x[:]
	return Uint16x16{spec.LoadZArray[uint16, spec.Width256](&tmp0)}
}

// LoadUint16x32Array loads an array into a vector.
func LoadUint16x32Array(x *[32]uint16) (z Uint16x32) {
	var tmp0 spec.Array[uint16, spec.Width512] = x[:]
	return Uint16x32{spec.LoadZArray[uint16, spec.Width512](&tmp0)}
}

// LoadUint32x4Array loads an array into a vector.
func LoadUint32x4Array(x *[4]uint32) (z Uint32x4) {
	var tmp0 spec.Array[uint32, spec.Width128] = x[:]
	return Uint32x4{spec.LoadZArray[uint32, spec.Width128](&tmp0)}
}

// LoadUint32x8Array loads an array into a vector.
func LoadUint32x8Array(x *[8]uint32) (z Uint32x8) {
	var tmp0 spec.Array[uint32, spec.Width256] = x[:]
	return Uint32x8{spec.LoadZArray[uint32, spec.Width256](&tmp0)}
}

// LoadUint32x16Array loads an array into a vector.
func LoadUint32x16Array(x *[16]uint32) (z Uint32x16) {
	var tmp0 spec.Array[uint32, spec.Width512] = x[:]
	return Uint32x16{spec.LoadZArray[uint32, spec.Width512](&tmp0)}
}

// LoadUint64x2Array loads an array into a vector.
func LoadUint64x2Array(x *[2]uint64) (z Uint64x2) {
	var tmp0 spec.Array[uint64, spec.Width128] = x[:]
	return Uint64x2{spec.LoadZArray[uint64, spec.Width128](&tmp0)}
}

// LoadUint64x4Array loads an array into a vector.
func LoadUint64x4Array(x *[4]uint64) (z Uint64x4) {
	var tmp0 spec.Array[uint64, spec.Width256] = x[:]
	return Uint64x4{spec.LoadZArray[uint64, spec.Width256](&tmp0)}
}

// LoadUint64x8Array loads an array into a vector.
func LoadUint64x8Array(x *[8]uint64) (z Uint64x8) {
	var tmp0 spec.Array[uint64, spec.Width512] = x[:]
	return Uint64x8{spec.LoadZArray[uint64, spec.Width512](&tmp0)}
}

// LoadFloat32x4Part loads n=min(len(s), 4) elements from slice s as a
// vector and returns the vector and n. If len(s) < 4, the
// remaining vector elements will be zero.
func LoadFloat32x4Part(s []float32) (z Float32x4, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.Width128](s)
	return Float32x4{r1}, r2
}

// LoadFloat32x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadFloat32x8Part(s []float32) (z Float32x8, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.Width256](s)
	return Float32x8{r1}, r2
}

// LoadFloat32x16Part loads n=min(len(s), 16) elements from slice s as a
// vector and returns the vector and n. If len(s) < 16, the
// remaining vector elements will be zero.
func LoadFloat32x16Part(s []float32) (z Float32x16, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.Width512](s)
	return Float32x16{r1}, r2
}

// LoadFloat32sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadFloat32sPart(s []float32) (z Float32s, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.WidthScalable](s)
	return Float32s{r1}, r2
}

// LoadFloat64x2Part loads n=min(len(s), 2) elements from slice s as a
// vector and returns the vector and n. If len(s) < 2, the
// remaining vector elements will be zero.
func LoadFloat64x2Part(s []float64) (z Float64x2, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.Width128](s)
	return Float64x2{r1}, r2
}

// LoadFloat64x4Part loads n=min(len(s), 4) elements from slice s as a
// vector and returns the vector and n. If len(s) < 4, the
// remaining vector elements will be zero.
func LoadFloat64x4Part(s []float64) (z Float64x4, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.Width256](s)
	return Float64x4{r1}, r2
}

// LoadFloat64x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadFloat64x8Part(s []float64) (z Float64x8, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.Width512](s)
	return Float64x8{r1}, r2
}

// LoadFloat64sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadFloat64sPart(s []float64) (z Float64s, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.WidthScalable](s)
	return Float64s{r1}, r2
}

// LoadInt8x16Part loads n=min(len(s), 16) elements from slice s as a
// vector and returns the vector and n. If len(s) < 16, the
// remaining vector elements will be zero.
func LoadInt8x16Part(s []int8) (z Int8x16, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.Width128](s)
	return Int8x16{r1}, r2
}

// LoadInt8x32Part loads n=min(len(s), 32) elements from slice s as a
// vector and returns the vector and n. If len(s) < 32, the
// remaining vector elements will be zero.
func LoadInt8x32Part(s []int8) (z Int8x32, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.Width256](s)
	return Int8x32{r1}, r2
}

// LoadInt8x64Part loads n=min(len(s), 64) elements from slice s as a
// vector and returns the vector and n. If len(s) < 64, the
// remaining vector elements will be zero.
func LoadInt8x64Part(s []int8) (z Int8x64, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.Width512](s)
	return Int8x64{r1}, r2
}

// LoadInt8sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadInt8sPart(s []int8) (z Int8s, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.WidthScalable](s)
	return Int8s{r1}, r2
}

// LoadInt16x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadInt16x8Part(s []int16) (z Int16x8, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.Width128](s)
	return Int16x8{r1}, r2
}

// LoadInt16x16Part loads n=min(len(s), 16) elements from slice s as a
// vector and returns the vector and n. If len(s) < 16, the
// remaining vector elements will be zero.
func LoadInt16x16Part(s []int16) (z Int16x16, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.Width256](s)
	return Int16x16{r1}, r2
}

// LoadInt16x32Part loads n=min(len(s), 32) elements from slice s as a
// vector and returns the vector and n. If len(s) < 32, the
// remaining vector elements will be zero.
func LoadInt16x32Part(s []int16) (z Int16x32, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.Width512](s)
	return Int16x32{r1}, r2
}

// LoadInt16sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadInt16sPart(s []int16) (z Int16s, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.WidthScalable](s)
	return Int16s{r1}, r2
}

// LoadInt32x4Part loads n=min(len(s), 4) elements from slice s as a
// vector and returns the vector and n. If len(s) < 4, the
// remaining vector elements will be zero.
func LoadInt32x4Part(s []int32) (z Int32x4, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.Width128](s)
	return Int32x4{r1}, r2
}

// LoadInt32x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadInt32x8Part(s []int32) (z Int32x8, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.Width256](s)
	return Int32x8{r1}, r2
}

// LoadInt32x16Part loads n=min(len(s), 16) elements from slice s as a
// vector and returns the vector and n. If len(s) < 16, the
// remaining vector elements will be zero.
func LoadInt32x16Part(s []int32) (z Int32x16, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.Width512](s)
	return Int32x16{r1}, r2
}

// LoadInt32sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadInt32sPart(s []int32) (z Int32s, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.WidthScalable](s)
	return Int32s{r1}, r2
}

// LoadInt64x2Part loads n=min(len(s), 2) elements from slice s as a
// vector and returns the vector and n. If len(s) < 2, the
// remaining vector elements will be zero.
func LoadInt64x2Part(s []int64) (z Int64x2, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.Width128](s)
	return Int64x2{r1}, r2
}

// LoadInt64x4Part loads n=min(len(s), 4) elements from slice s as a
// vector and returns the vector and n. If len(s) < 4, the
// remaining vector elements will be zero.
func LoadInt64x4Part(s []int64) (z Int64x4, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.Width256](s)
	return Int64x4{r1}, r2
}

// LoadInt64x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadInt64x8Part(s []int64) (z Int64x8, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.Width512](s)
	return Int64x8{r1}, r2
}

// LoadInt64sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadInt64sPart(s []int64) (z Int64s, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.WidthScalable](s)
	return Int64s{r1}, r2
}

// LoadUint8x16Part loads n=min(len(s), 16) elements from slice s as a
// vector and returns the vector and n. If len(s) < 16, the
// remaining vector elements will be zero.
func LoadUint8x16Part(s []uint8) (z Uint8x16, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.Width128](s)
	return Uint8x16{r1}, r2
}

// LoadUint8x32Part loads n=min(len(s), 32) elements from slice s as a
// vector and returns the vector and n. If len(s) < 32, the
// remaining vector elements will be zero.
func LoadUint8x32Part(s []uint8) (z Uint8x32, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.Width256](s)
	return Uint8x32{r1}, r2
}

// LoadUint8x64Part loads n=min(len(s), 64) elements from slice s as a
// vector and returns the vector and n. If len(s) < 64, the
// remaining vector elements will be zero.
func LoadUint8x64Part(s []uint8) (z Uint8x64, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.Width512](s)
	return Uint8x64{r1}, r2
}

// LoadUint8sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadUint8sPart(s []uint8) (z Uint8s, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.WidthScalable](s)
	return Uint8s{r1}, r2
}

// LoadUint16x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadUint16x8Part(s []uint16) (z Uint16x8, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.Width128](s)
	return Uint16x8{r1}, r2
}

// LoadUint16x16Part loads n=min(len(s), 16) elements from slice s as a
// vector and returns the vector and n. If len(s) < 16, the
// remaining vector elements will be zero.
func LoadUint16x16Part(s []uint16) (z Uint16x16, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.Width256](s)
	return Uint16x16{r1}, r2
}

// LoadUint16x32Part loads n=min(len(s), 32) elements from slice s as a
// vector and returns the vector and n. If len(s) < 32, the
// remaining vector elements will be zero.
func LoadUint16x32Part(s []uint16) (z Uint16x32, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.Width512](s)
	return Uint16x32{r1}, r2
}

// LoadUint16sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadUint16sPart(s []uint16) (z Uint16s, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.WidthScalable](s)
	return Uint16s{r1}, r2
}

// LoadUint32x4Part loads n=min(len(s), 4) elements from slice s as a
// vector and returns the vector and n. If len(s) < 4, the
// remaining vector elements will be zero.
func LoadUint32x4Part(s []uint32) (z Uint32x4, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.Width128](s)
	return Uint32x4{r1}, r2
}

// LoadUint32x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadUint32x8Part(s []uint32) (z Uint32x8, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.Width256](s)
	return Uint32x8{r1}, r2
}

// LoadUint32x16Part loads n=min(len(s), 16) elements from slice s as a
// vector and returns the vector and n. If len(s) < 16, the
// remaining vector elements will be zero.
func LoadUint32x16Part(s []uint32) (z Uint32x16, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.Width512](s)
	return Uint32x16{r1}, r2
}

// LoadUint32sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadUint32sPart(s []uint32) (z Uint32s, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.WidthScalable](s)
	return Uint32s{r1}, r2
}

// LoadUint64x2Part loads n=min(len(s), 2) elements from slice s as a
// vector and returns the vector and n. If len(s) < 2, the
// remaining vector elements will be zero.
func LoadUint64x2Part(s []uint64) (z Uint64x2, n int) {
	r1, r2 := spec.LoadZPart[uint64, spec.Width128](s)
	return Uint64x2{r1}, r2
}

// LoadUint64x4Part loads n=min(len(s), 4) elements from slice s as a
// vector and returns the vector and n. If len(s) < 4, the
// remaining vector elements will be zero.
func LoadUint64x4Part(s []uint64) (z Uint64x4, n int) {
	r1, r2 := spec.LoadZPart[uint64, spec.Width256](s)
	return Uint64x4{r1}, r2
}

// LoadUint64x8Part loads n=min(len(s), 8) elements from slice s as a
// vector and returns the vector and n. If len(s) < 8, the
// remaining vector elements will be zero.
func LoadUint64x8Part(s []uint64) (z Uint64x8, n int) {
	r1, r2 := spec.LoadZPart[uint64, spec.Width512](s)
	return Uint64x8{r1}, r2
}

// LoadUint64sPart loads n=min(len(s), z.Len()) elements from slice s as a
// vector and returns the vector and n. If len(s) < z.Len(), the
// remaining vector elements will be zero.
func LoadUint64sPart(s []uint64) (z Uint64s, n int) {
	r1, r2 := spec.LoadZPart[uint64, spec.WidthScalable](s)
	return Uint64s{r1}, r2
}

// Store stores the elements of x into a slice. If len(s) < 4, it panics.
func (x Float32x4) Store(s []float32) {
	spec.Store[float32, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Float32x8) Store(s []float32) {
	spec.Store[float32, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 16, it panics.
func (x Float32x16) Store(s []float32) {
	spec.Store[float32, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Float32s) Store(s []float32) {
	spec.Store[float32, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 2, it panics.
func (x Float64x2) Store(s []float64) {
	spec.Store[float64, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 4, it panics.
func (x Float64x4) Store(s []float64) {
	spec.Store[float64, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Float64x8) Store(s []float64) {
	spec.Store[float64, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Float64s) Store(s []float64) {
	spec.Store[float64, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 16, it panics.
func (x Int8x16) Store(s []int8) {
	spec.Store[int8, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 32, it panics.
func (x Int8x32) Store(s []int8) {
	spec.Store[int8, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 64, it panics.
func (x Int8x64) Store(s []int8) {
	spec.Store[int8, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Int8s) Store(s []int8) {
	spec.Store[int8, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Int16x8) Store(s []int16) {
	spec.Store[int16, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 16, it panics.
func (x Int16x16) Store(s []int16) {
	spec.Store[int16, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 32, it panics.
func (x Int16x32) Store(s []int16) {
	spec.Store[int16, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Int16s) Store(s []int16) {
	spec.Store[int16, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 4, it panics.
func (x Int32x4) Store(s []int32) {
	spec.Store[int32, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Int32x8) Store(s []int32) {
	spec.Store[int32, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 16, it panics.
func (x Int32x16) Store(s []int32) {
	spec.Store[int32, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Int32s) Store(s []int32) {
	spec.Store[int32, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 2, it panics.
func (x Int64x2) Store(s []int64) {
	spec.Store[int64, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 4, it panics.
func (x Int64x4) Store(s []int64) {
	spec.Store[int64, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Int64x8) Store(s []int64) {
	spec.Store[int64, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Int64s) Store(s []int64) {
	spec.Store[int64, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 16, it panics.
func (x Uint8x16) Store(s []uint8) {
	spec.Store[uint8, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 32, it panics.
func (x Uint8x32) Store(s []uint8) {
	spec.Store[uint8, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 64, it panics.
func (x Uint8x64) Store(s []uint8) {
	spec.Store[uint8, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Uint8s) Store(s []uint8) {
	spec.Store[uint8, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Uint16x8) Store(s []uint16) {
	spec.Store[uint16, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 16, it panics.
func (x Uint16x16) Store(s []uint16) {
	spec.Store[uint16, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 32, it panics.
func (x Uint16x32) Store(s []uint16) {
	spec.Store[uint16, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Uint16s) Store(s []uint16) {
	spec.Store[uint16, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 4, it panics.
func (x Uint32x4) Store(s []uint32) {
	spec.Store[uint32, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Uint32x8) Store(s []uint32) {
	spec.Store[uint32, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 16, it panics.
func (x Uint32x16) Store(s []uint32) {
	spec.Store[uint32, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Uint32s) Store(s []uint32) {
	spec.Store[uint32, spec.WidthScalable](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 2, it panics.
func (x Uint64x2) Store(s []uint64) {
	spec.Store[uint64, spec.Width128](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 4, it panics.
func (x Uint64x4) Store(s []uint64) {
	spec.Store[uint64, spec.Width256](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < 8, it panics.
func (x Uint64x8) Store(s []uint64) {
	spec.Store[uint64, spec.Width512](x.v, s)
}

// Store stores the elements of x into a slice. If len(s) < x.Len(), it panics.
func (x Uint64s) Store(s []uint64) {
	spec.Store[uint64, spec.WidthScalable](x.v, s)
}

// StoreArray stores the elements of x to an array.
func (x Float32x4) StoreArray(y *[4]float32) {
	var tmp0 spec.Array[float32, spec.Width128] = y[:]
	spec.StoreArray[float32, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Float32x8) StoreArray(y *[8]float32) {
	var tmp0 spec.Array[float32, spec.Width256] = y[:]
	spec.StoreArray[float32, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Float32x16) StoreArray(y *[16]float32) {
	var tmp0 spec.Array[float32, spec.Width512] = y[:]
	spec.StoreArray[float32, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Float64x2) StoreArray(y *[2]float64) {
	var tmp0 spec.Array[float64, spec.Width128] = y[:]
	spec.StoreArray[float64, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Float64x4) StoreArray(y *[4]float64) {
	var tmp0 spec.Array[float64, spec.Width256] = y[:]
	spec.StoreArray[float64, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Float64x8) StoreArray(y *[8]float64) {
	var tmp0 spec.Array[float64, spec.Width512] = y[:]
	spec.StoreArray[float64, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int8x16) StoreArray(y *[16]int8) {
	var tmp0 spec.Array[int8, spec.Width128] = y[:]
	spec.StoreArray[int8, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int8x32) StoreArray(y *[32]int8) {
	var tmp0 spec.Array[int8, spec.Width256] = y[:]
	spec.StoreArray[int8, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int8x64) StoreArray(y *[64]int8) {
	var tmp0 spec.Array[int8, spec.Width512] = y[:]
	spec.StoreArray[int8, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int16x8) StoreArray(y *[8]int16) {
	var tmp0 spec.Array[int16, spec.Width128] = y[:]
	spec.StoreArray[int16, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int16x16) StoreArray(y *[16]int16) {
	var tmp0 spec.Array[int16, spec.Width256] = y[:]
	spec.StoreArray[int16, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int16x32) StoreArray(y *[32]int16) {
	var tmp0 spec.Array[int16, spec.Width512] = y[:]
	spec.StoreArray[int16, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int32x4) StoreArray(y *[4]int32) {
	var tmp0 spec.Array[int32, spec.Width128] = y[:]
	spec.StoreArray[int32, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int32x8) StoreArray(y *[8]int32) {
	var tmp0 spec.Array[int32, spec.Width256] = y[:]
	spec.StoreArray[int32, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int32x16) StoreArray(y *[16]int32) {
	var tmp0 spec.Array[int32, spec.Width512] = y[:]
	spec.StoreArray[int32, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int64x2) StoreArray(y *[2]int64) {
	var tmp0 spec.Array[int64, spec.Width128] = y[:]
	spec.StoreArray[int64, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int64x4) StoreArray(y *[4]int64) {
	var tmp0 spec.Array[int64, spec.Width256] = y[:]
	spec.StoreArray[int64, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Int64x8) StoreArray(y *[8]int64) {
	var tmp0 spec.Array[int64, spec.Width512] = y[:]
	spec.StoreArray[int64, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint8x16) StoreArray(y *[16]uint8) {
	var tmp0 spec.Array[uint8, spec.Width128] = y[:]
	spec.StoreArray[uint8, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint8x32) StoreArray(y *[32]uint8) {
	var tmp0 spec.Array[uint8, spec.Width256] = y[:]
	spec.StoreArray[uint8, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint8x64) StoreArray(y *[64]uint8) {
	var tmp0 spec.Array[uint8, spec.Width512] = y[:]
	spec.StoreArray[uint8, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint16x8) StoreArray(y *[8]uint16) {
	var tmp0 spec.Array[uint16, spec.Width128] = y[:]
	spec.StoreArray[uint16, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint16x16) StoreArray(y *[16]uint16) {
	var tmp0 spec.Array[uint16, spec.Width256] = y[:]
	spec.StoreArray[uint16, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint16x32) StoreArray(y *[32]uint16) {
	var tmp0 spec.Array[uint16, spec.Width512] = y[:]
	spec.StoreArray[uint16, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint32x4) StoreArray(y *[4]uint32) {
	var tmp0 spec.Array[uint32, spec.Width128] = y[:]
	spec.StoreArray[uint32, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint32x8) StoreArray(y *[8]uint32) {
	var tmp0 spec.Array[uint32, spec.Width256] = y[:]
	spec.StoreArray[uint32, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint32x16) StoreArray(y *[16]uint32) {
	var tmp0 spec.Array[uint32, spec.Width512] = y[:]
	spec.StoreArray[uint32, spec.Width512](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint64x2) StoreArray(y *[2]uint64) {
	var tmp0 spec.Array[uint64, spec.Width128] = y[:]
	spec.StoreArray[uint64, spec.Width128](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint64x4) StoreArray(y *[4]uint64) {
	var tmp0 spec.Array[uint64, spec.Width256] = y[:]
	spec.StoreArray[uint64, spec.Width256](x.v, &tmp0)
}

// StoreArray stores the elements of x to an array.
func (x Uint64x8) StoreArray(y *[8]uint64) {
	var tmp0 spec.Array[uint64, spec.Width512] = y[:]
	spec.StoreArray[uint64, spec.Width512](x.v, &tmp0)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Float32x4) StoreArrayMasked(y *[4]float32, mask Mask32x4) {
	var tmp0 spec.Array[float32, spec.Width128] = y[:]
	spec.StoreArrayMasked[float32, spec.Width128, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Float32x8) StoreArrayMasked(y *[8]float32, mask Mask32x8) {
	var tmp0 spec.Array[float32, spec.Width256] = y[:]
	spec.StoreArrayMasked[float32, spec.Width256, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Float32x16) StoreArrayMasked(y *[16]float32, mask Mask32x16) {
	var tmp0 spec.Array[float32, spec.Width512] = y[:]
	spec.StoreArrayMasked[float32, spec.Width512, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Float64x2) StoreArrayMasked(y *[2]float64, mask Mask64x2) {
	var tmp0 spec.Array[float64, spec.Width128] = y[:]
	spec.StoreArrayMasked[float64, spec.Width128, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Float64x4) StoreArrayMasked(y *[4]float64, mask Mask64x4) {
	var tmp0 spec.Array[float64, spec.Width256] = y[:]
	spec.StoreArrayMasked[float64, spec.Width256, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Float64x8) StoreArrayMasked(y *[8]float64, mask Mask64x8) {
	var tmp0 spec.Array[float64, spec.Width512] = y[:]
	spec.StoreArrayMasked[float64, spec.Width512, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int8x16) StoreArrayMasked(y *[16]int8, mask Mask8x16) {
	var tmp0 spec.Array[int8, spec.Width128] = y[:]
	spec.StoreArrayMasked[int8, spec.Width128, spec.Mask8](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int8x32) StoreArrayMasked(y *[32]int8, mask Mask8x32) {
	var tmp0 spec.Array[int8, spec.Width256] = y[:]
	spec.StoreArrayMasked[int8, spec.Width256, spec.Mask8](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int8x64) StoreArrayMasked(y *[64]int8, mask Mask8x64) {
	var tmp0 spec.Array[int8, spec.Width512] = y[:]
	spec.StoreArrayMasked[int8, spec.Width512, spec.Mask8](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int16x8) StoreArrayMasked(y *[8]int16, mask Mask16x8) {
	var tmp0 spec.Array[int16, spec.Width128] = y[:]
	spec.StoreArrayMasked[int16, spec.Width128, spec.Mask16](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int16x16) StoreArrayMasked(y *[16]int16, mask Mask16x16) {
	var tmp0 spec.Array[int16, spec.Width256] = y[:]
	spec.StoreArrayMasked[int16, spec.Width256, spec.Mask16](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int16x32) StoreArrayMasked(y *[32]int16, mask Mask16x32) {
	var tmp0 spec.Array[int16, spec.Width512] = y[:]
	spec.StoreArrayMasked[int16, spec.Width512, spec.Mask16](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int32x4) StoreArrayMasked(y *[4]int32, mask Mask32x4) {
	var tmp0 spec.Array[int32, spec.Width128] = y[:]
	spec.StoreArrayMasked[int32, spec.Width128, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int32x8) StoreArrayMasked(y *[8]int32, mask Mask32x8) {
	var tmp0 spec.Array[int32, spec.Width256] = y[:]
	spec.StoreArrayMasked[int32, spec.Width256, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int32x16) StoreArrayMasked(y *[16]int32, mask Mask32x16) {
	var tmp0 spec.Array[int32, spec.Width512] = y[:]
	spec.StoreArrayMasked[int32, spec.Width512, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int64x2) StoreArrayMasked(y *[2]int64, mask Mask64x2) {
	var tmp0 spec.Array[int64, spec.Width128] = y[:]
	spec.StoreArrayMasked[int64, spec.Width128, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int64x4) StoreArrayMasked(y *[4]int64, mask Mask64x4) {
	var tmp0 spec.Array[int64, spec.Width256] = y[:]
	spec.StoreArrayMasked[int64, spec.Width256, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Int64x8) StoreArrayMasked(y *[8]int64, mask Mask64x8) {
	var tmp0 spec.Array[int64, spec.Width512] = y[:]
	spec.StoreArrayMasked[int64, spec.Width512, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint8x16) StoreArrayMasked(y *[16]uint8, mask Mask8x16) {
	var tmp0 spec.Array[uint8, spec.Width128] = y[:]
	spec.StoreArrayMasked[uint8, spec.Width128, spec.Mask8](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint8x32) StoreArrayMasked(y *[32]uint8, mask Mask8x32) {
	var tmp0 spec.Array[uint8, spec.Width256] = y[:]
	spec.StoreArrayMasked[uint8, spec.Width256, spec.Mask8](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint8x64) StoreArrayMasked(y *[64]uint8, mask Mask8x64) {
	var tmp0 spec.Array[uint8, spec.Width512] = y[:]
	spec.StoreArrayMasked[uint8, spec.Width512, spec.Mask8](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint16x8) StoreArrayMasked(y *[8]uint16, mask Mask16x8) {
	var tmp0 spec.Array[uint16, spec.Width128] = y[:]
	spec.StoreArrayMasked[uint16, spec.Width128, spec.Mask16](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint16x16) StoreArrayMasked(y *[16]uint16, mask Mask16x16) {
	var tmp0 spec.Array[uint16, spec.Width256] = y[:]
	spec.StoreArrayMasked[uint16, spec.Width256, spec.Mask16](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint16x32) StoreArrayMasked(y *[32]uint16, mask Mask16x32) {
	var tmp0 spec.Array[uint16, spec.Width512] = y[:]
	spec.StoreArrayMasked[uint16, spec.Width512, spec.Mask16](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint32x4) StoreArrayMasked(y *[4]uint32, mask Mask32x4) {
	var tmp0 spec.Array[uint32, spec.Width128] = y[:]
	spec.StoreArrayMasked[uint32, spec.Width128, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint32x8) StoreArrayMasked(y *[8]uint32, mask Mask32x8) {
	var tmp0 spec.Array[uint32, spec.Width256] = y[:]
	spec.StoreArrayMasked[uint32, spec.Width256, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint32x16) StoreArrayMasked(y *[16]uint32, mask Mask32x16) {
	var tmp0 spec.Array[uint32, spec.Width512] = y[:]
	spec.StoreArrayMasked[uint32, spec.Width512, spec.Mask32](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint64x2) StoreArrayMasked(y *[2]uint64, mask Mask64x2) {
	var tmp0 spec.Array[uint64, spec.Width128] = y[:]
	spec.StoreArrayMasked[uint64, spec.Width128, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint64x4) StoreArrayMasked(y *[4]uint64, mask Mask64x4) {
	var tmp0 spec.Array[uint64, spec.Width256] = y[:]
	spec.StoreArrayMasked[uint64, spec.Width256, spec.Mask64](x.v, &tmp0, mask.v)
}

// StoreArrayMasked stores the masked elements of x to an array. It does not
// modify elements of y that are false in the mask.
func (x Uint64x8) StoreArrayMasked(y *[8]uint64, mask Mask64x8) {
	var tmp0 spec.Array[uint64, spec.Width512] = y[:]
	spec.StoreArrayMasked[uint64, spec.Width512, spec.Mask64](x.v, &tmp0, mask.v)
}

// StorePart stores n=min(len(s), 4) elements of x into s and returns n.
func (x Float32x4) StorePart(s []float32) (n int) {
	return spec.StorePart[float32, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Float32x8) StorePart(s []float32) (n int) {
	return spec.StorePart[float32, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 16) elements of x into s and returns n.
func (x Float32x16) StorePart(s []float32) (n int) {
	return spec.StorePart[float32, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Float32s) StorePart(s []float32) (n int) {
	return spec.StorePart[float32, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 2) elements of x into s and returns n.
func (x Float64x2) StorePart(s []float64) (n int) {
	return spec.StorePart[float64, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 4) elements of x into s and returns n.
func (x Float64x4) StorePart(s []float64) (n int) {
	return spec.StorePart[float64, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Float64x8) StorePart(s []float64) (n int) {
	return spec.StorePart[float64, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Float64s) StorePart(s []float64) (n int) {
	return spec.StorePart[float64, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 16) elements of x into s and returns n.
func (x Int8x16) StorePart(s []int8) (n int) {
	return spec.StorePart[int8, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 32) elements of x into s and returns n.
func (x Int8x32) StorePart(s []int8) (n int) {
	return spec.StorePart[int8, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 64) elements of x into s and returns n.
func (x Int8x64) StorePart(s []int8) (n int) {
	return spec.StorePart[int8, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Int8s) StorePart(s []int8) (n int) {
	return spec.StorePart[int8, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Int16x8) StorePart(s []int16) (n int) {
	return spec.StorePart[int16, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 16) elements of x into s and returns n.
func (x Int16x16) StorePart(s []int16) (n int) {
	return spec.StorePart[int16, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 32) elements of x into s and returns n.
func (x Int16x32) StorePart(s []int16) (n int) {
	return spec.StorePart[int16, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Int16s) StorePart(s []int16) (n int) {
	return spec.StorePart[int16, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 4) elements of x into s and returns n.
func (x Int32x4) StorePart(s []int32) (n int) {
	return spec.StorePart[int32, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Int32x8) StorePart(s []int32) (n int) {
	return spec.StorePart[int32, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 16) elements of x into s and returns n.
func (x Int32x16) StorePart(s []int32) (n int) {
	return spec.StorePart[int32, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Int32s) StorePart(s []int32) (n int) {
	return spec.StorePart[int32, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 2) elements of x into s and returns n.
func (x Int64x2) StorePart(s []int64) (n int) {
	return spec.StorePart[int64, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 4) elements of x into s and returns n.
func (x Int64x4) StorePart(s []int64) (n int) {
	return spec.StorePart[int64, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Int64x8) StorePart(s []int64) (n int) {
	return spec.StorePart[int64, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Int64s) StorePart(s []int64) (n int) {
	return spec.StorePart[int64, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 16) elements of x into s and returns n.
func (x Uint8x16) StorePart(s []uint8) (n int) {
	return spec.StorePart[uint8, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 32) elements of x into s and returns n.
func (x Uint8x32) StorePart(s []uint8) (n int) {
	return spec.StorePart[uint8, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 64) elements of x into s and returns n.
func (x Uint8x64) StorePart(s []uint8) (n int) {
	return spec.StorePart[uint8, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Uint8s) StorePart(s []uint8) (n int) {
	return spec.StorePart[uint8, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Uint16x8) StorePart(s []uint16) (n int) {
	return spec.StorePart[uint16, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 16) elements of x into s and returns n.
func (x Uint16x16) StorePart(s []uint16) (n int) {
	return spec.StorePart[uint16, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 32) elements of x into s and returns n.
func (x Uint16x32) StorePart(s []uint16) (n int) {
	return spec.StorePart[uint16, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Uint16s) StorePart(s []uint16) (n int) {
	return spec.StorePart[uint16, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 4) elements of x into s and returns n.
func (x Uint32x4) StorePart(s []uint32) (n int) {
	return spec.StorePart[uint32, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Uint32x8) StorePart(s []uint32) (n int) {
	return spec.StorePart[uint32, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 16) elements of x into s and returns n.
func (x Uint32x16) StorePart(s []uint32) (n int) {
	return spec.StorePart[uint32, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Uint32s) StorePart(s []uint32) (n int) {
	return spec.StorePart[uint32, spec.WidthScalable](x.v, s)
}

// StorePart stores n=min(len(s), 2) elements of x into s and returns n.
func (x Uint64x2) StorePart(s []uint64) (n int) {
	return spec.StorePart[uint64, spec.Width128](x.v, s)
}

// StorePart stores n=min(len(s), 4) elements of x into s and returns n.
func (x Uint64x4) StorePart(s []uint64) (n int) {
	return spec.StorePart[uint64, spec.Width256](x.v, s)
}

// StorePart stores n=min(len(s), 8) elements of x into s and returns n.
func (x Uint64x8) StorePart(s []uint64) (n int) {
	return spec.StorePart[uint64, spec.Width512](x.v, s)
}

// StorePart stores n=min(len(s), x.Len()) elements of x into s and returns n.
func (x Uint64s) StorePart(s []uint64) (n int) {
	return spec.StorePart[uint64, spec.WidthScalable](x.v, s)
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int8x16) And(y Int8x16) (z Int8x16) {
	return Int8x16{spec.And[int8, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int8x32) And(y Int8x32) (z Int8x32) {
	return Int8x32{spec.And[int8, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int8x64) And(y Int8x64) (z Int8x64) {
	return Int8x64{spec.And[int8, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int8s) And(y Int8s) (z Int8s) {
	return Int8s{spec.And[int8, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int16x8) And(y Int16x8) (z Int16x8) {
	return Int16x8{spec.And[int16, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int16x16) And(y Int16x16) (z Int16x16) {
	return Int16x16{spec.And[int16, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int16x32) And(y Int16x32) (z Int16x32) {
	return Int16x32{spec.And[int16, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int16s) And(y Int16s) (z Int16s) {
	return Int16s{spec.And[int16, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int32x4) And(y Int32x4) (z Int32x4) {
	return Int32x4{spec.And[int32, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int32x8) And(y Int32x8) (z Int32x8) {
	return Int32x8{spec.And[int32, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int32x16) And(y Int32x16) (z Int32x16) {
	return Int32x16{spec.And[int32, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int32s) And(y Int32s) (z Int32s) {
	return Int32s{spec.And[int32, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int64x2) And(y Int64x2) (z Int64x2) {
	return Int64x2{spec.And[int64, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int64x4) And(y Int64x4) (z Int64x4) {
	return Int64x4{spec.And[int64, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int64x8) And(y Int64x8) (z Int64x8) {
	return Int64x8{spec.And[int64, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Int64s) And(y Int64s) (z Int64s) {
	return Int64s{spec.And[int64, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint8x16) And(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.And[uint8, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint8x32) And(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.And[uint8, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint8x64) And(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.And[uint8, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint8s) And(y Uint8s) (z Uint8s) {
	return Uint8s{spec.And[uint8, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint16x8) And(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.And[uint16, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint16x16) And(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.And[uint16, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint16x32) And(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.And[uint16, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint16s) And(y Uint16s) (z Uint16s) {
	return Uint16s{spec.And[uint16, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint32x4) And(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.And[uint32, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint32x8) And(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.And[uint32, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint32x16) And(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.And[uint32, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint32s) And(y Uint32s) (z Uint32s) {
	return Uint32s{spec.And[uint32, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint64x2) And(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.And[uint64, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint64x4) And(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.And[uint64, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint64x8) And(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.And[uint64, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Uint64s) And(y Uint64s) (z Uint64s) {
	return Uint64s{spec.And[uint64, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask8x16) And(y Mask8x16) (z Mask8x16) {
	return Mask8x16{spec.And[spec.Mask8, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask8x32) And(y Mask8x32) (z Mask8x32) {
	return Mask8x32{spec.And[spec.Mask8, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask8x64) And(y Mask8x64) (z Mask8x64) {
	return Mask8x64{spec.And[spec.Mask8, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask8s) And(y Mask8s) (z Mask8s) {
	return Mask8s{spec.And[spec.Mask8, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask16x8) And(y Mask16x8) (z Mask16x8) {
	return Mask16x8{spec.And[spec.Mask16, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask16x16) And(y Mask16x16) (z Mask16x16) {
	return Mask16x16{spec.And[spec.Mask16, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask16x32) And(y Mask16x32) (z Mask16x32) {
	return Mask16x32{spec.And[spec.Mask16, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask16s) And(y Mask16s) (z Mask16s) {
	return Mask16s{spec.And[spec.Mask16, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask32x4) And(y Mask32x4) (z Mask32x4) {
	return Mask32x4{spec.And[spec.Mask32, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask32x8) And(y Mask32x8) (z Mask32x8) {
	return Mask32x8{spec.And[spec.Mask32, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask32x16) And(y Mask32x16) (z Mask32x16) {
	return Mask32x16{spec.And[spec.Mask32, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask32s) And(y Mask32s) (z Mask32s) {
	return Mask32s{spec.And[spec.Mask32, spec.WidthScalable](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask64x2) And(y Mask64x2) (z Mask64x2) {
	return Mask64x2{spec.And[spec.Mask64, spec.Width128](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask64x4) And(y Mask64x4) (z Mask64x4) {
	return Mask64x4{spec.And[spec.Mask64, spec.Width256](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask64x8) And(y Mask64x8) (z Mask64x8) {
	return Mask64x8{spec.And[spec.Mask64, spec.Width512](x.v, y.v)}
}

// And returns the bitwise AND of x and y.
//
//	z[i] = x[i] & y[i]
func (x Mask64s) And(y Mask64s) (z Mask64s) {
	return Mask64s{spec.And[spec.Mask64, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int8x16) AndNot(y Int8x16) (z Int8x16) {
	return Int8x16{spec.AndNot[int8, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int8x32) AndNot(y Int8x32) (z Int8x32) {
	return Int8x32{spec.AndNot[int8, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int8x64) AndNot(y Int8x64) (z Int8x64) {
	return Int8x64{spec.AndNot[int8, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int8s) AndNot(y Int8s) (z Int8s) {
	return Int8s{spec.AndNot[int8, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int16x8) AndNot(y Int16x8) (z Int16x8) {
	return Int16x8{spec.AndNot[int16, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int16x16) AndNot(y Int16x16) (z Int16x16) {
	return Int16x16{spec.AndNot[int16, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int16x32) AndNot(y Int16x32) (z Int16x32) {
	return Int16x32{spec.AndNot[int16, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int16s) AndNot(y Int16s) (z Int16s) {
	return Int16s{spec.AndNot[int16, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int32x4) AndNot(y Int32x4) (z Int32x4) {
	return Int32x4{spec.AndNot[int32, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int32x8) AndNot(y Int32x8) (z Int32x8) {
	return Int32x8{spec.AndNot[int32, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int32x16) AndNot(y Int32x16) (z Int32x16) {
	return Int32x16{spec.AndNot[int32, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int32s) AndNot(y Int32s) (z Int32s) {
	return Int32s{spec.AndNot[int32, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int64x2) AndNot(y Int64x2) (z Int64x2) {
	return Int64x2{spec.AndNot[int64, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int64x4) AndNot(y Int64x4) (z Int64x4) {
	return Int64x4{spec.AndNot[int64, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int64x8) AndNot(y Int64x8) (z Int64x8) {
	return Int64x8{spec.AndNot[int64, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Int64s) AndNot(y Int64s) (z Int64s) {
	return Int64s{spec.AndNot[int64, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint8x16) AndNot(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.AndNot[uint8, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint8x32) AndNot(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.AndNot[uint8, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint8x64) AndNot(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.AndNot[uint8, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint8s) AndNot(y Uint8s) (z Uint8s) {
	return Uint8s{spec.AndNot[uint8, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint16x8) AndNot(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.AndNot[uint16, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint16x16) AndNot(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.AndNot[uint16, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint16x32) AndNot(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.AndNot[uint16, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint16s) AndNot(y Uint16s) (z Uint16s) {
	return Uint16s{spec.AndNot[uint16, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint32x4) AndNot(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.AndNot[uint32, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint32x8) AndNot(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.AndNot[uint32, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint32x16) AndNot(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.AndNot[uint32, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint32s) AndNot(y Uint32s) (z Uint32s) {
	return Uint32s{spec.AndNot[uint32, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint64x2) AndNot(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.AndNot[uint64, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint64x4) AndNot(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.AndNot[uint64, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint64x8) AndNot(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.AndNot[uint64, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Uint64s) AndNot(y Uint64s) (z Uint64s) {
	return Uint64s{spec.AndNot[uint64, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask8x16) AndNot(y Mask8x16) (z Mask8x16) {
	return Mask8x16{spec.AndNot[spec.Mask8, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask8x32) AndNot(y Mask8x32) (z Mask8x32) {
	return Mask8x32{spec.AndNot[spec.Mask8, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask8x64) AndNot(y Mask8x64) (z Mask8x64) {
	return Mask8x64{spec.AndNot[spec.Mask8, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask8s) AndNot(y Mask8s) (z Mask8s) {
	return Mask8s{spec.AndNot[spec.Mask8, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask16x8) AndNot(y Mask16x8) (z Mask16x8) {
	return Mask16x8{spec.AndNot[spec.Mask16, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask16x16) AndNot(y Mask16x16) (z Mask16x16) {
	return Mask16x16{spec.AndNot[spec.Mask16, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask16x32) AndNot(y Mask16x32) (z Mask16x32) {
	return Mask16x32{spec.AndNot[spec.Mask16, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask16s) AndNot(y Mask16s) (z Mask16s) {
	return Mask16s{spec.AndNot[spec.Mask16, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask32x4) AndNot(y Mask32x4) (z Mask32x4) {
	return Mask32x4{spec.AndNot[spec.Mask32, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask32x8) AndNot(y Mask32x8) (z Mask32x8) {
	return Mask32x8{spec.AndNot[spec.Mask32, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask32x16) AndNot(y Mask32x16) (z Mask32x16) {
	return Mask32x16{spec.AndNot[spec.Mask32, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask32s) AndNot(y Mask32s) (z Mask32s) {
	return Mask32s{spec.AndNot[spec.Mask32, spec.WidthScalable](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask64x2) AndNot(y Mask64x2) (z Mask64x2) {
	return Mask64x2{spec.AndNot[spec.Mask64, spec.Width128](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask64x4) AndNot(y Mask64x4) (z Mask64x4) {
	return Mask64x4{spec.AndNot[spec.Mask64, spec.Width256](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask64x8) AndNot(y Mask64x8) (z Mask64x8) {
	return Mask64x8{spec.AndNot[spec.Mask64, spec.Width512](x.v, y.v)}
}

// AndNot returns the bitwise AND NOT of x and y.
//
//	z[i] = x[i] &^ y[i]
func (x Mask64s) AndNot(y Mask64s) (z Mask64s) {
	return Mask64s{spec.AndNot[spec.Mask64, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int8x16) Or(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Or[int8, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int8x32) Or(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Or[int8, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int8x64) Or(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Or[int8, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int8s) Or(y Int8s) (z Int8s) {
	return Int8s{spec.Or[int8, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int16x8) Or(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Or[int16, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int16x16) Or(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Or[int16, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int16x32) Or(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Or[int16, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int16s) Or(y Int16s) (z Int16s) {
	return Int16s{spec.Or[int16, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int32x4) Or(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Or[int32, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int32x8) Or(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Or[int32, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int32x16) Or(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Or[int32, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int32s) Or(y Int32s) (z Int32s) {
	return Int32s{spec.Or[int32, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int64x2) Or(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Or[int64, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int64x4) Or(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Or[int64, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int64x8) Or(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Or[int64, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Int64s) Or(y Int64s) (z Int64s) {
	return Int64s{spec.Or[int64, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint8x16) Or(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Or[uint8, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint8x32) Or(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Or[uint8, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint8x64) Or(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Or[uint8, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint8s) Or(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Or[uint8, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint16x8) Or(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Or[uint16, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint16x16) Or(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Or[uint16, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint16x32) Or(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Or[uint16, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint16s) Or(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Or[uint16, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint32x4) Or(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Or[uint32, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint32x8) Or(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Or[uint32, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint32x16) Or(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Or[uint32, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint32s) Or(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Or[uint32, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint64x2) Or(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Or[uint64, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint64x4) Or(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Or[uint64, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint64x8) Or(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Or[uint64, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Uint64s) Or(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Or[uint64, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask8x16) Or(y Mask8x16) (z Mask8x16) {
	return Mask8x16{spec.Or[spec.Mask8, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask8x32) Or(y Mask8x32) (z Mask8x32) {
	return Mask8x32{spec.Or[spec.Mask8, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask8x64) Or(y Mask8x64) (z Mask8x64) {
	return Mask8x64{spec.Or[spec.Mask8, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask8s) Or(y Mask8s) (z Mask8s) {
	return Mask8s{spec.Or[spec.Mask8, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask16x8) Or(y Mask16x8) (z Mask16x8) {
	return Mask16x8{spec.Or[spec.Mask16, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask16x16) Or(y Mask16x16) (z Mask16x16) {
	return Mask16x16{spec.Or[spec.Mask16, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask16x32) Or(y Mask16x32) (z Mask16x32) {
	return Mask16x32{spec.Or[spec.Mask16, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask16s) Or(y Mask16s) (z Mask16s) {
	return Mask16s{spec.Or[spec.Mask16, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask32x4) Or(y Mask32x4) (z Mask32x4) {
	return Mask32x4{spec.Or[spec.Mask32, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask32x8) Or(y Mask32x8) (z Mask32x8) {
	return Mask32x8{spec.Or[spec.Mask32, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask32x16) Or(y Mask32x16) (z Mask32x16) {
	return Mask32x16{spec.Or[spec.Mask32, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask32s) Or(y Mask32s) (z Mask32s) {
	return Mask32s{spec.Or[spec.Mask32, spec.WidthScalable](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask64x2) Or(y Mask64x2) (z Mask64x2) {
	return Mask64x2{spec.Or[spec.Mask64, spec.Width128](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask64x4) Or(y Mask64x4) (z Mask64x4) {
	return Mask64x4{spec.Or[spec.Mask64, spec.Width256](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask64x8) Or(y Mask64x8) (z Mask64x8) {
	return Mask64x8{spec.Or[spec.Mask64, spec.Width512](x.v, y.v)}
}

// Or returns the bitwise OR of x and y.
//
//	z[i] = x[i] | y[i]
func (x Mask64s) Or(y Mask64s) (z Mask64s) {
	return Mask64s{spec.Or[spec.Mask64, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int8x16) Xor(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Xor[int8, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int8x32) Xor(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Xor[int8, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int8x64) Xor(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Xor[int8, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int8s) Xor(y Int8s) (z Int8s) {
	return Int8s{spec.Xor[int8, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int16x8) Xor(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Xor[int16, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int16x16) Xor(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Xor[int16, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int16x32) Xor(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Xor[int16, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int16s) Xor(y Int16s) (z Int16s) {
	return Int16s{spec.Xor[int16, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int32x4) Xor(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Xor[int32, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int32x8) Xor(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Xor[int32, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int32x16) Xor(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Xor[int32, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int32s) Xor(y Int32s) (z Int32s) {
	return Int32s{spec.Xor[int32, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int64x2) Xor(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Xor[int64, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int64x4) Xor(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Xor[int64, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int64x8) Xor(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Xor[int64, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Int64s) Xor(y Int64s) (z Int64s) {
	return Int64s{spec.Xor[int64, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint8x16) Xor(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Xor[uint8, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint8x32) Xor(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Xor[uint8, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint8x64) Xor(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Xor[uint8, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint8s) Xor(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Xor[uint8, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint16x8) Xor(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Xor[uint16, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint16x16) Xor(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Xor[uint16, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint16x32) Xor(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Xor[uint16, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint16s) Xor(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Xor[uint16, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint32x4) Xor(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Xor[uint32, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint32x8) Xor(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Xor[uint32, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint32x16) Xor(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Xor[uint32, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint32s) Xor(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Xor[uint32, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint64x2) Xor(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Xor[uint64, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint64x4) Xor(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Xor[uint64, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint64x8) Xor(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Xor[uint64, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Uint64s) Xor(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Xor[uint64, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask8x16) Xor(y Mask8x16) (z Mask8x16) {
	return Mask8x16{spec.Xor[spec.Mask8, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask8x32) Xor(y Mask8x32) (z Mask8x32) {
	return Mask8x32{spec.Xor[spec.Mask8, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask8x64) Xor(y Mask8x64) (z Mask8x64) {
	return Mask8x64{spec.Xor[spec.Mask8, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask8s) Xor(y Mask8s) (z Mask8s) {
	return Mask8s{spec.Xor[spec.Mask8, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask16x8) Xor(y Mask16x8) (z Mask16x8) {
	return Mask16x8{spec.Xor[spec.Mask16, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask16x16) Xor(y Mask16x16) (z Mask16x16) {
	return Mask16x16{spec.Xor[spec.Mask16, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask16x32) Xor(y Mask16x32) (z Mask16x32) {
	return Mask16x32{spec.Xor[spec.Mask16, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask16s) Xor(y Mask16s) (z Mask16s) {
	return Mask16s{spec.Xor[spec.Mask16, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask32x4) Xor(y Mask32x4) (z Mask32x4) {
	return Mask32x4{spec.Xor[spec.Mask32, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask32x8) Xor(y Mask32x8) (z Mask32x8) {
	return Mask32x8{spec.Xor[spec.Mask32, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask32x16) Xor(y Mask32x16) (z Mask32x16) {
	return Mask32x16{spec.Xor[spec.Mask32, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask32s) Xor(y Mask32s) (z Mask32s) {
	return Mask32s{spec.Xor[spec.Mask32, spec.WidthScalable](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask64x2) Xor(y Mask64x2) (z Mask64x2) {
	return Mask64x2{spec.Xor[spec.Mask64, spec.Width128](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask64x4) Xor(y Mask64x4) (z Mask64x4) {
	return Mask64x4{spec.Xor[spec.Mask64, spec.Width256](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask64x8) Xor(y Mask64x8) (z Mask64x8) {
	return Mask64x8{spec.Xor[spec.Mask64, spec.Width512](x.v, y.v)}
}

// Xor returns the bitwise XOR of x and y.
//
//	z[i] = x[i] ^ y[i]
func (x Mask64s) Xor(y Mask64s) (z Mask64s) {
	return Mask64s{spec.Xor[spec.Mask64, spec.WidthScalable](x.v, y.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int8x16) Not() (z Int8x16) {
	return Int8x16{spec.Not[int8, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int8x32) Not() (z Int8x32) {
	return Int8x32{spec.Not[int8, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int8x64) Not() (z Int8x64) {
	return Int8x64{spec.Not[int8, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int8s) Not() (z Int8s) {
	return Int8s{spec.Not[int8, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int16x8) Not() (z Int16x8) {
	return Int16x8{spec.Not[int16, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int16x16) Not() (z Int16x16) {
	return Int16x16{spec.Not[int16, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int16x32) Not() (z Int16x32) {
	return Int16x32{spec.Not[int16, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int16s) Not() (z Int16s) {
	return Int16s{spec.Not[int16, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int32x4) Not() (z Int32x4) {
	return Int32x4{spec.Not[int32, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int32x8) Not() (z Int32x8) {
	return Int32x8{spec.Not[int32, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int32x16) Not() (z Int32x16) {
	return Int32x16{spec.Not[int32, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int32s) Not() (z Int32s) {
	return Int32s{spec.Not[int32, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int64x2) Not() (z Int64x2) {
	return Int64x2{spec.Not[int64, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int64x4) Not() (z Int64x4) {
	return Int64x4{spec.Not[int64, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int64x8) Not() (z Int64x8) {
	return Int64x8{spec.Not[int64, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Int64s) Not() (z Int64s) {
	return Int64s{spec.Not[int64, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint8x16) Not() (z Uint8x16) {
	return Uint8x16{spec.Not[uint8, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint8x32) Not() (z Uint8x32) {
	return Uint8x32{spec.Not[uint8, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint8x64) Not() (z Uint8x64) {
	return Uint8x64{spec.Not[uint8, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint8s) Not() (z Uint8s) {
	return Uint8s{spec.Not[uint8, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint16x8) Not() (z Uint16x8) {
	return Uint16x8{spec.Not[uint16, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint16x16) Not() (z Uint16x16) {
	return Uint16x16{spec.Not[uint16, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint16x32) Not() (z Uint16x32) {
	return Uint16x32{spec.Not[uint16, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint16s) Not() (z Uint16s) {
	return Uint16s{spec.Not[uint16, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint32x4) Not() (z Uint32x4) {
	return Uint32x4{spec.Not[uint32, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint32x8) Not() (z Uint32x8) {
	return Uint32x8{spec.Not[uint32, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint32x16) Not() (z Uint32x16) {
	return Uint32x16{spec.Not[uint32, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint32s) Not() (z Uint32s) {
	return Uint32s{spec.Not[uint32, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint64x2) Not() (z Uint64x2) {
	return Uint64x2{spec.Not[uint64, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint64x4) Not() (z Uint64x4) {
	return Uint64x4{spec.Not[uint64, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint64x8) Not() (z Uint64x8) {
	return Uint64x8{spec.Not[uint64, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Uint64s) Not() (z Uint64s) {
	return Uint64s{spec.Not[uint64, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask8x16) Not() (z Mask8x16) {
	return Mask8x16{spec.Not[spec.Mask8, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask8x32) Not() (z Mask8x32) {
	return Mask8x32{spec.Not[spec.Mask8, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask8x64) Not() (z Mask8x64) {
	return Mask8x64{spec.Not[spec.Mask8, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask8s) Not() (z Mask8s) {
	return Mask8s{spec.Not[spec.Mask8, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask16x8) Not() (z Mask16x8) {
	return Mask16x8{spec.Not[spec.Mask16, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask16x16) Not() (z Mask16x16) {
	return Mask16x16{spec.Not[spec.Mask16, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask16x32) Not() (z Mask16x32) {
	return Mask16x32{spec.Not[spec.Mask16, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask16s) Not() (z Mask16s) {
	return Mask16s{spec.Not[spec.Mask16, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask32x4) Not() (z Mask32x4) {
	return Mask32x4{spec.Not[spec.Mask32, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask32x8) Not() (z Mask32x8) {
	return Mask32x8{spec.Not[spec.Mask32, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask32x16) Not() (z Mask32x16) {
	return Mask32x16{spec.Not[spec.Mask32, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask32s) Not() (z Mask32s) {
	return Mask32s{spec.Not[spec.Mask32, spec.WidthScalable](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask64x2) Not() (z Mask64x2) {
	return Mask64x2{spec.Not[spec.Mask64, spec.Width128](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask64x4) Not() (z Mask64x4) {
	return Mask64x4{spec.Not[spec.Mask64, spec.Width256](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask64x8) Not() (z Mask64x8) {
	return Mask64x8{spec.Not[spec.Mask64, spec.Width512](x.v)}
}

// Not returns the bitwise negation of x.
//
//	z[i] = ^x[i]
func (x Mask64s) Not() (z Mask64s) {
	return Mask64s{spec.Not[spec.Mask64, spec.WidthScalable](x.v)}
}

// Mask8x16FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask8x16FromBits(x uint16) (z Mask8x16) {
	return Mask8x16{spec.MaskFromBits[spec.Mask8, spec.Width128](spec.UintN(x))}
}

// Mask8x32FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask8x32FromBits(x uint32) (z Mask8x32) {
	return Mask8x32{spec.MaskFromBits[spec.Mask8, spec.Width256](spec.UintN(x))}
}

// Mask8x64FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask8x64FromBits(x uint64) (z Mask8x64) {
	return Mask8x64{spec.MaskFromBits[spec.Mask8, spec.Width512](spec.UintN(x))}
}

// Mask16x8FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask16x8FromBits(x uint8) (z Mask16x8) {
	return Mask16x8{spec.MaskFromBits[spec.Mask16, spec.Width128](spec.UintN(x))}
}

// Mask16x16FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask16x16FromBits(x uint16) (z Mask16x16) {
	return Mask16x16{spec.MaskFromBits[spec.Mask16, spec.Width256](spec.UintN(x))}
}

// Mask16x32FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask16x32FromBits(x uint32) (z Mask16x32) {
	return Mask16x32{spec.MaskFromBits[spec.Mask16, spec.Width512](spec.UintN(x))}
}

// Mask32x4FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask32x4FromBits(x uint8) (z Mask32x4) {
	return Mask32x4{spec.MaskFromBits[spec.Mask32, spec.Width128](spec.UintN(x))}
}

// Mask32x8FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask32x8FromBits(x uint8) (z Mask32x8) {
	return Mask32x8{spec.MaskFromBits[spec.Mask32, spec.Width256](spec.UintN(x))}
}

// Mask32x16FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask32x16FromBits(x uint16) (z Mask32x16) {
	return Mask32x16{spec.MaskFromBits[spec.Mask32, spec.Width512](spec.UintN(x))}
}

// Mask64x2FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask64x2FromBits(x uint8) (z Mask64x2) {
	return Mask64x2{spec.MaskFromBits[spec.Mask64, spec.Width128](spec.UintN(x))}
}

// Mask64x4FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask64x4FromBits(x uint8) (z Mask64x4) {
	return Mask64x4{spec.MaskFromBits[spec.Mask64, spec.Width256](spec.UintN(x))}
}

// Mask64x8FromBits returns bitmap x as a mask. If bit i of x is set, then mask
// element i of the result is true.
func Mask64x8FromBits(x uint8) (z Mask64x8) {
	return Mask64x8{spec.MaskFromBits[spec.Mask64, spec.Width512](spec.UintN(x))}
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask8x16) ToBits() (z uint16) {
	return uint16(spec.MaskToBits[spec.Mask8, spec.Width128](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask8x32) ToBits() (z uint32) {
	return uint32(spec.MaskToBits[spec.Mask8, spec.Width256](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask8x64) ToBits() (z uint64) {
	return uint64(spec.MaskToBits[spec.Mask8, spec.Width512](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask16x8) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask16, spec.Width128](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask16x16) ToBits() (z uint16) {
	return uint16(spec.MaskToBits[spec.Mask16, spec.Width256](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask16x32) ToBits() (z uint32) {
	return uint32(spec.MaskToBits[spec.Mask16, spec.Width512](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask32x4) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask32, spec.Width128](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask32x8) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask32, spec.Width256](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask32x16) ToBits() (z uint16) {
	return uint16(spec.MaskToBits[spec.Mask32, spec.Width512](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask64x2) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask64, spec.Width128](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask64x4) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask64, spec.Width256](x.v))
}

// ToBits returns x as a bitmap, where bit i is set if mask element i is
// true.
func (x Mask64x8) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask64, spec.Width512](x.v))
}

// ToInt8x16 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask8x16) ToInt8x16() (z Int8x16) {
	return Int8x16{spec.MaskToZ[spec.Mask8, spec.Width128, int8](x.v)}
}

// ToInt8x32 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask8x32) ToInt8x32() (z Int8x32) {
	return Int8x32{spec.MaskToZ[spec.Mask8, spec.Width256, int8](x.v)}
}

// ToInt8x64 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask8x64) ToInt8x64() (z Int8x64) {
	return Int8x64{spec.MaskToZ[spec.Mask8, spec.Width512, int8](x.v)}
}

// ToInt8s converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask8s) ToInt8s() (z Int8s) {
	return Int8s{spec.MaskToZ[spec.Mask8, spec.WidthScalable, int8](x.v)}
}

// ToInt16x8 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask16x8) ToInt16x8() (z Int16x8) {
	return Int16x8{spec.MaskToZ[spec.Mask16, spec.Width128, int16](x.v)}
}

// ToInt16x16 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask16x16) ToInt16x16() (z Int16x16) {
	return Int16x16{spec.MaskToZ[spec.Mask16, spec.Width256, int16](x.v)}
}

// ToInt16x32 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask16x32) ToInt16x32() (z Int16x32) {
	return Int16x32{spec.MaskToZ[spec.Mask16, spec.Width512, int16](x.v)}
}

// ToInt16s converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask16s) ToInt16s() (z Int16s) {
	return Int16s{spec.MaskToZ[spec.Mask16, spec.WidthScalable, int16](x.v)}
}

// ToInt32x4 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask32x4) ToInt32x4() (z Int32x4) {
	return Int32x4{spec.MaskToZ[spec.Mask32, spec.Width128, int32](x.v)}
}

// ToInt32x8 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask32x8) ToInt32x8() (z Int32x8) {
	return Int32x8{spec.MaskToZ[spec.Mask32, spec.Width256, int32](x.v)}
}

// ToInt32x16 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask32x16) ToInt32x16() (z Int32x16) {
	return Int32x16{spec.MaskToZ[spec.Mask32, spec.Width512, int32](x.v)}
}

// ToInt32s converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask32s) ToInt32s() (z Int32s) {
	return Int32s{spec.MaskToZ[spec.Mask32, spec.WidthScalable, int32](x.v)}
}

// ToInt64x2 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask64x2) ToInt64x2() (z Int64x2) {
	return Int64x2{spec.MaskToZ[spec.Mask64, spec.Width128, int64](x.v)}
}

// ToInt64x4 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask64x4) ToInt64x4() (z Int64x4) {
	return Int64x4{spec.MaskToZ[spec.Mask64, spec.Width256, int64](x.v)}
}

// ToInt64x8 converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask64x8) ToInt64x8() (z Int64x8) {
	return Int64x8{spec.MaskToZ[spec.Mask64, spec.Width512, int64](x.v)}
}

// ToInt64s converts the mask to a vector, where element i is set to ^0 (all bits
// set, e.g., -1) if mask element i is "true", and 0 otherwise.
func (x Mask64s) ToInt64s() (z Int64s) {
	return Int64s{spec.MaskToZ[spec.Mask64, spec.WidthScalable, int64](x.v)}
}

// All returns true when all positions in mask x are true.
func (x Mask8x16) All() bool {
	return spec.All[spec.Mask8, spec.Width128](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask8x32) All() bool {
	return spec.All[spec.Mask8, spec.Width256](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask8x64) All() bool {
	return spec.All[spec.Mask8, spec.Width512](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask8s) All() bool {
	return spec.All[spec.Mask8, spec.WidthScalable](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask16x8) All() bool {
	return spec.All[spec.Mask16, spec.Width128](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask16x16) All() bool {
	return spec.All[spec.Mask16, spec.Width256](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask16x32) All() bool {
	return spec.All[spec.Mask16, spec.Width512](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask16s) All() bool {
	return spec.All[spec.Mask16, spec.WidthScalable](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask32x4) All() bool {
	return spec.All[spec.Mask32, spec.Width128](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask32x8) All() bool {
	return spec.All[spec.Mask32, spec.Width256](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask32x16) All() bool {
	return spec.All[spec.Mask32, spec.Width512](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask32s) All() bool {
	return spec.All[spec.Mask32, spec.WidthScalable](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask64x2) All() bool {
	return spec.All[spec.Mask64, spec.Width128](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask64x4) All() bool {
	return spec.All[spec.Mask64, spec.Width256](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask64x8) All() bool {
	return spec.All[spec.Mask64, spec.Width512](x.v)
}

// All returns true when all positions in mask x are true.
func (x Mask64s) All() bool {
	return spec.All[spec.Mask64, spec.WidthScalable](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask8x16) Any() bool {
	return spec.Any[spec.Mask8, spec.Width128](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask8x32) Any() bool {
	return spec.Any[spec.Mask8, spec.Width256](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask8x64) Any() bool {
	return spec.Any[spec.Mask8, spec.Width512](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask8s) Any() bool {
	return spec.Any[spec.Mask8, spec.WidthScalable](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask16x8) Any() bool {
	return spec.Any[spec.Mask16, spec.Width128](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask16x16) Any() bool {
	return spec.Any[spec.Mask16, spec.Width256](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask16x32) Any() bool {
	return spec.Any[spec.Mask16, spec.Width512](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask16s) Any() bool {
	return spec.Any[spec.Mask16, spec.WidthScalable](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask32x4) Any() bool {
	return spec.Any[spec.Mask32, spec.Width128](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask32x8) Any() bool {
	return spec.Any[spec.Mask32, spec.Width256](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask32x16) Any() bool {
	return spec.Any[spec.Mask32, spec.Width512](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask32s) Any() bool {
	return spec.Any[spec.Mask32, spec.WidthScalable](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask64x2) Any() bool {
	return spec.Any[spec.Mask64, spec.Width128](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask64x4) Any() bool {
	return spec.Any[spec.Mask64, spec.Width256](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask64x8) Any() bool {
	return spec.Any[spec.Mask64, spec.Width512](x.v)
}

// Any returns true when any position in mask x is true.
func (x Mask64s) Any() bool {
	return spec.Any[spec.Mask64, spec.WidthScalable](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask8x16) None() bool {
	return spec.None[spec.Mask8, spec.Width128](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask8x32) None() bool {
	return spec.None[spec.Mask8, spec.Width256](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask8x64) None() bool {
	return spec.None[spec.Mask8, spec.Width512](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask8s) None() bool {
	return spec.None[spec.Mask8, spec.WidthScalable](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask16x8) None() bool {
	return spec.None[spec.Mask16, spec.Width128](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask16x16) None() bool {
	return spec.None[spec.Mask16, spec.Width256](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask16x32) None() bool {
	return spec.None[spec.Mask16, spec.Width512](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask16s) None() bool {
	return spec.None[spec.Mask16, spec.WidthScalable](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask32x4) None() bool {
	return spec.None[spec.Mask32, spec.Width128](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask32x8) None() bool {
	return spec.None[spec.Mask32, spec.Width256](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask32x16) None() bool {
	return spec.None[spec.Mask32, spec.Width512](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask32s) None() bool {
	return spec.None[spec.Mask32, spec.WidthScalable](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask64x2) None() bool {
	return spec.None[spec.Mask64, spec.Width128](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask64x4) None() bool {
	return spec.None[spec.Mask64, spec.Width256](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask64x8) None() bool {
	return spec.None[spec.Mask64, spec.Width512](x.v)
}

// None returns true when no positions in mask x are set.
func (x Mask64s) None() bool {
	return spec.None[spec.Mask64, spec.WidthScalable](x.v)
}

// Abs returns the elementwise absolute value of x.
func (x Float32x4) Abs() (z Float32x4) {
	return Float32x4{spec.AbsFloat[float32, spec.Width128](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Float32x8) Abs() (z Float32x8) {
	return Float32x8{spec.AbsFloat[float32, spec.Width256](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Float32x16) Abs() (z Float32x16) {
	return Float32x16{spec.AbsFloat[float32, spec.Width512](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Float32s) Abs() (z Float32s) {
	return Float32s{spec.AbsFloat[float32, spec.WidthScalable](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Float64x2) Abs() (z Float64x2) {
	return Float64x2{spec.AbsFloat[float64, spec.Width128](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Float64x4) Abs() (z Float64x4) {
	return Float64x4{spec.AbsFloat[float64, spec.Width256](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Float64x8) Abs() (z Float64x8) {
	return Float64x8{spec.AbsFloat[float64, spec.Width512](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Float64s) Abs() (z Float64s) {
	return Float64s{spec.AbsFloat[float64, spec.WidthScalable](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int8x16) Abs() (z Uint8x16) {
	return Uint8x16{spec.AbsInt[int8, spec.Width128, uint8](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int8x32) Abs() (z Uint8x32) {
	return Uint8x32{spec.AbsInt[int8, spec.Width256, uint8](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int8x64) Abs() (z Uint8x64) {
	return Uint8x64{spec.AbsInt[int8, spec.Width512, uint8](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int8s) Abs() (z Uint8s) {
	return Uint8s{spec.AbsInt[int8, spec.WidthScalable, uint8](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int16x8) Abs() (z Uint16x8) {
	return Uint16x8{spec.AbsInt[int16, spec.Width128, uint16](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int16x16) Abs() (z Uint16x16) {
	return Uint16x16{spec.AbsInt[int16, spec.Width256, uint16](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int16x32) Abs() (z Uint16x32) {
	return Uint16x32{spec.AbsInt[int16, spec.Width512, uint16](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int16s) Abs() (z Uint16s) {
	return Uint16s{spec.AbsInt[int16, spec.WidthScalable, uint16](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int32x4) Abs() (z Uint32x4) {
	return Uint32x4{spec.AbsInt[int32, spec.Width128, uint32](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int32x8) Abs() (z Uint32x8) {
	return Uint32x8{spec.AbsInt[int32, spec.Width256, uint32](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int32x16) Abs() (z Uint32x16) {
	return Uint32x16{spec.AbsInt[int32, spec.Width512, uint32](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int32s) Abs() (z Uint32s) {
	return Uint32s{spec.AbsInt[int32, spec.WidthScalable, uint32](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int64x2) Abs() (z Uint64x2) {
	return Uint64x2{spec.AbsInt[int64, spec.Width128, uint64](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int64x4) Abs() (z Uint64x4) {
	return Uint64x4{spec.AbsInt[int64, spec.Width256, uint64](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int64x8) Abs() (z Uint64x8) {
	return Uint64x8{spec.AbsInt[int64, spec.Width512, uint64](x.v)}
}

// Abs returns the elementwise absolute value of x.
func (x Int64s) Abs() (z Uint64s) {
	return Uint64s{spec.AbsInt[int64, spec.WidthScalable, uint64](x.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float32x4) Add(y Float32x4) (z Float32x4) {
	return Float32x4{spec.Add[float32, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float32x8) Add(y Float32x8) (z Float32x8) {
	return Float32x8{spec.Add[float32, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float32x16) Add(y Float32x16) (z Float32x16) {
	return Float32x16{spec.Add[float32, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float32s) Add(y Float32s) (z Float32s) {
	return Float32s{spec.Add[float32, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float64x2) Add(y Float64x2) (z Float64x2) {
	return Float64x2{spec.Add[float64, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float64x4) Add(y Float64x4) (z Float64x4) {
	return Float64x4{spec.Add[float64, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float64x8) Add(y Float64x8) (z Float64x8) {
	return Float64x8{spec.Add[float64, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Float64s) Add(y Float64s) (z Float64s) {
	return Float64s{spec.Add[float64, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int8x16) Add(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Add[int8, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int8x32) Add(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Add[int8, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int8x64) Add(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Add[int8, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int8s) Add(y Int8s) (z Int8s) {
	return Int8s{spec.Add[int8, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int16x8) Add(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Add[int16, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int16x16) Add(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Add[int16, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int16x32) Add(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Add[int16, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int16s) Add(y Int16s) (z Int16s) {
	return Int16s{spec.Add[int16, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int32x4) Add(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Add[int32, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int32x8) Add(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Add[int32, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int32x16) Add(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Add[int32, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int32s) Add(y Int32s) (z Int32s) {
	return Int32s{spec.Add[int32, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int64x2) Add(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Add[int64, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int64x4) Add(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Add[int64, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int64x8) Add(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Add[int64, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Int64s) Add(y Int64s) (z Int64s) {
	return Int64s{spec.Add[int64, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint8x16) Add(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Add[uint8, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint8x32) Add(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Add[uint8, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint8x64) Add(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Add[uint8, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint8s) Add(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Add[uint8, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint16x8) Add(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Add[uint16, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint16x16) Add(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Add[uint16, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint16x32) Add(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Add[uint16, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint16s) Add(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Add[uint16, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint32x4) Add(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Add[uint32, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint32x8) Add(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Add[uint32, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint32x16) Add(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Add[uint32, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint32s) Add(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Add[uint32, spec.WidthScalable](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint64x2) Add(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Add[uint64, spec.Width128](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint64x4) Add(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Add[uint64, spec.Width256](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint64x8) Add(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Add[uint64, spec.Width512](x.v, y.v)}
}

// Add adds x and y elementwise.
//
//	z[i] = x[i] + y[i]
func (x Uint64s) Add(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Add[uint64, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float32x4) Sub(y Float32x4) (z Float32x4) {
	return Float32x4{spec.Sub[float32, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float32x8) Sub(y Float32x8) (z Float32x8) {
	return Float32x8{spec.Sub[float32, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float32x16) Sub(y Float32x16) (z Float32x16) {
	return Float32x16{spec.Sub[float32, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float32s) Sub(y Float32s) (z Float32s) {
	return Float32s{spec.Sub[float32, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float64x2) Sub(y Float64x2) (z Float64x2) {
	return Float64x2{spec.Sub[float64, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float64x4) Sub(y Float64x4) (z Float64x4) {
	return Float64x4{spec.Sub[float64, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float64x8) Sub(y Float64x8) (z Float64x8) {
	return Float64x8{spec.Sub[float64, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Float64s) Sub(y Float64s) (z Float64s) {
	return Float64s{spec.Sub[float64, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int8x16) Sub(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Sub[int8, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int8x32) Sub(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Sub[int8, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int8x64) Sub(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Sub[int8, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int8s) Sub(y Int8s) (z Int8s) {
	return Int8s{spec.Sub[int8, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int16x8) Sub(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Sub[int16, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int16x16) Sub(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Sub[int16, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int16x32) Sub(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Sub[int16, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int16s) Sub(y Int16s) (z Int16s) {
	return Int16s{spec.Sub[int16, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int32x4) Sub(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Sub[int32, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int32x8) Sub(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Sub[int32, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int32x16) Sub(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Sub[int32, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int32s) Sub(y Int32s) (z Int32s) {
	return Int32s{spec.Sub[int32, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int64x2) Sub(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Sub[int64, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int64x4) Sub(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Sub[int64, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int64x8) Sub(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Sub[int64, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Int64s) Sub(y Int64s) (z Int64s) {
	return Int64s{spec.Sub[int64, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint8x16) Sub(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Sub[uint8, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint8x32) Sub(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Sub[uint8, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint8x64) Sub(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Sub[uint8, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint8s) Sub(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Sub[uint8, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint16x8) Sub(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Sub[uint16, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint16x16) Sub(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Sub[uint16, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint16x32) Sub(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Sub[uint16, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint16s) Sub(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Sub[uint16, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint32x4) Sub(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Sub[uint32, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint32x8) Sub(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Sub[uint32, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint32x16) Sub(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Sub[uint32, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint32s) Sub(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Sub[uint32, spec.WidthScalable](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint64x2) Sub(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Sub[uint64, spec.Width128](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint64x4) Sub(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Sub[uint64, spec.Width256](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint64x8) Sub(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Sub[uint64, spec.Width512](x.v, y.v)}
}

// Sub subtracts y from x elementwise.
//
//	z[i] = x[i] - y[i]
func (x Uint64s) Sub(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Sub[uint64, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int8x16) AddSaturated(y Int8x16) (z Int8x16) {
	return Int8x16{spec.AddSaturated[int8, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int8x32) AddSaturated(y Int8x32) (z Int8x32) {
	return Int8x32{spec.AddSaturated[int8, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int8x64) AddSaturated(y Int8x64) (z Int8x64) {
	return Int8x64{spec.AddSaturated[int8, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int8s) AddSaturated(y Int8s) (z Int8s) {
	return Int8s{spec.AddSaturated[int8, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int16x8) AddSaturated(y Int16x8) (z Int16x8) {
	return Int16x8{spec.AddSaturated[int16, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int16x16) AddSaturated(y Int16x16) (z Int16x16) {
	return Int16x16{spec.AddSaturated[int16, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int16x32) AddSaturated(y Int16x32) (z Int16x32) {
	return Int16x32{spec.AddSaturated[int16, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int16s) AddSaturated(y Int16s) (z Int16s) {
	return Int16s{spec.AddSaturated[int16, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int32x4) AddSaturated(y Int32x4) (z Int32x4) {
	return Int32x4{spec.AddSaturated[int32, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int32x8) AddSaturated(y Int32x8) (z Int32x8) {
	return Int32x8{spec.AddSaturated[int32, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int32x16) AddSaturated(y Int32x16) (z Int32x16) {
	return Int32x16{spec.AddSaturated[int32, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int32s) AddSaturated(y Int32s) (z Int32s) {
	return Int32s{spec.AddSaturated[int32, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int64x2) AddSaturated(y Int64x2) (z Int64x2) {
	return Int64x2{spec.AddSaturated[int64, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int64x4) AddSaturated(y Int64x4) (z Int64x4) {
	return Int64x4{spec.AddSaturated[int64, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int64x8) AddSaturated(y Int64x8) (z Int64x8) {
	return Int64x8{spec.AddSaturated[int64, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Int64s) AddSaturated(y Int64s) (z Int64s) {
	return Int64s{spec.AddSaturated[int64, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint8x16) AddSaturated(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.AddSaturated[uint8, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint8x32) AddSaturated(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.AddSaturated[uint8, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint8x64) AddSaturated(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.AddSaturated[uint8, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint8s) AddSaturated(y Uint8s) (z Uint8s) {
	return Uint8s{spec.AddSaturated[uint8, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint16x8) AddSaturated(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.AddSaturated[uint16, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint16x16) AddSaturated(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.AddSaturated[uint16, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint16x32) AddSaturated(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.AddSaturated[uint16, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint16s) AddSaturated(y Uint16s) (z Uint16s) {
	return Uint16s{spec.AddSaturated[uint16, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint32x4) AddSaturated(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.AddSaturated[uint32, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint32x8) AddSaturated(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.AddSaturated[uint32, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint32x16) AddSaturated(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.AddSaturated[uint32, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint32s) AddSaturated(y Uint32s) (z Uint32s) {
	return Uint32s{spec.AddSaturated[uint32, spec.WidthScalable](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint64x2) AddSaturated(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.AddSaturated[uint64, spec.Width128](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint64x4) AddSaturated(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.AddSaturated[uint64, spec.Width256](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint64x8) AddSaturated(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.AddSaturated[uint64, spec.Width512](x.v, y.v)}
}

// AddSaturated adds x and y elementwise with saturation.
//
//	z[i] = sat(x[i] + y[i])
func (x Uint64s) AddSaturated(y Uint64s) (z Uint64s) {
	return Uint64s{spec.AddSaturated[uint64, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int8x16) SubSaturated(y Int8x16) (z Int8x16) {
	return Int8x16{spec.SubSaturated[int8, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int8x32) SubSaturated(y Int8x32) (z Int8x32) {
	return Int8x32{spec.SubSaturated[int8, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int8x64) SubSaturated(y Int8x64) (z Int8x64) {
	return Int8x64{spec.SubSaturated[int8, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int8s) SubSaturated(y Int8s) (z Int8s) {
	return Int8s{spec.SubSaturated[int8, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int16x8) SubSaturated(y Int16x8) (z Int16x8) {
	return Int16x8{spec.SubSaturated[int16, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int16x16) SubSaturated(y Int16x16) (z Int16x16) {
	return Int16x16{spec.SubSaturated[int16, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int16x32) SubSaturated(y Int16x32) (z Int16x32) {
	return Int16x32{spec.SubSaturated[int16, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int16s) SubSaturated(y Int16s) (z Int16s) {
	return Int16s{spec.SubSaturated[int16, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int32x4) SubSaturated(y Int32x4) (z Int32x4) {
	return Int32x4{spec.SubSaturated[int32, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int32x8) SubSaturated(y Int32x8) (z Int32x8) {
	return Int32x8{spec.SubSaturated[int32, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int32x16) SubSaturated(y Int32x16) (z Int32x16) {
	return Int32x16{spec.SubSaturated[int32, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int32s) SubSaturated(y Int32s) (z Int32s) {
	return Int32s{spec.SubSaturated[int32, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int64x2) SubSaturated(y Int64x2) (z Int64x2) {
	return Int64x2{spec.SubSaturated[int64, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int64x4) SubSaturated(y Int64x4) (z Int64x4) {
	return Int64x4{spec.SubSaturated[int64, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int64x8) SubSaturated(y Int64x8) (z Int64x8) {
	return Int64x8{spec.SubSaturated[int64, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Int64s) SubSaturated(y Int64s) (z Int64s) {
	return Int64s{spec.SubSaturated[int64, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint8x16) SubSaturated(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.SubSaturated[uint8, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint8x32) SubSaturated(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.SubSaturated[uint8, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint8x64) SubSaturated(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.SubSaturated[uint8, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint8s) SubSaturated(y Uint8s) (z Uint8s) {
	return Uint8s{spec.SubSaturated[uint8, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint16x8) SubSaturated(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.SubSaturated[uint16, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint16x16) SubSaturated(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.SubSaturated[uint16, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint16x32) SubSaturated(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.SubSaturated[uint16, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint16s) SubSaturated(y Uint16s) (z Uint16s) {
	return Uint16s{spec.SubSaturated[uint16, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint32x4) SubSaturated(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.SubSaturated[uint32, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint32x8) SubSaturated(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.SubSaturated[uint32, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint32x16) SubSaturated(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.SubSaturated[uint32, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint32s) SubSaturated(y Uint32s) (z Uint32s) {
	return Uint32s{spec.SubSaturated[uint32, spec.WidthScalable](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint64x2) SubSaturated(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.SubSaturated[uint64, spec.Width128](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint64x4) SubSaturated(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.SubSaturated[uint64, spec.Width256](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint64x8) SubSaturated(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.SubSaturated[uint64, spec.Width512](x.v, y.v)}
}

// SubSaturated subtracts y from x elementwise with saturation.
//
//	z[i] = sat(x[i] - y[i])
func (x Uint64s) SubSaturated(y Uint64s) (z Uint64s) {
	return Uint64s{spec.SubSaturated[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], y[0]+y[1], y[2]+y[3]}
func (x Float32x4) ConcatAddPairs(y Float32x4) (z Float32x4) {
	return Float32x4{spec.ConcatAddPairs[float32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Float32x8) ConcatAddPairs(y Float32x8) (z Float32x8) {
	return Float32x8{spec.ConcatAddPairs[float32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Float32x16) ConcatAddPairs(y Float32x16) (z Float32x16) {
	return Float32x16{spec.ConcatAddPairs[float32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Float32s) ConcatAddPairs(y Float32s) (z Float32s) {
	return Float32s{spec.ConcatAddPairs[float32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], y[0]+y[1]}
func (x Float64x2) ConcatAddPairs(y Float64x2) (z Float64x2) {
	return Float64x2{spec.ConcatAddPairs[float64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], y[0]+y[1], y[2]+y[3]}
func (x Float64x4) ConcatAddPairs(y Float64x4) (z Float64x4) {
	return Float64x4{spec.ConcatAddPairs[float64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Float64x8) ConcatAddPairs(y Float64x8) (z Float64x8) {
	return Float64x8{spec.ConcatAddPairs[float64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Float64s) ConcatAddPairs(y Float64s) (z Float64s) {
	return Float64s{spec.ConcatAddPairs[float64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int8x16) ConcatAddPairs(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatAddPairs[int8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int8x32) ConcatAddPairs(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatAddPairs[int8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int8x64) ConcatAddPairs(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatAddPairs[int8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int8s) ConcatAddPairs(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatAddPairs[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int16x8) ConcatAddPairs(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatAddPairs[int16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int16x16) ConcatAddPairs(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatAddPairs[int16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int16x32) ConcatAddPairs(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatAddPairs[int16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int16s) ConcatAddPairs(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatAddPairs[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], y[0]+y[1], y[2]+y[3]}
func (x Int32x4) ConcatAddPairs(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatAddPairs[int32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int32x8) ConcatAddPairs(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatAddPairs[int32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int32x16) ConcatAddPairs(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatAddPairs[int32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int32s) ConcatAddPairs(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatAddPairs[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], y[0]+y[1]}
func (x Int64x2) ConcatAddPairs(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatAddPairs[int64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], y[0]+y[1], y[2]+y[3]}
func (x Int64x4) ConcatAddPairs(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatAddPairs[int64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int64x8) ConcatAddPairs(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatAddPairs[int64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Int64s) ConcatAddPairs(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatAddPairs[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint8x16) ConcatAddPairs(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatAddPairs[uint8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint8x32) ConcatAddPairs(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatAddPairs[uint8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint8x64) ConcatAddPairs(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatAddPairs[uint8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint8s) ConcatAddPairs(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatAddPairs[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint16x8) ConcatAddPairs(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatAddPairs[uint16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint16x16) ConcatAddPairs(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatAddPairs[uint16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint16x32) ConcatAddPairs(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatAddPairs[uint16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint16s) ConcatAddPairs(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatAddPairs[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], y[0]+y[1], y[2]+y[3]}
func (x Uint32x4) ConcatAddPairs(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatAddPairs[uint32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint32x8) ConcatAddPairs(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatAddPairs[uint32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint32x16) ConcatAddPairs(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatAddPairs[uint32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint32s) ConcatAddPairs(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatAddPairs[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], y[0]+y[1]}
func (x Uint64x2) ConcatAddPairs(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatAddPairs[uint64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], y[0]+y[1], y[2]+y[3]}
func (x Uint64x4) ConcatAddPairs(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatAddPairs[uint64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint64x8) ConcatAddPairs(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatAddPairs[uint64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairs horizontally adds adjacent pairs of elements in x and y and
// returns the concatenated result.
//
//	z = {x[0]+x[1], x[2]+x[3], ..., y[0]+y[1], y[2]+y[3], ...}
func (x Uint64s) ConcatAddPairs(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatAddPairs[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], y[0]-y[1], y[2]-y[3]}
func (x Float32x4) ConcatSubPairs(y Float32x4) (z Float32x4) {
	return Float32x4{spec.ConcatSubPairs[float32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Float32x8) ConcatSubPairs(y Float32x8) (z Float32x8) {
	return Float32x8{spec.ConcatSubPairs[float32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Float32x16) ConcatSubPairs(y Float32x16) (z Float32x16) {
	return Float32x16{spec.ConcatSubPairs[float32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Float32s) ConcatSubPairs(y Float32s) (z Float32s) {
	return Float32s{spec.ConcatSubPairs[float32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], y[0]-y[1]}
func (x Float64x2) ConcatSubPairs(y Float64x2) (z Float64x2) {
	return Float64x2{spec.ConcatSubPairs[float64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], y[0]-y[1], y[2]-y[3]}
func (x Float64x4) ConcatSubPairs(y Float64x4) (z Float64x4) {
	return Float64x4{spec.ConcatSubPairs[float64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Float64x8) ConcatSubPairs(y Float64x8) (z Float64x8) {
	return Float64x8{spec.ConcatSubPairs[float64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Float64s) ConcatSubPairs(y Float64s) (z Float64s) {
	return Float64s{spec.ConcatSubPairs[float64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8x16) ConcatSubPairs(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatSubPairs[int8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8x32) ConcatSubPairs(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatSubPairs[int8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8x64) ConcatSubPairs(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatSubPairs[int8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8s) ConcatSubPairs(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatSubPairs[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16x8) ConcatSubPairs(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatSubPairs[int16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16x16) ConcatSubPairs(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatSubPairs[int16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16x32) ConcatSubPairs(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatSubPairs[int16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16s) ConcatSubPairs(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatSubPairs[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], y[0]-y[1], y[2]-y[3]}
func (x Int32x4) ConcatSubPairs(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatSubPairs[int32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int32x8) ConcatSubPairs(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatSubPairs[int32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int32x16) ConcatSubPairs(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatSubPairs[int32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int32s) ConcatSubPairs(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatSubPairs[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], y[0]-y[1]}
func (x Int64x2) ConcatSubPairs(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatSubPairs[int64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], y[0]-y[1], y[2]-y[3]}
func (x Int64x4) ConcatSubPairs(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatSubPairs[int64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int64x8) ConcatSubPairs(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatSubPairs[int64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int64s) ConcatSubPairs(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatSubPairs[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8x16) ConcatSubPairs(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatSubPairs[uint8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8x32) ConcatSubPairs(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatSubPairs[uint8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8x64) ConcatSubPairs(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatSubPairs[uint8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8s) ConcatSubPairs(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatSubPairs[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16x8) ConcatSubPairs(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatSubPairs[uint16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16x16) ConcatSubPairs(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatSubPairs[uint16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16x32) ConcatSubPairs(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatSubPairs[uint16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16s) ConcatSubPairs(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatSubPairs[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], y[0]-y[1], y[2]-y[3]}
func (x Uint32x4) ConcatSubPairs(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatSubPairs[uint32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint32x8) ConcatSubPairs(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatSubPairs[uint32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint32x16) ConcatSubPairs(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatSubPairs[uint32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint32s) ConcatSubPairs(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatSubPairs[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], y[0]-y[1]}
func (x Uint64x2) ConcatSubPairs(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatSubPairs[uint64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], y[0]-y[1], y[2]-y[3]}
func (x Uint64x4) ConcatSubPairs(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatSubPairs[uint64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint64x8) ConcatSubPairs(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatSubPairs[uint64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairs horizontally subtracts adjacent pairs of elements in x and y
// and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint64s) ConcatSubPairs(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatSubPairs[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int8x16) ConcatAddPairsSaturated(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatAddPairsSaturated[int8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int8x32) ConcatAddPairsSaturated(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatAddPairsSaturated[int8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int8x64) ConcatAddPairsSaturated(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatAddPairsSaturated[int8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int8s) ConcatAddPairsSaturated(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatAddPairsSaturated[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int16x8) ConcatAddPairsSaturated(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatAddPairsSaturated[int16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int16x16) ConcatAddPairsSaturated(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatAddPairsSaturated[int16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int16x32) ConcatAddPairsSaturated(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatAddPairsSaturated[int16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int16s) ConcatAddPairsSaturated(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatAddPairsSaturated[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), sat(y[0]+y[1]), sat(y[2]+y[3])}
func (x Int32x4) ConcatAddPairsSaturated(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatAddPairsSaturated[int32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int32x8) ConcatAddPairsSaturated(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatAddPairsSaturated[int32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int32x16) ConcatAddPairsSaturated(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatAddPairsSaturated[int32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int32s) ConcatAddPairsSaturated(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatAddPairsSaturated[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(y[0]+y[1])}
func (x Int64x2) ConcatAddPairsSaturated(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatAddPairsSaturated[int64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), sat(y[0]+y[1]), sat(y[2]+y[3])}
func (x Int64x4) ConcatAddPairsSaturated(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatAddPairsSaturated[int64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int64x8) ConcatAddPairsSaturated(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatAddPairsSaturated[int64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Int64s) ConcatAddPairsSaturated(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatAddPairsSaturated[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint8x16) ConcatAddPairsSaturated(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatAddPairsSaturated[uint8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint8x32) ConcatAddPairsSaturated(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatAddPairsSaturated[uint8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint8x64) ConcatAddPairsSaturated(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatAddPairsSaturated[uint8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint8s) ConcatAddPairsSaturated(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatAddPairsSaturated[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint16x8) ConcatAddPairsSaturated(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatAddPairsSaturated[uint16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint16x16) ConcatAddPairsSaturated(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatAddPairsSaturated[uint16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint16x32) ConcatAddPairsSaturated(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatAddPairsSaturated[uint16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint16s) ConcatAddPairsSaturated(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatAddPairsSaturated[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), sat(y[0]+y[1]), sat(y[2]+y[3])}
func (x Uint32x4) ConcatAddPairsSaturated(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatAddPairsSaturated[uint32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint32x8) ConcatAddPairsSaturated(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatAddPairsSaturated[uint32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint32x16) ConcatAddPairsSaturated(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatAddPairsSaturated[uint32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint32s) ConcatAddPairsSaturated(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatAddPairsSaturated[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(y[0]+y[1])}
func (x Uint64x2) ConcatAddPairsSaturated(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatAddPairsSaturated[uint64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), sat(y[0]+y[1]), sat(y[2]+y[3])}
func (x Uint64x4) ConcatAddPairsSaturated(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatAddPairsSaturated[uint64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint64x8) ConcatAddPairsSaturated(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatAddPairsSaturated[uint64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturated horizontally adds adjacent pairs of elements in x and
// y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]+x[1]), sat(x[2]+x[3]), ..., sat(y[0]+y[1]), sat(y[2]+y[3]), ...}
func (x Uint64s) ConcatAddPairsSaturated(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatAddPairsSaturated[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8x16) ConcatSubPairsSaturated(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatSubPairsSaturated[int8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8x32) ConcatSubPairsSaturated(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatSubPairsSaturated[int8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8x64) ConcatSubPairsSaturated(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatSubPairsSaturated[int8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int8s) ConcatSubPairsSaturated(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatSubPairsSaturated[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16x8) ConcatSubPairsSaturated(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatSubPairsSaturated[int16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16x16) ConcatSubPairsSaturated(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatSubPairsSaturated[int16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16x32) ConcatSubPairsSaturated(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatSubPairsSaturated[int16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int16s) ConcatSubPairsSaturated(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatSubPairsSaturated[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]-x[1]), sat(x[2]-x[3]), sat(y[0]-y[1]), sat(y[2]-y[3])}
func (x Int32x4) ConcatSubPairsSaturated(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatSubPairsSaturated[int32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int32x8) ConcatSubPairsSaturated(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatSubPairsSaturated[int32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int32x16) ConcatSubPairsSaturated(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatSubPairsSaturated[int32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int32s) ConcatSubPairsSaturated(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatSubPairsSaturated[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], y[0]-y[1]}
func (x Int64x2) ConcatSubPairsSaturated(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatSubPairsSaturated[int64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]-x[1]), sat(x[2]-x[3]), sat(y[0]-y[1]), sat(y[2]-y[3])}
func (x Int64x4) ConcatSubPairsSaturated(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatSubPairsSaturated[int64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int64x8) ConcatSubPairsSaturated(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatSubPairsSaturated[int64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Int64s) ConcatSubPairsSaturated(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatSubPairsSaturated[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8x16) ConcatSubPairsSaturated(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatSubPairsSaturated[uint8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8x32) ConcatSubPairsSaturated(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatSubPairsSaturated[uint8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8x64) ConcatSubPairsSaturated(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatSubPairsSaturated[uint8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint8s) ConcatSubPairsSaturated(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatSubPairsSaturated[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16x8) ConcatSubPairsSaturated(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatSubPairsSaturated[uint16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16x16) ConcatSubPairsSaturated(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatSubPairsSaturated[uint16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16x32) ConcatSubPairsSaturated(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatSubPairsSaturated[uint16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint16s) ConcatSubPairsSaturated(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatSubPairsSaturated[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]-x[1]), sat(x[2]-x[3]), sat(y[0]-y[1]), sat(y[2]-y[3])}
func (x Uint32x4) ConcatSubPairsSaturated(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatSubPairsSaturated[uint32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint32x8) ConcatSubPairsSaturated(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatSubPairsSaturated[uint32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint32x16) ConcatSubPairsSaturated(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatSubPairsSaturated[uint32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint32s) ConcatSubPairsSaturated(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatSubPairsSaturated[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], y[0]-y[1]}
func (x Uint64x2) ConcatSubPairsSaturated(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatSubPairsSaturated[uint64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {sat(x[0]-x[1]), sat(x[2]-x[3]), sat(y[0]-y[1]), sat(y[2]-y[3])}
func (x Uint64x4) ConcatSubPairsSaturated(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatSubPairsSaturated[uint64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint64x8) ConcatSubPairsSaturated(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatSubPairsSaturated[uint64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturated horizontally subtracts adjacent pairs of elements in
// x and y with saturation and returns the concatenated result.
//
//	z = {x[0]-x[1], x[2]-x[3], ..., y[0]-y[1], y[2]-y[3], ...}
func (x Uint64s) ConcatSubPairsSaturated(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatSubPairsSaturated[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float32x4) ConcatAddPairsGrouped(y Float32x4) (z Float32x4) {
	return Float32x4{spec.ConcatAddPairsGrouped[float32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float32x8) ConcatAddPairsGrouped(y Float32x8) (z Float32x8) {
	return Float32x8{spec.ConcatAddPairsGrouped[float32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float32x16) ConcatAddPairsGrouped(y Float32x16) (z Float32x16) {
	return Float32x16{spec.ConcatAddPairsGrouped[float32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float32s) ConcatAddPairsGrouped(y Float32s) (z Float32s) {
	return Float32s{spec.ConcatAddPairsGrouped[float32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float64x2) ConcatAddPairsGrouped(y Float64x2) (z Float64x2) {
	return Float64x2{spec.ConcatAddPairsGrouped[float64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float64x4) ConcatAddPairsGrouped(y Float64x4) (z Float64x4) {
	return Float64x4{spec.ConcatAddPairsGrouped[float64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float64x8) ConcatAddPairsGrouped(y Float64x8) (z Float64x8) {
	return Float64x8{spec.ConcatAddPairsGrouped[float64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Float64s) ConcatAddPairsGrouped(y Float64s) (z Float64s) {
	return Float64s{spec.ConcatAddPairsGrouped[float64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int8x16) ConcatAddPairsGrouped(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatAddPairsGrouped[int8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int8x32) ConcatAddPairsGrouped(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatAddPairsGrouped[int8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int8x64) ConcatAddPairsGrouped(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatAddPairsGrouped[int8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int8s) ConcatAddPairsGrouped(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatAddPairsGrouped[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int16x8) ConcatAddPairsGrouped(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatAddPairsGrouped[int16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int16x16) ConcatAddPairsGrouped(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatAddPairsGrouped[int16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int16x32) ConcatAddPairsGrouped(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatAddPairsGrouped[int16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int16s) ConcatAddPairsGrouped(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatAddPairsGrouped[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int32x4) ConcatAddPairsGrouped(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatAddPairsGrouped[int32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int32x8) ConcatAddPairsGrouped(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatAddPairsGrouped[int32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int32x16) ConcatAddPairsGrouped(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatAddPairsGrouped[int32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int32s) ConcatAddPairsGrouped(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatAddPairsGrouped[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int64x2) ConcatAddPairsGrouped(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatAddPairsGrouped[int64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int64x4) ConcatAddPairsGrouped(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatAddPairsGrouped[int64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int64x8) ConcatAddPairsGrouped(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatAddPairsGrouped[int64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Int64s) ConcatAddPairsGrouped(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatAddPairsGrouped[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint8x16) ConcatAddPairsGrouped(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatAddPairsGrouped[uint8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint8x32) ConcatAddPairsGrouped(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatAddPairsGrouped[uint8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint8x64) ConcatAddPairsGrouped(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatAddPairsGrouped[uint8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint8s) ConcatAddPairsGrouped(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatAddPairsGrouped[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint16x8) ConcatAddPairsGrouped(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatAddPairsGrouped[uint16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint16x16) ConcatAddPairsGrouped(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatAddPairsGrouped[uint16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint16x32) ConcatAddPairsGrouped(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatAddPairsGrouped[uint16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint16s) ConcatAddPairsGrouped(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatAddPairsGrouped[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint32x4) ConcatAddPairsGrouped(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatAddPairsGrouped[uint32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint32x8) ConcatAddPairsGrouped(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatAddPairsGrouped[uint32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint32x16) ConcatAddPairsGrouped(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatAddPairsGrouped[uint32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint32s) ConcatAddPairsGrouped(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatAddPairsGrouped[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint64x2) ConcatAddPairsGrouped(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatAddPairsGrouped[uint64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint64x4) ConcatAddPairsGrouped(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatAddPairsGrouped[uint64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint64x8) ConcatAddPairsGrouped(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatAddPairsGrouped[uint64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatAddPairs] on each group.
func (x Uint64s) ConcatAddPairsGrouped(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatAddPairsGrouped[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float32x4) ConcatSubPairsGrouped(y Float32x4) (z Float32x4) {
	return Float32x4{spec.ConcatSubPairsGrouped[float32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float32x8) ConcatSubPairsGrouped(y Float32x8) (z Float32x8) {
	return Float32x8{spec.ConcatSubPairsGrouped[float32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float32x16) ConcatSubPairsGrouped(y Float32x16) (z Float32x16) {
	return Float32x16{spec.ConcatSubPairsGrouped[float32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float32s) ConcatSubPairsGrouped(y Float32s) (z Float32s) {
	return Float32s{spec.ConcatSubPairsGrouped[float32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float64x2) ConcatSubPairsGrouped(y Float64x2) (z Float64x2) {
	return Float64x2{spec.ConcatSubPairsGrouped[float64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float64x4) ConcatSubPairsGrouped(y Float64x4) (z Float64x4) {
	return Float64x4{spec.ConcatSubPairsGrouped[float64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float64x8) ConcatSubPairsGrouped(y Float64x8) (z Float64x8) {
	return Float64x8{spec.ConcatSubPairsGrouped[float64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Float64s) ConcatSubPairsGrouped(y Float64s) (z Float64s) {
	return Float64s{spec.ConcatSubPairsGrouped[float64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int8x16) ConcatSubPairsGrouped(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatSubPairsGrouped[int8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int8x32) ConcatSubPairsGrouped(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatSubPairsGrouped[int8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int8x64) ConcatSubPairsGrouped(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatSubPairsGrouped[int8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int8s) ConcatSubPairsGrouped(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatSubPairsGrouped[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int16x8) ConcatSubPairsGrouped(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatSubPairsGrouped[int16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int16x16) ConcatSubPairsGrouped(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatSubPairsGrouped[int16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int16x32) ConcatSubPairsGrouped(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatSubPairsGrouped[int16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int16s) ConcatSubPairsGrouped(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatSubPairsGrouped[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int32x4) ConcatSubPairsGrouped(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatSubPairsGrouped[int32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int32x8) ConcatSubPairsGrouped(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatSubPairsGrouped[int32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int32x16) ConcatSubPairsGrouped(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatSubPairsGrouped[int32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int32s) ConcatSubPairsGrouped(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatSubPairsGrouped[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int64x2) ConcatSubPairsGrouped(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatSubPairsGrouped[int64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int64x4) ConcatSubPairsGrouped(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatSubPairsGrouped[int64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int64x8) ConcatSubPairsGrouped(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatSubPairsGrouped[int64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Int64s) ConcatSubPairsGrouped(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatSubPairsGrouped[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint8x16) ConcatSubPairsGrouped(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatSubPairsGrouped[uint8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint8x32) ConcatSubPairsGrouped(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatSubPairsGrouped[uint8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint8x64) ConcatSubPairsGrouped(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatSubPairsGrouped[uint8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint8s) ConcatSubPairsGrouped(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatSubPairsGrouped[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint16x8) ConcatSubPairsGrouped(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatSubPairsGrouped[uint16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint16x16) ConcatSubPairsGrouped(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatSubPairsGrouped[uint16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint16x32) ConcatSubPairsGrouped(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatSubPairsGrouped[uint16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint16s) ConcatSubPairsGrouped(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatSubPairsGrouped[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint32x4) ConcatSubPairsGrouped(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatSubPairsGrouped[uint32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint32x8) ConcatSubPairsGrouped(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatSubPairsGrouped[uint32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint32x16) ConcatSubPairsGrouped(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatSubPairsGrouped[uint32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint32s) ConcatSubPairsGrouped(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatSubPairsGrouped[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint64x2) ConcatSubPairsGrouped(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatSubPairsGrouped[uint64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint64x4) ConcatSubPairsGrouped(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatSubPairsGrouped[uint64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint64x8) ConcatSubPairsGrouped(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatSubPairsGrouped[uint64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsGrouped divides x, y, and z into groups of 128 bits and
// performs [ConcatSubPairs] on each group.
func (x Uint64s) ConcatSubPairsGrouped(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatSubPairsGrouped[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int8x16) ConcatAddPairsSaturatedGrouped(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatAddPairsSaturatedGrouped[int8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int8x32) ConcatAddPairsSaturatedGrouped(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatAddPairsSaturatedGrouped[int8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int8x64) ConcatAddPairsSaturatedGrouped(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatAddPairsSaturatedGrouped[int8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int8s) ConcatAddPairsSaturatedGrouped(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatAddPairsSaturatedGrouped[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int16x8) ConcatAddPairsSaturatedGrouped(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatAddPairsSaturatedGrouped[int16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int16x16) ConcatAddPairsSaturatedGrouped(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatAddPairsSaturatedGrouped[int16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int16x32) ConcatAddPairsSaturatedGrouped(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatAddPairsSaturatedGrouped[int16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int16s) ConcatAddPairsSaturatedGrouped(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatAddPairsSaturatedGrouped[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int32x4) ConcatAddPairsSaturatedGrouped(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatAddPairsSaturatedGrouped[int32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int32x8) ConcatAddPairsSaturatedGrouped(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatAddPairsSaturatedGrouped[int32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int32x16) ConcatAddPairsSaturatedGrouped(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatAddPairsSaturatedGrouped[int32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int32s) ConcatAddPairsSaturatedGrouped(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatAddPairsSaturatedGrouped[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int64x2) ConcatAddPairsSaturatedGrouped(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatAddPairsSaturatedGrouped[int64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int64x4) ConcatAddPairsSaturatedGrouped(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatAddPairsSaturatedGrouped[int64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int64x8) ConcatAddPairsSaturatedGrouped(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatAddPairsSaturatedGrouped[int64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Int64s) ConcatAddPairsSaturatedGrouped(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatAddPairsSaturatedGrouped[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint8x16) ConcatAddPairsSaturatedGrouped(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatAddPairsSaturatedGrouped[uint8, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint8x32) ConcatAddPairsSaturatedGrouped(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatAddPairsSaturatedGrouped[uint8, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint8x64) ConcatAddPairsSaturatedGrouped(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatAddPairsSaturatedGrouped[uint8, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint8s) ConcatAddPairsSaturatedGrouped(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatAddPairsSaturatedGrouped[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint16x8) ConcatAddPairsSaturatedGrouped(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatAddPairsSaturatedGrouped[uint16, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint16x16) ConcatAddPairsSaturatedGrouped(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatAddPairsSaturatedGrouped[uint16, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint16x32) ConcatAddPairsSaturatedGrouped(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatAddPairsSaturatedGrouped[uint16, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint16s) ConcatAddPairsSaturatedGrouped(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatAddPairsSaturatedGrouped[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint32x4) ConcatAddPairsSaturatedGrouped(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatAddPairsSaturatedGrouped[uint32, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint32x8) ConcatAddPairsSaturatedGrouped(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatAddPairsSaturatedGrouped[uint32, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint32x16) ConcatAddPairsSaturatedGrouped(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatAddPairsSaturatedGrouped[uint32, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint32s) ConcatAddPairsSaturatedGrouped(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatAddPairsSaturatedGrouped[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint64x2) ConcatAddPairsSaturatedGrouped(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatAddPairsSaturatedGrouped[uint64, spec.Width128](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint64x4) ConcatAddPairsSaturatedGrouped(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatAddPairsSaturatedGrouped[uint64, spec.Width256](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint64x8) ConcatAddPairsSaturatedGrouped(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatAddPairsSaturatedGrouped[uint64, spec.Width512](x.v, y.v)}
}

// ConcatAddPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatAddPairsSaturated] on each group.
func (x Uint64s) ConcatAddPairsSaturatedGrouped(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatAddPairsSaturatedGrouped[uint64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int8x16) ConcatSubPairsSaturatedGrouped(y Int8x16) (z Int8x16) {
	return Int8x16{spec.ConcatSubPairsSaturatedGrouped[int8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int8x32) ConcatSubPairsSaturatedGrouped(y Int8x32) (z Int8x32) {
	return Int8x32{spec.ConcatSubPairsSaturatedGrouped[int8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int8x64) ConcatSubPairsSaturatedGrouped(y Int8x64) (z Int8x64) {
	return Int8x64{spec.ConcatSubPairsSaturatedGrouped[int8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int8s) ConcatSubPairsSaturatedGrouped(y Int8s) (z Int8s) {
	return Int8s{spec.ConcatSubPairsSaturatedGrouped[int8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int16x8) ConcatSubPairsSaturatedGrouped(y Int16x8) (z Int16x8) {
	return Int16x8{spec.ConcatSubPairsSaturatedGrouped[int16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int16x16) ConcatSubPairsSaturatedGrouped(y Int16x16) (z Int16x16) {
	return Int16x16{spec.ConcatSubPairsSaturatedGrouped[int16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int16x32) ConcatSubPairsSaturatedGrouped(y Int16x32) (z Int16x32) {
	return Int16x32{spec.ConcatSubPairsSaturatedGrouped[int16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int16s) ConcatSubPairsSaturatedGrouped(y Int16s) (z Int16s) {
	return Int16s{spec.ConcatSubPairsSaturatedGrouped[int16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int32x4) ConcatSubPairsSaturatedGrouped(y Int32x4) (z Int32x4) {
	return Int32x4{spec.ConcatSubPairsSaturatedGrouped[int32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int32x8) ConcatSubPairsSaturatedGrouped(y Int32x8) (z Int32x8) {
	return Int32x8{spec.ConcatSubPairsSaturatedGrouped[int32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int32x16) ConcatSubPairsSaturatedGrouped(y Int32x16) (z Int32x16) {
	return Int32x16{spec.ConcatSubPairsSaturatedGrouped[int32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int32s) ConcatSubPairsSaturatedGrouped(y Int32s) (z Int32s) {
	return Int32s{spec.ConcatSubPairsSaturatedGrouped[int32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int64x2) ConcatSubPairsSaturatedGrouped(y Int64x2) (z Int64x2) {
	return Int64x2{spec.ConcatSubPairsSaturatedGrouped[int64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int64x4) ConcatSubPairsSaturatedGrouped(y Int64x4) (z Int64x4) {
	return Int64x4{spec.ConcatSubPairsSaturatedGrouped[int64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int64x8) ConcatSubPairsSaturatedGrouped(y Int64x8) (z Int64x8) {
	return Int64x8{spec.ConcatSubPairsSaturatedGrouped[int64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Int64s) ConcatSubPairsSaturatedGrouped(y Int64s) (z Int64s) {
	return Int64s{spec.ConcatSubPairsSaturatedGrouped[int64, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint8x16) ConcatSubPairsSaturatedGrouped(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ConcatSubPairsSaturatedGrouped[uint8, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint8x32) ConcatSubPairsSaturatedGrouped(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ConcatSubPairsSaturatedGrouped[uint8, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint8x64) ConcatSubPairsSaturatedGrouped(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ConcatSubPairsSaturatedGrouped[uint8, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint8s) ConcatSubPairsSaturatedGrouped(y Uint8s) (z Uint8s) {
	return Uint8s{spec.ConcatSubPairsSaturatedGrouped[uint8, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint16x8) ConcatSubPairsSaturatedGrouped(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ConcatSubPairsSaturatedGrouped[uint16, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint16x16) ConcatSubPairsSaturatedGrouped(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ConcatSubPairsSaturatedGrouped[uint16, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint16x32) ConcatSubPairsSaturatedGrouped(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ConcatSubPairsSaturatedGrouped[uint16, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint16s) ConcatSubPairsSaturatedGrouped(y Uint16s) (z Uint16s) {
	return Uint16s{spec.ConcatSubPairsSaturatedGrouped[uint16, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint32x4) ConcatSubPairsSaturatedGrouped(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ConcatSubPairsSaturatedGrouped[uint32, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint32x8) ConcatSubPairsSaturatedGrouped(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ConcatSubPairsSaturatedGrouped[uint32, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint32x16) ConcatSubPairsSaturatedGrouped(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ConcatSubPairsSaturatedGrouped[uint32, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint32s) ConcatSubPairsSaturatedGrouped(y Uint32s) (z Uint32s) {
	return Uint32s{spec.ConcatSubPairsSaturatedGrouped[uint32, spec.WidthScalable](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint64x2) ConcatSubPairsSaturatedGrouped(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ConcatSubPairsSaturatedGrouped[uint64, spec.Width128](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint64x4) ConcatSubPairsSaturatedGrouped(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ConcatSubPairsSaturatedGrouped[uint64, spec.Width256](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint64x8) ConcatSubPairsSaturatedGrouped(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ConcatSubPairsSaturatedGrouped[uint64, spec.Width512](x.v, y.v)}
}

// ConcatSubPairsSaturatedGrouped divides x, y, and z into groups of 128 bits
// and performs [ConcatSubPairsSaturated] on each group.
func (x Uint64s) ConcatSubPairsSaturatedGrouped(y Uint64s) (z Uint64s) {
	return Uint64s{spec.ConcatSubPairsSaturatedGrouped[uint64, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int8x16) Average(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Average[int8, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int8x32) Average(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Average[int8, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int8x64) Average(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Average[int8, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int8s) Average(y Int8s) (z Int8s) {
	return Int8s{spec.Average[int8, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int16x8) Average(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Average[int16, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int16x16) Average(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Average[int16, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int16x32) Average(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Average[int16, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int16s) Average(y Int16s) (z Int16s) {
	return Int16s{spec.Average[int16, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int32x4) Average(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Average[int32, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int32x8) Average(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Average[int32, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int32x16) Average(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Average[int32, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int32s) Average(y Int32s) (z Int32s) {
	return Int32s{spec.Average[int32, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int64x2) Average(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Average[int64, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int64x4) Average(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Average[int64, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int64x8) Average(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Average[int64, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Int64s) Average(y Int64s) (z Int64s) {
	return Int64s{spec.Average[int64, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint8x16) Average(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Average[uint8, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint8x32) Average(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Average[uint8, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint8x64) Average(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Average[uint8, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint8s) Average(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Average[uint8, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint16x8) Average(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Average[uint16, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint16x16) Average(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Average[uint16, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint16x32) Average(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Average[uint16, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint16s) Average(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Average[uint16, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint32x4) Average(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Average[uint32, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint32x8) Average(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Average[uint32, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint32x16) Average(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Average[uint32, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint32s) Average(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Average[uint32, spec.WidthScalable](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint64x2) Average(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Average[uint64, spec.Width128](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint64x4) Average(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Average[uint64, spec.Width256](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint64x8) Average(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Average[uint64, spec.Width512](x.v, y.v)}
}

// Average returns the elementwise average of x and y, rounded toward +∞.
//
//	z[i] = (x[i] + y[i] + 1) / 2
func (x Uint64s) Average(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Average[uint64, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float32x4) Div(y Float32x4) (z Float32x4) {
	return Float32x4{spec.Div[float32, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float32x8) Div(y Float32x8) (z Float32x8) {
	return Float32x8{spec.Div[float32, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float32x16) Div(y Float32x16) (z Float32x16) {
	return Float32x16{spec.Div[float32, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float32s) Div(y Float32s) (z Float32s) {
	return Float32s{spec.Div[float32, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float64x2) Div(y Float64x2) (z Float64x2) {
	return Float64x2{spec.Div[float64, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float64x4) Div(y Float64x4) (z Float64x4) {
	return Float64x4{spec.Div[float64, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float64x8) Div(y Float64x8) (z Float64x8) {
	return Float64x8{spec.Div[float64, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// Division by zero does not panic, and the result follows IEEE 754. That is,
// dividing a non-zero value by zero results in +/- infinity, and dividing zero
// by zero results in NaN.
func (x Float64s) Div(y Float64s) (z Float64s) {
	return Float64s{spec.Div[float64, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt8
// by -1 results in MinInt8, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int8x16) Div(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Div[int8, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt8
// by -1 results in MinInt8, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int8x32) Div(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Div[int8, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt8
// by -1 results in MinInt8, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int8x64) Div(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Div[int8, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt8
// by -1 results in MinInt8, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int8s) Div(y Int8s) (z Int8s) {
	return Int8s{spec.Div[int8, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt16
// by -1 results in MinInt16, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int16x8) Div(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Div[int16, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt16
// by -1 results in MinInt16, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int16x16) Div(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Div[int16, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt16
// by -1 results in MinInt16, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int16x32) Div(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Div[int16, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt16
// by -1 results in MinInt16, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int16s) Div(y Int16s) (z Int16s) {
	return Int16s{spec.Div[int16, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt32
// by -1 results in MinInt32, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int32x4) Div(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Div[int32, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt32
// by -1 results in MinInt32, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int32x8) Div(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Div[int32, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt32
// by -1 results in MinInt32, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int32x16) Div(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Div[int32, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt32
// by -1 results in MinInt32, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int32s) Div(y Int32s) (z Int32s) {
	return Int32s{spec.Div[int32, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt64
// by -1 results in MinInt64, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int64x2) Div(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Div[int64, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt64
// by -1 results in MinInt64, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int64x4) Div(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Div[int64, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt64
// by -1 results in MinInt64, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int64x8) Div(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Div[int64, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator. Also like Go's / operator, dividing MinInt64
// by -1 results in MinInt64, since the true result is unrepresentable.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Int64s) Div(y Int64s) (z Int64s) {
	return Int64s{spec.Div[int64, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint8x16) Div(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Div[uint8, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint8x32) Div(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Div[uint8, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint8x64) Div(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Div[uint8, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint8s) Div(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Div[uint8, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint16x8) Div(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Div[uint16, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint16x16) Div(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Div[uint16, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint16x32) Div(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Div[uint16, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint16s) Div(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Div[uint16, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint32x4) Div(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Div[uint32, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint32x8) Div(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Div[uint32, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint32x16) Div(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Div[uint32, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint32s) Div(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Div[uint32, spec.WidthScalable](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint64x2) Div(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Div[uint64, spec.Width128](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint64x4) Div(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Div[uint64, spec.Width256](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint64x8) Div(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Div[uint64, spec.Width512](x.v, y.v)}
}

// Div divides x by y elementwise.
//
//	z[i] = x[i] / y[i]
//
// The result is rounded toward zero (truncated division), just like Go's /
// operator.
// Unlike Go's / operator, division by zero does not panic and instead produces
// a zero result for that element.
func (x Uint64s) Div(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Div[uint64, spec.WidthScalable](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Float32x4) DotProductPairs(y Float32x4) (z Float64x2) {
	return Float64x2{spec.DotProductPairs[float32, spec.Width128, float64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Float32x8) DotProductPairs(y Float32x8) (z Float64x4) {
	return Float64x4{spec.DotProductPairs[float32, spec.Width256, float64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Float32x16) DotProductPairs(y Float32x16) (z Float64x8) {
	return Float64x8{spec.DotProductPairs[float32, spec.Width512, float64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Float32s) DotProductPairs(y Float32s) (z Float64s) {
	return Float64s{spec.DotProductPairs[float32, spec.WidthScalable, float64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int8x16) DotProductPairs(y Int8x16) (z Int16x8) {
	return Int16x8{spec.DotProductPairs[int8, spec.Width128, int16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int8x32) DotProductPairs(y Int8x32) (z Int16x16) {
	return Int16x16{spec.DotProductPairs[int8, spec.Width256, int16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int8x64) DotProductPairs(y Int8x64) (z Int16x32) {
	return Int16x32{spec.DotProductPairs[int8, spec.Width512, int16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int8s) DotProductPairs(y Int8s) (z Int16s) {
	return Int16s{spec.DotProductPairs[int8, spec.WidthScalable, int16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int16x8) DotProductPairs(y Int16x8) (z Int32x4) {
	return Int32x4{spec.DotProductPairs[int16, spec.Width128, int32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int16x16) DotProductPairs(y Int16x16) (z Int32x8) {
	return Int32x8{spec.DotProductPairs[int16, spec.Width256, int32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int16x32) DotProductPairs(y Int16x32) (z Int32x16) {
	return Int32x16{spec.DotProductPairs[int16, spec.Width512, int32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int16s) DotProductPairs(y Int16s) (z Int32s) {
	return Int32s{spec.DotProductPairs[int16, spec.WidthScalable, int32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int32x4) DotProductPairs(y Int32x4) (z Int64x2) {
	return Int64x2{spec.DotProductPairs[int32, spec.Width128, int64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int32x8) DotProductPairs(y Int32x8) (z Int64x4) {
	return Int64x4{spec.DotProductPairs[int32, spec.Width256, int64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int32x16) DotProductPairs(y Int32x16) (z Int64x8) {
	return Int64x8{spec.DotProductPairs[int32, spec.Width512, int64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Int32s) DotProductPairs(y Int32s) (z Int64s) {
	return Int64s{spec.DotProductPairs[int32, spec.WidthScalable, int64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint8x16) DotProductPairs(y Uint8x16) (z Uint16x8) {
	return Uint16x8{spec.DotProductPairs[uint8, spec.Width128, uint16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint8x32) DotProductPairs(y Uint8x32) (z Uint16x16) {
	return Uint16x16{spec.DotProductPairs[uint8, spec.Width256, uint16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint8x64) DotProductPairs(y Uint8x64) (z Uint16x32) {
	return Uint16x32{spec.DotProductPairs[uint8, spec.Width512, uint16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint8s) DotProductPairs(y Uint8s) (z Uint16s) {
	return Uint16s{spec.DotProductPairs[uint8, spec.WidthScalable, uint16](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint16x8) DotProductPairs(y Uint16x8) (z Uint32x4) {
	return Uint32x4{spec.DotProductPairs[uint16, spec.Width128, uint32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint16x16) DotProductPairs(y Uint16x16) (z Uint32x8) {
	return Uint32x8{spec.DotProductPairs[uint16, spec.Width256, uint32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint16x32) DotProductPairs(y Uint16x32) (z Uint32x16) {
	return Uint32x16{spec.DotProductPairs[uint16, spec.Width512, uint32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint16s) DotProductPairs(y Uint16s) (z Uint32s) {
	return Uint32s{spec.DotProductPairs[uint16, spec.WidthScalable, uint32](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint32x4) DotProductPairs(y Uint32x4) (z Uint64x2) {
	return Uint64x2{spec.DotProductPairs[uint32, spec.Width128, uint64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint32x8) DotProductPairs(y Uint32x8) (z Uint64x4) {
	return Uint64x4{spec.DotProductPairs[uint32, spec.Width256, uint64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint32x16) DotProductPairs(y Uint32x16) (z Uint64x8) {
	return Uint64x8{spec.DotProductPairs[uint32, spec.Width512, uint64](x.v, y.v)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, returning a vector of half as many elements, each with twice
// the input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[j] = w[2*j] + w[2*j+1]
func (x Uint32s) DotProductPairs(y Uint32s) (z Uint64s) {
	return Uint64s{spec.DotProductPairs[uint32, spec.WidthScalable, uint64](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint8x16) DotProductPairsSaturated(y Int8x16) (z Int16x8) {
	return Int16x8{spec.DotProductPairsSaturated[uint8, spec.Width128, int8, int16](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint8x32) DotProductPairsSaturated(y Int8x32) (z Int16x16) {
	return Int16x16{spec.DotProductPairsSaturated[uint8, spec.Width256, int8, int16](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint8x64) DotProductPairsSaturated(y Int8x64) (z Int16x32) {
	return Int16x32{spec.DotProductPairsSaturated[uint8, spec.Width512, int8, int16](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint8s) DotProductPairsSaturated(y Int8s) (z Int16s) {
	return Int16s{spec.DotProductPairsSaturated[uint8, spec.WidthScalable, int8, int16](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint16x8) DotProductPairsSaturated(y Int16x8) (z Int32x4) {
	return Int32x4{spec.DotProductPairsSaturated[uint16, spec.Width128, int16, int32](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint16x16) DotProductPairsSaturated(y Int16x16) (z Int32x8) {
	return Int32x8{spec.DotProductPairsSaturated[uint16, spec.Width256, int16, int32](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint16x32) DotProductPairsSaturated(y Int16x32) (z Int32x16) {
	return Int32x16{spec.DotProductPairsSaturated[uint16, spec.Width512, int16, int32](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint16s) DotProductPairsSaturated(y Int16s) (z Int32s) {
	return Int32s{spec.DotProductPairsSaturated[uint16, spec.WidthScalable, int16, int32](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint32x4) DotProductPairsSaturated(y Int32x4) (z Int64x2) {
	return Int64x2{spec.DotProductPairsSaturated[uint32, spec.Width128, int32, int64](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint32x8) DotProductPairsSaturated(y Int32x8) (z Int64x4) {
	return Int64x4{spec.DotProductPairsSaturated[uint32, spec.Width256, int32, int64](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint32x16) DotProductPairsSaturated(y Int32x16) (z Int64x8) {
	return Int64x8{spec.DotProductPairsSaturated[uint32, spec.Width512, int32, int64](x.v, y.v)}
}

// DotProductPairsSaturated multiplies corresponding elements of x and y, and
// sums adjacent pairs, all with saturation. It returns a vector of half as many
// elements, each with twice the input element size.
//
//	w[i] = sat(x[i] * y[i])        // Double width
//	z[j] = sat(w[2*j] + w[2*j+1])
func (x Uint32s) DotProductPairsSaturated(y Int32s) (z Int64s) {
	return Int64s{spec.DotProductPairsSaturated[uint32, spec.WidthScalable, int32, int64](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float32x4) Max(y Float32x4) (z Float32x4) {
	return Float32x4{spec.Max[float32, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float32x8) Max(y Float32x8) (z Float32x8) {
	return Float32x8{spec.Max[float32, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float32x16) Max(y Float32x16) (z Float32x16) {
	return Float32x16{spec.Max[float32, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float32s) Max(y Float32s) (z Float32s) {
	return Float32s{spec.Max[float32, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float64x2) Max(y Float64x2) (z Float64x2) {
	return Float64x2{spec.Max[float64, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float64x4) Max(y Float64x4) (z Float64x4) {
	return Float64x4{spec.Max[float64, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float64x8) Max(y Float64x8) (z Float64x8) {
	return Float64x8{spec.Max[float64, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Float64s) Max(y Float64s) (z Float64s) {
	return Float64s{spec.Max[float64, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int8x16) Max(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Max[int8, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int8x32) Max(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Max[int8, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int8x64) Max(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Max[int8, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int8s) Max(y Int8s) (z Int8s) {
	return Int8s{spec.Max[int8, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int16x8) Max(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Max[int16, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int16x16) Max(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Max[int16, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int16x32) Max(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Max[int16, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int16s) Max(y Int16s) (z Int16s) {
	return Int16s{spec.Max[int16, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int32x4) Max(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Max[int32, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int32x8) Max(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Max[int32, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int32x16) Max(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Max[int32, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int32s) Max(y Int32s) (z Int32s) {
	return Int32s{spec.Max[int32, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int64x2) Max(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Max[int64, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int64x4) Max(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Max[int64, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int64x8) Max(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Max[int64, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Int64s) Max(y Int64s) (z Int64s) {
	return Int64s{spec.Max[int64, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint8x16) Max(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Max[uint8, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint8x32) Max(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Max[uint8, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint8x64) Max(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Max[uint8, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint8s) Max(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Max[uint8, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint16x8) Max(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Max[uint16, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint16x16) Max(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Max[uint16, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint16x32) Max(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Max[uint16, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint16s) Max(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Max[uint16, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint32x4) Max(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Max[uint32, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint32x8) Max(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Max[uint32, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint32x16) Max(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Max[uint32, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint32s) Max(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Max[uint32, spec.WidthScalable](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint64x2) Max(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Max[uint64, spec.Width128](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint64x4) Max(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Max[uint64, spec.Width256](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint64x8) Max(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Max[uint64, spec.Width512](x.v, y.v)}
}

// Max returns the elementwise maximum of x and y.
//
//	z[i] = max(x[i], y[i])
func (x Uint64s) Max(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Max[uint64, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float32x4) Min(y Float32x4) (z Float32x4) {
	return Float32x4{spec.Min[float32, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float32x8) Min(y Float32x8) (z Float32x8) {
	return Float32x8{spec.Min[float32, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float32x16) Min(y Float32x16) (z Float32x16) {
	return Float32x16{spec.Min[float32, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float32s) Min(y Float32s) (z Float32s) {
	return Float32s{spec.Min[float32, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float64x2) Min(y Float64x2) (z Float64x2) {
	return Float64x2{spec.Min[float64, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float64x4) Min(y Float64x4) (z Float64x4) {
	return Float64x4{spec.Min[float64, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float64x8) Min(y Float64x8) (z Float64x8) {
	return Float64x8{spec.Min[float64, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Float64s) Min(y Float64s) (z Float64s) {
	return Float64s{spec.Min[float64, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int8x16) Min(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Min[int8, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int8x32) Min(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Min[int8, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int8x64) Min(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Min[int8, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int8s) Min(y Int8s) (z Int8s) {
	return Int8s{spec.Min[int8, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int16x8) Min(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Min[int16, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int16x16) Min(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Min[int16, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int16x32) Min(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Min[int16, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int16s) Min(y Int16s) (z Int16s) {
	return Int16s{spec.Min[int16, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int32x4) Min(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Min[int32, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int32x8) Min(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Min[int32, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int32x16) Min(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Min[int32, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int32s) Min(y Int32s) (z Int32s) {
	return Int32s{spec.Min[int32, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int64x2) Min(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Min[int64, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int64x4) Min(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Min[int64, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int64x8) Min(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Min[int64, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Int64s) Min(y Int64s) (z Int64s) {
	return Int64s{spec.Min[int64, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint8x16) Min(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Min[uint8, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint8x32) Min(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Min[uint8, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint8x64) Min(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Min[uint8, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint8s) Min(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Min[uint8, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint16x8) Min(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Min[uint16, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint16x16) Min(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Min[uint16, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint16x32) Min(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Min[uint16, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint16s) Min(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Min[uint16, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint32x4) Min(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Min[uint32, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint32x8) Min(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Min[uint32, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint32x16) Min(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Min[uint32, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint32s) Min(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Min[uint32, spec.WidthScalable](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint64x2) Min(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Min[uint64, spec.Width128](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint64x4) Min(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Min[uint64, spec.Width256](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint64x8) Min(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Min[uint64, spec.Width512](x.v, y.v)}
}

// Min returns the elementwise minimum of x and y.
//
//	z[i] = min(x[i], y[i])
func (x Uint64s) Min(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Min[uint64, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float32x4) Mul(y Float32x4) (z Float32x4) {
	return Float32x4{spec.Mul[float32, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float32x8) Mul(y Float32x8) (z Float32x8) {
	return Float32x8{spec.Mul[float32, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float32x16) Mul(y Float32x16) (z Float32x16) {
	return Float32x16{spec.Mul[float32, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float32s) Mul(y Float32s) (z Float32s) {
	return Float32s{spec.Mul[float32, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float64x2) Mul(y Float64x2) (z Float64x2) {
	return Float64x2{spec.Mul[float64, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float64x4) Mul(y Float64x4) (z Float64x4) {
	return Float64x4{spec.Mul[float64, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float64x8) Mul(y Float64x8) (z Float64x8) {
	return Float64x8{spec.Mul[float64, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Float64s) Mul(y Float64s) (z Float64s) {
	return Float64s{spec.Mul[float64, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int8x16) Mul(y Int8x16) (z Int8x16) {
	return Int8x16{spec.Mul[int8, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int8x32) Mul(y Int8x32) (z Int8x32) {
	return Int8x32{spec.Mul[int8, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int8x64) Mul(y Int8x64) (z Int8x64) {
	return Int8x64{spec.Mul[int8, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int8s) Mul(y Int8s) (z Int8s) {
	return Int8s{spec.Mul[int8, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int16x8) Mul(y Int16x8) (z Int16x8) {
	return Int16x8{spec.Mul[int16, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int16x16) Mul(y Int16x16) (z Int16x16) {
	return Int16x16{spec.Mul[int16, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int16x32) Mul(y Int16x32) (z Int16x32) {
	return Int16x32{spec.Mul[int16, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int16s) Mul(y Int16s) (z Int16s) {
	return Int16s{spec.Mul[int16, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int32x4) Mul(y Int32x4) (z Int32x4) {
	return Int32x4{spec.Mul[int32, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int32x8) Mul(y Int32x8) (z Int32x8) {
	return Int32x8{spec.Mul[int32, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int32x16) Mul(y Int32x16) (z Int32x16) {
	return Int32x16{spec.Mul[int32, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int32s) Mul(y Int32s) (z Int32s) {
	return Int32s{spec.Mul[int32, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int64x2) Mul(y Int64x2) (z Int64x2) {
	return Int64x2{spec.Mul[int64, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int64x4) Mul(y Int64x4) (z Int64x4) {
	return Int64x4{spec.Mul[int64, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int64x8) Mul(y Int64x8) (z Int64x8) {
	return Int64x8{spec.Mul[int64, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Int64s) Mul(y Int64s) (z Int64s) {
	return Int64s{spec.Mul[int64, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint8x16) Mul(y Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Mul[uint8, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint8x32) Mul(y Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Mul[uint8, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint8x64) Mul(y Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Mul[uint8, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint8s) Mul(y Uint8s) (z Uint8s) {
	return Uint8s{spec.Mul[uint8, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint16x8) Mul(y Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Mul[uint16, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint16x16) Mul(y Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Mul[uint16, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint16x32) Mul(y Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Mul[uint16, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint16s) Mul(y Uint16s) (z Uint16s) {
	return Uint16s{spec.Mul[uint16, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint32x4) Mul(y Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Mul[uint32, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint32x8) Mul(y Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Mul[uint32, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint32x16) Mul(y Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Mul[uint32, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint32s) Mul(y Uint32s) (z Uint32s) {
	return Uint32s{spec.Mul[uint32, spec.WidthScalable](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint64x2) Mul(y Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Mul[uint64, spec.Width128](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint64x4) Mul(y Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Mul[uint64, spec.Width256](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint64x8) Mul(y Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Mul[uint64, spec.Width512](x.v, y.v)}
}

// Mul returns the elementwise product of x and y.
//
//	z[i] = x[i] * y[i]
func (x Uint64s) Mul(y Uint64s) (z Uint64s) {
	return Uint64s{spec.Mul[uint64, spec.WidthScalable](x.v, y.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float32x4) MulAdd(y Float32x4, z Float32x4) (w Float32x4) {
	return Float32x4{spec.MulAdd[float32, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float32x8) MulAdd(y Float32x8, z Float32x8) (w Float32x8) {
	return Float32x8{spec.MulAdd[float32, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float32x16) MulAdd(y Float32x16, z Float32x16) (w Float32x16) {
	return Float32x16{spec.MulAdd[float32, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float32s) MulAdd(y Float32s, z Float32s) (w Float32s) {
	return Float32s{spec.MulAdd[float32, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float64x2) MulAdd(y Float64x2, z Float64x2) (w Float64x2) {
	return Float64x2{spec.MulAdd[float64, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float64x4) MulAdd(y Float64x4, z Float64x4) (w Float64x4) {
	return Float64x4{spec.MulAdd[float64, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float64x8) MulAdd(y Float64x8, z Float64x8) (w Float64x8) {
	return Float64x8{spec.MulAdd[float64, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Float64s) MulAdd(y Float64s, z Float64s) (w Float64s) {
	return Float64s{spec.MulAdd[float64, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int8x16) MulAdd(y Int8x16, z Int8x16) (w Int8x16) {
	return Int8x16{spec.MulAdd[int8, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int8x32) MulAdd(y Int8x32, z Int8x32) (w Int8x32) {
	return Int8x32{spec.MulAdd[int8, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int8x64) MulAdd(y Int8x64, z Int8x64) (w Int8x64) {
	return Int8x64{spec.MulAdd[int8, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int8s) MulAdd(y Int8s, z Int8s) (w Int8s) {
	return Int8s{spec.MulAdd[int8, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int16x8) MulAdd(y Int16x8, z Int16x8) (w Int16x8) {
	return Int16x8{spec.MulAdd[int16, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int16x16) MulAdd(y Int16x16, z Int16x16) (w Int16x16) {
	return Int16x16{spec.MulAdd[int16, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int16x32) MulAdd(y Int16x32, z Int16x32) (w Int16x32) {
	return Int16x32{spec.MulAdd[int16, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int16s) MulAdd(y Int16s, z Int16s) (w Int16s) {
	return Int16s{spec.MulAdd[int16, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int32x4) MulAdd(y Int32x4, z Int32x4) (w Int32x4) {
	return Int32x4{spec.MulAdd[int32, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int32x8) MulAdd(y Int32x8, z Int32x8) (w Int32x8) {
	return Int32x8{spec.MulAdd[int32, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int32x16) MulAdd(y Int32x16, z Int32x16) (w Int32x16) {
	return Int32x16{spec.MulAdd[int32, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int32s) MulAdd(y Int32s, z Int32s) (w Int32s) {
	return Int32s{spec.MulAdd[int32, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int64x2) MulAdd(y Int64x2, z Int64x2) (w Int64x2) {
	return Int64x2{spec.MulAdd[int64, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int64x4) MulAdd(y Int64x4, z Int64x4) (w Int64x4) {
	return Int64x4{spec.MulAdd[int64, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int64x8) MulAdd(y Int64x8, z Int64x8) (w Int64x8) {
	return Int64x8{spec.MulAdd[int64, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Int64s) MulAdd(y Int64s, z Int64s) (w Int64s) {
	return Int64s{spec.MulAdd[int64, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint8x16) MulAdd(y Uint8x16, z Uint8x16) (w Uint8x16) {
	return Uint8x16{spec.MulAdd[uint8, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint8x32) MulAdd(y Uint8x32, z Uint8x32) (w Uint8x32) {
	return Uint8x32{spec.MulAdd[uint8, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint8x64) MulAdd(y Uint8x64, z Uint8x64) (w Uint8x64) {
	return Uint8x64{spec.MulAdd[uint8, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint8s) MulAdd(y Uint8s, z Uint8s) (w Uint8s) {
	return Uint8s{spec.MulAdd[uint8, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint16x8) MulAdd(y Uint16x8, z Uint16x8) (w Uint16x8) {
	return Uint16x8{spec.MulAdd[uint16, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint16x16) MulAdd(y Uint16x16, z Uint16x16) (w Uint16x16) {
	return Uint16x16{spec.MulAdd[uint16, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint16x32) MulAdd(y Uint16x32, z Uint16x32) (w Uint16x32) {
	return Uint16x32{spec.MulAdd[uint16, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint16s) MulAdd(y Uint16s, z Uint16s) (w Uint16s) {
	return Uint16s{spec.MulAdd[uint16, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint32x4) MulAdd(y Uint32x4, z Uint32x4) (w Uint32x4) {
	return Uint32x4{spec.MulAdd[uint32, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint32x8) MulAdd(y Uint32x8, z Uint32x8) (w Uint32x8) {
	return Uint32x8{spec.MulAdd[uint32, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint32x16) MulAdd(y Uint32x16, z Uint32x16) (w Uint32x16) {
	return Uint32x16{spec.MulAdd[uint32, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint32s) MulAdd(y Uint32s, z Uint32s) (w Uint32s) {
	return Uint32s{spec.MulAdd[uint32, spec.WidthScalable](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint64x2) MulAdd(y Uint64x2, z Uint64x2) (w Uint64x2) {
	return Uint64x2{spec.MulAdd[uint64, spec.Width128](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint64x4) MulAdd(y Uint64x4, z Uint64x4) (w Uint64x4) {
	return Uint64x4{spec.MulAdd[uint64, spec.Width256](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint64x8) MulAdd(y Uint64x8, z Uint64x8) (w Uint64x8) {
	return Uint64x8{spec.MulAdd[uint64, spec.Width512](x.v, y.v, z.v)}
}

// MulAdd returns x * y + z elementwise.
//
//	w[i] = x[i] * y[i] + z[i]
func (x Uint64s) MulAdd(y Uint64s, z Uint64s) (w Uint64s) {
	return Uint64s{spec.MulAdd[uint64, spec.WidthScalable](x.v, y.v, z.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int8x16) Neg() (z Int8x16) {
	return Int8x16{spec.Neg[int8, spec.Width128](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int8x32) Neg() (z Int8x32) {
	return Int8x32{spec.Neg[int8, spec.Width256](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int8x64) Neg() (z Int8x64) {
	return Int8x64{spec.Neg[int8, spec.Width512](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int8s) Neg() (z Int8s) {
	return Int8s{spec.Neg[int8, spec.WidthScalable](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int16x8) Neg() (z Int16x8) {
	return Int16x8{spec.Neg[int16, spec.Width128](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int16x16) Neg() (z Int16x16) {
	return Int16x16{spec.Neg[int16, spec.Width256](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int16x32) Neg() (z Int16x32) {
	return Int16x32{spec.Neg[int16, spec.Width512](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int16s) Neg() (z Int16s) {
	return Int16s{spec.Neg[int16, spec.WidthScalable](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int32x4) Neg() (z Int32x4) {
	return Int32x4{spec.Neg[int32, spec.Width128](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int32x8) Neg() (z Int32x8) {
	return Int32x8{spec.Neg[int32, spec.Width256](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int32x16) Neg() (z Int32x16) {
	return Int32x16{spec.Neg[int32, spec.Width512](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int32s) Neg() (z Int32s) {
	return Int32s{spec.Neg[int32, spec.WidthScalable](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int64x2) Neg() (z Int64x2) {
	return Int64x2{spec.Neg[int64, spec.Width128](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int64x4) Neg() (z Int64x4) {
	return Int64x4{spec.Neg[int64, spec.Width256](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int64x8) Neg() (z Int64x8) {
	return Int64x8{spec.Neg[int64, spec.Width512](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Int64s) Neg() (z Int64s) {
	return Int64s{spec.Neg[int64, spec.WidthScalable](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float32x4) Neg() (z Float32x4) {
	return Float32x4{spec.Neg[float32, spec.Width128](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float32x8) Neg() (z Float32x8) {
	return Float32x8{spec.Neg[float32, spec.Width256](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float32x16) Neg() (z Float32x16) {
	return Float32x16{spec.Neg[float32, spec.Width512](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float32s) Neg() (z Float32s) {
	return Float32s{spec.Neg[float32, spec.WidthScalable](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float64x2) Neg() (z Float64x2) {
	return Float64x2{spec.Neg[float64, spec.Width128](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float64x4) Neg() (z Float64x4) {
	return Float64x4{spec.Neg[float64, spec.Width256](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float64x8) Neg() (z Float64x8) {
	return Float64x8{spec.Neg[float64, spec.Width512](x.v)}
}

// Neg returns the elementwise negation of x.
//
//	z[i] = -x[i]
func (x Float64s) Neg() (z Float64s) {
	return Float64s{spec.Neg[float64, spec.WidthScalable](x.v)}
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float32x4) ReduceSum() (z float32) {
	return spec.ReduceSum[float32, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float32x8) ReduceSum() (z float32) {
	return spec.ReduceSum[float32, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float32x16) ReduceSum() (z float32) {
	return spec.ReduceSum[float32, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float32s) ReduceSum() (z float32) {
	return spec.ReduceSum[float32, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float64x2) ReduceSum() (z float64) {
	return spec.ReduceSum[float64, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float64x4) ReduceSum() (z float64) {
	return spec.ReduceSum[float64, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float64x8) ReduceSum() (z float64) {
	return spec.ReduceSum[float64, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Float64s) ReduceSum() (z float64) {
	return spec.ReduceSum[float64, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int8x16) ReduceSum() (z int8) {
	return spec.ReduceSum[int8, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int8x32) ReduceSum() (z int8) {
	return spec.ReduceSum[int8, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int8x64) ReduceSum() (z int8) {
	return spec.ReduceSum[int8, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int8s) ReduceSum() (z int8) {
	return spec.ReduceSum[int8, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int16x8) ReduceSum() (z int16) {
	return spec.ReduceSum[int16, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int16x16) ReduceSum() (z int16) {
	return spec.ReduceSum[int16, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int16x32) ReduceSum() (z int16) {
	return spec.ReduceSum[int16, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int16s) ReduceSum() (z int16) {
	return spec.ReduceSum[int16, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int32x4) ReduceSum() (z int32) {
	return spec.ReduceSum[int32, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int32x8) ReduceSum() (z int32) {
	return spec.ReduceSum[int32, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int32x16) ReduceSum() (z int32) {
	return spec.ReduceSum[int32, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int32s) ReduceSum() (z int32) {
	return spec.ReduceSum[int32, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int64x2) ReduceSum() (z int64) {
	return spec.ReduceSum[int64, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int64x4) ReduceSum() (z int64) {
	return spec.ReduceSum[int64, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int64x8) ReduceSum() (z int64) {
	return spec.ReduceSum[int64, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Int64s) ReduceSum() (z int64) {
	return spec.ReduceSum[int64, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint8x16) ReduceSum() (z uint8) {
	return spec.ReduceSum[uint8, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint8x32) ReduceSum() (z uint8) {
	return spec.ReduceSum[uint8, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint8x64) ReduceSum() (z uint8) {
	return spec.ReduceSum[uint8, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint8s) ReduceSum() (z uint8) {
	return spec.ReduceSum[uint8, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint16x8) ReduceSum() (z uint16) {
	return spec.ReduceSum[uint16, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint16x16) ReduceSum() (z uint16) {
	return spec.ReduceSum[uint16, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint16x32) ReduceSum() (z uint16) {
	return spec.ReduceSum[uint16, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint16s) ReduceSum() (z uint16) {
	return spec.ReduceSum[uint16, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint32x4) ReduceSum() (z uint32) {
	return spec.ReduceSum[uint32, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint32x8) ReduceSum() (z uint32) {
	return spec.ReduceSum[uint32, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint32x16) ReduceSum() (z uint32) {
	return spec.ReduceSum[uint32, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint32s) ReduceSum() (z uint32) {
	return spec.ReduceSum[uint32, spec.WidthScalable](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint64x2) ReduceSum() (z uint64) {
	return spec.ReduceSum[uint64, spec.Width128](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint64x4) ReduceSum() (z uint64) {
	return spec.ReduceSum[uint64, spec.Width256](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint64x8) ReduceSum() (z uint64) {
	return spec.ReduceSum[uint64, spec.Width512](x.v)
}

// ReduceSum returns the scalar sum of the elements of x.
//
//	z = x[0] + x[1] + ...
func (x Uint64s) ReduceSum() (z uint64) {
	return spec.ReduceSum[uint64, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float32x4) ReduceMax() (z float32) {
	return spec.ReduceMax[float32, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float32x8) ReduceMax() (z float32) {
	return spec.ReduceMax[float32, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float32x16) ReduceMax() (z float32) {
	return spec.ReduceMax[float32, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float32s) ReduceMax() (z float32) {
	return spec.ReduceMax[float32, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float64x2) ReduceMax() (z float64) {
	return spec.ReduceMax[float64, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float64x4) ReduceMax() (z float64) {
	return spec.ReduceMax[float64, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float64x8) ReduceMax() (z float64) {
	return spec.ReduceMax[float64, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Float64s) ReduceMax() (z float64) {
	return spec.ReduceMax[float64, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int8x16) ReduceMax() (z int8) {
	return spec.ReduceMax[int8, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int8x32) ReduceMax() (z int8) {
	return spec.ReduceMax[int8, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int8x64) ReduceMax() (z int8) {
	return spec.ReduceMax[int8, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int8s) ReduceMax() (z int8) {
	return spec.ReduceMax[int8, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int16x8) ReduceMax() (z int16) {
	return spec.ReduceMax[int16, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int16x16) ReduceMax() (z int16) {
	return spec.ReduceMax[int16, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int16x32) ReduceMax() (z int16) {
	return spec.ReduceMax[int16, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int16s) ReduceMax() (z int16) {
	return spec.ReduceMax[int16, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int32x4) ReduceMax() (z int32) {
	return spec.ReduceMax[int32, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int32x8) ReduceMax() (z int32) {
	return spec.ReduceMax[int32, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int32x16) ReduceMax() (z int32) {
	return spec.ReduceMax[int32, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int32s) ReduceMax() (z int32) {
	return spec.ReduceMax[int32, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int64x2) ReduceMax() (z int64) {
	return spec.ReduceMax[int64, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int64x4) ReduceMax() (z int64) {
	return spec.ReduceMax[int64, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int64x8) ReduceMax() (z int64) {
	return spec.ReduceMax[int64, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Int64s) ReduceMax() (z int64) {
	return spec.ReduceMax[int64, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint8x16) ReduceMax() (z uint8) {
	return spec.ReduceMax[uint8, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint8x32) ReduceMax() (z uint8) {
	return spec.ReduceMax[uint8, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint8x64) ReduceMax() (z uint8) {
	return spec.ReduceMax[uint8, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint8s) ReduceMax() (z uint8) {
	return spec.ReduceMax[uint8, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint16x8) ReduceMax() (z uint16) {
	return spec.ReduceMax[uint16, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint16x16) ReduceMax() (z uint16) {
	return spec.ReduceMax[uint16, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint16x32) ReduceMax() (z uint16) {
	return spec.ReduceMax[uint16, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint16s) ReduceMax() (z uint16) {
	return spec.ReduceMax[uint16, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint32x4) ReduceMax() (z uint32) {
	return spec.ReduceMax[uint32, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint32x8) ReduceMax() (z uint32) {
	return spec.ReduceMax[uint32, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint32x16) ReduceMax() (z uint32) {
	return spec.ReduceMax[uint32, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint32s) ReduceMax() (z uint32) {
	return spec.ReduceMax[uint32, spec.WidthScalable](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint64x2) ReduceMax() (z uint64) {
	return spec.ReduceMax[uint64, spec.Width128](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint64x4) ReduceMax() (z uint64) {
	return spec.ReduceMax[uint64, spec.Width256](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint64x8) ReduceMax() (z uint64) {
	return spec.ReduceMax[uint64, spec.Width512](x.v)
}

// ReduceMax returns the largest element of x.
//
//	z = max(x[0], x[1], ...)
func (x Uint64s) ReduceMax() (z uint64) {
	return spec.ReduceMax[uint64, spec.WidthScalable](x.v)
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float32x4) Sqrt() (z Float32x4) {
	return Float32x4{spec.Sqrt[float32, spec.Width128](x.v)}
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float32x8) Sqrt() (z Float32x8) {
	return Float32x8{spec.Sqrt[float32, spec.Width256](x.v)}
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float32x16) Sqrt() (z Float32x16) {
	return Float32x16{spec.Sqrt[float32, spec.Width512](x.v)}
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float32s) Sqrt() (z Float32s) {
	return Float32s{spec.Sqrt[float32, spec.WidthScalable](x.v)}
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float64x2) Sqrt() (z Float64x2) {
	return Float64x2{spec.Sqrt[float64, spec.Width128](x.v)}
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float64x4) Sqrt() (z Float64x4) {
	return Float64x4{spec.Sqrt[float64, spec.Width256](x.v)}
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float64x8) Sqrt() (z Float64x8) {
	return Float64x8{spec.Sqrt[float64, spec.Width512](x.v)}
}

// Sqrt returns the elementwise square root of x.
//
//	z[i] = sqrt(x[i])
func (x Float64s) Sqrt() (z Float64s) {
	return Float64s{spec.Sqrt[float64, spec.WidthScalable](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint8.
func (x Int8x16) ToBits() (z Uint8x16) {
	return Uint8x16{spec.ToBits[int8, spec.Width128, uint8](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint8.
func (x Int8x32) ToBits() (z Uint8x32) {
	return Uint8x32{spec.ToBits[int8, spec.Width256, uint8](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint8.
func (x Int8x64) ToBits() (z Uint8x64) {
	return Uint8x64{spec.ToBits[int8, spec.Width512, uint8](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint8.
func (x Int8s) ToBits() (z Uint8s) {
	return Uint8s{spec.ToBits[int8, spec.WidthScalable, uint8](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint16.
func (x Int16x8) ToBits() (z Uint16x8) {
	return Uint16x8{spec.ToBits[int16, spec.Width128, uint16](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint16.
func (x Int16x16) ToBits() (z Uint16x16) {
	return Uint16x16{spec.ToBits[int16, spec.Width256, uint16](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint16.
func (x Int16x32) ToBits() (z Uint16x32) {
	return Uint16x32{spec.ToBits[int16, spec.Width512, uint16](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint16.
func (x Int16s) ToBits() (z Uint16s) {
	return Uint16s{spec.ToBits[int16, spec.WidthScalable, uint16](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint32.
func (x Int32x4) ToBits() (z Uint32x4) {
	return Uint32x4{spec.ToBits[int32, spec.Width128, uint32](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint32.
func (x Int32x8) ToBits() (z Uint32x8) {
	return Uint32x8{spec.ToBits[int32, spec.Width256, uint32](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint32.
func (x Int32x16) ToBits() (z Uint32x16) {
	return Uint32x16{spec.ToBits[int32, spec.Width512, uint32](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint32.
func (x Int32s) ToBits() (z Uint32s) {
	return Uint32s{spec.ToBits[int32, spec.WidthScalable, uint32](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint64.
func (x Int64x2) ToBits() (z Uint64x2) {
	return Uint64x2{spec.ToBits[int64, spec.Width128, uint64](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint64.
func (x Int64x4) ToBits() (z Uint64x4) {
	return Uint64x4{spec.ToBits[int64, spec.Width256, uint64](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint64.
func (x Int64x8) ToBits() (z Uint64x8) {
	return Uint64x8{spec.ToBits[int64, spec.Width512, uint64](x.v)}
}

// ToBits reinterprets the bits of each element of x as type uint64.
func (x Int64s) ToBits() (z Uint64s) {
	return Uint64s{spec.ToBits[int64, spec.WidthScalable, uint64](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float32x4) ToBits() (z Uint32x4) {
	return Uint32x4{spec.ToBitsFloat[float32, spec.Width128, uint32](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float32x8) ToBits() (z Uint32x8) {
	return Uint32x8{spec.ToBitsFloat[float32, spec.Width256, uint32](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float32x16) ToBits() (z Uint32x16) {
	return Uint32x16{spec.ToBitsFloat[float32, spec.Width512, uint32](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float32s) ToBits() (z Uint32s) {
	return Uint32s{spec.ToBitsFloat[float32, spec.WidthScalable, uint32](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float64x2) ToBits() (z Uint64x2) {
	return Uint64x2{spec.ToBitsFloat[float64, spec.Width128, uint64](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float64x4) ToBits() (z Uint64x4) {
	return Uint64x4{spec.ToBitsFloat[float64, spec.Width256, uint64](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float64x8) ToBits() (z Uint64x8) {
	return Uint64x8{spec.ToBitsFloat[float64, spec.Width512, uint64](x.v)}
}

// ToBits returns the IEEE 754 binary representation of each element of x.
func (x Float64s) ToBits() (z Uint64s) {
	return Uint64s{spec.ToBitsFloat[float64, spec.WidthScalable, uint64](x.v)}
}

// BitsToInt8 reinterprets the bits of each element of x as type int8.
func (x Uint8x16) BitsToInt8() (z Int8x16) {
	return Int8x16{spec.BitsTo[uint8, spec.Width128, int8](x.v)}
}

// BitsToInt8 reinterprets the bits of each element of x as type int8.
func (x Uint8x32) BitsToInt8() (z Int8x32) {
	return Int8x32{spec.BitsTo[uint8, spec.Width256, int8](x.v)}
}

// BitsToInt8 reinterprets the bits of each element of x as type int8.
func (x Uint8x64) BitsToInt8() (z Int8x64) {
	return Int8x64{spec.BitsTo[uint8, spec.Width512, int8](x.v)}
}

// BitsToInt8 reinterprets the bits of each element of x as type int8.
func (x Uint8s) BitsToInt8() (z Int8s) {
	return Int8s{spec.BitsTo[uint8, spec.WidthScalable, int8](x.v)}
}

// BitsToInt16 reinterprets the bits of each element of x as type int16.
func (x Uint16x8) BitsToInt16() (z Int16x8) {
	return Int16x8{spec.BitsTo[uint16, spec.Width128, int16](x.v)}
}

// BitsToInt16 reinterprets the bits of each element of x as type int16.
func (x Uint16x16) BitsToInt16() (z Int16x16) {
	return Int16x16{spec.BitsTo[uint16, spec.Width256, int16](x.v)}
}

// BitsToInt16 reinterprets the bits of each element of x as type int16.
func (x Uint16x32) BitsToInt16() (z Int16x32) {
	return Int16x32{spec.BitsTo[uint16, spec.Width512, int16](x.v)}
}

// BitsToInt16 reinterprets the bits of each element of x as type int16.
func (x Uint16s) BitsToInt16() (z Int16s) {
	return Int16s{spec.BitsTo[uint16, spec.WidthScalable, int16](x.v)}
}

// BitsToInt32 reinterprets the bits of each element of x as type int32.
func (x Uint32x4) BitsToInt32() (z Int32x4) {
	return Int32x4{spec.BitsTo[uint32, spec.Width128, int32](x.v)}
}

// BitsToInt32 reinterprets the bits of each element of x as type int32.
func (x Uint32x8) BitsToInt32() (z Int32x8) {
	return Int32x8{spec.BitsTo[uint32, spec.Width256, int32](x.v)}
}

// BitsToInt32 reinterprets the bits of each element of x as type int32.
func (x Uint32x16) BitsToInt32() (z Int32x16) {
	return Int32x16{spec.BitsTo[uint32, spec.Width512, int32](x.v)}
}

// BitsToInt32 reinterprets the bits of each element of x as type int32.
func (x Uint32s) BitsToInt32() (z Int32s) {
	return Int32s{spec.BitsTo[uint32, spec.WidthScalable, int32](x.v)}
}

// BitsToInt64 reinterprets the bits of each element of x as type int64.
func (x Uint64x2) BitsToInt64() (z Int64x2) {
	return Int64x2{spec.BitsTo[uint64, spec.Width128, int64](x.v)}
}

// BitsToInt64 reinterprets the bits of each element of x as type int64.
func (x Uint64x4) BitsToInt64() (z Int64x4) {
	return Int64x4{spec.BitsTo[uint64, spec.Width256, int64](x.v)}
}

// BitsToInt64 reinterprets the bits of each element of x as type int64.
func (x Uint64x8) BitsToInt64() (z Int64x8) {
	return Int64x8{spec.BitsTo[uint64, spec.Width512, int64](x.v)}
}

// BitsToInt64 reinterprets the bits of each element of x as type int64.
func (x Uint64s) BitsToInt64() (z Int64s) {
	return Int64s{spec.BitsTo[uint64, spec.WidthScalable, int64](x.v)}
}

// BitsToFloat32 reinterprets the bits of each element of x as type float32.
func (x Uint32x4) BitsToFloat32() (z Float32x4) {
	return Float32x4{spec.BitsToFloat[uint32, spec.Width128, float32](x.v)}
}

// BitsToFloat32 reinterprets the bits of each element of x as type float32.
func (x Uint32x8) BitsToFloat32() (z Float32x8) {
	return Float32x8{spec.BitsToFloat[uint32, spec.Width256, float32](x.v)}
}

// BitsToFloat32 reinterprets the bits of each element of x as type float32.
func (x Uint32x16) BitsToFloat32() (z Float32x16) {
	return Float32x16{spec.BitsToFloat[uint32, spec.Width512, float32](x.v)}
}

// BitsToFloat32 reinterprets the bits of each element of x as type float32.
func (x Uint32s) BitsToFloat32() (z Float32s) {
	return Float32s{spec.BitsToFloat[uint32, spec.WidthScalable, float32](x.v)}
}

// BitsToFloat64 reinterprets the bits of each element of x as type float64.
func (x Uint64x2) BitsToFloat64() (z Float64x2) {
	return Float64x2{spec.BitsToFloat[uint64, spec.Width128, float64](x.v)}
}

// BitsToFloat64 reinterprets the bits of each element of x as type float64.
func (x Uint64x4) BitsToFloat64() (z Float64x4) {
	return Float64x4{spec.BitsToFloat[uint64, spec.Width256, float64](x.v)}
}

// BitsToFloat64 reinterprets the bits of each element of x as type float64.
func (x Uint64x8) BitsToFloat64() (z Float64x8) {
	return Float64x8{spec.BitsToFloat[uint64, spec.Width512, float64](x.v)}
}

// BitsToFloat64 reinterprets the bits of each element of x as type float64.
func (x Uint64s) BitsToFloat64() (z Float64s) {
	return Float64s{spec.BitsToFloat[uint64, spec.WidthScalable, float64](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[15]     x[14]    ⋯     x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	| 15     ....     0 | ⋯ | 15     ....     0 |
//	         z[7]         ⋯          z[0]
func (x Uint8x16) ReshapeToUint16s() (z Uint16x8) {
	return Uint16x8{spec.ReshapeToUints[uint8, spec.Width128, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x4 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[15]     x[14]     x[13]     x[12]    ⋯     x[3]      x[2]      x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	| 31               ....               0 | ⋯ | 31               ....               0 |
//	                   z[3]                   ⋯                    z[0]
func (x Uint8x16) ReshapeToUint32s() (z Uint32x4) {
	return Uint32x4{spec.ReshapeToUints[uint8, spec.Width128, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x2 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[15]     x[14]    ⋯     x[9]      x[8]      x[7]      x[6]    ⋯     x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	| 63                 ....                 0 | 63                 ....                 0 |
//	                     z[1]                                        z[0]
func (x Uint8x16) ReshapeToUint64s() (z Uint64x2) {
	return Uint64x2{spec.ReshapeToUints[uint8, spec.Width128, uint64](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[31]     x[30]    ⋯     x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	| 15     ....     0 | ⋯ | 15     ....     0 |
//	        z[15]         ⋯          z[0]
func (x Uint8x32) ReshapeToUint16s() (z Uint16x16) {
	return Uint16x16{spec.ReshapeToUints[uint8, spec.Width256, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[31]     x[30]     x[29]     x[28]    ⋯     x[3]      x[2]      x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	| 31               ....               0 | ⋯ | 31               ....               0 |
//	                   z[7]                   ⋯                    z[0]
func (x Uint8x32) ReshapeToUint32s() (z Uint32x8) {
	return Uint32x8{spec.ReshapeToUints[uint8, spec.Width256, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x4 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[31]     x[30]    ⋯    x[25]     x[24]    ⋯     x[7]      x[6]    ⋯     x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	| 63                 ....                 0 | ⋯ | 63                 ....                 0 |
//	                     z[3]                     ⋯                      z[0]
func (x Uint8x32) ReshapeToUint64s() (z Uint64x4) {
	return Uint64x4{spec.ReshapeToUints[uint8, spec.Width256, uint64](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x32 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[63]     x[62]    ⋯     x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	| 15     ....     0 | ⋯ | 15     ....     0 |
//	        z[31]         ⋯          z[0]
func (x Uint8x64) ReshapeToUint16s() (z Uint16x32) {
	return Uint16x32{spec.ReshapeToUints[uint8, spec.Width512, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[63]     x[62]     x[61]     x[60]    ⋯     x[3]      x[2]      x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	| 31               ....               0 | ⋯ | 31               ....               0 |
//	                  z[15]                   ⋯                    z[0]
func (x Uint8x64) ReshapeToUint32s() (z Uint32x16) {
	return Uint32x16{spec.ReshapeToUints[uint8, spec.Width512, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[63]     x[62]    ⋯    x[57]     x[56]    ⋯     x[7]      x[6]    ⋯     x[1]      x[0]
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	| 63                 ....                 0 | ⋯ | 63                 ....                 0 |
//	                     z[7]                     ⋯                      z[0]
func (x Uint8x64) ReshapeToUint64s() (z Uint64x8) {
	return Uint64x8{spec.ReshapeToUints[uint8, spec.Width512, uint64](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯     x[3]      x[2]      x[1]      x[0]
//	⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	⋯ | 15     ....     0 | 15     ....     0 |
//	⋯          z[1]                z[0]
func (x Uint8s) ReshapeToUint16s() (z Uint16s) {
	return Uint16s{spec.ReshapeToUints[uint8, spec.WidthScalable, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯     x[7]      x[6]      x[5]      x[4]      x[3]      x[2]      x[1]      x[0]
//	⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	⋯ | 31               ....               0 | 31               ....               0 |
//	⋯                    z[1]                                    z[0]
func (x Uint8s) ReshapeToUint32s() (z Uint32s) {
	return Uint32s{spec.ReshapeToUints[uint8, spec.WidthScalable, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯    x[15]     x[14]    ⋯     x[9]      x[8]      x[7]      x[6]    ⋯     x[1]      x[0]
//	⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	⋯ | 63                 ....                 0 | 63                 ....                 0 |
//	⋯                      z[1]                                        z[0]
func (x Uint8s) ReshapeToUint64s() (z Uint64s) {
	return Uint64s{spec.ReshapeToUints[uint8, spec.WidthScalable, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	         x[7]         ⋯          x[0]
//	| 15     ....     0 | ⋯ | 15     ....     0 |
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	   z[15]     z[14]    ⋯     z[1]      z[0]
func (x Uint16x8) ReshapeToUint8s() (z Uint8x16) {
	return Uint8x16{spec.ReshapeToUints[uint16, spec.Width128, uint8](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x4 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	    x[7]      x[6]    ⋯     x[1]      x[0]
//	| 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 |
//	| 31     ....     0 | ⋯ | 31     ....     0 |
//	         z[3]         ⋯          z[0]
func (x Uint16x8) ReshapeToUint32s() (z Uint32x4) {
	return Uint32x4{spec.ReshapeToUints[uint16, spec.Width128, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x2 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	    x[7]      x[6]      x[5]      x[4]      x[3]      x[2]      x[1]      x[0]
//	| 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	| 63               ....               0 | 63               ....               0 |
//	                   z[1]                                    z[0]
func (x Uint16x8) ReshapeToUint64s() (z Uint64x2) {
	return Uint64x2{spec.ReshapeToUints[uint16, spec.Width128, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x32 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	        x[15]         ⋯          x[0]
//	| 15     ....     0 | ⋯ | 15     ....     0 |
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	   z[31]     z[30]    ⋯     z[1]      z[0]
func (x Uint16x16) ReshapeToUint8s() (z Uint8x32) {
	return Uint8x32{spec.ReshapeToUints[uint16, spec.Width256, uint8](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[15]     x[14]    ⋯     x[1]      x[0]
//	| 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 |
//	| 31     ....     0 | ⋯ | 31     ....     0 |
//	         z[7]         ⋯          z[0]
func (x Uint16x16) ReshapeToUint32s() (z Uint32x8) {
	return Uint32x8{spec.ReshapeToUints[uint16, spec.Width256, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x4 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[15]     x[14]     x[13]     x[12]    ⋯     x[3]      x[2]      x[1]      x[0]
//	| 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	| 63               ....               0 | ⋯ | 63               ....               0 |
//	                   z[3]                   ⋯                    z[0]
func (x Uint16x16) ReshapeToUint64s() (z Uint64x4) {
	return Uint64x4{spec.ReshapeToUints[uint16, spec.Width256, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x64 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	        x[31]         ⋯          x[0]
//	| 15     ....     0 | ⋯ | 15     ....     0 |
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	   z[63]     z[62]    ⋯     z[1]      z[0]
func (x Uint16x32) ReshapeToUint8s() (z Uint8x64) {
	return Uint8x64{spec.ReshapeToUints[uint16, spec.Width512, uint8](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[31]     x[30]    ⋯     x[1]      x[0]
//	| 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 |
//	| 31     ....     0 | ⋯ | 31     ....     0 |
//	        z[15]         ⋯          z[0]
func (x Uint16x32) ReshapeToUint32s() (z Uint32x16) {
	return Uint32x16{spec.ReshapeToUints[uint16, spec.Width512, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[31]     x[30]     x[29]     x[28]    ⋯     x[3]      x[2]      x[1]      x[0]
//	| 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	| 63               ....               0 | ⋯ | 63               ....               0 |
//	                   z[7]                   ⋯                    z[0]
func (x Uint16x32) ReshapeToUint64s() (z Uint64x8) {
	return Uint64x8{spec.ReshapeToUints[uint16, spec.Width512, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯          x[1]                x[0]
//	⋯ | 15     ....     0 | 15     ....     0 |
//	⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint16s) ReshapeToUint8s() (z Uint8s) {
	return Uint8s{spec.ReshapeToUints[uint16, spec.WidthScalable, uint8](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯     x[3]      x[2]      x[1]      x[0]
//	⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	⋯ | 31     ....     0 | 31     ....     0 |
//	⋯          z[1]                z[0]
func (x Uint16s) ReshapeToUint32s() (z Uint32s) {
	return Uint32s{spec.ReshapeToUints[uint16, spec.WidthScalable, uint32](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯     x[7]      x[6]      x[5]      x[4]      x[3]      x[2]      x[1]      x[0]
//	⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	⋯ | 63               ....               0 | 63               ....               0 |
//	⋯                    z[1]                                    z[0]
func (x Uint16s) ReshapeToUint64s() (z Uint64s) {
	return Uint64s{spec.ReshapeToUints[uint16, spec.WidthScalable, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                   x[3]                   ⋯                    x[0]
//	| 31               ....               0 | ⋯ | 31               ....               0 |
//	| 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	   z[15]     z[14]     z[13]     z[12]    ⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint32x4) ReshapeToUint8s() (z Uint8x16) {
	return Uint8x16{spec.ReshapeToUints[uint32, spec.Width128, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	         x[3]         ⋯          x[0]
//	| 31     ....     0 | ⋯ | 31     ....     0 |
//	| 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 |
//	    z[7]      z[6]    ⋯     z[1]      z[0]
func (x Uint32x4) ReshapeToUint16s() (z Uint16x8) {
	return Uint16x8{spec.ReshapeToUints[uint32, spec.Width128, uint16](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x2 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	    x[3]      x[2]      x[1]      x[0]
//	| 31 .. 0 | 31 .. 0 | 31 .. 0 | 31 .. 0 |
//	| 63     ....     0 | 63     ....     0 |
//	         z[1]                z[0]
func (x Uint32x4) ReshapeToUint64s() (z Uint64x2) {
	return Uint64x2{spec.ReshapeToUints[uint32, spec.Width128, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x32 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                   x[7]                   ⋯                    x[0]
//	| 31               ....               0 | ⋯ | 31               ....               0 |
//	| 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	   z[31]     z[30]     z[29]     z[28]    ⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint32x8) ReshapeToUint8s() (z Uint8x32) {
	return Uint8x32{spec.ReshapeToUints[uint32, spec.Width256, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	         x[7]         ⋯          x[0]
//	| 31     ....     0 | ⋯ | 31     ....     0 |
//	| 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 |
//	   z[15]     z[14]    ⋯     z[1]      z[0]
func (x Uint32x8) ReshapeToUint16s() (z Uint16x16) {
	return Uint16x16{spec.ReshapeToUints[uint32, spec.Width256, uint16](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x4 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	    x[7]      x[6]    ⋯     x[1]      x[0]
//	| 31 .. 0 | 31 .. 0 | ⋯ | 31 .. 0 | 31 .. 0 |
//	| 63     ....     0 | ⋯ | 63     ....     0 |
//	         z[3]         ⋯          z[0]
func (x Uint32x8) ReshapeToUint64s() (z Uint64x4) {
	return Uint64x4{spec.ReshapeToUints[uint32, spec.Width256, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x64 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                  x[15]                   ⋯                    x[0]
//	| 31               ....               0 | ⋯ | 31               ....               0 |
//	| 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	   z[63]     z[62]     z[61]     z[60]    ⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint32x16) ReshapeToUint8s() (z Uint8x64) {
	return Uint8x64{spec.ReshapeToUints[uint32, spec.Width512, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x32 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	        x[15]         ⋯          x[0]
//	| 31     ....     0 | ⋯ | 31     ....     0 |
//	| 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 |
//	   z[31]     z[30]    ⋯     z[1]      z[0]
func (x Uint32x16) ReshapeToUint16s() (z Uint16x32) {
	return Uint16x32{spec.ReshapeToUints[uint32, spec.Width512, uint16](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	   x[15]     x[14]    ⋯     x[1]      x[0]
//	| 31 .. 0 | 31 .. 0 | ⋯ | 31 .. 0 | 31 .. 0 |
//	| 63     ....     0 | ⋯ | 63     ....     0 |
//	         z[7]         ⋯          z[0]
func (x Uint32x16) ReshapeToUint64s() (z Uint64x8) {
	return Uint64x8{spec.ReshapeToUints[uint32, spec.Width512, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯                    x[1]                                    x[0]
//	⋯ | 31               ....               0 | 31               ....               0 |
//	⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 |
//	⋯     z[7]      z[6]      z[5]      z[4]      z[3]      z[2]      z[1]      z[0]
func (x Uint32s) ReshapeToUint8s() (z Uint8s) {
	return Uint8s{spec.ReshapeToUints[uint32, spec.WidthScalable, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯          x[1]                x[0]
//	⋯ | 31     ....     0 | 31     ....     0 |
//	⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint32s) ReshapeToUint16s() (z Uint16s) {
	return Uint16s{spec.ReshapeToUints[uint32, spec.WidthScalable, uint16](x.v)}
}

// ReshapeToUint64s reinterprets the bits of x as a Uint64s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯     x[3]      x[2]      x[1]      x[0]
//	⋯ | 31 .. 0 | 31 .. 0 | 31 .. 0 | 31 .. 0 |
//	⋯ | 63     ....     0 | 63     ....     0 |
//	⋯          z[1]                z[0]
func (x Uint32s) ReshapeToUint64s() (z Uint64s) {
	return Uint64s{spec.ReshapeToUints[uint32, spec.WidthScalable, uint64](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                     x[1]                                        x[0]
//	| 63                 ....                 0 | 63                 ....                 0 |
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	   z[15]     z[14]    ⋯     z[9]      z[8]      z[7]      z[6]    ⋯     z[1]      z[0]
func (x Uint64x2) ReshapeToUint8s() (z Uint8x16) {
	return Uint8x16{spec.ReshapeToUints[uint64, spec.Width128, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                   x[1]                                    x[0]
//	| 63               ....               0 | 63               ....               0 |
//	| 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	    z[7]      z[6]      z[5]      z[4]      z[3]      z[2]      z[1]      z[0]
func (x Uint64x2) ReshapeToUint16s() (z Uint16x8) {
	return Uint16x8{spec.ReshapeToUints[uint64, spec.Width128, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x4 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	         x[1]                x[0]
//	| 63     ....     0 | 63     ....     0 |
//	| 31 .. 0 | 31 .. 0 | 31 .. 0 | 31 .. 0 |
//	    z[3]      z[2]      z[1]      z[0]
func (x Uint64x2) ReshapeToUint32s() (z Uint32x4) {
	return Uint32x4{spec.ReshapeToUints[uint64, spec.Width128, uint32](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x32 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                     x[3]                     ⋯                      x[0]
//	| 63                 ....                 0 | ⋯ | 63                 ....                 0 |
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	   z[31]     z[30]    ⋯    z[25]     z[24]    ⋯     z[7]      z[6]    ⋯     z[1]      z[0]
func (x Uint64x4) ReshapeToUint8s() (z Uint8x32) {
	return Uint8x32{spec.ReshapeToUints[uint64, spec.Width256, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                   x[3]                   ⋯                    x[0]
//	| 63               ....               0 | ⋯ | 63               ....               0 |
//	| 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	   z[15]     z[14]     z[13]     z[12]    ⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint64x4) ReshapeToUint16s() (z Uint16x16) {
	return Uint16x16{spec.ReshapeToUints[uint64, spec.Width256, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x8 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	         x[3]         ⋯          x[0]
//	| 63     ....     0 | ⋯ | 63     ....     0 |
//	| 31 .. 0 | 31 .. 0 | ⋯ | 31 .. 0 | 31 .. 0 |
//	    z[7]      z[6]    ⋯     z[1]      z[0]
func (x Uint64x4) ReshapeToUint32s() (z Uint32x8) {
	return Uint32x8{spec.ReshapeToUints[uint64, spec.Width256, uint32](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8x64 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                     x[7]                     ⋯                      x[0]
//	| 63                 ....                 0 | ⋯ | 63                 ....                 0 |
//	| 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	   z[63]     z[62]    ⋯    z[57]     z[56]    ⋯     z[7]      z[6]    ⋯     z[1]      z[0]
func (x Uint64x8) ReshapeToUint8s() (z Uint8x64) {
	return Uint8x64{spec.ReshapeToUints[uint64, spec.Width512, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x32 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	                   x[7]                   ⋯                    x[0]
//	| 63               ....               0 | ⋯ | 63               ....               0 |
//	| 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | ⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	   z[31]     z[30]     z[29]     z[28]    ⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint64x8) ReshapeToUint16s() (z Uint16x32) {
	return Uint16x32{spec.ReshapeToUints[uint64, spec.Width512, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32x16 vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	         x[7]         ⋯          x[0]
//	| 63     ....     0 | ⋯ | 63     ....     0 |
//	| 31 .. 0 | 31 .. 0 | ⋯ | 31 .. 0 | 31 .. 0 |
//	   z[15]     z[14]    ⋯     z[1]      z[0]
func (x Uint64x8) ReshapeToUint32s() (z Uint32x16) {
	return Uint32x16{spec.ReshapeToUints[uint64, spec.Width512, uint32](x.v)}
}

// ReshapeToUint8s reinterprets the bits of x as a Uint8s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯                      x[1]                                        x[0]
//	⋯ | 63                 ....                 0 | 63                 ....                 0 |
//	⋯ | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 | 7  .. 0 | 7  .. 0 | ⋯ | 7  .. 0 | 7  .. 0 |
//	⋯    z[15]     z[14]    ⋯     z[9]      z[8]      z[7]      z[6]    ⋯     z[1]      z[0]
func (x Uint64s) ReshapeToUint8s() (z Uint8s) {
	return Uint8s{spec.ReshapeToUints[uint64, spec.WidthScalable, uint8](x.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯                    x[1]                                    x[0]
//	⋯ | 63               ....               0 | 63               ....               0 |
//	⋯ | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 | 15 .. 0 |
//	⋯     z[7]      z[6]      z[5]      z[4]      z[3]      z[2]      z[1]      z[0]
func (x Uint64s) ReshapeToUint16s() (z Uint16s) {
	return Uint16s{spec.ReshapeToUints[uint64, spec.WidthScalable, uint16](x.v)}
}

// ReshapeToUint32s reinterprets the bits of x as a Uint32s vector.
//
// Both the vector elements and the bits of each element are interpreted in
// little endian order.
//
//	⋯          x[1]                x[0]
//	⋯ | 63     ....     0 | 63     ....     0 |
//	⋯ | 31 .. 0 | 31 .. 0 | 31 .. 0 | 31 .. 0 |
//	⋯     z[3]      z[2]      z[1]      z[0]
func (x Uint64s) ReshapeToUint32s() (z Uint32s) {
	return Uint32s{spec.ReshapeToUints[uint64, spec.WidthScalable, uint32](x.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int8x16) ScaleSaturated(scale Int8x16) (z Int8x16) {
	return Int8x16{spec.ScaleSaturated[int8, spec.Width128, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int8x32) ScaleSaturated(scale Int8x32) (z Int8x32) {
	return Int8x32{spec.ScaleSaturated[int8, spec.Width256, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int8x64) ScaleSaturated(scale Int8x64) (z Int8x64) {
	return Int8x64{spec.ScaleSaturated[int8, spec.Width512, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int8s) ScaleSaturated(scale Int8s) (z Int8s) {
	return Int8s{spec.ScaleSaturated[int8, spec.WidthScalable, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int16x8) ScaleSaturated(scale Int16x8) (z Int16x8) {
	return Int16x8{spec.ScaleSaturated[int16, spec.Width128, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int16x16) ScaleSaturated(scale Int16x16) (z Int16x16) {
	return Int16x16{spec.ScaleSaturated[int16, spec.Width256, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int16x32) ScaleSaturated(scale Int16x32) (z Int16x32) {
	return Int16x32{spec.ScaleSaturated[int16, spec.Width512, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int16s) ScaleSaturated(scale Int16s) (z Int16s) {
	return Int16s{spec.ScaleSaturated[int16, spec.WidthScalable, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int32x4) ScaleSaturated(scale Int32x4) (z Int32x4) {
	return Int32x4{spec.ScaleSaturated[int32, spec.Width128, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int32x8) ScaleSaturated(scale Int32x8) (z Int32x8) {
	return Int32x8{spec.ScaleSaturated[int32, spec.Width256, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int32x16) ScaleSaturated(scale Int32x16) (z Int32x16) {
	return Int32x16{spec.ScaleSaturated[int32, spec.Width512, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int32s) ScaleSaturated(scale Int32s) (z Int32s) {
	return Int32s{spec.ScaleSaturated[int32, spec.WidthScalable, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int64x2) ScaleSaturated(scale Int64x2) (z Int64x2) {
	return Int64x2{spec.ScaleSaturated[int64, spec.Width128, int64](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int64x4) ScaleSaturated(scale Int64x4) (z Int64x4) {
	return Int64x4{spec.ScaleSaturated[int64, spec.Width256, int64](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int64x8) ScaleSaturated(scale Int64x8) (z Int64x8) {
	return Int64x8{spec.ScaleSaturated[int64, spec.Width512, int64](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (arithmetic shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Int64s) ScaleSaturated(scale Int64s) (z Int64s) {
	return Int64s{spec.ScaleSaturated[int64, spec.WidthScalable, int64](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint8x16) ScaleSaturated(scale Int8x16) (z Uint8x16) {
	return Uint8x16{spec.ScaleSaturated[uint8, spec.Width128, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint8x32) ScaleSaturated(scale Int8x32) (z Uint8x32) {
	return Uint8x32{spec.ScaleSaturated[uint8, spec.Width256, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint8x64) ScaleSaturated(scale Int8x64) (z Uint8x64) {
	return Uint8x64{spec.ScaleSaturated[uint8, spec.Width512, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint8s) ScaleSaturated(scale Int8s) (z Uint8s) {
	return Uint8s{spec.ScaleSaturated[uint8, spec.WidthScalable, int8](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint16x8) ScaleSaturated(scale Int16x8) (z Uint16x8) {
	return Uint16x8{spec.ScaleSaturated[uint16, spec.Width128, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint16x16) ScaleSaturated(scale Int16x16) (z Uint16x16) {
	return Uint16x16{spec.ScaleSaturated[uint16, spec.Width256, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint16x32) ScaleSaturated(scale Int16x32) (z Uint16x32) {
	return Uint16x32{spec.ScaleSaturated[uint16, spec.Width512, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint16s) ScaleSaturated(scale Int16s) (z Uint16s) {
	return Uint16s{spec.ScaleSaturated[uint16, spec.WidthScalable, int16](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint32x4) ScaleSaturated(scale Int32x4) (z Uint32x4) {
	return Uint32x4{spec.ScaleSaturated[uint32, spec.Width128, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint32x8) ScaleSaturated(scale Int32x8) (z Uint32x8) {
	return Uint32x8{spec.ScaleSaturated[uint32, spec.Width256, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint32x16) ScaleSaturated(scale Int32x16) (z Uint32x16) {
	return Uint32x16{spec.ScaleSaturated[uint32, spec.Width512, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint32s) ScaleSaturated(scale Int32s) (z Uint32s) {
	return Uint32s{spec.ScaleSaturated[uint32, spec.WidthScalable, int32](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint64x2) ScaleSaturated(scale Int64x2) (z Uint64x2) {
	return Uint64x2{spec.ScaleSaturated[uint64, spec.Width128, int64](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint64x4) ScaleSaturated(scale Int64x4) (z Uint64x4) {
	return Uint64x4{spec.ScaleSaturated[uint64, spec.Width256, int64](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint64x8) ScaleSaturated(scale Int64x8) (z Uint64x8) {
	return Uint64x8{spec.ScaleSaturated[uint64, spec.Width512, int64](x.v, scale.v)}
}

// ScaleSaturated multiplies x[i] by 2^scale[i], with saturation.
//
// Positive exponents scale up (shift left with saturation). Negative exponents
// scale down (logical shift right).
//
//	z[i] = sat(x[i] * 2^scale[i])
func (x Uint64s) ScaleSaturated(scale Int64s) (z Uint64s) {
	return Uint64s{spec.ScaleSaturated[uint64, spec.WidthScalable, int64](x.v, scale.v)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int8x16) ShiftAllRight(shift uint64) (z Int8x16) {
	return Int8x16{spec.ShiftAllRight[int8, spec.Width128](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int8x32) ShiftAllRight(shift uint64) (z Int8x32) {
	return Int8x32{spec.ShiftAllRight[int8, spec.Width256](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int8x64) ShiftAllRight(shift uint64) (z Int8x64) {
	return Int8x64{spec.ShiftAllRight[int8, spec.Width512](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int8s) ShiftAllRight(shift uint64) (z Int8s) {
	return Int8s{spec.ShiftAllRight[int8, spec.WidthScalable](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int16x8) ShiftAllRight(shift uint64) (z Int16x8) {
	return Int16x8{spec.ShiftAllRight[int16, spec.Width128](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int16x16) ShiftAllRight(shift uint64) (z Int16x16) {
	return Int16x16{spec.ShiftAllRight[int16, spec.Width256](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int16x32) ShiftAllRight(shift uint64) (z Int16x32) {
	return Int16x32{spec.ShiftAllRight[int16, spec.Width512](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int16s) ShiftAllRight(shift uint64) (z Int16s) {
	return Int16s{spec.ShiftAllRight[int16, spec.WidthScalable](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int32x4) ShiftAllRight(shift uint64) (z Int32x4) {
	return Int32x4{spec.ShiftAllRight[int32, spec.Width128](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int32x8) ShiftAllRight(shift uint64) (z Int32x8) {
	return Int32x8{spec.ShiftAllRight[int32, spec.Width256](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int32x16) ShiftAllRight(shift uint64) (z Int32x16) {
	return Int32x16{spec.ShiftAllRight[int32, spec.Width512](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int32s) ShiftAllRight(shift uint64) (z Int32s) {
	return Int32s{spec.ShiftAllRight[int32, spec.WidthScalable](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int64x2) ShiftAllRight(shift uint64) (z Int64x2) {
	return Int64x2{spec.ShiftAllRight[int64, spec.Width128](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int64x4) ShiftAllRight(shift uint64) (z Int64x4) {
	return Int64x4{spec.ShiftAllRight[int64, spec.Width256](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int64x8) ShiftAllRight(shift uint64) (z Int64x8) {
	return Int64x8{spec.ShiftAllRight[int64, spec.Width512](x.v, shift)}
}

// ShiftAllRight arithmetically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift
func (x Int64s) ShiftAllRight(shift uint64) (z Int64s) {
	return Int64s{spec.ShiftAllRight[int64, spec.WidthScalable](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint8x16) ShiftAllRight(shift uint64) (z Uint8x16) {
	return Uint8x16{spec.ShiftAllRight[uint8, spec.Width128](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint8x32) ShiftAllRight(shift uint64) (z Uint8x32) {
	return Uint8x32{spec.ShiftAllRight[uint8, spec.Width256](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint8x64) ShiftAllRight(shift uint64) (z Uint8x64) {
	return Uint8x64{spec.ShiftAllRight[uint8, spec.Width512](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint8s) ShiftAllRight(shift uint64) (z Uint8s) {
	return Uint8s{spec.ShiftAllRight[uint8, spec.WidthScalable](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint16x8) ShiftAllRight(shift uint64) (z Uint16x8) {
	return Uint16x8{spec.ShiftAllRight[uint16, spec.Width128](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint16x16) ShiftAllRight(shift uint64) (z Uint16x16) {
	return Uint16x16{spec.ShiftAllRight[uint16, spec.Width256](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint16x32) ShiftAllRight(shift uint64) (z Uint16x32) {
	return Uint16x32{spec.ShiftAllRight[uint16, spec.Width512](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint16s) ShiftAllRight(shift uint64) (z Uint16s) {
	return Uint16s{spec.ShiftAllRight[uint16, spec.WidthScalable](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint32x4) ShiftAllRight(shift uint64) (z Uint32x4) {
	return Uint32x4{spec.ShiftAllRight[uint32, spec.Width128](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint32x8) ShiftAllRight(shift uint64) (z Uint32x8) {
	return Uint32x8{spec.ShiftAllRight[uint32, spec.Width256](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint32x16) ShiftAllRight(shift uint64) (z Uint32x16) {
	return Uint32x16{spec.ShiftAllRight[uint32, spec.Width512](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint32s) ShiftAllRight(shift uint64) (z Uint32s) {
	return Uint32s{spec.ShiftAllRight[uint32, spec.WidthScalable](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint64x2) ShiftAllRight(shift uint64) (z Uint64x2) {
	return Uint64x2{spec.ShiftAllRight[uint64, spec.Width128](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint64x4) ShiftAllRight(shift uint64) (z Uint64x4) {
	return Uint64x4{spec.ShiftAllRight[uint64, spec.Width256](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint64x8) ShiftAllRight(shift uint64) (z Uint64x8) {
	return Uint64x8{spec.ShiftAllRight[uint64, spec.Width512](x.v, shift)}
}

// ShiftAllRight logically shifts each element of x right by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift
func (x Uint64s) ShiftAllRight(shift uint64) (z Uint64s) {
	return Uint64s{spec.ShiftAllRight[uint64, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int8x16) ShiftAllLeft(shift uint64) (z Int8x16) {
	return Int8x16{spec.ShiftAllLeft[int8, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int8x32) ShiftAllLeft(shift uint64) (z Int8x32) {
	return Int8x32{spec.ShiftAllLeft[int8, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int8x64) ShiftAllLeft(shift uint64) (z Int8x64) {
	return Int8x64{spec.ShiftAllLeft[int8, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int8s) ShiftAllLeft(shift uint64) (z Int8s) {
	return Int8s{spec.ShiftAllLeft[int8, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int16x8) ShiftAllLeft(shift uint64) (z Int16x8) {
	return Int16x8{spec.ShiftAllLeft[int16, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int16x16) ShiftAllLeft(shift uint64) (z Int16x16) {
	return Int16x16{spec.ShiftAllLeft[int16, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int16x32) ShiftAllLeft(shift uint64) (z Int16x32) {
	return Int16x32{spec.ShiftAllLeft[int16, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int16s) ShiftAllLeft(shift uint64) (z Int16s) {
	return Int16s{spec.ShiftAllLeft[int16, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int32x4) ShiftAllLeft(shift uint64) (z Int32x4) {
	return Int32x4{spec.ShiftAllLeft[int32, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int32x8) ShiftAllLeft(shift uint64) (z Int32x8) {
	return Int32x8{spec.ShiftAllLeft[int32, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int32x16) ShiftAllLeft(shift uint64) (z Int32x16) {
	return Int32x16{spec.ShiftAllLeft[int32, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int32s) ShiftAllLeft(shift uint64) (z Int32s) {
	return Int32s{spec.ShiftAllLeft[int32, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int64x2) ShiftAllLeft(shift uint64) (z Int64x2) {
	return Int64x2{spec.ShiftAllLeft[int64, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int64x4) ShiftAllLeft(shift uint64) (z Int64x4) {
	return Int64x4{spec.ShiftAllLeft[int64, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int64x8) ShiftAllLeft(shift uint64) (z Int64x8) {
	return Int64x8{spec.ShiftAllLeft[int64, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Int64s) ShiftAllLeft(shift uint64) (z Int64s) {
	return Int64s{spec.ShiftAllLeft[int64, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint8x16) ShiftAllLeft(shift uint64) (z Uint8x16) {
	return Uint8x16{spec.ShiftAllLeft[uint8, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint8x32) ShiftAllLeft(shift uint64) (z Uint8x32) {
	return Uint8x32{spec.ShiftAllLeft[uint8, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint8x64) ShiftAllLeft(shift uint64) (z Uint8x64) {
	return Uint8x64{spec.ShiftAllLeft[uint8, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint8s) ShiftAllLeft(shift uint64) (z Uint8s) {
	return Uint8s{spec.ShiftAllLeft[uint8, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint16x8) ShiftAllLeft(shift uint64) (z Uint16x8) {
	return Uint16x8{spec.ShiftAllLeft[uint16, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint16x16) ShiftAllLeft(shift uint64) (z Uint16x16) {
	return Uint16x16{spec.ShiftAllLeft[uint16, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint16x32) ShiftAllLeft(shift uint64) (z Uint16x32) {
	return Uint16x32{spec.ShiftAllLeft[uint16, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint16s) ShiftAllLeft(shift uint64) (z Uint16s) {
	return Uint16s{spec.ShiftAllLeft[uint16, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint32x4) ShiftAllLeft(shift uint64) (z Uint32x4) {
	return Uint32x4{spec.ShiftAllLeft[uint32, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint32x8) ShiftAllLeft(shift uint64) (z Uint32x8) {
	return Uint32x8{spec.ShiftAllLeft[uint32, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint32x16) ShiftAllLeft(shift uint64) (z Uint32x16) {
	return Uint32x16{spec.ShiftAllLeft[uint32, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint32s) ShiftAllLeft(shift uint64) (z Uint32s) {
	return Uint32s{spec.ShiftAllLeft[uint32, spec.WidthScalable](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint64x2) ShiftAllLeft(shift uint64) (z Uint64x2) {
	return Uint64x2{spec.ShiftAllLeft[uint64, spec.Width128](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint64x4) ShiftAllLeft(shift uint64) (z Uint64x4) {
	return Uint64x4{spec.ShiftAllLeft[uint64, spec.Width256](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint64x8) ShiftAllLeft(shift uint64) (z Uint64x8) {
	return Uint64x8{spec.ShiftAllLeft[uint64, spec.Width512](x.v, shift)}
}

// ShiftAllLeft shifts each element of x left by shift bits.
// If shift is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift
func (x Uint64s) ShiftAllLeft(shift uint64) (z Uint64s) {
	return Uint64s{spec.ShiftAllLeft[uint64, spec.WidthScalable](x.v, shift)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int8x16) ShiftRight(shift Uint8x16) (z Int8x16) {
	return Int8x16{spec.ShiftRight[int8, spec.Width128, uint8](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int8x32) ShiftRight(shift Uint8x32) (z Int8x32) {
	return Int8x32{spec.ShiftRight[int8, spec.Width256, uint8](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int8x64) ShiftRight(shift Uint8x64) (z Int8x64) {
	return Int8x64{spec.ShiftRight[int8, spec.Width512, uint8](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int8s) ShiftRight(shift Uint8s) (z Int8s) {
	return Int8s{spec.ShiftRight[int8, spec.WidthScalable, uint8](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int16x8) ShiftRight(shift Uint16x8) (z Int16x8) {
	return Int16x8{spec.ShiftRight[int16, spec.Width128, uint16](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int16x16) ShiftRight(shift Uint16x16) (z Int16x16) {
	return Int16x16{spec.ShiftRight[int16, spec.Width256, uint16](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int16x32) ShiftRight(shift Uint16x32) (z Int16x32) {
	return Int16x32{spec.ShiftRight[int16, spec.Width512, uint16](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int16s) ShiftRight(shift Uint16s) (z Int16s) {
	return Int16s{spec.ShiftRight[int16, spec.WidthScalable, uint16](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int32x4) ShiftRight(shift Uint32x4) (z Int32x4) {
	return Int32x4{spec.ShiftRight[int32, spec.Width128, uint32](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int32x8) ShiftRight(shift Uint32x8) (z Int32x8) {
	return Int32x8{spec.ShiftRight[int32, spec.Width256, uint32](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int32x16) ShiftRight(shift Uint32x16) (z Int32x16) {
	return Int32x16{spec.ShiftRight[int32, spec.Width512, uint32](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int32s) ShiftRight(shift Uint32s) (z Int32s) {
	return Int32s{spec.ShiftRight[int32, spec.WidthScalable, uint32](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int64x2) ShiftRight(shift Uint64x2) (z Int64x2) {
	return Int64x2{spec.ShiftRight[int64, spec.Width128, uint64](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int64x4) ShiftRight(shift Uint64x4) (z Int64x4) {
	return Int64x4{spec.ShiftRight[int64, spec.Width256, uint64](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int64x8) ShiftRight(shift Uint64x8) (z Int64x8) {
	return Int64x8{spec.ShiftRight[int64, spec.Width512, uint64](x.v, shift.v)}
}

// ShiftRight arithmetically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0 or -1.
//
//	z[i] = x[i] >> shift[i]
func (x Int64s) ShiftRight(shift Uint64s) (z Int64s) {
	return Int64s{spec.ShiftRight[int64, spec.WidthScalable, uint64](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint8x16) ShiftRight(shift Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ShiftRight[uint8, spec.Width128, uint8](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint8x32) ShiftRight(shift Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ShiftRight[uint8, spec.Width256, uint8](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint8x64) ShiftRight(shift Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ShiftRight[uint8, spec.Width512, uint8](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint8s) ShiftRight(shift Uint8s) (z Uint8s) {
	return Uint8s{spec.ShiftRight[uint8, spec.WidthScalable, uint8](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint16x8) ShiftRight(shift Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ShiftRight[uint16, spec.Width128, uint16](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint16x16) ShiftRight(shift Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ShiftRight[uint16, spec.Width256, uint16](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint16x32) ShiftRight(shift Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ShiftRight[uint16, spec.Width512, uint16](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint16s) ShiftRight(shift Uint16s) (z Uint16s) {
	return Uint16s{spec.ShiftRight[uint16, spec.WidthScalable, uint16](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint32x4) ShiftRight(shift Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ShiftRight[uint32, spec.Width128, uint32](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint32x8) ShiftRight(shift Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ShiftRight[uint32, spec.Width256, uint32](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint32x16) ShiftRight(shift Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ShiftRight[uint32, spec.Width512, uint32](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint32s) ShiftRight(shift Uint32s) (z Uint32s) {
	return Uint32s{spec.ShiftRight[uint32, spec.WidthScalable, uint32](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint64x2) ShiftRight(shift Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ShiftRight[uint64, spec.Width128, uint64](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint64x4) ShiftRight(shift Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ShiftRight[uint64, spec.Width256, uint64](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint64x8) ShiftRight(shift Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ShiftRight[uint64, spec.Width512, uint64](x.v, shift.v)}
}

// ShiftRight logically shifts x[i] right by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] >> shift[i]
func (x Uint64s) ShiftRight(shift Uint64s) (z Uint64s) {
	return Uint64s{spec.ShiftRight[uint64, spec.WidthScalable, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int8x16) ShiftLeft(shift Uint8x16) (z Int8x16) {
	return Int8x16{spec.ShiftLeft[int8, spec.Width128, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int8x32) ShiftLeft(shift Uint8x32) (z Int8x32) {
	return Int8x32{spec.ShiftLeft[int8, spec.Width256, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int8x64) ShiftLeft(shift Uint8x64) (z Int8x64) {
	return Int8x64{spec.ShiftLeft[int8, spec.Width512, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int8s) ShiftLeft(shift Uint8s) (z Int8s) {
	return Int8s{spec.ShiftLeft[int8, spec.WidthScalable, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int16x8) ShiftLeft(shift Uint16x8) (z Int16x8) {
	return Int16x8{spec.ShiftLeft[int16, spec.Width128, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int16x16) ShiftLeft(shift Uint16x16) (z Int16x16) {
	return Int16x16{spec.ShiftLeft[int16, spec.Width256, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int16x32) ShiftLeft(shift Uint16x32) (z Int16x32) {
	return Int16x32{spec.ShiftLeft[int16, spec.Width512, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int16s) ShiftLeft(shift Uint16s) (z Int16s) {
	return Int16s{spec.ShiftLeft[int16, spec.WidthScalable, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int32x4) ShiftLeft(shift Uint32x4) (z Int32x4) {
	return Int32x4{spec.ShiftLeft[int32, spec.Width128, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int32x8) ShiftLeft(shift Uint32x8) (z Int32x8) {
	return Int32x8{spec.ShiftLeft[int32, spec.Width256, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int32x16) ShiftLeft(shift Uint32x16) (z Int32x16) {
	return Int32x16{spec.ShiftLeft[int32, spec.Width512, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int32s) ShiftLeft(shift Uint32s) (z Int32s) {
	return Int32s{spec.ShiftLeft[int32, spec.WidthScalable, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int64x2) ShiftLeft(shift Uint64x2) (z Int64x2) {
	return Int64x2{spec.ShiftLeft[int64, spec.Width128, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int64x4) ShiftLeft(shift Uint64x4) (z Int64x4) {
	return Int64x4{spec.ShiftLeft[int64, spec.Width256, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int64x8) ShiftLeft(shift Uint64x8) (z Int64x8) {
	return Int64x8{spec.ShiftLeft[int64, spec.Width512, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Int64s) ShiftLeft(shift Uint64s) (z Int64s) {
	return Int64s{spec.ShiftLeft[int64, spec.WidthScalable, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint8x16) ShiftLeft(shift Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.ShiftLeft[uint8, spec.Width128, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint8x32) ShiftLeft(shift Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.ShiftLeft[uint8, spec.Width256, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint8x64) ShiftLeft(shift Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.ShiftLeft[uint8, spec.Width512, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint8s) ShiftLeft(shift Uint8s) (z Uint8s) {
	return Uint8s{spec.ShiftLeft[uint8, spec.WidthScalable, uint8](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint16x8) ShiftLeft(shift Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.ShiftLeft[uint16, spec.Width128, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint16x16) ShiftLeft(shift Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.ShiftLeft[uint16, spec.Width256, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint16x32) ShiftLeft(shift Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.ShiftLeft[uint16, spec.Width512, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint16s) ShiftLeft(shift Uint16s) (z Uint16s) {
	return Uint16s{spec.ShiftLeft[uint16, spec.WidthScalable, uint16](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint32x4) ShiftLeft(shift Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.ShiftLeft[uint32, spec.Width128, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint32x8) ShiftLeft(shift Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.ShiftLeft[uint32, spec.Width256, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint32x16) ShiftLeft(shift Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.ShiftLeft[uint32, spec.Width512, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint32s) ShiftLeft(shift Uint32s) (z Uint32s) {
	return Uint32s{spec.ShiftLeft[uint32, spec.WidthScalable, uint32](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint64x2) ShiftLeft(shift Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.ShiftLeft[uint64, spec.Width128, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint64x4) ShiftLeft(shift Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.ShiftLeft[uint64, spec.Width256, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint64x8) ShiftLeft(shift Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.ShiftLeft[uint64, spec.Width512, uint64](x.v, shift.v)}
}

// ShiftLeft shifts x[i] left by shift[i] bits.
// If shift[i] is greater than the element width, the result is 0.
//
//	z[i] = x[i] << shift[i]
func (x Uint64s) ShiftLeft(shift Uint64s) (z Uint64s) {
	return Uint64s{spec.ShiftLeft[uint64, spec.WidthScalable, uint64](x.v, shift.v)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint8x16) RotateAllLeft(shift uint64) (z Uint8x16) {
	return Uint8x16{spec.RotateAllLeft[uint8, spec.Width128](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint8x32) RotateAllLeft(shift uint64) (z Uint8x32) {
	return Uint8x32{spec.RotateAllLeft[uint8, spec.Width256](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint8x64) RotateAllLeft(shift uint64) (z Uint8x64) {
	return Uint8x64{spec.RotateAllLeft[uint8, spec.Width512](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint8s) RotateAllLeft(shift uint64) (z Uint8s) {
	return Uint8s{spec.RotateAllLeft[uint8, spec.WidthScalable](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint16x8) RotateAllLeft(shift uint64) (z Uint16x8) {
	return Uint16x8{spec.RotateAllLeft[uint16, spec.Width128](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint16x16) RotateAllLeft(shift uint64) (z Uint16x16) {
	return Uint16x16{spec.RotateAllLeft[uint16, spec.Width256](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint16x32) RotateAllLeft(shift uint64) (z Uint16x32) {
	return Uint16x32{spec.RotateAllLeft[uint16, spec.Width512](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint16s) RotateAllLeft(shift uint64) (z Uint16s) {
	return Uint16s{spec.RotateAllLeft[uint16, spec.WidthScalable](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint32x4) RotateAllLeft(shift uint64) (z Uint32x4) {
	return Uint32x4{spec.RotateAllLeft[uint32, spec.Width128](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint32x8) RotateAllLeft(shift uint64) (z Uint32x8) {
	return Uint32x8{spec.RotateAllLeft[uint32, spec.Width256](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint32x16) RotateAllLeft(shift uint64) (z Uint32x16) {
	return Uint32x16{spec.RotateAllLeft[uint32, spec.Width512](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint32s) RotateAllLeft(shift uint64) (z Uint32s) {
	return Uint32s{spec.RotateAllLeft[uint32, spec.WidthScalable](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint64x2) RotateAllLeft(shift uint64) (z Uint64x2) {
	return Uint64x2{spec.RotateAllLeft[uint64, spec.Width128](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint64x4) RotateAllLeft(shift uint64) (z Uint64x4) {
	return Uint64x4{spec.RotateAllLeft[uint64, spec.Width256](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint64x8) RotateAllLeft(shift uint64) (z Uint64x8) {
	return Uint64x8{spec.RotateAllLeft[uint64, spec.Width512](x.v, shift)}
}

// RotateAllLeft rotates each element of x left by shift bits.
//
//	z[i] = rotateLeft(x[i], shift)
func (x Uint64s) RotateAllLeft(shift uint64) (z Uint64s) {
	return Uint64s{spec.RotateAllLeft[uint64, spec.WidthScalable](x.v, shift)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint8x16) RotateLeft(shift Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.RotateLeft[uint8, spec.Width128](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint8x32) RotateLeft(shift Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.RotateLeft[uint8, spec.Width256](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint8x64) RotateLeft(shift Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.RotateLeft[uint8, spec.Width512](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint8s) RotateLeft(shift Uint8s) (z Uint8s) {
	return Uint8s{spec.RotateLeft[uint8, spec.WidthScalable](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint16x8) RotateLeft(shift Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.RotateLeft[uint16, spec.Width128](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint16x16) RotateLeft(shift Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.RotateLeft[uint16, spec.Width256](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint16x32) RotateLeft(shift Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.RotateLeft[uint16, spec.Width512](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint16s) RotateLeft(shift Uint16s) (z Uint16s) {
	return Uint16s{spec.RotateLeft[uint16, spec.WidthScalable](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint32x4) RotateLeft(shift Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.RotateLeft[uint32, spec.Width128](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint32x8) RotateLeft(shift Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.RotateLeft[uint32, spec.Width256](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint32x16) RotateLeft(shift Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.RotateLeft[uint32, spec.Width512](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint32s) RotateLeft(shift Uint32s) (z Uint32s) {
	return Uint32s{spec.RotateLeft[uint32, spec.WidthScalable](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint64x2) RotateLeft(shift Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.RotateLeft[uint64, spec.Width128](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint64x4) RotateLeft(shift Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.RotateLeft[uint64, spec.Width256](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint64x8) RotateLeft(shift Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.RotateLeft[uint64, spec.Width512](x.v, shift.v)}
}

// RotateLeft rotates x left by shift bits, elementwise.
//
//	z[i] = rotateLeft(x[i], shift[i])
func (x Uint64s) RotateLeft(shift Uint64s) (z Uint64s) {
	return Uint64s{spec.RotateLeft[uint64, spec.WidthScalable](x.v, shift.v)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint8x16) RotateAllRight(shift uint64) (z Uint8x16) {
	return Uint8x16{spec.RotateAllRight[uint8, spec.Width128](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint8x32) RotateAllRight(shift uint64) (z Uint8x32) {
	return Uint8x32{spec.RotateAllRight[uint8, spec.Width256](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint8x64) RotateAllRight(shift uint64) (z Uint8x64) {
	return Uint8x64{spec.RotateAllRight[uint8, spec.Width512](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint8s) RotateAllRight(shift uint64) (z Uint8s) {
	return Uint8s{spec.RotateAllRight[uint8, spec.WidthScalable](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint16x8) RotateAllRight(shift uint64) (z Uint16x8) {
	return Uint16x8{spec.RotateAllRight[uint16, spec.Width128](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint16x16) RotateAllRight(shift uint64) (z Uint16x16) {
	return Uint16x16{spec.RotateAllRight[uint16, spec.Width256](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint16x32) RotateAllRight(shift uint64) (z Uint16x32) {
	return Uint16x32{spec.RotateAllRight[uint16, spec.Width512](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint16s) RotateAllRight(shift uint64) (z Uint16s) {
	return Uint16s{spec.RotateAllRight[uint16, spec.WidthScalable](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint32x4) RotateAllRight(shift uint64) (z Uint32x4) {
	return Uint32x4{spec.RotateAllRight[uint32, spec.Width128](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint32x8) RotateAllRight(shift uint64) (z Uint32x8) {
	return Uint32x8{spec.RotateAllRight[uint32, spec.Width256](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint32x16) RotateAllRight(shift uint64) (z Uint32x16) {
	return Uint32x16{spec.RotateAllRight[uint32, spec.Width512](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint32s) RotateAllRight(shift uint64) (z Uint32s) {
	return Uint32s{spec.RotateAllRight[uint32, spec.WidthScalable](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint64x2) RotateAllRight(shift uint64) (z Uint64x2) {
	return Uint64x2{spec.RotateAllRight[uint64, spec.Width128](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint64x4) RotateAllRight(shift uint64) (z Uint64x4) {
	return Uint64x4{spec.RotateAllRight[uint64, spec.Width256](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint64x8) RotateAllRight(shift uint64) (z Uint64x8) {
	return Uint64x8{spec.RotateAllRight[uint64, spec.Width512](x.v, shift)}
}

// RotateAllRight rotates each element of x right by shift bits.
//
//	z[i] = rotateRight(x[i], shift)
func (x Uint64s) RotateAllRight(shift uint64) (z Uint64s) {
	return Uint64s{spec.RotateAllRight[uint64, spec.WidthScalable](x.v, shift)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint8x16) RotateRight(shift Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.RotateRight[uint8, spec.Width128](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint8x32) RotateRight(shift Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.RotateRight[uint8, spec.Width256](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint8x64) RotateRight(shift Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.RotateRight[uint8, spec.Width512](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint8s) RotateRight(shift Uint8s) (z Uint8s) {
	return Uint8s{spec.RotateRight[uint8, spec.WidthScalable](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint16x8) RotateRight(shift Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.RotateRight[uint16, spec.Width128](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint16x16) RotateRight(shift Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.RotateRight[uint16, spec.Width256](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint16x32) RotateRight(shift Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.RotateRight[uint16, spec.Width512](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint16s) RotateRight(shift Uint16s) (z Uint16s) {
	return Uint16s{spec.RotateRight[uint16, spec.WidthScalable](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint32x4) RotateRight(shift Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.RotateRight[uint32, spec.Width128](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint32x8) RotateRight(shift Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.RotateRight[uint32, spec.Width256](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint32x16) RotateRight(shift Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.RotateRight[uint32, spec.Width512](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint32s) RotateRight(shift Uint32s) (z Uint32s) {
	return Uint32s{spec.RotateRight[uint32, spec.WidthScalable](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint64x2) RotateRight(shift Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.RotateRight[uint64, spec.Width128](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint64x4) RotateRight(shift Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.RotateRight[uint64, spec.Width256](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint64x8) RotateRight(shift Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.RotateRight[uint64, spec.Width512](x.v, shift.v)}
}

// RotateRight rotates x right by shift bits, elementwise.
//
//	z[i] = rotateRight(x[i], shift[i])
func (x Uint64s) RotateRight(shift Uint64s) (z Uint64s) {
	return Uint64s{spec.RotateRight[uint64, spec.WidthScalable](x.v, shift.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float32x4) Permute(indices Uint32x4) (z Float32x4) {
	return Float32x4{spec.Permute[float32, spec.Width128, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float32x8) Permute(indices Uint32x8) (z Float32x8) {
	return Float32x8{spec.Permute[float32, spec.Width256, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float32x16) Permute(indices Uint32x16) (z Float32x16) {
	return Float32x16{spec.Permute[float32, spec.Width512, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float32s) Permute(indices Uint32s) (z Float32s) {
	return Float32s{spec.Permute[float32, spec.WidthScalable, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float64x2) Permute(indices Uint64x2) (z Float64x2) {
	return Float64x2{spec.Permute[float64, spec.Width128, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float64x4) Permute(indices Uint64x4) (z Float64x4) {
	return Float64x4{spec.Permute[float64, spec.Width256, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float64x8) Permute(indices Uint64x8) (z Float64x8) {
	return Float64x8{spec.Permute[float64, spec.Width512, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Float64s) Permute(indices Uint64s) (z Float64s) {
	return Float64s{spec.Permute[float64, spec.WidthScalable, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int8x16) Permute(indices Uint8x16) (z Int8x16) {
	return Int8x16{spec.Permute[int8, spec.Width128, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int8x32) Permute(indices Uint8x32) (z Int8x32) {
	return Int8x32{spec.Permute[int8, spec.Width256, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int8x64) Permute(indices Uint8x64) (z Int8x64) {
	return Int8x64{spec.Permute[int8, spec.Width512, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int8s) Permute(indices Uint8s) (z Int8s) {
	return Int8s{spec.Permute[int8, spec.WidthScalable, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int16x8) Permute(indices Uint16x8) (z Int16x8) {
	return Int16x8{spec.Permute[int16, spec.Width128, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int16x16) Permute(indices Uint16x16) (z Int16x16) {
	return Int16x16{spec.Permute[int16, spec.Width256, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int16x32) Permute(indices Uint16x32) (z Int16x32) {
	return Int16x32{spec.Permute[int16, spec.Width512, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int16s) Permute(indices Uint16s) (z Int16s) {
	return Int16s{spec.Permute[int16, spec.WidthScalable, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int32x4) Permute(indices Uint32x4) (z Int32x4) {
	return Int32x4{spec.Permute[int32, spec.Width128, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int32x8) Permute(indices Uint32x8) (z Int32x8) {
	return Int32x8{spec.Permute[int32, spec.Width256, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int32x16) Permute(indices Uint32x16) (z Int32x16) {
	return Int32x16{spec.Permute[int32, spec.Width512, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int32s) Permute(indices Uint32s) (z Int32s) {
	return Int32s{spec.Permute[int32, spec.WidthScalable, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int64x2) Permute(indices Uint64x2) (z Int64x2) {
	return Int64x2{spec.Permute[int64, spec.Width128, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int64x4) Permute(indices Uint64x4) (z Int64x4) {
	return Int64x4{spec.Permute[int64, spec.Width256, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int64x8) Permute(indices Uint64x8) (z Int64x8) {
	return Int64x8{spec.Permute[int64, spec.Width512, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Int64s) Permute(indices Uint64s) (z Int64s) {
	return Int64s{spec.Permute[int64, spec.WidthScalable, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint8x16) Permute(indices Uint8x16) (z Uint8x16) {
	return Uint8x16{spec.Permute[uint8, spec.Width128, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint8x32) Permute(indices Uint8x32) (z Uint8x32) {
	return Uint8x32{spec.Permute[uint8, spec.Width256, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint8x64) Permute(indices Uint8x64) (z Uint8x64) {
	return Uint8x64{spec.Permute[uint8, spec.Width512, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint8s) Permute(indices Uint8s) (z Uint8s) {
	return Uint8s{spec.Permute[uint8, spec.WidthScalable, uint8](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint16x8) Permute(indices Uint16x8) (z Uint16x8) {
	return Uint16x8{spec.Permute[uint16, spec.Width128, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint16x16) Permute(indices Uint16x16) (z Uint16x16) {
	return Uint16x16{spec.Permute[uint16, spec.Width256, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint16x32) Permute(indices Uint16x32) (z Uint16x32) {
	return Uint16x32{spec.Permute[uint16, spec.Width512, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint16s) Permute(indices Uint16s) (z Uint16s) {
	return Uint16s{spec.Permute[uint16, spec.WidthScalable, uint16](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint32x4) Permute(indices Uint32x4) (z Uint32x4) {
	return Uint32x4{spec.Permute[uint32, spec.Width128, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint32x8) Permute(indices Uint32x8) (z Uint32x8) {
	return Uint32x8{spec.Permute[uint32, spec.Width256, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint32x16) Permute(indices Uint32x16) (z Uint32x16) {
	return Uint32x16{spec.Permute[uint32, spec.Width512, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint32s) Permute(indices Uint32s) (z Uint32s) {
	return Uint32s{spec.Permute[uint32, spec.WidthScalable, uint32](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint64x2) Permute(indices Uint64x2) (z Uint64x2) {
	return Uint64x2{spec.Permute[uint64, spec.Width128, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint64x4) Permute(indices Uint64x4) (z Uint64x4) {
	return Uint64x4{spec.Permute[uint64, spec.Width256, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint64x8) Permute(indices Uint64x8) (z Uint64x8) {
	return Uint64x8{spec.Permute[uint64, spec.Width512, uint64](x.v, indices.v)}
}

// Permute permutes x.
//
//	z[i] = x[indices[i] % len(x)]
func (x Uint64s) Permute(indices Uint64s) (z Uint64s) {
	return Uint64s{spec.Permute[uint64, spec.WidthScalable, uint64](x.v, indices.v)}
}
