| // 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") | |
| } |