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

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Float32x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[float32, spec.Width128, float64, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Float32x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[float32, spec.Width128, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Float32x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[float32, spec.Width128, int64, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Float32x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[float32, spec.Width128, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Float32x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[float32, spec.Width128, uint64, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Float32x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[float32, spec.Width256, float64, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Float32x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[float32, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Float32x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[float32, spec.Width256, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Float32x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[float32, spec.Width256, int64, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Float32x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[float32, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Float32x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[float32, spec.Width256, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Float32x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[float32, spec.Width256, uint64, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Float32x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[float32, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Float32x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[float32, spec.Width512, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Float32x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[float32, spec.Width512, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Float32x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[float32, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Float32x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[float32, spec.Width512, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Float32x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[float32, spec.Width512, uint32, spec.Width512](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Float32s) ConvertToInt32() (z Int32s) {
	return Int32s{spec.ConvertToZ[float32, spec.WidthScalable, int32, spec.WidthScalable](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Float32s) ConvertToUint32() (z Uint32s) {
	return Uint32s{spec.ConvertToZ[float32, spec.WidthScalable, uint32, spec.WidthScalable](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Float64x2) ConvertToInt64() (z Int64x2) {
	return Int64x2{spec.ConvertToZ[float64, spec.Width128, int64, spec.Width128](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Float64x2) ConvertToUint64() (z Uint64x2) {
	return Uint64x2{spec.ConvertToZ[float64, spec.Width128, uint64, spec.Width128](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Float64x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[float64, spec.Width256, float32, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Float64x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[float64, spec.Width256, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Float64x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[float64, spec.Width256, int64, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Float64x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[float64, spec.Width256, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Float64x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[float64, spec.Width256, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Float64x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[float64, spec.Width512, float32, spec.Width256](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Float64x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[float64, spec.Width512, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Float64x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[float64, spec.Width512, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Float64x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[float64, spec.Width512, int64, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Float64x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[float64, spec.Width512, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Float64x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[float64, spec.Width512, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Float64x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[float64, spec.Width512, uint64, spec.Width512](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Float64s) ConvertToInt64() (z Int64s) {
	return Int64s{spec.ConvertToZ[float64, spec.WidthScalable, int64, spec.WidthScalable](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Float64s) ConvertToUint64() (z Uint64s) {
	return Uint64s{spec.ConvertToZ[float64, spec.WidthScalable, uint64, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int8x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[int8, spec.Width128, float32, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Int8x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[int8, spec.Width128, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Int8x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[int8, spec.Width128, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Int8x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int8, spec.Width128, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int8x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[int8, spec.Width128, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int8x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[int8, spec.Width128, uint32, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Int8x32) ConvertToInt16() (z Int16x32) {
	return Int16x32{spec.ConvertToZ[int8, spec.Width256, int16, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Int8x32) ConvertToUint8() (z Uint8x32) {
	return Uint8x32{spec.ConvertToZ[int8, spec.Width256, uint8, spec.Width256](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int8x32) ConvertToUint16() (z Uint16x32) {
	return Uint16x32{spec.ConvertToZ[int8, spec.Width256, uint16, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Int8x64) ConvertToUint8() (z Uint8x64) {
	return Uint8x64{spec.ConvertToZ[int8, spec.Width512, uint8, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Int8s) ConvertToUint8() (z Uint8s) {
	return Uint8s{spec.ConvertToZ[int8, spec.WidthScalable, uint8, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int16x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[int16, spec.Width128, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Int16x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[int16, spec.Width128, float64, spec.Width512](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Int16x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[int16, spec.Width128, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Int16x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[int16, spec.Width128, int64, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int16x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int16, spec.Width128, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int16x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[int16, spec.Width128, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Int16x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[int16, spec.Width128, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int16x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[int16, spec.Width256, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Int16x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int16, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Int16x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[int16, spec.Width256, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Int16x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int16, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int16x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[int16, spec.Width256, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int16x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[int16, spec.Width256, uint32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Int16x32) ConvertToInt8() (z Int8x32) {
	return Int8x32{spec.ConvertToZ[int16, spec.Width512, int8, spec.Width256](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Int16x32) ConvertToUint8() (z Uint8x32) {
	return Uint8x32{spec.ConvertToZ[int16, spec.Width512, uint8, spec.Width256](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int16x32) ConvertToUint16() (z Uint16x32) {
	return Uint16x32{spec.ConvertToZ[int16, spec.Width512, uint16, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int16s) ConvertToUint16() (z Uint16s) {
	return Uint16s{spec.ConvertToZ[int16, spec.WidthScalable, uint16, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int32x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[int32, spec.Width128, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Int32x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[int32, spec.Width128, float64, spec.Width256](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Int32x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[int32, spec.Width128, int64, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int32x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[int32, spec.Width128, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Int32x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[int32, spec.Width128, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int32x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[int32, spec.Width256, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Int32x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[int32, spec.Width256, float64, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Int32x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[int32, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Int32x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[int32, spec.Width256, int64, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int32x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int32, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int32x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[int32, spec.Width256, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Int32x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[int32, spec.Width256, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int32x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[int32, spec.Width512, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Int32x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[int32, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Int32x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[int32, spec.Width512, int16, spec.Width256](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Int32x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[int32, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int32x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[int32, spec.Width512, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int32x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[int32, spec.Width512, uint32, spec.Width512](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int32s) ConvertToFloat32() (z Float32s) {
	return Float32s{spec.ConvertToZ[int32, spec.WidthScalable, float32, spec.WidthScalable](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int32s) ConvertToUint32() (z Uint32s) {
	return Uint32s{spec.ConvertToZ[int32, spec.WidthScalable, uint32, spec.WidthScalable](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Int64x2) ConvertToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertToZ[int64, spec.Width128, float64, spec.Width128](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Int64x2) ConvertToUint64() (z Uint64x2) {
	return Uint64x2{spec.ConvertToZ[int64, spec.Width128, uint64, spec.Width128](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int64x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[int64, spec.Width256, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Int64x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[int64, spec.Width256, float64, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Int64x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[int64, spec.Width256, int32, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int64x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[int64, spec.Width256, uint32, spec.Width128](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Int64x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[int64, spec.Width256, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Int64x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[int64, spec.Width512, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Int64x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[int64, spec.Width512, float64, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Int64x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[int64, spec.Width512, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Int64x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[int64, spec.Width512, int32, spec.Width256](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Int64x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[int64, spec.Width512, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Int64x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[int64, spec.Width512, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Int64x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[int64, spec.Width512, uint64, spec.Width512](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Int64s) ConvertToFloat64() (z Float64s) {
	return Float64s{spec.ConvertToZ[int64, spec.WidthScalable, float64, spec.WidthScalable](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Int64s) ConvertToUint64() (z Uint64s) {
	return Uint64s{spec.ConvertToZ[int64, spec.WidthScalable, uint64, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint8x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[uint8, spec.Width128, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Uint8x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint8, spec.Width128, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint8x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[uint8, spec.Width128, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint8x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[uint8, spec.Width128, int32, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Uint8x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[uint8, spec.Width128, uint16, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Uint8x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[uint8, spec.Width128, uint32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Uint8x32) ConvertToInt8() (z Int8x32) {
	return Int8x32{spec.ConvertToZ[uint8, spec.Width256, int8, spec.Width256](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint8x32) ConvertToInt16() (z Int16x32) {
	return Int16x32{spec.ConvertToZ[uint8, spec.Width256, int16, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Uint8x32) ConvertToUint16() (z Uint16x32) {
	return Uint16x32{spec.ConvertToZ[uint8, spec.Width256, uint16, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Uint8x64) ConvertToInt8() (z Int8x64) {
	return Int8x64{spec.ConvertToZ[uint8, spec.Width512, int8, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Uint8s) ConvertToInt8() (z Int8s) {
	return Int8s{spec.ConvertToZ[uint8, spec.WidthScalable, int8, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint16x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[uint16, spec.Width128, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Uint16x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[uint16, spec.Width128, float64, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint16x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint16, spec.Width128, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint16x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[uint16, spec.Width128, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Uint16x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[uint16, spec.Width128, int64, spec.Width512](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Uint16x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[uint16, spec.Width128, uint32, spec.Width256](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Uint16x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[uint16, spec.Width128, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint16x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[uint16, spec.Width256, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Uint16x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint16, spec.Width256, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint16x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[uint16, spec.Width256, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint16x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[uint16, spec.Width256, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Uint16x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint16, spec.Width256, uint8, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Uint16x16) ConvertToUint32() (z Uint32x16) {
	return Uint32x16{spec.ConvertToZ[uint16, spec.Width256, uint32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Uint16x32) ConvertToInt8() (z Int8x32) {
	return Int8x32{spec.ConvertToZ[uint16, spec.Width512, int8, spec.Width256](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint16x32) ConvertToInt16() (z Int16x32) {
	return Int16x32{spec.ConvertToZ[uint16, spec.Width512, int16, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Uint16x32) ConvertToUint8() (z Uint8x32) {
	return Uint8x32{spec.ConvertToZ[uint16, spec.Width512, uint8, spec.Width256](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint16s) ConvertToInt16() (z Int16s) {
	return Int16s{spec.ConvertToZ[uint16, spec.WidthScalable, int16, spec.WidthScalable](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint32x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[uint32, spec.Width128, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Uint32x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[uint32, spec.Width128, float64, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint32x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[uint32, spec.Width128, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Uint32x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[uint32, spec.Width128, int64, spec.Width256](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Uint32x4) ConvertToUint64() (z Uint64x4) {
	return Uint64x4{spec.ConvertToZ[uint32, spec.Width128, uint64, spec.Width256](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint32x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[uint32, spec.Width256, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Uint32x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[uint32, spec.Width256, float64, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint32x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint32, spec.Width256, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint32x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[uint32, spec.Width256, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Uint32x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[uint32, spec.Width256, int64, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Uint32x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[uint32, spec.Width256, uint16, spec.Width128](x.v)}
}

// ConvertToUint64 converts element values to uint64. The result has the same number of lanes.
func (x Uint32x8) ConvertToUint64() (z Uint64x8) {
	return Uint64x8{spec.ConvertToZ[uint32, spec.Width256, uint64, spec.Width512](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint32x16) ConvertToFloat32() (z Float32x16) {
	return Float32x16{spec.ConvertToZ[uint32, spec.Width512, float32, spec.Width512](x.v)}
}

// ConvertToInt8 converts element values to int8. The result has the same number of lanes.
func (x Uint32x16) ConvertToInt8() (z Int8x16) {
	return Int8x16{spec.ConvertToZ[uint32, spec.Width512, int8, spec.Width128](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint32x16) ConvertToInt16() (z Int16x16) {
	return Int16x16{spec.ConvertToZ[uint32, spec.Width512, int16, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint32x16) ConvertToInt32() (z Int32x16) {
	return Int32x16{spec.ConvertToZ[uint32, spec.Width512, int32, spec.Width512](x.v)}
}

// ConvertToUint8 converts element values to uint8. The result has the same number of lanes.
func (x Uint32x16) ConvertToUint8() (z Uint8x16) {
	return Uint8x16{spec.ConvertToZ[uint32, spec.Width512, uint8, spec.Width128](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Uint32x16) ConvertToUint16() (z Uint16x16) {
	return Uint16x16{spec.ConvertToZ[uint32, spec.Width512, uint16, spec.Width256](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint32s) ConvertToFloat32() (z Float32s) {
	return Float32s{spec.ConvertToZ[uint32, spec.WidthScalable, float32, spec.WidthScalable](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint32s) ConvertToInt32() (z Int32s) {
	return Int32s{spec.ConvertToZ[uint32, spec.WidthScalable, int32, spec.WidthScalable](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Uint64x2) ConvertToFloat64() (z Float64x2) {
	return Float64x2{spec.ConvertToZ[uint64, spec.Width128, float64, spec.Width128](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Uint64x2) ConvertToInt64() (z Int64x2) {
	return Int64x2{spec.ConvertToZ[uint64, spec.Width128, int64, spec.Width128](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint64x4) ConvertToFloat32() (z Float32x4) {
	return Float32x4{spec.ConvertToZ[uint64, spec.Width256, float32, spec.Width128](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Uint64x4) ConvertToFloat64() (z Float64x4) {
	return Float64x4{spec.ConvertToZ[uint64, spec.Width256, float64, spec.Width256](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint64x4) ConvertToInt32() (z Int32x4) {
	return Int32x4{spec.ConvertToZ[uint64, spec.Width256, int32, spec.Width128](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Uint64x4) ConvertToInt64() (z Int64x4) {
	return Int64x4{spec.ConvertToZ[uint64, spec.Width256, int64, spec.Width256](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Uint64x4) ConvertToUint32() (z Uint32x4) {
	return Uint32x4{spec.ConvertToZ[uint64, spec.Width256, uint32, spec.Width128](x.v)}
}

// ConvertToFloat32 converts element values to float32. The result has the same number of lanes.
func (x Uint64x8) ConvertToFloat32() (z Float32x8) {
	return Float32x8{spec.ConvertToZ[uint64, spec.Width512, float32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Uint64x8) ConvertToFloat64() (z Float64x8) {
	return Float64x8{spec.ConvertToZ[uint64, spec.Width512, float64, spec.Width512](x.v)}
}

// ConvertToInt16 converts element values to int16. The result has the same number of lanes.
func (x Uint64x8) ConvertToInt16() (z Int16x8) {
	return Int16x8{spec.ConvertToZ[uint64, spec.Width512, int16, spec.Width128](x.v)}
}

// ConvertToInt32 converts element values to int32. The result has the same number of lanes.
func (x Uint64x8) ConvertToInt32() (z Int32x8) {
	return Int32x8{spec.ConvertToZ[uint64, spec.Width512, int32, spec.Width256](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Uint64x8) ConvertToInt64() (z Int64x8) {
	return Int64x8{spec.ConvertToZ[uint64, spec.Width512, int64, spec.Width512](x.v)}
}

// ConvertToUint16 converts element values to uint16. The result has the same number of lanes.
func (x Uint64x8) ConvertToUint16() (z Uint16x8) {
	return Uint16x8{spec.ConvertToZ[uint64, spec.Width512, uint16, spec.Width128](x.v)}
}

// ConvertToUint32 converts element values to uint32. The result has the same number of lanes.
func (x Uint64x8) ConvertToUint32() (z Uint32x8) {
	return Uint32x8{spec.ConvertToZ[uint64, spec.Width512, uint32, spec.Width256](x.v)}
}

// ConvertToFloat64 converts element values to float64. The result has the same number of lanes.
func (x Uint64s) ConvertToFloat64() (z Float64s) {
	return Float64s{spec.ConvertToZ[uint64, spec.WidthScalable, float64, spec.WidthScalable](x.v)}
}

// ConvertToInt64 converts element values to int64. The result has the same number of lanes.
func (x Uint64s) ConvertToInt64() (z Int64s) {
	return Int64s{spec.ConvertToZ[uint64, spec.WidthScalable, int64, spec.WidthScalable](x.v)}
}

// ExtendLo8ToInt16 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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) is less than the number of
// elements in the vector, 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 a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat32x4Part(s []float32) (z Float32x4, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.Width128](s)
	return Float32x4{r1}, r2
}

// LoadFloat32x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat32x8Part(s []float32) (z Float32x8, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.Width256](s)
	return Float32x8{r1}, r2
}

// LoadFloat32x16Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat32x16Part(s []float32) (z Float32x16, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.Width512](s)
	return Float32x16{r1}, r2
}

// LoadFloat32sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat32sPart(s []float32) (z Float32s, n int) {
	r1, r2 := spec.LoadZPart[float32, spec.WidthScalable](s)
	return Float32s{r1}, r2
}

// LoadFloat64x2Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat64x2Part(s []float64) (z Float64x2, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.Width128](s)
	return Float64x2{r1}, r2
}

// LoadFloat64x4Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat64x4Part(s []float64) (z Float64x4, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.Width256](s)
	return Float64x4{r1}, r2
}

// LoadFloat64x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat64x8Part(s []float64) (z Float64x8, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.Width512](s)
	return Float64x8{r1}, r2
}

// LoadFloat64sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadFloat64sPart(s []float64) (z Float64s, n int) {
	r1, r2 := spec.LoadZPart[float64, spec.WidthScalable](s)
	return Float64s{r1}, r2
}

// LoadInt8x16Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt8x16Part(s []int8) (z Int8x16, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.Width128](s)
	return Int8x16{r1}, r2
}

// LoadInt8x32Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt8x32Part(s []int8) (z Int8x32, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.Width256](s)
	return Int8x32{r1}, r2
}

// LoadInt8x64Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt8x64Part(s []int8) (z Int8x64, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.Width512](s)
	return Int8x64{r1}, r2
}

// LoadInt8sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt8sPart(s []int8) (z Int8s, n int) {
	r1, r2 := spec.LoadZPart[int8, spec.WidthScalable](s)
	return Int8s{r1}, r2
}

// LoadInt16x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt16x8Part(s []int16) (z Int16x8, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.Width128](s)
	return Int16x8{r1}, r2
}

// LoadInt16x16Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt16x16Part(s []int16) (z Int16x16, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.Width256](s)
	return Int16x16{r1}, r2
}

// LoadInt16x32Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt16x32Part(s []int16) (z Int16x32, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.Width512](s)
	return Int16x32{r1}, r2
}

// LoadInt16sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt16sPart(s []int16) (z Int16s, n int) {
	r1, r2 := spec.LoadZPart[int16, spec.WidthScalable](s)
	return Int16s{r1}, r2
}

// LoadInt32x4Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt32x4Part(s []int32) (z Int32x4, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.Width128](s)
	return Int32x4{r1}, r2
}

// LoadInt32x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt32x8Part(s []int32) (z Int32x8, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.Width256](s)
	return Int32x8{r1}, r2
}

// LoadInt32x16Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt32x16Part(s []int32) (z Int32x16, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.Width512](s)
	return Int32x16{r1}, r2
}

// LoadInt32sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt32sPart(s []int32) (z Int32s, n int) {
	r1, r2 := spec.LoadZPart[int32, spec.WidthScalable](s)
	return Int32s{r1}, r2
}

// LoadInt64x2Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt64x2Part(s []int64) (z Int64x2, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.Width128](s)
	return Int64x2{r1}, r2
}

// LoadInt64x4Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt64x4Part(s []int64) (z Int64x4, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.Width256](s)
	return Int64x4{r1}, r2
}

// LoadInt64x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt64x8Part(s []int64) (z Int64x8, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.Width512](s)
	return Int64x8{r1}, r2
}

// LoadInt64sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadInt64sPart(s []int64) (z Int64s, n int) {
	r1, r2 := spec.LoadZPart[int64, spec.WidthScalable](s)
	return Int64s{r1}, r2
}

// LoadUint8x16Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint8x16Part(s []uint8) (z Uint8x16, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.Width128](s)
	return Uint8x16{r1}, r2
}

// LoadUint8x32Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint8x32Part(s []uint8) (z Uint8x32, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.Width256](s)
	return Uint8x32{r1}, r2
}

// LoadUint8x64Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint8x64Part(s []uint8) (z Uint8x64, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.Width512](s)
	return Uint8x64{r1}, r2
}

// LoadUint8sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint8sPart(s []uint8) (z Uint8s, n int) {
	r1, r2 := spec.LoadZPart[uint8, spec.WidthScalable](s)
	return Uint8s{r1}, r2
}

// LoadUint16x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint16x8Part(s []uint16) (z Uint16x8, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.Width128](s)
	return Uint16x8{r1}, r2
}

// LoadUint16x16Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint16x16Part(s []uint16) (z Uint16x16, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.Width256](s)
	return Uint16x16{r1}, r2
}

// LoadUint16x32Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint16x32Part(s []uint16) (z Uint16x32, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.Width512](s)
	return Uint16x32{r1}, r2
}

// LoadUint16sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint16sPart(s []uint16) (z Uint16s, n int) {
	r1, r2 := spec.LoadZPart[uint16, spec.WidthScalable](s)
	return Uint16s{r1}, r2
}

// LoadUint32x4Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint32x4Part(s []uint32) (z Uint32x4, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.Width128](s)
	return Uint32x4{r1}, r2
}

// LoadUint32x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint32x8Part(s []uint32) (z Uint32x8, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.Width256](s)
	return Uint32x8{r1}, r2
}

// LoadUint32x16Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint32x16Part(s []uint32) (z Uint32x16, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.Width512](s)
	return Uint32x16{r1}, r2
}

// LoadUint32sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint32sPart(s []uint32) (z Uint32s, n int) {
	r1, r2 := spec.LoadZPart[uint32, spec.WidthScalable](s)
	return Uint32s{r1}, r2
}

// LoadUint64x2Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint64x2Part(s []uint64) (z Uint64x2, n int) {
	r1, r2 := spec.LoadZPart[uint64, spec.Width128](s)
	return Uint64x2{r1}, r2
}

// LoadUint64x4Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint64x4Part(s []uint64) (z Uint64x4, n int) {
	r1, r2 := spec.LoadZPart[uint64, spec.Width256](s)
	return Uint64x4{r1}, r2
}

// LoadUint64x8Part loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
func LoadUint64x8Part(s []uint64) (z Uint64x8, n int) {
	r1, r2 := spec.LoadZPart[uint64, spec.Width512](s)
	return Uint64x8{r1}, r2
}

// LoadUint64sPart loads a slice into a vector and returns the vector and the number
// of elements loaded from s. If len(s) is less than the number of elements in
// the vector, the remaining vector elements will be zero-filled.
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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than x.Len(),
// 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) is less than 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 at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float32x4) StorePart(s []float32) int {
	return spec.StorePart[float32, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float32x8) StorePart(s []float32) int {
	return spec.StorePart[float32, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float32x16) StorePart(s []float32) int {
	return spec.StorePart[float32, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float32s) StorePart(s []float32) int {
	return spec.StorePart[float32, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float64x2) StorePart(s []float64) int {
	return spec.StorePart[float64, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float64x4) StorePart(s []float64) int {
	return spec.StorePart[float64, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float64x8) StorePart(s []float64) int {
	return spec.StorePart[float64, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Float64s) StorePart(s []float64) int {
	return spec.StorePart[float64, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int8x16) StorePart(s []int8) int {
	return spec.StorePart[int8, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int8x32) StorePart(s []int8) int {
	return spec.StorePart[int8, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int8x64) StorePart(s []int8) int {
	return spec.StorePart[int8, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int8s) StorePart(s []int8) int {
	return spec.StorePart[int8, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int16x8) StorePart(s []int16) int {
	return spec.StorePart[int16, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int16x16) StorePart(s []int16) int {
	return spec.StorePart[int16, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int16x32) StorePart(s []int16) int {
	return spec.StorePart[int16, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int16s) StorePart(s []int16) int {
	return spec.StorePart[int16, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int32x4) StorePart(s []int32) int {
	return spec.StorePart[int32, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int32x8) StorePart(s []int32) int {
	return spec.StorePart[int32, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int32x16) StorePart(s []int32) int {
	return spec.StorePart[int32, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int32s) StorePart(s []int32) int {
	return spec.StorePart[int32, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int64x2) StorePart(s []int64) int {
	return spec.StorePart[int64, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int64x4) StorePart(s []int64) int {
	return spec.StorePart[int64, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int64x8) StorePart(s []int64) int {
	return spec.StorePart[int64, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Int64s) StorePart(s []int64) int {
	return spec.StorePart[int64, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint8x16) StorePart(s []uint8) int {
	return spec.StorePart[uint8, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint8x32) StorePart(s []uint8) int {
	return spec.StorePart[uint8, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint8x64) StorePart(s []uint8) int {
	return spec.StorePart[uint8, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint8s) StorePart(s []uint8) int {
	return spec.StorePart[uint8, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint16x8) StorePart(s []uint16) int {
	return spec.StorePart[uint16, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint16x16) StorePart(s []uint16) int {
	return spec.StorePart[uint16, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint16x32) StorePart(s []uint16) int {
	return spec.StorePart[uint16, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint16s) StorePart(s []uint16) int {
	return spec.StorePart[uint16, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint32x4) StorePart(s []uint32) int {
	return spec.StorePart[uint32, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint32x8) StorePart(s []uint32) int {
	return spec.StorePart[uint32, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint32x16) StorePart(s []uint32) int {
	return spec.StorePart[uint32, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint32s) StorePart(s []uint32) int {
	return spec.StorePart[uint32, spec.WidthScalable](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint64x2) StorePart(s []uint64) int {
	return spec.StorePart[uint64, spec.Width128](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint64x4) StorePart(s []uint64) int {
	return spec.StorePart[uint64, spec.Width256](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint64x8) StorePart(s []uint64) int {
	return spec.StorePart[uint64, spec.Width512](x.v, s)
}

// StorePart stores at most len(s) elements of x into s and returns the number
// of elements stored.
func (x Uint64s) StorePart(s []uint64) int {
	return spec.StorePart[uint64, spec.WidthScalable](x.v, s)
}

// Mask8x16FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask8x16FromBits(x uint16) (z Mask8x16) {
	return Mask8x16{spec.MaskFromBits[spec.Mask8, spec.Width128](spec.UintN(x))}
}

// Mask8x32FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask8x32FromBits(x uint32) (z Mask8x32) {
	return Mask8x32{spec.MaskFromBits[spec.Mask8, spec.Width256](spec.UintN(x))}
}

// Mask8x64FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask8x64FromBits(x uint64) (z Mask8x64) {
	return Mask8x64{spec.MaskFromBits[spec.Mask8, spec.Width512](spec.UintN(x))}
}

// Mask16x8FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask16x8FromBits(x uint8) (z Mask16x8) {
	return Mask16x8{spec.MaskFromBits[spec.Mask16, spec.Width128](spec.UintN(x))}
}

// Mask16x16FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask16x16FromBits(x uint16) (z Mask16x16) {
	return Mask16x16{spec.MaskFromBits[spec.Mask16, spec.Width256](spec.UintN(x))}
}

// Mask16x32FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask16x32FromBits(x uint32) (z Mask16x32) {
	return Mask16x32{spec.MaskFromBits[spec.Mask16, spec.Width512](spec.UintN(x))}
}

// Mask32x4FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask32x4FromBits(x uint8) (z Mask32x4) {
	return Mask32x4{spec.MaskFromBits[spec.Mask32, spec.Width128](spec.UintN(x))}
}

// Mask32x8FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask32x8FromBits(x uint8) (z Mask32x8) {
	return Mask32x8{spec.MaskFromBits[spec.Mask32, spec.Width256](spec.UintN(x))}
}

// Mask32x16FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask32x16FromBits(x uint16) (z Mask32x16) {
	return Mask32x16{spec.MaskFromBits[spec.Mask32, spec.Width512](spec.UintN(x))}
}

// Mask64x2FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask64x2FromBits(x uint8) (z Mask64x2) {
	return Mask64x2{spec.MaskFromBits[spec.Mask64, spec.Width128](spec.UintN(x))}
}

// Mask64x4FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask64x4FromBits(x uint8) (z Mask64x4) {
	return Mask64x4{spec.MaskFromBits[spec.Mask64, spec.Width256](spec.UintN(x))}
}

// Mask64x8FromBits constructs a mask from a bitmap value. If bit i of y is set,
// then mask element i of the result is set.
func Mask64x8FromBits(x uint8) (z Mask64x8) {
	return Mask64x8{spec.MaskFromBits[spec.Mask64, spec.Width512](spec.UintN(x))}
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask8x16) ToBits() (z uint16) {
	return uint16(spec.MaskToBits[spec.Mask8, spec.Width128](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask8x32) ToBits() (z uint32) {
	return uint32(spec.MaskToBits[spec.Mask8, spec.Width256](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask8x64) ToBits() (z uint64) {
	return uint64(spec.MaskToBits[spec.Mask8, spec.Width512](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask16x8) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask16, spec.Width128](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask16x16) ToBits() (z uint16) {
	return uint16(spec.MaskToBits[spec.Mask16, spec.Width256](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask16x32) ToBits() (z uint32) {
	return uint32(spec.MaskToBits[spec.Mask16, spec.Width512](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask32x4) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask32, spec.Width128](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask32x8) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask32, spec.Width256](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask32x16) ToBits() (z uint16) {
	return uint16(spec.MaskToBits[spec.Mask32, spec.Width512](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask64x2) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask64, spec.Width128](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
func (x Mask64x4) ToBits() (z uint8) {
	return uint8(spec.MaskToBits[spec.Mask64, spec.Width256](x.v))
}

// ToBits constructs a bitmap from mask x, where bit i is set if mask
// element i is set.
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".
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".
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".
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".
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".
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".
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".
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".
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".
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".
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".
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".
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".
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".
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".
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".
func (x Mask64s) ToInt64s() (z Int64s) {
	return Int64s{spec.MaskToZ[spec.Mask64, spec.WidthScalable, int64](x.v)}
}

// Add adds corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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 corresponding elements of two vectors.
//
//	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)}
}

// DotProductPairs multiplies corresponding elements of x and y, and sums
// adjacent pairs, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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, yielding a vector of half as many elements with twice the
// input element size.
//
//	w[i] = x[i] * y[i]        // Double width
//	z[i] = w[2*i] + w[2*i+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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
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 yields a vector of half as many
// elements with twice the input element size.
//
//	w[i] = x[i] * y[i]        // Double width, saturated
//	z[i] = w[2*i] + w[2*i+1]  // Saturated
func (x Uint32s) DotProductPairsSaturated(y Int32s) (z Int64s) {
	return Int64s{spec.DotProductPairsSaturated[uint32, spec.WidthScalable, int32, int64](x.v, y.v)}
}

// ReshapeToUint16s reinterprets the bits of x as a Uint16x8 vector. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 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. The least
// significant bit of element 0 is bit 0
func (x Uint64s) ReshapeToUint32s() (z Uint32s) {
	return Uint32s{spec.ReshapeToUints[uint64, spec.WidthScalable, uint32](x.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)}
}
