// Code generated by 'simdgen -o godefs -goroot $GOROOT -arch arm64 -arm64Path $ARM64_ISA_PATH go_arm64.yaml types.yaml categories.yaml'; DO NOT EDIT.

//go:build goexperiment.simd

package archsimd

// v128 is a tag type that tells the compiler that this is really 128-bit SIMD
type v128 struct {
	_128 [0]func() // uncomparable
}

// Float32x4 is a 128-bit SIMD vector of 4 float32s.
type Float32x4 struct {
	float32x4 v128
	vals      [4]float32
}

// Len returns the number of elements in a Float32x4.
func (x Float32x4) Len() int { return 4 }

// LoadFloat32x4Array loads a Float32x4 from an array.
//
//go:noescape
func LoadFloat32x4Array(y *[4]float32) Float32x4

// StoreArray stores a Float32x4 to an array.
//
//go:noescape
func (x Float32x4) StoreArray(y *[4]float32)

// Float64x2 is a 128-bit SIMD vector of 2 float64s.
type Float64x2 struct {
	float64x2 v128
	vals      [2]float64
}

// Len returns the number of elements in a Float64x2.
func (x Float64x2) Len() int { return 2 }

// LoadFloat64x2Array loads a Float64x2 from an array.
//
//go:noescape
func LoadFloat64x2Array(y *[2]float64) Float64x2

// StoreArray stores a Float64x2 to an array.
//
//go:noescape
func (x Float64x2) StoreArray(y *[2]float64)

// Int8x16 is a 128-bit SIMD vector of 16 int8s.
type Int8x16 struct {
	int8x16 v128
	vals    [16]int8
}

// Len returns the number of elements in an Int8x16.
func (x Int8x16) Len() int { return 16 }

// LoadInt8x16Array loads an Int8x16 from an array.
//
//go:noescape
func LoadInt8x16Array(y *[16]int8) Int8x16

// StoreArray stores an Int8x16 to an array.
//
//go:noescape
func (x Int8x16) StoreArray(y *[16]int8)

// Int16x8 is a 128-bit SIMD vector of 8 int16s.
type Int16x8 struct {
	int16x8 v128
	vals    [8]int16
}

// Len returns the number of elements in an Int16x8.
func (x Int16x8) Len() int { return 8 }

// LoadInt16x8Array loads an Int16x8 from an array.
//
//go:noescape
func LoadInt16x8Array(y *[8]int16) Int16x8

// StoreArray stores an Int16x8 to an array.
//
//go:noescape
func (x Int16x8) StoreArray(y *[8]int16)

// Int32x4 is a 128-bit SIMD vector of 4 int32s.
type Int32x4 struct {
	int32x4 v128
	vals    [4]int32
}

// Len returns the number of elements in an Int32x4.
func (x Int32x4) Len() int { return 4 }

// LoadInt32x4Array loads an Int32x4 from an array.
//
//go:noescape
func LoadInt32x4Array(y *[4]int32) Int32x4

// StoreArray stores an Int32x4 to an array.
//
//go:noescape
func (x Int32x4) StoreArray(y *[4]int32)

// Int64x2 is a 128-bit SIMD vector of 2 int64s.
type Int64x2 struct {
	int64x2 v128
	vals    [2]int64
}

// Len returns the number of elements in an Int64x2.
func (x Int64x2) Len() int { return 2 }

// LoadInt64x2Array loads an Int64x2 from an array.
//
//go:noescape
func LoadInt64x2Array(y *[2]int64) Int64x2

// StoreArray stores an Int64x2 to an array.
//
//go:noescape
func (x Int64x2) StoreArray(y *[2]int64)

// Uint8x16 is a 128-bit SIMD vector of 16 uint8s.
type Uint8x16 struct {
	uint8x16 v128
	vals     [16]uint8
}

// Len returns the number of elements in a Uint8x16.
func (x Uint8x16) Len() int { return 16 }

// LoadUint8x16Array loads a Uint8x16 from an array.
//
//go:noescape
func LoadUint8x16Array(y *[16]uint8) Uint8x16

// StoreArray stores a Uint8x16 to an array.
//
//go:noescape
func (x Uint8x16) StoreArray(y *[16]uint8)

// Uint16x8 is a 128-bit SIMD vector of 8 uint16s.
type Uint16x8 struct {
	uint16x8 v128
	vals     [8]uint16
}

// Len returns the number of elements in a Uint16x8.
func (x Uint16x8) Len() int { return 8 }

// LoadUint16x8Array loads a Uint16x8 from an array.
//
//go:noescape
func LoadUint16x8Array(y *[8]uint16) Uint16x8

// StoreArray stores a Uint16x8 to an array.
//
//go:noescape
func (x Uint16x8) StoreArray(y *[8]uint16)

// Uint32x4 is a 128-bit SIMD vector of 4 uint32s.
type Uint32x4 struct {
	uint32x4 v128
	vals     [4]uint32
}

// Len returns the number of elements in a Uint32x4.
func (x Uint32x4) Len() int { return 4 }

// LoadUint32x4Array loads a Uint32x4 from an array.
//
//go:noescape
func LoadUint32x4Array(y *[4]uint32) Uint32x4

// StoreArray stores a Uint32x4 to an array.
//
//go:noescape
func (x Uint32x4) StoreArray(y *[4]uint32)

// Uint64x2 is a 128-bit SIMD vector of 2 uint64s.
type Uint64x2 struct {
	uint64x2 v128
	vals     [2]uint64
}

// Len returns the number of elements in a Uint64x2.
func (x Uint64x2) Len() int { return 2 }

// LoadUint64x2Array loads a Uint64x2 from an array.
//
//go:noescape
func LoadUint64x2Array(y *[2]uint64) Uint64x2

// StoreArray stores a Uint64x2 to an array.
//
//go:noescape
func (x Uint64x2) StoreArray(y *[2]uint64)

// Mask8x16 is a mask for a SIMD vector of 16 8-bit elements.
type Mask8x16 struct {
	int8x16 v128
	vals    [16]int8
}

// Mask16x8 is a mask for a SIMD vector of 8 16-bit elements.
type Mask16x8 struct {
	int16x8 v128
	vals    [8]int16
}

// Mask32x4 is a mask for a SIMD vector of 4 32-bit elements.
type Mask32x4 struct {
	int32x4 v128
	vals    [4]int32
}

// Mask64x2 is a mask for a SIMD vector of 2 64-bit elements.
type Mask64x2 struct {
	int64x2 v128
	vals    [2]int64
}
