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

//go:build goexperiment.simd && arm64

package bridge

import "simd/archsimd"

// These types/methods/functions forward calls to their counterparts in simd/archsimd.
// Interposing this package allows a clean separation of "simd" from "archsimd" and
// also allows additional useful exported declarations that would weirdly pollute archsimd.

type Float32x4 archsimd.Float32x4

func LoadFloat32x4(s []float32) Float32x4 {
	return Float32x4(archsimd.LoadFloat32x4(s))
}
func LoadFloat32x4Part(s []float32) (Float32x4, int) {
	v, n := archsimd.LoadFloat32x4Part(s)
	return Float32x4(v), n
}
func BroadcastFloat32x4(x float32) Float32x4 {
	return Float32x4(archsimd.BroadcastFloat32x4(x))
}

type Float64x2 archsimd.Float64x2

func LoadFloat64x2(s []float64) Float64x2 {
	return Float64x2(archsimd.LoadFloat64x2(s))
}
func LoadFloat64x2Part(s []float64) (Float64x2, int) {
	v, n := archsimd.LoadFloat64x2Part(s)
	return Float64x2(v), n
}
func BroadcastFloat64x2(x float64) Float64x2 {
	return Float64x2(archsimd.BroadcastFloat64x2(x))
}

type Int16x8 archsimd.Int16x8

func LoadInt16x8(s []int16) Int16x8 {
	return Int16x8(archsimd.LoadInt16x8(s))
}
func LoadInt16x8Part(s []int16) (Int16x8, int) {
	v, n := archsimd.LoadInt16x8Part(s)
	return Int16x8(v), n
}
func BroadcastInt16x8(x int16) Int16x8 {
	return Int16x8(archsimd.BroadcastInt16x8(x))
}

type Int32x4 archsimd.Int32x4

func LoadInt32x4(s []int32) Int32x4 {
	return Int32x4(archsimd.LoadInt32x4(s))
}
func LoadInt32x4Part(s []int32) (Int32x4, int) {
	v, n := archsimd.LoadInt32x4Part(s)
	return Int32x4(v), n
}
func BroadcastInt32x4(x int32) Int32x4 {
	return Int32x4(archsimd.BroadcastInt32x4(x))
}

type Int64x2 archsimd.Int64x2

func LoadInt64x2(s []int64) Int64x2 {
	return Int64x2(archsimd.LoadInt64x2(s))
}
func LoadInt64x2Part(s []int64) (Int64x2, int) {
	v, n := archsimd.LoadInt64x2Part(s)
	return Int64x2(v), n
}
func BroadcastInt64x2(x int64) Int64x2 {
	return Int64x2(archsimd.BroadcastInt64x2(x))
}

type Int8x16 archsimd.Int8x16

func LoadInt8x16(s []int8) Int8x16 {
	return Int8x16(archsimd.LoadInt8x16(s))
}
func LoadInt8x16Part(s []int8) (Int8x16, int) {
	v, n := archsimd.LoadInt8x16Part(s)
	return Int8x16(v), n
}
func BroadcastInt8x16(x int8) Int8x16 {
	return Int8x16(archsimd.BroadcastInt8x16(x))
}

type Mask16x8 archsimd.Mask16x8
type Mask32x4 archsimd.Mask32x4
type Mask64x2 archsimd.Mask64x2
type Mask8x16 archsimd.Mask8x16
type Uint16x8 archsimd.Uint16x8

func LoadUint16x8(s []uint16) Uint16x8 {
	return Uint16x8(archsimd.LoadUint16x8(s))
}
func LoadUint16x8Part(s []uint16) (Uint16x8, int) {
	v, n := archsimd.LoadUint16x8Part(s)
	return Uint16x8(v), n
}
func BroadcastUint16x8(x uint16) Uint16x8 {
	return Uint16x8(archsimd.BroadcastUint16x8(x))
}

type Uint32x4 archsimd.Uint32x4

func LoadUint32x4(s []uint32) Uint32x4 {
	return Uint32x4(archsimd.LoadUint32x4(s))
}
func LoadUint32x4Part(s []uint32) (Uint32x4, int) {
	v, n := archsimd.LoadUint32x4Part(s)
	return Uint32x4(v), n
}
func BroadcastUint32x4(x uint32) Uint32x4 {
	return Uint32x4(archsimd.BroadcastUint32x4(x))
}

type Uint64x2 archsimd.Uint64x2

func LoadUint64x2(s []uint64) Uint64x2 {
	return Uint64x2(archsimd.LoadUint64x2(s))
}
func LoadUint64x2Part(s []uint64) (Uint64x2, int) {
	v, n := archsimd.LoadUint64x2Part(s)
	return Uint64x2(v), n
}
func BroadcastUint64x2(x uint64) Uint64x2 {
	return Uint64x2(archsimd.BroadcastUint64x2(x))
}

type Uint8x16 archsimd.Uint8x16

func LoadUint8x16(s []uint8) Uint8x16 {
	return Uint8x16(archsimd.LoadUint8x16(s))
}
func LoadUint8x16Part(s []uint8) (Uint8x16, int) {
	v, n := archsimd.LoadUint8x16Part(s)
	return Uint8x16(v), n
}
func BroadcastUint8x16(x uint8) Uint8x16 {
	return Uint8x16(archsimd.BroadcastUint8x16(x))
}

func (x Int8x16) Abs() Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Abs())
}

func (x Int8x16) Add(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Add(archsimd.Int8x16(y)))
}

func (x Int8x16) AddSaturated(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).AddSaturated(archsimd.Int8x16(y)))
}

func (x Int8x16) And(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).And(archsimd.Int8x16(y)))
}

func (x Int8x16) AndNot(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).AndNot(archsimd.Int8x16(y)))
}

func (x Int8x16) ConvertToUint8() Uint8x16 {
	return Uint8x16((archsimd.Int8x16(x)).ConvertToUint8())
}

func (x Int8x16) Equal(y Int8x16) Mask8x16 {
	return Mask8x16((archsimd.Int8x16(x)).Equal(archsimd.Int8x16(y)))
}

func (x Int8x16) Greater(y Int8x16) Mask8x16 {
	return Mask8x16((archsimd.Int8x16(x)).Greater(archsimd.Int8x16(y)))
}

func (x Int8x16) GreaterEqual(y Int8x16) Mask8x16 {
	return Mask8x16((archsimd.Int8x16(x)).GreaterEqual(archsimd.Int8x16(y)))
}

func (x Int8x16) IfElse(mask Mask8x16, y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).IfElse(archsimd.Mask8x16(mask), archsimd.Int8x16(y)))
}

func (x Int8x16) Len() int {
	return (archsimd.Int8x16(x)).Len()
}

func (x Int8x16) Less(y Int8x16) Mask8x16 {
	return Mask8x16((archsimd.Int8x16(x)).Less(archsimd.Int8x16(y)))
}

func (x Int8x16) LessEqual(y Int8x16) Mask8x16 {
	return Mask8x16((archsimd.Int8x16(x)).LessEqual(archsimd.Int8x16(y)))
}

func (x Int8x16) Masked(mask Mask8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Masked(archsimd.Mask8x16(mask)))
}

func (x Int8x16) Max(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Max(archsimd.Int8x16(y)))
}

func (x Int8x16) Min(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Min(archsimd.Int8x16(y)))
}

func (x Int8x16) Mul(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Mul(archsimd.Int8x16(y)))
}

func (x Int8x16) Neg() Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Neg())
}

func (x Int8x16) Not() Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Not())
}

func (x Int8x16) NotEqual(y Int8x16) Mask8x16 {
	return Mask8x16((archsimd.Int8x16(x)).NotEqual(archsimd.Int8x16(y)))
}

func (x Int8x16) Or(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Or(archsimd.Int8x16(y)))
}

func (x Int8x16) Store(s []int8) {
	(archsimd.Int8x16(x)).Store(s)
}

func (x Int8x16) StorePart(s []int8) int {
	return (archsimd.Int8x16(x)).StorePart(s)
}

func (x Int8x16) String() string {
	return (archsimd.Int8x16(x)).String()
}

func (x Int8x16) Sub(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Sub(archsimd.Int8x16(y)))
}

func (x Int8x16) SubSaturated(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).SubSaturated(archsimd.Int8x16(y)))
}

func (x Int8x16) ToBits() Uint8x16 {
	return Uint8x16((archsimd.Int8x16(x)).ToBits())
}

func (x Int8x16) ToMask() Mask8x16 {
	return Mask8x16((archsimd.Int8x16(x)).ToMask())
}

func (x Int8x16) Xor(y Int8x16) Int8x16 {
	return Int8x16((archsimd.Int8x16(x)).Xor(archsimd.Int8x16(y)))
}

func (x Int16x8) Abs() Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Abs())
}

func (x Int16x8) Add(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Add(archsimd.Int16x8(y)))
}

func (x Int16x8) AddSaturated(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).AddSaturated(archsimd.Int16x8(y)))
}

func (x Int16x8) And(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).And(archsimd.Int16x8(y)))
}

func (x Int16x8) AndNot(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).AndNot(archsimd.Int16x8(y)))
}

func (x Int16x8) ConvertToUint16() Uint16x8 {
	return Uint16x8((archsimd.Int16x8(x)).ConvertToUint16())
}

func (x Int16x8) Equal(y Int16x8) Mask16x8 {
	return Mask16x8((archsimd.Int16x8(x)).Equal(archsimd.Int16x8(y)))
}

func (x Int16x8) Greater(y Int16x8) Mask16x8 {
	return Mask16x8((archsimd.Int16x8(x)).Greater(archsimd.Int16x8(y)))
}

func (x Int16x8) GreaterEqual(y Int16x8) Mask16x8 {
	return Mask16x8((archsimd.Int16x8(x)).GreaterEqual(archsimd.Int16x8(y)))
}

func (x Int16x8) IfElse(mask Mask16x8, y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).IfElse(archsimd.Mask16x8(mask), archsimd.Int16x8(y)))
}

func (x Int16x8) Len() int {
	return (archsimd.Int16x8(x)).Len()
}

func (x Int16x8) Less(y Int16x8) Mask16x8 {
	return Mask16x8((archsimd.Int16x8(x)).Less(archsimd.Int16x8(y)))
}

func (x Int16x8) LessEqual(y Int16x8) Mask16x8 {
	return Mask16x8((archsimd.Int16x8(x)).LessEqual(archsimd.Int16x8(y)))
}

func (x Int16x8) Masked(mask Mask16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Masked(archsimd.Mask16x8(mask)))
}

func (x Int16x8) Max(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Max(archsimd.Int16x8(y)))
}

func (x Int16x8) Min(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Min(archsimd.Int16x8(y)))
}

func (x Int16x8) Mul(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Mul(archsimd.Int16x8(y)))
}

func (x Int16x8) Neg() Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Neg())
}

func (x Int16x8) Not() Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Not())
}

func (x Int16x8) NotEqual(y Int16x8) Mask16x8 {
	return Mask16x8((archsimd.Int16x8(x)).NotEqual(archsimd.Int16x8(y)))
}

func (x Int16x8) Or(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Or(archsimd.Int16x8(y)))
}

func (x Int16x8) RotateAllLeft(dist uint64) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).RotateAllLeft(dist))
}

func (x Int16x8) RotateAllRight(dist uint64) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).RotateAllRight(dist))
}

func (x Int16x8) ShiftAllLeft(y uint64) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).ShiftAllLeft(y))
}

func (x Int16x8) ShiftAllRight(y uint64) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).ShiftAllRight(y))
}

func (x Int16x8) Store(s []int16) {
	(archsimd.Int16x8(x)).Store(s)
}

func (x Int16x8) StorePart(s []int16) int {
	return (archsimd.Int16x8(x)).StorePart(s)
}

func (x Int16x8) String() string {
	return (archsimd.Int16x8(x)).String()
}

func (x Int16x8) Sub(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Sub(archsimd.Int16x8(y)))
}

func (x Int16x8) SubSaturated(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).SubSaturated(archsimd.Int16x8(y)))
}

func (x Int16x8) ToBits() Uint16x8 {
	return Uint16x8((archsimd.Int16x8(x)).ToBits())
}

func (x Int16x8) ToMask() Mask16x8 {
	return Mask16x8((archsimd.Int16x8(x)).ToMask())
}

func (x Int16x8) Xor(y Int16x8) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).Xor(archsimd.Int16x8(y)))
}

func (x Int32x4) Abs() Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Abs())
}

func (x Int32x4) Add(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Add(archsimd.Int32x4(y)))
}

func (x Int32x4) And(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).And(archsimd.Int32x4(y)))
}

func (x Int32x4) AndNot(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).AndNot(archsimd.Int32x4(y)))
}

func (x Int32x4) ConvertToFloat32() Float32x4 {
	return Float32x4((archsimd.Int32x4(x)).ConvertToFloat32())
}

func (x Int32x4) ConvertToUint32() Uint32x4 {
	return Uint32x4((archsimd.Int32x4(x)).ConvertToUint32())
}

func (x Int32x4) Equal(y Int32x4) Mask32x4 {
	return Mask32x4((archsimd.Int32x4(x)).Equal(archsimd.Int32x4(y)))
}

func (x Int32x4) Greater(y Int32x4) Mask32x4 {
	return Mask32x4((archsimd.Int32x4(x)).Greater(archsimd.Int32x4(y)))
}

func (x Int32x4) GreaterEqual(y Int32x4) Mask32x4 {
	return Mask32x4((archsimd.Int32x4(x)).GreaterEqual(archsimd.Int32x4(y)))
}

func (x Int32x4) IfElse(mask Mask32x4, y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).IfElse(archsimd.Mask32x4(mask), archsimd.Int32x4(y)))
}

func (x Int32x4) Len() int {
	return (archsimd.Int32x4(x)).Len()
}

func (x Int32x4) Less(y Int32x4) Mask32x4 {
	return Mask32x4((archsimd.Int32x4(x)).Less(archsimd.Int32x4(y)))
}

func (x Int32x4) LessEqual(y Int32x4) Mask32x4 {
	return Mask32x4((archsimd.Int32x4(x)).LessEqual(archsimd.Int32x4(y)))
}

func (x Int32x4) Masked(mask Mask32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Masked(archsimd.Mask32x4(mask)))
}

func (x Int32x4) Max(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Max(archsimd.Int32x4(y)))
}

func (x Int32x4) Min(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Min(archsimd.Int32x4(y)))
}

func (x Int32x4) Mul(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Mul(archsimd.Int32x4(y)))
}

func (x Int32x4) Neg() Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Neg())
}

func (x Int32x4) Not() Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Not())
}

func (x Int32x4) NotEqual(y Int32x4) Mask32x4 {
	return Mask32x4((archsimd.Int32x4(x)).NotEqual(archsimd.Int32x4(y)))
}

func (x Int32x4) Or(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Or(archsimd.Int32x4(y)))
}

func (x Int32x4) RotateAllLeft(dist uint64) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).RotateAllLeft(dist))
}

func (x Int32x4) RotateAllRight(dist uint64) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).RotateAllRight(dist))
}

func (x Int32x4) ShiftAllLeft(y uint64) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).ShiftAllLeft(y))
}

func (x Int32x4) ShiftAllRight(y uint64) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).ShiftAllRight(y))
}

func (x Int32x4) Store(s []int32) {
	(archsimd.Int32x4(x)).Store(s)
}

func (x Int32x4) StorePart(s []int32) int {
	return (archsimd.Int32x4(x)).StorePart(s)
}

func (x Int32x4) String() string {
	return (archsimd.Int32x4(x)).String()
}

func (x Int32x4) Sub(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Sub(archsimd.Int32x4(y)))
}

func (x Int32x4) ToBits() Uint32x4 {
	return Uint32x4((archsimd.Int32x4(x)).ToBits())
}

func (x Int32x4) ToMask() Mask32x4 {
	return Mask32x4((archsimd.Int32x4(x)).ToMask())
}

func (x Int32x4) Xor(y Int32x4) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).Xor(archsimd.Int32x4(y)))
}

func (x Int64x2) Add(y Int64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).Add(archsimd.Int64x2(y)))
}

func (x Int64x2) And(y Int64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).And(archsimd.Int64x2(y)))
}

func (x Int64x2) AndNot(y Int64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).AndNot(archsimd.Int64x2(y)))
}

func (x Int64x2) ConvertToUint64() Uint64x2 {
	return Uint64x2((archsimd.Int64x2(x)).ConvertToUint64())
}

func (x Int64x2) Equal(y Int64x2) Mask64x2 {
	return Mask64x2((archsimd.Int64x2(x)).Equal(archsimd.Int64x2(y)))
}

func (x Int64x2) Greater(y Int64x2) Mask64x2 {
	return Mask64x2((archsimd.Int64x2(x)).Greater(archsimd.Int64x2(y)))
}

func (x Int64x2) GreaterEqual(y Int64x2) Mask64x2 {
	return Mask64x2((archsimd.Int64x2(x)).GreaterEqual(archsimd.Int64x2(y)))
}

func (x Int64x2) IfElse(mask Mask64x2, y Int64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).IfElse(archsimd.Mask64x2(mask), archsimd.Int64x2(y)))
}

func (x Int64x2) Len() int {
	return (archsimd.Int64x2(x)).Len()
}

func (x Int64x2) Less(y Int64x2) Mask64x2 {
	return Mask64x2((archsimd.Int64x2(x)).Less(archsimd.Int64x2(y)))
}

func (x Int64x2) LessEqual(y Int64x2) Mask64x2 {
	return Mask64x2((archsimd.Int64x2(x)).LessEqual(archsimd.Int64x2(y)))
}

func (x Int64x2) Masked(mask Mask64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).Masked(archsimd.Mask64x2(mask)))
}

func (x Int64x2) Neg() Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).Neg())
}

func (x Int64x2) Not() Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).Not())
}

func (x Int64x2) NotEqual(y Int64x2) Mask64x2 {
	return Mask64x2((archsimd.Int64x2(x)).NotEqual(archsimd.Int64x2(y)))
}

func (x Int64x2) Or(y Int64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).Or(archsimd.Int64x2(y)))
}

func (x Int64x2) RotateAllLeft(dist uint64) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).RotateAllLeft(dist))
}

func (x Int64x2) RotateAllRight(dist uint64) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).RotateAllRight(dist))
}

func (x Int64x2) ShiftAllLeft(y uint64) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).ShiftAllLeft(y))
}

func (x Int64x2) Store(s []int64) {
	(archsimd.Int64x2(x)).Store(s)
}

func (x Int64x2) StorePart(s []int64) int {
	return (archsimd.Int64x2(x)).StorePart(s)
}

func (x Int64x2) String() string {
	return (archsimd.Int64x2(x)).String()
}

func (x Int64x2) Sub(y Int64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).Sub(archsimd.Int64x2(y)))
}

func (x Int64x2) ToBits() Uint64x2 {
	return Uint64x2((archsimd.Int64x2(x)).ToBits())
}

func (x Int64x2) ToMask() Mask64x2 {
	return Mask64x2((archsimd.Int64x2(x)).ToMask())
}

func (x Int64x2) Xor(y Int64x2) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).Xor(archsimd.Int64x2(y)))
}

func (x Uint8x16) Add(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Add(archsimd.Uint8x16(y)))
}

func (x Uint8x16) AddSaturated(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).AddSaturated(archsimd.Uint8x16(y)))
}

func (x Uint8x16) And(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).And(archsimd.Uint8x16(y)))
}

func (x Uint8x16) AndNot(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).AndNot(archsimd.Uint8x16(y)))
}

func (x Uint8x16) Average(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Average(archsimd.Uint8x16(y)))
}

func (x Uint8x16) BitsToInt8() Int8x16 {
	return Int8x16((archsimd.Uint8x16(x)).BitsToInt8())
}

func (x Uint8x16) ConvertToInt8() Int8x16 {
	return Int8x16((archsimd.Uint8x16(x)).ConvertToInt8())
}

func (x Uint8x16) Equal(y Uint8x16) Mask8x16 {
	return Mask8x16((archsimd.Uint8x16(x)).Equal(archsimd.Uint8x16(y)))
}

func (x Uint8x16) IfElse(mask Mask8x16, y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).IfElse(archsimd.Mask8x16(mask), archsimd.Uint8x16(y)))
}

func (x Uint8x16) Len() int {
	return (archsimd.Uint8x16(x)).Len()
}

func (x Uint8x16) Masked(mask Mask8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Masked(archsimd.Mask8x16(mask)))
}

func (x Uint8x16) Max(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Max(archsimd.Uint8x16(y)))
}

func (x Uint8x16) Min(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Min(archsimd.Uint8x16(y)))
}

func (x Uint8x16) Mul(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Mul(archsimd.Uint8x16(y)))
}

func (x Uint8x16) Not() Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Not())
}

func (x Uint8x16) NotEqual(y Uint8x16) Mask8x16 {
	return Mask8x16((archsimd.Uint8x16(x)).NotEqual(archsimd.Uint8x16(y)))
}

func (x Uint8x16) Or(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Or(archsimd.Uint8x16(y)))
}

func (x Uint8x16) ReshapeToUint16s() Uint16x8 {
	return Uint16x8((archsimd.Uint8x16(x)).ReshapeToUint16s())
}

func (x Uint8x16) ReshapeToUint32s() Uint32x4 {
	return Uint32x4((archsimd.Uint8x16(x)).ReshapeToUint32s())
}

func (x Uint8x16) ReshapeToUint64s() Uint64x2 {
	return Uint64x2((archsimd.Uint8x16(x)).ReshapeToUint64s())
}

func (x Uint8x16) Store(s []uint8) {
	(archsimd.Uint8x16(x)).Store(s)
}

func (x Uint8x16) StorePart(s []uint8) int {
	return (archsimd.Uint8x16(x)).StorePart(s)
}

func (x Uint8x16) String() string {
	return (archsimd.Uint8x16(x)).String()
}

func (x Uint8x16) Sub(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Sub(archsimd.Uint8x16(y)))
}

func (x Uint8x16) SubSaturated(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).SubSaturated(archsimd.Uint8x16(y)))
}

func (x Uint8x16) Xor(y Uint8x16) Uint8x16 {
	return Uint8x16((archsimd.Uint8x16(x)).Xor(archsimd.Uint8x16(y)))
}

func (x Uint16x8) Add(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Add(archsimd.Uint16x8(y)))
}

func (x Uint16x8) AddSaturated(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).AddSaturated(archsimd.Uint16x8(y)))
}

func (x Uint16x8) And(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).And(archsimd.Uint16x8(y)))
}

func (x Uint16x8) AndNot(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).AndNot(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Average(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Average(archsimd.Uint16x8(y)))
}

func (x Uint16x8) BitsToInt16() Int16x8 {
	return Int16x8((archsimd.Uint16x8(x)).BitsToInt16())
}

func (x Uint16x8) ConvertToInt16() Int16x8 {
	return Int16x8((archsimd.Uint16x8(x)).ConvertToInt16())
}

func (x Uint16x8) Equal(y Uint16x8) Mask16x8 {
	return Mask16x8((archsimd.Uint16x8(x)).Equal(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Greater(y Uint16x8) Mask16x8 {
	return Mask16x8((archsimd.Uint16x8(x)).Greater(archsimd.Uint16x8(y)))
}

func (x Uint16x8) GreaterEqual(y Uint16x8) Mask16x8 {
	return Mask16x8((archsimd.Uint16x8(x)).GreaterEqual(archsimd.Uint16x8(y)))
}

func (x Uint16x8) IfElse(mask Mask16x8, y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).IfElse(archsimd.Mask16x8(mask), archsimd.Uint16x8(y)))
}

func (x Uint16x8) Len() int {
	return (archsimd.Uint16x8(x)).Len()
}

func (x Uint16x8) Less(y Uint16x8) Mask16x8 {
	return Mask16x8((archsimd.Uint16x8(x)).Less(archsimd.Uint16x8(y)))
}

func (x Uint16x8) LessEqual(y Uint16x8) Mask16x8 {
	return Mask16x8((archsimd.Uint16x8(x)).LessEqual(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Masked(mask Mask16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Masked(archsimd.Mask16x8(mask)))
}

func (x Uint16x8) Max(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Max(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Min(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Min(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Mul(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Mul(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Not() Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Not())
}

func (x Uint16x8) NotEqual(y Uint16x8) Mask16x8 {
	return Mask16x8((archsimd.Uint16x8(x)).NotEqual(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Or(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Or(archsimd.Uint16x8(y)))
}

func (x Uint16x8) ReshapeToUint32s() Uint32x4 {
	return Uint32x4((archsimd.Uint16x8(x)).ReshapeToUint32s())
}

func (x Uint16x8) ReshapeToUint64s() Uint64x2 {
	return Uint64x2((archsimd.Uint16x8(x)).ReshapeToUint64s())
}

func (x Uint16x8) ReshapeToUint8s() Uint8x16 {
	return Uint8x16((archsimd.Uint16x8(x)).ReshapeToUint8s())
}

func (x Uint16x8) RotateAllLeft(dist uint64) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).RotateAllLeft(dist))
}

func (x Uint16x8) RotateAllRight(dist uint64) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).RotateAllRight(dist))
}

func (x Uint16x8) ShiftAllLeft(y uint64) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).ShiftAllLeft(y))
}

func (x Uint16x8) ShiftAllRight(y uint64) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).ShiftAllRight(y))
}

func (x Uint16x8) Store(s []uint16) {
	(archsimd.Uint16x8(x)).Store(s)
}

func (x Uint16x8) StorePart(s []uint16) int {
	return (archsimd.Uint16x8(x)).StorePart(s)
}

func (x Uint16x8) String() string {
	return (archsimd.Uint16x8(x)).String()
}

func (x Uint16x8) Sub(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Sub(archsimd.Uint16x8(y)))
}

func (x Uint16x8) SubSaturated(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).SubSaturated(archsimd.Uint16x8(y)))
}

func (x Uint16x8) Xor(y Uint16x8) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).Xor(archsimd.Uint16x8(y)))
}

func (x Uint32x4) Add(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Add(archsimd.Uint32x4(y)))
}

func (x Uint32x4) And(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).And(archsimd.Uint32x4(y)))
}

func (x Uint32x4) AndNot(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).AndNot(archsimd.Uint32x4(y)))
}

func (x Uint32x4) BitsToFloat32() Float32x4 {
	return Float32x4((archsimd.Uint32x4(x)).BitsToFloat32())
}

func (x Uint32x4) BitsToInt32() Int32x4 {
	return Int32x4((archsimd.Uint32x4(x)).BitsToInt32())
}

func (x Uint32x4) ConvertToInt32() Int32x4 {
	return Int32x4((archsimd.Uint32x4(x)).ConvertToInt32())
}

func (x Uint32x4) Equal(y Uint32x4) Mask32x4 {
	return Mask32x4((archsimd.Uint32x4(x)).Equal(archsimd.Uint32x4(y)))
}

func (x Uint32x4) Greater(y Uint32x4) Mask32x4 {
	return Mask32x4((archsimd.Uint32x4(x)).Greater(archsimd.Uint32x4(y)))
}

func (x Uint32x4) GreaterEqual(y Uint32x4) Mask32x4 {
	return Mask32x4((archsimd.Uint32x4(x)).GreaterEqual(archsimd.Uint32x4(y)))
}

func (x Uint32x4) IfElse(mask Mask32x4, y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).IfElse(archsimd.Mask32x4(mask), archsimd.Uint32x4(y)))
}

func (x Uint32x4) Len() int {
	return (archsimd.Uint32x4(x)).Len()
}

func (x Uint32x4) Less(y Uint32x4) Mask32x4 {
	return Mask32x4((archsimd.Uint32x4(x)).Less(archsimd.Uint32x4(y)))
}

func (x Uint32x4) LessEqual(y Uint32x4) Mask32x4 {
	return Mask32x4((archsimd.Uint32x4(x)).LessEqual(archsimd.Uint32x4(y)))
}

func (x Uint32x4) Masked(mask Mask32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Masked(archsimd.Mask32x4(mask)))
}

func (x Uint32x4) Max(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Max(archsimd.Uint32x4(y)))
}

func (x Uint32x4) Min(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Min(archsimd.Uint32x4(y)))
}

func (x Uint32x4) Mul(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Mul(archsimd.Uint32x4(y)))
}

func (x Uint32x4) Not() Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Not())
}

func (x Uint32x4) NotEqual(y Uint32x4) Mask32x4 {
	return Mask32x4((archsimd.Uint32x4(x)).NotEqual(archsimd.Uint32x4(y)))
}

func (x Uint32x4) Or(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Or(archsimd.Uint32x4(y)))
}

func (x Uint32x4) ReshapeToUint16s() Uint16x8 {
	return Uint16x8((archsimd.Uint32x4(x)).ReshapeToUint16s())
}

func (x Uint32x4) ReshapeToUint64s() Uint64x2 {
	return Uint64x2((archsimd.Uint32x4(x)).ReshapeToUint64s())
}

func (x Uint32x4) ReshapeToUint8s() Uint8x16 {
	return Uint8x16((archsimd.Uint32x4(x)).ReshapeToUint8s())
}

func (x Uint32x4) RotateAllLeft(dist uint64) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).RotateAllLeft(dist))
}

func (x Uint32x4) RotateAllRight(dist uint64) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).RotateAllRight(dist))
}

func (x Uint32x4) ShiftAllLeft(y uint64) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).ShiftAllLeft(y))
}

func (x Uint32x4) ShiftAllRight(y uint64) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).ShiftAllRight(y))
}

func (x Uint32x4) Store(s []uint32) {
	(archsimd.Uint32x4(x)).Store(s)
}

func (x Uint32x4) StorePart(s []uint32) int {
	return (archsimd.Uint32x4(x)).StorePart(s)
}

func (x Uint32x4) String() string {
	return (archsimd.Uint32x4(x)).String()
}

func (x Uint32x4) Sub(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Sub(archsimd.Uint32x4(y)))
}

func (x Uint32x4) Xor(y Uint32x4) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).Xor(archsimd.Uint32x4(y)))
}

func (x Uint64x2) Add(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).Add(archsimd.Uint64x2(y)))
}

func (x Uint64x2) And(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).And(archsimd.Uint64x2(y)))
}

func (x Uint64x2) AndNot(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).AndNot(archsimd.Uint64x2(y)))
}

func (x Uint64x2) BitsToFloat64() Float64x2 {
	return Float64x2((archsimd.Uint64x2(x)).BitsToFloat64())
}

func (x Uint64x2) BitsToInt64() Int64x2 {
	return Int64x2((archsimd.Uint64x2(x)).BitsToInt64())
}

func (x Uint64x2) CarrylessMultiplyEven(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).CarrylessMultiplyEven(archsimd.Uint64x2(y)))
}

func (x Uint64x2) CarrylessMultiplyOdd(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).CarrylessMultiplyOdd(archsimd.Uint64x2(y)))
}

func (x Uint64x2) ConvertToInt64() Int64x2 {
	return Int64x2((archsimd.Uint64x2(x)).ConvertToInt64())
}

func (x Uint64x2) Equal(y Uint64x2) Mask64x2 {
	return Mask64x2((archsimd.Uint64x2(x)).Equal(archsimd.Uint64x2(y)))
}

func (x Uint64x2) Greater(y Uint64x2) Mask64x2 {
	return Mask64x2((archsimd.Uint64x2(x)).Greater(archsimd.Uint64x2(y)))
}

func (x Uint64x2) GreaterEqual(y Uint64x2) Mask64x2 {
	return Mask64x2((archsimd.Uint64x2(x)).GreaterEqual(archsimd.Uint64x2(y)))
}

func (x Uint64x2) IfElse(mask Mask64x2, y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).IfElse(archsimd.Mask64x2(mask), archsimd.Uint64x2(y)))
}

func (x Uint64x2) Len() int {
	return (archsimd.Uint64x2(x)).Len()
}

func (x Uint64x2) Less(y Uint64x2) Mask64x2 {
	return Mask64x2((archsimd.Uint64x2(x)).Less(archsimd.Uint64x2(y)))
}

func (x Uint64x2) LessEqual(y Uint64x2) Mask64x2 {
	return Mask64x2((archsimd.Uint64x2(x)).LessEqual(archsimd.Uint64x2(y)))
}

func (x Uint64x2) Masked(mask Mask64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).Masked(archsimd.Mask64x2(mask)))
}

func (x Uint64x2) Not() Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).Not())
}

func (x Uint64x2) NotEqual(y Uint64x2) Mask64x2 {
	return Mask64x2((archsimd.Uint64x2(x)).NotEqual(archsimd.Uint64x2(y)))
}

func (x Uint64x2) Or(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).Or(archsimd.Uint64x2(y)))
}

func (x Uint64x2) ReshapeToUint16s() Uint16x8 {
	return Uint16x8((archsimd.Uint64x2(x)).ReshapeToUint16s())
}

func (x Uint64x2) ReshapeToUint32s() Uint32x4 {
	return Uint32x4((archsimd.Uint64x2(x)).ReshapeToUint32s())
}

func (x Uint64x2) ReshapeToUint8s() Uint8x16 {
	return Uint8x16((archsimd.Uint64x2(x)).ReshapeToUint8s())
}

func (x Uint64x2) RotateAllLeft(dist uint64) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).RotateAllLeft(dist))
}

func (x Uint64x2) RotateAllRight(dist uint64) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).RotateAllRight(dist))
}

func (x Uint64x2) ShiftAllLeft(y uint64) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).ShiftAllLeft(y))
}

func (x Uint64x2) ShiftAllRight(y uint64) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).ShiftAllRight(y))
}

func (x Uint64x2) Store(s []uint64) {
	(archsimd.Uint64x2(x)).Store(s)
}

func (x Uint64x2) StorePart(s []uint64) int {
	return (archsimd.Uint64x2(x)).StorePart(s)
}

func (x Uint64x2) String() string {
	return (archsimd.Uint64x2(x)).String()
}

func (x Uint64x2) Sub(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).Sub(archsimd.Uint64x2(y)))
}

func (x Uint64x2) Xor(y Uint64x2) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).Xor(archsimd.Uint64x2(y)))
}

func (x Float32x4) Abs() Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Abs())
}

func (x Float32x4) Add(y Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Add(archsimd.Float32x4(y)))
}

func (x Float32x4) ConvertToInt32() Int32x4 {
	return Int32x4((archsimd.Float32x4(x)).ConvertToInt32())
}

func (x Float32x4) Div(y Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Div(archsimd.Float32x4(y)))
}

func (x Float32x4) Equal(y Float32x4) Mask32x4 {
	return Mask32x4((archsimd.Float32x4(x)).Equal(archsimd.Float32x4(y)))
}

func (x Float32x4) Greater(y Float32x4) Mask32x4 {
	return Mask32x4((archsimd.Float32x4(x)).Greater(archsimd.Float32x4(y)))
}

func (x Float32x4) GreaterEqual(y Float32x4) Mask32x4 {
	return Mask32x4((archsimd.Float32x4(x)).GreaterEqual(archsimd.Float32x4(y)))
}

func (x Float32x4) IfElse(mask Mask32x4, y Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).IfElse(archsimd.Mask32x4(mask), archsimd.Float32x4(y)))
}

func (x Float32x4) Len() int {
	return (archsimd.Float32x4(x)).Len()
}

func (x Float32x4) Less(y Float32x4) Mask32x4 {
	return Mask32x4((archsimd.Float32x4(x)).Less(archsimd.Float32x4(y)))
}

func (x Float32x4) LessEqual(y Float32x4) Mask32x4 {
	return Mask32x4((archsimd.Float32x4(x)).LessEqual(archsimd.Float32x4(y)))
}

func (x Float32x4) Masked(mask Mask32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Masked(archsimd.Mask32x4(mask)))
}

func (x Float32x4) Max(y Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Max(archsimd.Float32x4(y)))
}

func (x Float32x4) Min(y Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Min(archsimd.Float32x4(y)))
}

func (x Float32x4) Mul(y Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Mul(archsimd.Float32x4(y)))
}

func (x Float32x4) MulAdd(y Float32x4, z Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).MulAdd(archsimd.Float32x4(y), archsimd.Float32x4(z)))
}

func (x Float32x4) Neg() Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Neg())
}

func (x Float32x4) NotEqual(y Float32x4) Mask32x4 {
	return Mask32x4((archsimd.Float32x4(x)).NotEqual(archsimd.Float32x4(y)))
}

func (x Float32x4) Sqrt() Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Sqrt())
}

func (x Float32x4) Store(s []float32) {
	(archsimd.Float32x4(x)).Store(s)
}

func (x Float32x4) StorePart(s []float32) int {
	return (archsimd.Float32x4(x)).StorePart(s)
}

func (x Float32x4) String() string {
	return (archsimd.Float32x4(x)).String()
}

func (x Float32x4) Sub(y Float32x4) Float32x4 {
	return Float32x4((archsimd.Float32x4(x)).Sub(archsimd.Float32x4(y)))
}

func (x Float32x4) ToBits() Uint32x4 {
	return Uint32x4((archsimd.Float32x4(x)).ToBits())
}

func (x Float64x2) Abs() Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Abs())
}

func (x Float64x2) Add(y Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Add(archsimd.Float64x2(y)))
}

func (x Float64x2) Div(y Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Div(archsimd.Float64x2(y)))
}

func (x Float64x2) Equal(y Float64x2) Mask64x2 {
	return Mask64x2((archsimd.Float64x2(x)).Equal(archsimd.Float64x2(y)))
}

func (x Float64x2) Greater(y Float64x2) Mask64x2 {
	return Mask64x2((archsimd.Float64x2(x)).Greater(archsimd.Float64x2(y)))
}

func (x Float64x2) GreaterEqual(y Float64x2) Mask64x2 {
	return Mask64x2((archsimd.Float64x2(x)).GreaterEqual(archsimd.Float64x2(y)))
}

func (x Float64x2) IfElse(mask Mask64x2, y Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).IfElse(archsimd.Mask64x2(mask), archsimd.Float64x2(y)))
}

func (x Float64x2) Len() int {
	return (archsimd.Float64x2(x)).Len()
}

func (x Float64x2) Less(y Float64x2) Mask64x2 {
	return Mask64x2((archsimd.Float64x2(x)).Less(archsimd.Float64x2(y)))
}

func (x Float64x2) LessEqual(y Float64x2) Mask64x2 {
	return Mask64x2((archsimd.Float64x2(x)).LessEqual(archsimd.Float64x2(y)))
}

func (x Float64x2) Masked(mask Mask64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Masked(archsimd.Mask64x2(mask)))
}

func (x Float64x2) Max(y Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Max(archsimd.Float64x2(y)))
}

func (x Float64x2) Min(y Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Min(archsimd.Float64x2(y)))
}

func (x Float64x2) Mul(y Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Mul(archsimd.Float64x2(y)))
}

func (x Float64x2) MulAdd(y Float64x2, z Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).MulAdd(archsimd.Float64x2(y), archsimd.Float64x2(z)))
}

func (x Float64x2) Neg() Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Neg())
}

func (x Float64x2) NotEqual(y Float64x2) Mask64x2 {
	return Mask64x2((archsimd.Float64x2(x)).NotEqual(archsimd.Float64x2(y)))
}

func (x Float64x2) Sqrt() Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Sqrt())
}

func (x Float64x2) Store(s []float64) {
	(archsimd.Float64x2(x)).Store(s)
}

func (x Float64x2) StorePart(s []float64) int {
	return (archsimd.Float64x2(x)).StorePart(s)
}

func (x Float64x2) String() string {
	return (archsimd.Float64x2(x)).String()
}

func (x Float64x2) Sub(y Float64x2) Float64x2 {
	return Float64x2((archsimd.Float64x2(x)).Sub(archsimd.Float64x2(y)))
}

func (x Float64x2) ToBits() Uint64x2 {
	return Uint64x2((archsimd.Float64x2(x)).ToBits())
}

func (x Mask8x16) And(y Mask8x16) Mask8x16 {
	return Mask8x16((archsimd.Mask8x16(x)).And(archsimd.Mask8x16(y)))
}

func (x Mask8x16) Or(y Mask8x16) Mask8x16 {
	return Mask8x16((archsimd.Mask8x16(x)).Or(archsimd.Mask8x16(y)))
}

func (x Mask8x16) String() string {
	return (archsimd.Mask8x16(x)).String()
}

func (x Mask8x16) ToInt8s() Int8x16 {
	return Int8x16((archsimd.Mask8x16(x)).ToInt8x16())
}

func (x Mask16x8) And(y Mask16x8) Mask16x8 {
	return Mask16x8((archsimd.Mask16x8(x)).And(archsimd.Mask16x8(y)))
}

func (x Mask16x8) Or(y Mask16x8) Mask16x8 {
	return Mask16x8((archsimd.Mask16x8(x)).Or(archsimd.Mask16x8(y)))
}

func (x Mask16x8) String() string {
	return (archsimd.Mask16x8(x)).String()
}

func (x Mask16x8) ToInt16s() Int16x8 {
	return Int16x8((archsimd.Mask16x8(x)).ToInt16x8())
}

func (x Mask32x4) And(y Mask32x4) Mask32x4 {
	return Mask32x4((archsimd.Mask32x4(x)).And(archsimd.Mask32x4(y)))
}

func (x Mask32x4) Or(y Mask32x4) Mask32x4 {
	return Mask32x4((archsimd.Mask32x4(x)).Or(archsimd.Mask32x4(y)))
}

func (x Mask32x4) String() string {
	return (archsimd.Mask32x4(x)).String()
}

func (x Mask32x4) ToInt32s() Int32x4 {
	return Int32x4((archsimd.Mask32x4(x)).ToInt32x4())
}

func (x Mask64x2) And(y Mask64x2) Mask64x2 {
	return Mask64x2((archsimd.Mask64x2(x)).And(archsimd.Mask64x2(y)))
}

func (x Mask64x2) Or(y Mask64x2) Mask64x2 {
	return Mask64x2((archsimd.Mask64x2(x)).Or(archsimd.Mask64x2(y)))
}

func (x Mask64x2) String() string {
	return (archsimd.Mask64x2(x)).String()
}

func (x Mask64x2) ToInt64s() Int64x2 {
	return Int64x2((archsimd.Mask64x2(x)).ToInt64x2())
}
