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

/* bitSelect */

// bitSelect selects bits from y where mask is 1, keeps bits from x where mask is 0.
//
// Asm: VBIT, CPU Feature: NEON
func (x Int8x16) bitSelect(y Int8x16, mask Int8x16) Int8x16

/* bitSelectNot */

// bitSelectNot selects bits from y where mask is 0, keeps bits from x where mask is 1.
//
// Asm: VBIF, CPU Feature: NEON
func (x Int8x16) bitSelectNot(y Int8x16, mask Int8x16) Int8x16

/* broadcast1To2 */

// broadcast1To2 copies the lowest element of its input to all 2 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Float64x2) broadcast1To2() Float64x2

// broadcast1To2 copies the lowest element of its input to all 2 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Int64x2) broadcast1To2() Int64x2

// broadcast1To2 copies the lowest element of its input to all 2 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Uint64x2) broadcast1To2() Uint64x2

/* broadcast1To4 */

// broadcast1To4 copies the lowest element of its input to all 4 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Float32x4) broadcast1To4() Float32x4

// broadcast1To4 copies the lowest element of its input to all 4 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Int32x4) broadcast1To4() Int32x4

// broadcast1To4 copies the lowest element of its input to all 4 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Uint32x4) broadcast1To4() Uint32x4

/* broadcast1To8 */

// broadcast1To8 copies the lowest element of its input to all 8 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Int16x8) broadcast1To8() Int16x8

// broadcast1To8 copies the lowest element of its input to all 8 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Uint16x8) broadcast1To8() Uint16x8

/* broadcast1To16 */

// broadcast1To16 copies the lowest element of its input to all 16 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Int8x16) broadcast1To16() Int8x16

// broadcast1To16 copies the lowest element of its input to all 16 elements of
// the output vector.
//
// Asm: VDUP, CPU Feature: NEON
func (x Uint8x16) broadcast1To16() Uint8x16

/* carrylessMultiplyWidenLo */

// carrylessMultiplyWidenLo returns the carryless (polynomial) product of the low halves
// of x and y.
//
// A carryless multiplication uses bitwise XOR instead of
// add-with-carry, for example (in base two):
//
//	11 * 11 = 11 * (10 ^ 1) = (11 * 10) ^ (11 * 1) = 110 ^ 11 = 101
//
// This also models multiplication of polynomials with coefficients
// from GF(2) -- 11 * 11 models (x+1)*(x+1) = x**2 + (1^1)x + 1 =
// x**2 + 0x + 1 = x**2 + 1 modeled by 101.  (Note that "+" adds
// polynomial terms, but coefficients "add" with XOR.)
// For the high-indexed elements, use HiToLo:
//
//	x.HiToLo().carrylessMultiplyWidenLo(y.HiToLo())
//
// Asm: VPMULL, CPU Feature: NEON
func (x Uint64x2) carrylessMultiplyWidenLo(y Uint64x2) Uint64x2

/* reduceMax */

// reduceMax reduces x by taking the maximum of all elements. The maximum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VFMAXV, CPU Feature: NEON
func (x Float32x4) reduceMax() Float32x4

// reduceMax reduces x by taking the maximum of all elements. The maximum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VSMAXV, CPU Feature: NEON
func (x Int8x16) reduceMax() Int8x16

// reduceMax reduces x by taking the maximum of all elements. The maximum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VSMAXV, CPU Feature: NEON
func (x Int16x8) reduceMax() Int16x8

// reduceMax reduces x by taking the maximum of all elements. The maximum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VSMAXV, CPU Feature: NEON
func (x Int32x4) reduceMax() Int32x4

// reduceMax reduces x by taking the maximum of all elements. The maximum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VUMAXV, CPU Feature: NEON
func (x Uint8x16) reduceMax() Uint8x16

// reduceMax reduces x by taking the maximum of all elements. The maximum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VUMAXV, CPU Feature: NEON
func (x Uint16x8) reduceMax() Uint16x8

// reduceMax reduces x by taking the maximum of all elements. The maximum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VUMAXV, CPU Feature: NEON
func (x Uint32x4) reduceMax() Uint32x4

/* reduceMin */

// reduceMin reduces x by taking the minimum of all elements. The minimum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VFMINV, CPU Feature: NEON
func (x Float32x4) reduceMin() Float32x4

// reduceMin reduces x by taking the minimum of all elements. The minimum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VSMINV, CPU Feature: NEON
func (x Int8x16) reduceMin() Int8x16

// reduceMin reduces x by taking the minimum of all elements. The minimum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VSMINV, CPU Feature: NEON
func (x Int16x8) reduceMin() Int16x8

// reduceMin reduces x by taking the minimum of all elements. The minimum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VSMINV, CPU Feature: NEON
func (x Int32x4) reduceMin() Int32x4

// reduceMin reduces x by taking the minimum of all elements. The minimum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VUMINV, CPU Feature: NEON
func (x Uint8x16) reduceMin() Uint8x16

// reduceMin reduces x by taking the minimum of all elements. The minimum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VUMINV, CPU Feature: NEON
func (x Uint16x8) reduceMin() Uint16x8

// reduceMin reduces x by taking the minimum of all elements. The minimum is placed
// in element 0 of the result; other elements are zeroed.
//
// Asm: VUMINV, CPU Feature: NEON
func (x Uint32x4) reduceMin() Uint32x4

/* reduceSum */

// reduceSum reduces x by summing all elements. The sum is placed in element 0
// of the result; other elements are zeroed.
//
// Asm: VADDV, CPU Feature: NEON
func (x Int8x16) reduceSum() Int8x16

// reduceSum reduces x by summing all elements. The sum is placed in element 0
// of the result; other elements are zeroed.
//
// Asm: VADDV, CPU Feature: NEON
func (x Int16x8) reduceSum() Int16x8

// reduceSum reduces x by summing all elements. The sum is placed in element 0
// of the result; other elements are zeroed.
//
// Asm: VADDV, CPU Feature: NEON
func (x Int32x4) reduceSum() Int32x4

// reduceSum reduces x by summing all elements. The sum is placed in element 0
// of the result; other elements are zeroed.
//
// Asm: VADDV, CPU Feature: NEON
func (x Uint8x16) reduceSum() Uint8x16

// reduceSum reduces x by summing all elements. The sum is placed in element 0
// of the result; other elements are zeroed.
//
// Asm: VADDV, CPU Feature: NEON
func (x Uint16x8) reduceSum() Uint16x8

// reduceSum reduces x by summing all elements. The sum is placed in element 0
// of the result; other elements are zeroed.
//
// Asm: VADDV, CPU Feature: NEON
func (x Uint32x4) reduceSum() Uint32x4
