// Copyright 2025 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 && wasm package main import ( "fmt" "simd/archsimd" ) //go:noinline func id[T any](x T) T { return x } func main() { var x, _ = archsimd.LoadInt16x8Part([]int16{10, 21, 32, 43, 54, 65, 76}) var y, _ = archsimd.LoadInt16x8Part([]int16{200, 300, 400, 500, 600, 700, 800}) z := x.Add(y) fmt.Println("z =", z.String()) m1 := z.Equal(z) fmt.Println("m1 =", m1.ToInt16x8().String()) fmt.Println("m1.String() = ", m1.String()) i := m1.ToInt16x8().Neg() fmt.Println("i =", i.String()) i0 := i.ShiftAllLeft(2) fmt.Println("i0 =", i0.String()) i1 := i.ShiftAllLeft(id(uint64(2))) fmt.Println("i1 =", i1.String()) i2 := i.ShiftAllLeft(id(uint64(15))) fmt.Println("i2 =", i2.String()) i3 := i2.ShiftAllRight(id(uint64(16))) fmt.Println("i3 =", i3.String()) m2 := z.And(i0).Equal(i1) fmt.Println("m2 =", m2.ToInt16x8().String()) zz := z.IfElse(m2, y) fmt.Printf("zz = %v\n", zz) zl := zz.ExtendLo4ToInt32() fmt.Printf("zl-extended = %v\n", zl) zh := zz.ExtendHi4ToInt32() fmt.Printf("zh-extended = %v\n", zh) w := make([]int16, 7, 7) zz.StorePart(w) fmt.Printf("w = %v\n", w) fmt.Println() for j := uint64(0); j < 18; j++ { fmt.Printf("%v.RAL(%d)=%v\n", i, j, i.RotateAllLeft(j)) } fmt.Println() for j := uint64(0); j < 18; j++ { fmt.Printf("%v.RAr(%d)=%v\n", i, j, i.RotateAllRight(j)) } { var a = archsimd.LoadInt8x16([]int8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}) // var b = archsimd.LoadInt8x16([]int8{17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 21, 32}) var i = archsimd.LoadInt8x16([]int8{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30}) fmt.Println(a.LookupOrZero(i)) // fmt.Println(a.Shuffle(i, b)) } }