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

//go:build goexperiment.simd && wasm

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(shift uint64) Int16x8 {
	return Int16x8((archsimd.Int16x8(x)).RotateAllLeft(shift))
}

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

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(shift uint64) Int32x4 {
	return Int32x4((archsimd.Int32x4(x)).RotateAllLeft(shift))
}

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

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(shift uint64) Int64x2 {
	return Int64x2((archsimd.Int64x2(x)).RotateAllLeft(shift))
}

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

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(shift uint64) Uint16x8 {
	return Uint16x8((archsimd.Uint16x8(x)).RotateAllLeft(shift))
}

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

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(shift uint64) Uint32x4 {
	return Uint32x4((archsimd.Uint32x4(x)).RotateAllLeft(shift))
}

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

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(shift uint64) Uint64x2 {
	return Uint64x2((archsimd.Uint64x2(x)).RotateAllLeft(shift))
}

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

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