blob: bed03e7bacfc6d91b170bb370f973ee8c40aa102 [file]
// Copyright 2026 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build goexperiment.simd && amd64
package simd_test
import (
"simd"
"simd/archsimd"
)
func sum(x simd.Float32s) float32 {
switch a := x.ToArch().(type) {
case archsimd.Float32x8:
a = a.ConcatAddPairsGrouped(a)
a = a.ConcatAddPairsGrouped(a)
return a.GetLo().GetElem(0) + a.GetHi().GetElem(0)
case archsimd.Float32x16:
b := a.GetLo().Add(a.GetHi())
b = b.ConcatAddPairsGrouped(b)
b = b.ConcatAddPairsGrouped(b)
return b.GetLo().GetElem(0) + b.GetHi().GetElem(0)
case archsimd.Float32x4:
return boringSum(simd.Float32sFromArch(a))
default:
return boringSum(x)
}
panic("nope")
}