diff --git a/src/simd/archsimd/_gen/tmplgen/main.go b/src/simd/archsimd/_gen/tmplgen/main.go
index 24ca72a..692aebe 100644
--- a/src/simd/archsimd/_gen/tmplgen/main.go
+++ b/src/simd/archsimd/_gen/tmplgen/main.go
@@ -1449,14 +1449,12 @@
 	ch := flag.String("ch", TD+"compare_helpers_%W_test.go", "file name for compare test helpers")
 	cmh := flag.String("cmh", TD+"comparemasked_helpers_test.go", "file name for compare-masked test helpers")
 	// ARM64-specific
-	bhArm64 := flag.String("bhArm64", TD+"arm64_binary_helpers_test.go", "file name for ARM64 binary test helpers")
 	slArm64 := flag.String("slArm64", SIMD+"slice_gen_arm64.go", "file name for ARM64 slice operations")
 	opArm64 := flag.String("opArm64", SIMD+"other_gen_arm64.go", "file name for ARM64 other operations")
 	shArm64 := flag.String("shArm64", TD+"arm64_shift_helpers_test.go", "file name for ARM64 shift test helpers")
 	uhArm64 := flag.String("uhArm64", TD+"arm64_unary_helpers_test.go", "file name for ARM64 unary test helpers")
 	cmArm64 := flag.String("cmArm64", SIMD+"compare_gen_arm64.go", "file name for ARM64 comparison operations")
 	mmArm64 := flag.String("mmArm64", SIMD+"maskmerge_gen_arm64.go", "file name for ARM64 mask/merge operations")
-	chArm64 := flag.String("chArm64", TD+"arm64_compare_helpers_test.go", "file name for ARM64 compare test helpers")
 	thArm64 := flag.String("thArm64", TD+"ternary_arm64_helpers_test.go", "file name for ARM64 ternary test helpers")
 	rhArm64 := flag.String("rhArm64", TD+"reduce_arm64_helpers_test.go", "file name for ARM64 reduce test helpers")
 	flag.Parse()
@@ -1529,9 +1527,6 @@
 	if *slArm64 != "" {
 		one(*slArm64, prologue, sliceTemplateArm64)
 	}
-	if *bhArm64 != "" {
-		oneArch(*bhArm64, "arm64", curryTestPrologue("binary simd methods"), binaryTemplateArm64)
-	}
 	if *opArm64 != "" {
 		one(*opArm64, prologue,
 			broadcastTemplateArm64,
@@ -1557,7 +1552,6 @@
 			arm64ToInt32, arm64ToUint32,
 			arm64ToInt64, arm64ToUint64,
 			arm64ToFloat32, arm64ToFloat64,
-			unaryTemplateArm64,
 		)
 	}
 	if *cmArm64 != "" {
@@ -1573,9 +1567,6 @@
 			arm64MaskToString,
 		)
 	}
-	if *chArm64 != "" {
-		oneArch(*chArm64, "arm64", curryTestPrologue("simd methods that compare two operands"), compareTemplateArm64)
-	}
 	if *thArm64 != "" {
 		oneArch(*thArm64, "arm64", curryTestPrologue("ternary simd methods"), ternaryTemplateArm64, ternaryFlakyTemplateArm64)
 	}
@@ -1750,7 +1741,7 @@
 	if strings.Contains(filename, "%W") {
 		smallFile := strings.ReplaceAll(filename, "%W", "128")
 		largeFile := strings.ReplaceAll(filename, "%W", "wider")
-		oneArch(smallFile, "(amd64 || wasm)", prologue, Map(smallSAT, sats)...)
+		oneArch(smallFile, "(amd64 || wasm || arm64)", prologue, Map(smallSAT, sats)...)
 		oneArch(largeFile, "amd64", prologue, Map(largeSAT, sats)...)
 		return
 	}
diff --git a/src/simd/archsimd/internal/simd_test/arm64_binary_helpers_test.go b/src/simd/archsimd/internal/simd_test/arm64_binary_helpers_test.go
deleted file mode 100644
index 6f537c2..0000000
--- a/src/simd/archsimd/internal/simd_test/arm64_binary_helpers_test.go
+++ /dev/null
@@ -1,164 +0,0 @@
-// Code generated by 'tmplgen'; DO NOT EDIT.
-
-//go:build goexperiment.simd && arm64
-
-// This file contains functions testing binary simd methods.
-// Each function in this file is specialized for a
-// particular simd type <BaseType><Width>x<Count>.
-
-package simd_test
-
-import (
-	"simd/archsimd"
-	"testing"
-)
-
-// testInt8x16Binary tests the simd binary method f against the expected behavior generated by want
-func testInt8x16Binary(t *testing.T, f func(_, _ archsimd.Int8x16) archsimd.Int8x16, want func(_, _ []int8) []int8) {
-	n := 16
-	t.Helper()
-	forSlicePair(t, int8s, n, func(x, y []int8) bool {
-		t.Helper()
-		a := archsimd.LoadInt8x16(x)
-		b := archsimd.LoadInt8x16(y)
-		g := make([]int8, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testInt16x8Binary tests the simd binary method f against the expected behavior generated by want
-func testInt16x8Binary(t *testing.T, f func(_, _ archsimd.Int16x8) archsimd.Int16x8, want func(_, _ []int16) []int16) {
-	n := 8
-	t.Helper()
-	forSlicePair(t, int16s, n, func(x, y []int16) bool {
-		t.Helper()
-		a := archsimd.LoadInt16x8(x)
-		b := archsimd.LoadInt16x8(y)
-		g := make([]int16, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testInt32x4Binary tests the simd binary method f against the expected behavior generated by want
-func testInt32x4Binary(t *testing.T, f func(_, _ archsimd.Int32x4) archsimd.Int32x4, want func(_, _ []int32) []int32) {
-	n := 4
-	t.Helper()
-	forSlicePair(t, int32s, n, func(x, y []int32) bool {
-		t.Helper()
-		a := archsimd.LoadInt32x4(x)
-		b := archsimd.LoadInt32x4(y)
-		g := make([]int32, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testInt64x2Binary tests the simd binary method f against the expected behavior generated by want
-func testInt64x2Binary(t *testing.T, f func(_, _ archsimd.Int64x2) archsimd.Int64x2, want func(_, _ []int64) []int64) {
-	n := 2
-	t.Helper()
-	forSlicePair(t, int64s, n, func(x, y []int64) bool {
-		t.Helper()
-		a := archsimd.LoadInt64x2(x)
-		b := archsimd.LoadInt64x2(y)
-		g := make([]int64, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint8x16Binary tests the simd binary method f against the expected behavior generated by want
-func testUint8x16Binary(t *testing.T, f func(_, _ archsimd.Uint8x16) archsimd.Uint8x16, want func(_, _ []uint8) []uint8) {
-	n := 16
-	t.Helper()
-	forSlicePair(t, uint8s, n, func(x, y []uint8) bool {
-		t.Helper()
-		a := archsimd.LoadUint8x16(x)
-		b := archsimd.LoadUint8x16(y)
-		g := make([]uint8, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint16x8Binary tests the simd binary method f against the expected behavior generated by want
-func testUint16x8Binary(t *testing.T, f func(_, _ archsimd.Uint16x8) archsimd.Uint16x8, want func(_, _ []uint16) []uint16) {
-	n := 8
-	t.Helper()
-	forSlicePair(t, uint16s, n, func(x, y []uint16) bool {
-		t.Helper()
-		a := archsimd.LoadUint16x8(x)
-		b := archsimd.LoadUint16x8(y)
-		g := make([]uint16, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint32x4Binary tests the simd binary method f against the expected behavior generated by want
-func testUint32x4Binary(t *testing.T, f func(_, _ archsimd.Uint32x4) archsimd.Uint32x4, want func(_, _ []uint32) []uint32) {
-	n := 4
-	t.Helper()
-	forSlicePair(t, uint32s, n, func(x, y []uint32) bool {
-		t.Helper()
-		a := archsimd.LoadUint32x4(x)
-		b := archsimd.LoadUint32x4(y)
-		g := make([]uint32, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint64x2Binary tests the simd binary method f against the expected behavior generated by want
-func testUint64x2Binary(t *testing.T, f func(_, _ archsimd.Uint64x2) archsimd.Uint64x2, want func(_, _ []uint64) []uint64) {
-	n := 2
-	t.Helper()
-	forSlicePair(t, uint64s, n, func(x, y []uint64) bool {
-		t.Helper()
-		a := archsimd.LoadUint64x2(x)
-		b := archsimd.LoadUint64x2(y)
-		g := make([]uint64, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testFloat32x4Binary tests the simd binary method f against the expected behavior generated by want
-func testFloat32x4Binary(t *testing.T, f func(_, _ archsimd.Float32x4) archsimd.Float32x4, want func(_, _ []float32) []float32) {
-	n := 4
-	t.Helper()
-	forSlicePair(t, float32s, n, func(x, y []float32) bool {
-		t.Helper()
-		a := archsimd.LoadFloat32x4(x)
-		b := archsimd.LoadFloat32x4(y)
-		g := make([]float32, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testFloat64x2Binary tests the simd binary method f against the expected behavior generated by want
-func testFloat64x2Binary(t *testing.T, f func(_, _ archsimd.Float64x2) archsimd.Float64x2, want func(_, _ []float64) []float64) {
-	n := 2
-	t.Helper()
-	forSlicePair(t, float64s, n, func(x, y []float64) bool {
-		t.Helper()
-		a := archsimd.LoadFloat64x2(x)
-		b := archsimd.LoadFloat64x2(y)
-		g := make([]float64, n)
-		f(a, b).Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
diff --git a/src/simd/archsimd/internal/simd_test/arm64_binary_test.go b/src/simd/archsimd/internal/simd_test/arm64_binary_test.go
index a1d2c55..83a1182 100644
--- a/src/simd/archsimd/internal/simd_test/arm64_binary_test.go
+++ b/src/simd/archsimd/internal/simd_test/arm64_binary_test.go
@@ -11,78 +11,6 @@
 	"testing"
 )
 
-func TestAdd(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Add, addSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Add, addSlice[float64])
-
-	testInt8x16Binary(t, archsimd.Int8x16.Add, addSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.Add, addSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Add, addSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.Add, addSlice[int64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Add, addSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.Add, addSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Add, addSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.Add, addSlice[uint64])
-}
-
-func TestMul(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Mul, mulSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Mul, mulSlice[float64])
-
-	testInt8x16Binary(t, archsimd.Int8x16.Mul, mulSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.Mul, mulSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Mul, mulSlice[int32])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Mul, mulSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.Mul, mulSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Mul, mulSlice[uint32])
-}
-
-func TestSub(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Sub, subSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Sub, subSlice[float64])
-
-	testInt8x16Binary(t, archsimd.Int8x16.Sub, subSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.Sub, subSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Sub, subSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.Sub, subSlice[int64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Sub, subSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.Sub, subSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Sub, subSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.Sub, subSlice[uint64])
-}
-
-func TestDiv(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Div, divSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Div, divSlice[float64])
-}
-
-func TestMax(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Max, maxSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Max, maxSlice[float64])
-
-	testInt8x16Binary(t, archsimd.Int8x16.Max, maxSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.Max, maxSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Max, maxSlice[int32])
-	testUint8x16Binary(t, archsimd.Uint8x16.Max, maxSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.Max, maxSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Max, maxSlice[uint32])
-}
-
-func TestMin(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Min, minSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Min, minSlice[float64])
-
-	testInt8x16Binary(t, archsimd.Int8x16.Min, minSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.Min, minSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Min, minSlice[int32])
-	testUint8x16Binary(t, archsimd.Uint8x16.Min, minSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.Min, minSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Min, minSlice[uint32])
-}
-
 func TestConcatEven(t *testing.T) {
 	testInt8x16Binary(t, archsimd.Int8x16.ConcatEven, deinterleaveSlice[int8](128, false))
 	testInt16x8Binary(t, archsimd.Int16x8.ConcatEven, deinterleaveSlice[int16](128, false))
@@ -148,189 +76,3 @@
 	testUint32x4Binary(t, archsimd.Uint32x4.InterleaveHi, interleaveSlice[uint32](128, true))
 	testUint64x2Binary(t, archsimd.Uint64x2.InterleaveHi, interleaveSlice[uint64](128, true))
 }
-
-func TestGetElem(t *testing.T) {
-	// Int8x16
-	{
-		a := []int8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
-		v := archsimd.LoadInt8x16(a)
-		if e := v.GetElem(2); e != a[2] {
-			t.Errorf("Int8x16.GetElem(2) = %d, want %d", e, a[2])
-		}
-	}
-	// Int16x8
-	{
-		a := []int16{10, 20, 30, 40, 50, 60, 70, 80}
-		v := archsimd.LoadInt16x8(a)
-		if e := v.GetElem(3); e != a[3] {
-			t.Errorf("Int16x8.GetElem(3) = %d, want %d", e, a[3])
-		}
-	}
-	// Int32x4
-	{
-		a := []int32{100, 200, 300, 400}
-		v := archsimd.LoadInt32x4(a)
-		if e := v.GetElem(1); e != a[1] {
-			t.Errorf("Int32x4.GetElem(1) = %d, want %d", e, a[1])
-		}
-	}
-	// Int64x2
-	{
-		a := []int64{1000, 2000}
-		v := archsimd.LoadInt64x2(a)
-		if e := v.GetElem(0); e != a[0] {
-			t.Errorf("Int64x2.GetElem(0) = %d, want %d", e, a[0])
-		}
-	}
-	// Uint8x16
-	{
-		a := []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
-		v := archsimd.LoadUint8x16(a)
-		if e := v.GetElem(5); e != a[5] {
-			t.Errorf("Uint8x16.GetElem(5) = %d, want %d", e, a[5])
-		}
-	}
-	// Uint16x8
-	{
-		a := []uint16{100, 200, 300, 400, 500, 600, 700, 800}
-		v := archsimd.LoadUint16x8(a)
-		if e := v.GetElem(7); e != a[7] {
-			t.Errorf("Uint16x8.GetElem(7) = %d, want %d", e, a[7])
-		}
-	}
-	// Uint32x4
-	{
-		a := []uint32{1000, 2000, 3000, 4000}
-		v := archsimd.LoadUint32x4(a)
-		if e := v.GetElem(2); e != a[2] {
-			t.Errorf("Uint32x4.GetElem(2) = %d, want %d", e, a[2])
-		}
-	}
-	// Uint64x2
-	{
-		a := []uint64{10000, 20000}
-		v := archsimd.LoadUint64x2(a)
-		if e := v.GetElem(1); e != a[1] {
-			t.Errorf("Uint64x2.GetElem(1) = %d, want %d", e, a[1])
-		}
-	}
-	// Float32x4
-	{
-		a := []float32{1.0, 2.0, 3.0, 4.0}
-		v := archsimd.LoadFloat32x4(a)
-		if e := v.GetElem(3); e != a[3] {
-			t.Errorf("Float32x4.GetElem(3) = %f, want %f", e, a[3])
-		}
-	}
-	// Float64x2
-	{
-		a := []float64{10.5, 20.5}
-		v := archsimd.LoadFloat64x2(a)
-		if e := v.GetElem(0); e != a[0] {
-			t.Errorf("Float64x2.GetElem(0) = %f, want %f", e, a[0])
-		}
-	}
-}
-
-func TestSetElem(t *testing.T) {
-	// Int8x16
-	{
-		a := []int8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
-		v := archsimd.LoadInt8x16(a)
-		v = v.SetElem(3, int8(99))
-		a[3] = 99
-		b := make([]int8, 16)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Int16x8
-	{
-		a := []int16{10, 20, 30, 40, 50, 60, 70, 80}
-		v := archsimd.LoadInt16x8(a)
-		v = v.SetElem(5, int16(123))
-		a[5] = 123
-		b := make([]int16, 8)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Int32x4
-	{
-		a := []int32{100, 200, 300, 400}
-		v := archsimd.LoadInt32x4(a)
-		v = v.SetElem(2, int32(999))
-		a[2] = 999
-		b := make([]int32, 4)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Int64x2
-	{
-		a := []int64{1000, 2000}
-		v := archsimd.LoadInt64x2(a)
-		v = v.SetElem(1, int64(5555))
-		a[1] = 5555
-		b := make([]int64, 2)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Uint8x16
-	{
-		a := []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
-		v := archsimd.LoadUint8x16(a)
-		v = v.SetElem(7, uint8(200))
-		a[7] = 200
-		b := make([]uint8, 16)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Uint16x8
-	{
-		a := []uint16{100, 200, 300, 400, 500, 600, 700, 800}
-		v := archsimd.LoadUint16x8(a)
-		v = v.SetElem(0, uint16(1111))
-		a[0] = 1111
-		b := make([]uint16, 8)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Uint32x4
-	{
-		a := []uint32{1000, 2000, 3000, 4000}
-		v := archsimd.LoadUint32x4(a)
-		v = v.SetElem(3, uint32(9999))
-		a[3] = 9999
-		b := make([]uint32, 4)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Uint64x2
-	{
-		a := []uint64{10000, 20000}
-		v := archsimd.LoadUint64x2(a)
-		v = v.SetElem(0, uint64(55555))
-		a[0] = 55555
-		b := make([]uint64, 2)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Float32x4
-	{
-		a := []float32{1.0, 2.0, 3.0, 4.0}
-		v := archsimd.LoadFloat32x4(a)
-		v = v.SetElem(1, float32(42.5))
-		a[1] = 42.5
-		b := make([]float32, 4)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-	// Float64x2
-	{
-		a := []float64{10.5, 20.5}
-		v := archsimd.LoadFloat64x2(a)
-		v = v.SetElem(0, float64(99.9))
-		a[0] = 99.9
-		b := make([]float64, 2)
-		v.Store(b)
-		checkSlices(t, b, a)
-	}
-}
diff --git a/src/simd/archsimd/internal/simd_test/arm64_bitwise_test.go b/src/simd/archsimd/internal/simd_test/arm64_bitwise_test.go
index c0b5522..f431c10 100644
--- a/src/simd/archsimd/internal/simd_test/arm64_bitwise_test.go
+++ b/src/simd/archsimd/internal/simd_test/arm64_bitwise_test.go
@@ -11,54 +11,6 @@
 	"testing"
 )
 
-func TestAnd(t *testing.T) {
-	testInt8x16Binary(t, archsimd.Int8x16.And, andSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.And, andSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.And, andSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.And, andSlice[int64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.And, andSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.And, andSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.And, andSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.And, andSlice[uint64])
-}
-
-func TestOr(t *testing.T) {
-	testInt8x16Binary(t, archsimd.Int8x16.Or, orSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.Or, orSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Or, orSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.Or, orSlice[int64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Or, orSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.Or, orSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Or, orSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.Or, orSlice[uint64])
-}
-
-func TestXor(t *testing.T) {
-	testInt8x16Binary(t, archsimd.Int8x16.Xor, xorSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.Xor, xorSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Xor, xorSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.Xor, xorSlice[int64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Xor, xorSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.Xor, xorSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Xor, xorSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.Xor, xorSlice[uint64])
-}
-
-func TestAndNot(t *testing.T) {
-	testInt8x16Binary(t, archsimd.Int8x16.AndNot, andNotSlice[int8])
-	testInt16x8Binary(t, archsimd.Int16x8.AndNot, andNotSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.AndNot, andNotSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.AndNot, andNotSlice[int64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.AndNot, andNotSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.AndNot, andNotSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.AndNot, andNotSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.AndNot, andNotSlice[uint64])
-}
-
 func TestOrNot(t *testing.T) {
 	testInt8x16Binary(t, archsimd.Int8x16.OrNot, orNotSlice[int8])
 	testInt16x8Binary(t, archsimd.Int16x8.OrNot, orNotSlice[int16])
@@ -70,15 +22,3 @@
 	testUint32x4Binary(t, archsimd.Uint32x4.OrNot, orNotSlice[uint32])
 	testUint64x2Binary(t, archsimd.Uint64x2.OrNot, orNotSlice[uint64])
 }
-
-func TestNot(t *testing.T) {
-	testInt8x16Unary(t, archsimd.Int8x16.Not, notSlice[int8])
-	testInt16x8Unary(t, archsimd.Int16x8.Not, notSlice[int16])
-	testInt32x4Unary(t, archsimd.Int32x4.Not, notSlice[int32])
-	testInt64x2Unary(t, archsimd.Int64x2.Not, notSlice[int64])
-
-	testUint8x16Unary(t, archsimd.Uint8x16.Not, notSlice[uint8])
-	testUint16x8Unary(t, archsimd.Uint16x8.Not, notSlice[uint16])
-	testUint32x4Unary(t, archsimd.Uint32x4.Not, notSlice[uint32])
-	testUint64x2Unary(t, archsimd.Uint64x2.Not, notSlice[uint64])
-}
diff --git a/src/simd/archsimd/internal/simd_test/arm64_compare_helpers_test.go b/src/simd/archsimd/internal/simd_test/arm64_compare_helpers_test.go
deleted file mode 100644
index a7a90b7..0000000
--- a/src/simd/archsimd/internal/simd_test/arm64_compare_helpers_test.go
+++ /dev/null
@@ -1,164 +0,0 @@
-// Code generated by 'tmplgen'; DO NOT EDIT.
-
-//go:build goexperiment.simd && arm64
-
-// This file contains functions testing simd methods that compare two operands.
-// Each function in this file is specialized for a
-// particular simd type <BaseType><Width>x<Count>.
-
-package simd_test
-
-import (
-	"simd/archsimd"
-	"testing"
-)
-
-// testInt8x16Compare tests the simd comparison method f against the expected behavior generated by want
-func testInt8x16Compare(t *testing.T, f func(_, _ archsimd.Int8x16) archsimd.Mask8x16, want func(_, _ []int8) []int64) {
-	n := 16
-	t.Helper()
-	forSlicePair(t, int8s, n, func(x, y []int8) bool {
-		t.Helper()
-		a := archsimd.LoadInt8x16(x)
-		b := archsimd.LoadInt8x16(y)
-		g := make([]int8, n)
-		f(a, b).ToInt8x16().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testInt16x8Compare tests the simd comparison method f against the expected behavior generated by want
-func testInt16x8Compare(t *testing.T, f func(_, _ archsimd.Int16x8) archsimd.Mask16x8, want func(_, _ []int16) []int64) {
-	n := 8
-	t.Helper()
-	forSlicePair(t, int16s, n, func(x, y []int16) bool {
-		t.Helper()
-		a := archsimd.LoadInt16x8(x)
-		b := archsimd.LoadInt16x8(y)
-		g := make([]int16, n)
-		f(a, b).ToInt16x8().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testInt32x4Compare tests the simd comparison method f against the expected behavior generated by want
-func testInt32x4Compare(t *testing.T, f func(_, _ archsimd.Int32x4) archsimd.Mask32x4, want func(_, _ []int32) []int64) {
-	n := 4
-	t.Helper()
-	forSlicePair(t, int32s, n, func(x, y []int32) bool {
-		t.Helper()
-		a := archsimd.LoadInt32x4(x)
-		b := archsimd.LoadInt32x4(y)
-		g := make([]int32, n)
-		f(a, b).ToInt32x4().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testInt64x2Compare tests the simd comparison method f against the expected behavior generated by want
-func testInt64x2Compare(t *testing.T, f func(_, _ archsimd.Int64x2) archsimd.Mask64x2, want func(_, _ []int64) []int64) {
-	n := 2
-	t.Helper()
-	forSlicePair(t, int64s, n, func(x, y []int64) bool {
-		t.Helper()
-		a := archsimd.LoadInt64x2(x)
-		b := archsimd.LoadInt64x2(y)
-		g := make([]int64, n)
-		f(a, b).ToInt64x2().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint8x16Compare tests the simd comparison method f against the expected behavior generated by want
-func testUint8x16Compare(t *testing.T, f func(_, _ archsimd.Uint8x16) archsimd.Mask8x16, want func(_, _ []uint8) []int64) {
-	n := 16
-	t.Helper()
-	forSlicePair(t, uint8s, n, func(x, y []uint8) bool {
-		t.Helper()
-		a := archsimd.LoadUint8x16(x)
-		b := archsimd.LoadUint8x16(y)
-		g := make([]int8, n)
-		f(a, b).ToInt8x16().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint16x8Compare tests the simd comparison method f against the expected behavior generated by want
-func testUint16x8Compare(t *testing.T, f func(_, _ archsimd.Uint16x8) archsimd.Mask16x8, want func(_, _ []uint16) []int64) {
-	n := 8
-	t.Helper()
-	forSlicePair(t, uint16s, n, func(x, y []uint16) bool {
-		t.Helper()
-		a := archsimd.LoadUint16x8(x)
-		b := archsimd.LoadUint16x8(y)
-		g := make([]int16, n)
-		f(a, b).ToInt16x8().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint32x4Compare tests the simd comparison method f against the expected behavior generated by want
-func testUint32x4Compare(t *testing.T, f func(_, _ archsimd.Uint32x4) archsimd.Mask32x4, want func(_, _ []uint32) []int64) {
-	n := 4
-	t.Helper()
-	forSlicePair(t, uint32s, n, func(x, y []uint32) bool {
-		t.Helper()
-		a := archsimd.LoadUint32x4(x)
-		b := archsimd.LoadUint32x4(y)
-		g := make([]int32, n)
-		f(a, b).ToInt32x4().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testUint64x2Compare tests the simd comparison method f against the expected behavior generated by want
-func testUint64x2Compare(t *testing.T, f func(_, _ archsimd.Uint64x2) archsimd.Mask64x2, want func(_, _ []uint64) []int64) {
-	n := 2
-	t.Helper()
-	forSlicePair(t, uint64s, n, func(x, y []uint64) bool {
-		t.Helper()
-		a := archsimd.LoadUint64x2(x)
-		b := archsimd.LoadUint64x2(y)
-		g := make([]int64, n)
-		f(a, b).ToInt64x2().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testFloat32x4Compare tests the simd comparison method f against the expected behavior generated by want
-func testFloat32x4Compare(t *testing.T, f func(_, _ archsimd.Float32x4) archsimd.Mask32x4, want func(_, _ []float32) []int64) {
-	n := 4
-	t.Helper()
-	forSlicePair(t, float32s, n, func(x, y []float32) bool {
-		t.Helper()
-		a := archsimd.LoadFloat32x4(x)
-		b := archsimd.LoadFloat32x4(y)
-		g := make([]int32, n)
-		f(a, b).ToInt32x4().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
-
-// testFloat64x2Compare tests the simd comparison method f against the expected behavior generated by want
-func testFloat64x2Compare(t *testing.T, f func(_, _ archsimd.Float64x2) archsimd.Mask64x2, want func(_, _ []float64) []int64) {
-	n := 2
-	t.Helper()
-	forSlicePair(t, float64s, n, func(x, y []float64) bool {
-		t.Helper()
-		a := archsimd.LoadFloat64x2(x)
-		b := archsimd.LoadFloat64x2(y)
-		g := make([]int64, n)
-		f(a, b).ToInt64x2().Store(g)
-		w := want(x, y)
-		return checkSlicesLogInput(t, s64(g), w, 0.0, func() { t.Helper(); t.Logf("x=%v", x); t.Logf("y=%v", y) })
-	})
-}
diff --git a/src/simd/archsimd/internal/simd_test/arm64_compare_test.go b/src/simd/archsimd/internal/simd_test/arm64_compare_test.go
index e9a9eff..ad1c55b 100644
--- a/src/simd/archsimd/internal/simd_test/arm64_compare_test.go
+++ b/src/simd/archsimd/internal/simd_test/arm64_compare_test.go
@@ -11,108 +11,6 @@
 	"testing"
 )
 
-// --- Equal (hardware: CMEQ / FCMEQ) ---
-
-func TestEqual(t *testing.T) {
-	testInt8x16Compare(t, archsimd.Int8x16.Equal, equalSlice[int8])
-	testInt16x8Compare(t, archsimd.Int16x8.Equal, equalSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.Equal, equalSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.Equal, equalSlice[int64])
-
-	testUint8x16Compare(t, archsimd.Uint8x16.Equal, equalSlice[uint8])
-	testUint16x8Compare(t, archsimd.Uint16x8.Equal, equalSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.Equal, equalSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.Equal, equalSlice[uint64])
-
-	testFloat32x4Compare(t, archsimd.Float32x4.Equal, equalSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.Equal, equalSlice[float64])
-}
-
-// --- Greater (hardware: CMGT/CMHI for signed/unsigned, FCMGT for float) ---
-
-func TestGreater(t *testing.T) {
-	testInt8x16Compare(t, archsimd.Int8x16.Greater, greaterSlice[int8])
-	testInt16x8Compare(t, archsimd.Int16x8.Greater, greaterSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.Greater, greaterSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.Greater, greaterSlice[int64])
-
-	testUint8x16Compare(t, archsimd.Uint8x16.Greater, greaterSlice[uint8])
-	testUint16x8Compare(t, archsimd.Uint16x8.Greater, greaterSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.Greater, greaterSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.Greater, greaterSlice[uint64])
-
-	testFloat32x4Compare(t, archsimd.Float32x4.Greater, greaterSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.Greater, greaterSlice[float64])
-}
-
-// --- GreaterEqual (hardware: CMGE/CMHS for signed/unsigned, FCMGE for float) ---
-
-func TestGreaterEqual(t *testing.T) {
-	testInt8x16Compare(t, archsimd.Int8x16.GreaterEqual, greaterEqualSlice[int8])
-	testInt16x8Compare(t, archsimd.Int16x8.GreaterEqual, greaterEqualSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.GreaterEqual, greaterEqualSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.GreaterEqual, greaterEqualSlice[int64])
-
-	testUint8x16Compare(t, archsimd.Uint8x16.GreaterEqual, greaterEqualSlice[uint8])
-	testUint16x8Compare(t, archsimd.Uint16x8.GreaterEqual, greaterEqualSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.GreaterEqual, greaterEqualSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.GreaterEqual, greaterEqualSlice[uint64])
-
-	testFloat32x4Compare(t, archsimd.Float32x4.GreaterEqual, greaterEqualSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.GreaterEqual, greaterEqualSlice[float64])
-}
-
-// --- Less (derived: y.Greater(x)) ---
-
-func TestLess(t *testing.T) {
-	testInt8x16Compare(t, archsimd.Int8x16.Less, lessSlice[int8])
-	testInt16x8Compare(t, archsimd.Int16x8.Less, lessSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.Less, lessSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.Less, lessSlice[int64])
-
-	testUint8x16Compare(t, archsimd.Uint8x16.Less, lessSlice[uint8])
-	testUint16x8Compare(t, archsimd.Uint16x8.Less, lessSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.Less, lessSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.Less, lessSlice[uint64])
-
-	testFloat32x4Compare(t, archsimd.Float32x4.Less, lessSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.Less, lessSlice[float64])
-}
-
-// --- LessEqual (derived: y.GreaterEqual(x)) ---
-
-func TestLessEqual(t *testing.T) {
-	testInt8x16Compare(t, archsimd.Int8x16.LessEqual, lessEqualSlice[int8])
-	testInt16x8Compare(t, archsimd.Int16x8.LessEqual, lessEqualSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.LessEqual, lessEqualSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.LessEqual, lessEqualSlice[int64])
-
-	testUint8x16Compare(t, archsimd.Uint8x16.LessEqual, lessEqualSlice[uint8])
-	testUint16x8Compare(t, archsimd.Uint16x8.LessEqual, lessEqualSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.LessEqual, lessEqualSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.LessEqual, lessEqualSlice[uint64])
-
-	testFloat32x4Compare(t, archsimd.Float32x4.LessEqual, lessEqualSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.LessEqual, lessEqualSlice[float64])
-}
-
-// --- NotEqual (derived: Equal().Not()) ---
-
-func TestNotEqual(t *testing.T) {
-	testInt8x16Compare(t, archsimd.Int8x16.NotEqual, notEqualSlice[int8])
-	testInt16x8Compare(t, archsimd.Int16x8.NotEqual, notEqualSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.NotEqual, notEqualSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.NotEqual, notEqualSlice[int64])
-
-	testUint8x16Compare(t, archsimd.Uint8x16.NotEqual, notEqualSlice[uint8])
-	testUint16x8Compare(t, archsimd.Uint16x8.NotEqual, notEqualSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.NotEqual, notEqualSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.NotEqual, notEqualSlice[uint64])
-
-	testFloat32x4Compare(t, archsimd.Float32x4.NotEqual, notEqualSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.NotEqual, notEqualSlice[float64])
-}
-
 // --- Masked: zero elements where mask is false ---
 
 func TestMasked(t *testing.T) {
diff --git a/src/simd/archsimd/internal/simd_test/arm64_unary_helpers_test.go b/src/simd/archsimd/internal/simd_test/arm64_unary_helpers_test.go
index 78d1db9..648d1d9 100644
--- a/src/simd/archsimd/internal/simd_test/arm64_unary_helpers_test.go
+++ b/src/simd/archsimd/internal/simd_test/arm64_unary_helpers_test.go
@@ -1412,143 +1412,3 @@
 		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
 	})
 }
-
-// testInt8x16Unary tests the simd unary method f against the expected behavior generated by want
-func testInt8x16Unary(t *testing.T, f func(_ archsimd.Int8x16) archsimd.Int8x16, want func(_ []int8) []int8) {
-	n := 16
-	t.Helper()
-	forSlice(t, int8s, n, func(x []int8) bool {
-		t.Helper()
-		a := archsimd.LoadInt8x16(x)
-		g := make([]int8, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testInt16x8Unary tests the simd unary method f against the expected behavior generated by want
-func testInt16x8Unary(t *testing.T, f func(_ archsimd.Int16x8) archsimd.Int16x8, want func(_ []int16) []int16) {
-	n := 8
-	t.Helper()
-	forSlice(t, int16s, n, func(x []int16) bool {
-		t.Helper()
-		a := archsimd.LoadInt16x8(x)
-		g := make([]int16, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testInt32x4Unary tests the simd unary method f against the expected behavior generated by want
-func testInt32x4Unary(t *testing.T, f func(_ archsimd.Int32x4) archsimd.Int32x4, want func(_ []int32) []int32) {
-	n := 4
-	t.Helper()
-	forSlice(t, int32s, n, func(x []int32) bool {
-		t.Helper()
-		a := archsimd.LoadInt32x4(x)
-		g := make([]int32, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testInt64x2Unary tests the simd unary method f against the expected behavior generated by want
-func testInt64x2Unary(t *testing.T, f func(_ archsimd.Int64x2) archsimd.Int64x2, want func(_ []int64) []int64) {
-	n := 2
-	t.Helper()
-	forSlice(t, int64s, n, func(x []int64) bool {
-		t.Helper()
-		a := archsimd.LoadInt64x2(x)
-		g := make([]int64, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testUint8x16Unary tests the simd unary method f against the expected behavior generated by want
-func testUint8x16Unary(t *testing.T, f func(_ archsimd.Uint8x16) archsimd.Uint8x16, want func(_ []uint8) []uint8) {
-	n := 16
-	t.Helper()
-	forSlice(t, uint8s, n, func(x []uint8) bool {
-		t.Helper()
-		a := archsimd.LoadUint8x16(x)
-		g := make([]uint8, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testUint16x8Unary tests the simd unary method f against the expected behavior generated by want
-func testUint16x8Unary(t *testing.T, f func(_ archsimd.Uint16x8) archsimd.Uint16x8, want func(_ []uint16) []uint16) {
-	n := 8
-	t.Helper()
-	forSlice(t, uint16s, n, func(x []uint16) bool {
-		t.Helper()
-		a := archsimd.LoadUint16x8(x)
-		g := make([]uint16, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testUint32x4Unary tests the simd unary method f against the expected behavior generated by want
-func testUint32x4Unary(t *testing.T, f func(_ archsimd.Uint32x4) archsimd.Uint32x4, want func(_ []uint32) []uint32) {
-	n := 4
-	t.Helper()
-	forSlice(t, uint32s, n, func(x []uint32) bool {
-		t.Helper()
-		a := archsimd.LoadUint32x4(x)
-		g := make([]uint32, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testUint64x2Unary tests the simd unary method f against the expected behavior generated by want
-func testUint64x2Unary(t *testing.T, f func(_ archsimd.Uint64x2) archsimd.Uint64x2, want func(_ []uint64) []uint64) {
-	n := 2
-	t.Helper()
-	forSlice(t, uint64s, n, func(x []uint64) bool {
-		t.Helper()
-		a := archsimd.LoadUint64x2(x)
-		g := make([]uint64, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testFloat32x4Unary tests the simd unary method f against the expected behavior generated by want
-func testFloat32x4Unary(t *testing.T, f func(_ archsimd.Float32x4) archsimd.Float32x4, want func(_ []float32) []float32) {
-	n := 4
-	t.Helper()
-	forSlice(t, float32s, n, func(x []float32) bool {
-		t.Helper()
-		a := archsimd.LoadFloat32x4(x)
-		g := make([]float32, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
-
-// testFloat64x2Unary tests the simd unary method f against the expected behavior generated by want
-func testFloat64x2Unary(t *testing.T, f func(_ archsimd.Float64x2) archsimd.Float64x2, want func(_ []float64) []float64) {
-	n := 2
-	t.Helper()
-	forSlice(t, float64s, n, func(x []float64) bool {
-		t.Helper()
-		a := archsimd.LoadFloat64x2(x)
-		g := make([]float64, n)
-		f(a).Store(g)
-		w := want(x)
-		return checkSlicesLogInput(t, g, w, 0.0, func() { t.Helper(); t.Logf("x=%v", x) })
-	})
-}
diff --git a/src/simd/archsimd/internal/simd_test/arm64_unary_test.go b/src/simd/archsimd/internal/simd_test/arm64_unary_test.go
deleted file mode 100644
index ec1c809..0000000
--- a/src/simd/archsimd/internal/simd_test/arm64_unary_test.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// 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 && arm64
-
-package simd_test
-
-import (
-	"simd/archsimd"
-	"testing"
-)
-
-func TestSqrt(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Sqrt, sqrtSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Sqrt, sqrtSlice[float64])
-}
-
-func TestRound(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Round, roundSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Round, roundSlice[float64])
-}
-
-func TestFloor(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Floor, floorSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Floor, floorSlice[float64])
-}
-
-func TestCeil(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Ceil, ceilSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Ceil, ceilSlice[float64])
-}
-
-func TestTrunc(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Trunc, truncSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Trunc, truncSlice[float64])
-}
diff --git a/src/simd/archsimd/internal/simd_test/binary_128_test.go b/src/simd/archsimd/internal/simd_test/binary_128_test.go
index 79360e6..e5c4984 100644
--- a/src/simd/archsimd/internal/simd_test/binary_128_test.go
+++ b/src/simd/archsimd/internal/simd_test/binary_128_test.go
@@ -2,11 +2,12 @@
 // 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
+//go:build goexperiment.simd && (amd64 || wasm || arm64)
 
 package simd_test
 
 import (
+	"runtime"
 	"simd/archsimd"
 	"testing"
 )
@@ -42,35 +43,33 @@
 }
 
 func TestMax(t *testing.T) {
+	if runtime.GOARCH != "amd64" {
+		// skip in AMD64 as NaN behavior is different
+		testFloat32x4Binary(t, archsimd.Float32x4.Max, maxSlice[float32])
+		testFloat64x2Binary(t, archsimd.Float64x2.Max, maxSlice[float64])
+	}
+	testInt8x16Binary(t, archsimd.Int8x16.Max, maxSlice[int8])
 	testInt16x8Binary(t, archsimd.Int16x8.Max, maxSlice[int16])
 	testInt32x4Binary(t, archsimd.Int32x4.Max, maxSlice[int32])
 
-	testInt64x2Binary(t, archsimd.Int64x2.Max, maxSlice[int64])
-
-	testInt8x16Binary(t, archsimd.Int8x16.Max, maxSlice[int8])
-
+	testUint8x16Binary(t, archsimd.Uint8x16.Max, maxSlice[uint8])
 	testUint16x8Binary(t, archsimd.Uint16x8.Max, maxSlice[uint16])
 	testUint32x4Binary(t, archsimd.Uint32x4.Max, maxSlice[uint32])
-
-	testUint64x2Binary(t, archsimd.Uint64x2.Max, maxSlice[uint64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Max, maxSlice[uint8])
 }
 
 func TestMin(t *testing.T) {
+	if runtime.GOARCH != "amd64" {
+		// skip in AMD64 as NaN behavior is different
+		testFloat32x4Binary(t, archsimd.Float32x4.Min, minSlice[float32])
+		testFloat64x2Binary(t, archsimd.Float64x2.Min, minSlice[float64])
+	}
+	testInt8x16Binary(t, archsimd.Int8x16.Min, minSlice[int8])
 	testInt16x8Binary(t, archsimd.Int16x8.Min, minSlice[int16])
 	testInt32x4Binary(t, archsimd.Int32x4.Min, minSlice[int32])
 
-	testInt64x2Binary(t, archsimd.Int64x2.Min, minSlice[int64])
-
-	testInt8x16Binary(t, archsimd.Int8x16.Min, minSlice[int8])
-
+	testUint8x16Binary(t, archsimd.Uint8x16.Min, minSlice[uint8])
 	testUint16x8Binary(t, archsimd.Uint16x8.Min, minSlice[uint16])
 	testUint32x4Binary(t, archsimd.Uint32x4.Min, minSlice[uint32])
-
-	testUint64x2Binary(t, archsimd.Uint64x2.Min, minSlice[uint64])
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Min, minSlice[uint8])
 }
 
 func TestAnd(t *testing.T) {
@@ -129,13 +128,195 @@
 	testUint8x16Binary(t, archsimd.Uint8x16.Mul, mulSlice[uint8])
 	testInt16x8Binary(t, archsimd.Int16x8.Mul, mulSlice[int16])
 	testInt32x4Binary(t, archsimd.Int32x4.Mul, mulSlice[int32])
-
-	if archsimd.X86.AVX512() {
-		testInt64x2Binary(t, archsimd.Int64x2.Mul, mulSlice[int64])
-	}
 }
 
 func TestDiv(t *testing.T) {
 	testFloat32x4Binary(t, archsimd.Float32x4.Div, divSlice[float32])
 	testFloat64x2Binary(t, archsimd.Float64x2.Div, divSlice[float64])
 }
+
+func TestGetElem(t *testing.T) {
+	// Int8x16
+	{
+		a := []int8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
+		v := archsimd.LoadInt8x16(a)
+		if e := v.GetElem(2); e != a[2] {
+			t.Errorf("Int8x16.GetElem(2) = %d, want %d", e, a[2])
+		}
+	}
+	// Int16x8
+	{
+		a := []int16{10, 20, 30, 40, 50, 60, 70, 80}
+		v := archsimd.LoadInt16x8(a)
+		if e := v.GetElem(3); e != a[3] {
+			t.Errorf("Int16x8.GetElem(3) = %d, want %d", e, a[3])
+		}
+	}
+	// Int32x4
+	{
+		a := []int32{100, 200, 300, 400}
+		v := archsimd.LoadInt32x4(a)
+		if e := v.GetElem(1); e != a[1] {
+			t.Errorf("Int32x4.GetElem(1) = %d, want %d", e, a[1])
+		}
+	}
+	// Int64x2
+	{
+		a := []int64{1000, 2000}
+		v := archsimd.LoadInt64x2(a)
+		if e := v.GetElem(0); e != a[0] {
+			t.Errorf("Int64x2.GetElem(0) = %d, want %d", e, a[0])
+		}
+	}
+	// Uint8x16
+	{
+		a := []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
+		v := archsimd.LoadUint8x16(a)
+		if e := v.GetElem(5); e != a[5] {
+			t.Errorf("Uint8x16.GetElem(5) = %d, want %d", e, a[5])
+		}
+	}
+	// Uint16x8
+	{
+		a := []uint16{100, 200, 300, 400, 500, 600, 700, 800}
+		v := archsimd.LoadUint16x8(a)
+		if e := v.GetElem(7); e != a[7] {
+			t.Errorf("Uint16x8.GetElem(7) = %d, want %d", e, a[7])
+		}
+	}
+	// Uint32x4
+	{
+		a := []uint32{1000, 2000, 3000, 4000}
+		v := archsimd.LoadUint32x4(a)
+		if e := v.GetElem(2); e != a[2] {
+			t.Errorf("Uint32x4.GetElem(2) = %d, want %d", e, a[2])
+		}
+	}
+	// Uint64x2
+	{
+		a := []uint64{10000, 20000}
+		v := archsimd.LoadUint64x2(a)
+		if e := v.GetElem(1); e != a[1] {
+			t.Errorf("Uint64x2.GetElem(1) = %d, want %d", e, a[1])
+		}
+	}
+	// Float32x4
+	{
+		a := []float32{1.0, 2.0, 3.0, 4.0}
+		v := archsimd.LoadFloat32x4(a)
+		if e := v.GetElem(3); e != a[3] {
+			t.Errorf("Float32x4.GetElem(3) = %f, want %f", e, a[3])
+		}
+	}
+	// Float64x2
+	{
+		a := []float64{10.5, 20.5}
+		v := archsimd.LoadFloat64x2(a)
+		if e := v.GetElem(0); e != a[0] {
+			t.Errorf("Float64x2.GetElem(0) = %f, want %f", e, a[0])
+		}
+	}
+}
+
+func TestSetElem(t *testing.T) {
+	// Int8x16
+	{
+		a := []int8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
+		v := archsimd.LoadInt8x16(a)
+		v = v.SetElem(3, int8(99))
+		a[3] = 99
+		b := make([]int8, 16)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Int16x8
+	{
+		a := []int16{10, 20, 30, 40, 50, 60, 70, 80}
+		v := archsimd.LoadInt16x8(a)
+		v = v.SetElem(5, int16(123))
+		a[5] = 123
+		b := make([]int16, 8)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Int32x4
+	{
+		a := []int32{100, 200, 300, 400}
+		v := archsimd.LoadInt32x4(a)
+		v = v.SetElem(2, int32(999))
+		a[2] = 999
+		b := make([]int32, 4)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Int64x2
+	{
+		a := []int64{1000, 2000}
+		v := archsimd.LoadInt64x2(a)
+		v = v.SetElem(1, int64(5555))
+		a[1] = 5555
+		b := make([]int64, 2)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Uint8x16
+	{
+		a := []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
+		v := archsimd.LoadUint8x16(a)
+		v = v.SetElem(7, uint8(200))
+		a[7] = 200
+		b := make([]uint8, 16)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Uint16x8
+	{
+		a := []uint16{100, 200, 300, 400, 500, 600, 700, 800}
+		v := archsimd.LoadUint16x8(a)
+		v = v.SetElem(0, uint16(1111))
+		a[0] = 1111
+		b := make([]uint16, 8)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Uint32x4
+	{
+		a := []uint32{1000, 2000, 3000, 4000}
+		v := archsimd.LoadUint32x4(a)
+		v = v.SetElem(3, uint32(9999))
+		a[3] = 9999
+		b := make([]uint32, 4)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Uint64x2
+	{
+		a := []uint64{10000, 20000}
+		v := archsimd.LoadUint64x2(a)
+		v = v.SetElem(0, uint64(55555))
+		a[0] = 55555
+		b := make([]uint64, 2)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Float32x4
+	{
+		a := []float32{1.0, 2.0, 3.0, 4.0}
+		v := archsimd.LoadFloat32x4(a)
+		v = v.SetElem(1, float32(42.5))
+		a[1] = 42.5
+		b := make([]float32, 4)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+	// Float64x2
+	{
+		a := []float64{10.5, 20.5}
+		v := archsimd.LoadFloat64x2(a)
+		v = v.SetElem(0, float64(99.9))
+		a[0] = 99.9
+		b := make([]float64, 2)
+		v.Store(b)
+		checkSlices(t, b, a)
+	}
+}
diff --git a/src/simd/archsimd/internal/simd_test/binary_test.go b/src/simd/archsimd/internal/simd_test/binary_amd64_test.go
similarity index 70%
rename from src/simd/archsimd/internal/simd_test/binary_test.go
rename to src/simd/archsimd/internal/simd_test/binary_amd64_test.go
index 797a7af..412f7a3 100644
--- a/src/simd/archsimd/internal/simd_test/binary_test.go
+++ b/src/simd/archsimd/internal/simd_test/binary_amd64_test.go
@@ -11,22 +11,10 @@
 	"testing"
 )
 
-func TestAdd(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Add, addSlice[float32])
+func TestAddAMD64(t *testing.T) {
 	testFloat32x8Binary(t, archsimd.Float32x8.Add, addSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Add, addSlice[float64])
 	testFloat64x4Binary(t, archsimd.Float64x4.Add, addSlice[float64])
 
-	testInt16x8Binary(t, archsimd.Int16x8.Add, addSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Add, addSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.Add, addSlice[int64])
-	testInt8x16Binary(t, archsimd.Int8x16.Add, addSlice[int8])
-
-	testUint32x4Binary(t, archsimd.Uint32x4.Add, addSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.Add, addSlice[uint64])
-	testUint16x8Binary(t, archsimd.Uint16x8.Add, addSlice[uint16])
-	testUint8x16Binary(t, archsimd.Uint8x16.Add, addSlice[uint8])
-
 	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.Add, addSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.Add, addSlice[uint32])
@@ -55,17 +43,10 @@
 	}
 }
 
-func TestSub(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Sub, subSlice[float32])
+func TestSubAMD64(t *testing.T) {
 	testFloat32x8Binary(t, archsimd.Float32x8.Sub, subSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Sub, subSlice[float64])
 	testFloat64x4Binary(t, archsimd.Float64x4.Sub, subSlice[float64])
 
-	testInt32x4Binary(t, archsimd.Int32x4.Sub, subSlice[int32])
-	testInt16x8Binary(t, archsimd.Int16x8.Sub, subSlice[int16])
-	testInt64x2Binary(t, archsimd.Int64x2.Sub, subSlice[int64])
-	testInt8x16Binary(t, archsimd.Int8x16.Sub, subSlice[int8])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.Sub, subSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.Sub, subSlice[int32])
@@ -73,11 +54,6 @@
 		testInt8x32Binary(t, archsimd.Int8x32.Sub, subSlice[int8])
 	}
 
-	testUint32x4Binary(t, archsimd.Uint32x4.Sub, subSlice[uint32])
-	testUint16x8Binary(t, archsimd.Uint16x8.Sub, subSlice[uint16])
-	testUint64x2Binary(t, archsimd.Uint64x2.Sub, subSlice[uint64])
-	testUint8x16Binary(t, archsimd.Uint8x16.Sub, subSlice[uint8])
-
 	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.Sub, subSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.Sub, subSlice[uint32])
@@ -99,53 +75,26 @@
 	}
 }
 
-func TestMax(t *testing.T) {
-	// testFloat32x4Binary(t, archsimd.Float32x4.Max, maxSlice[float32]) // nan is wrong
+func TestMaxAMD64(t *testing.T) {
 	// testFloat32x8Binary(t, archsimd.Float32x8.Max, maxSlice[float32]) // nan is wrong
-	// testFloat64x2Binary(t, archsimd.Float64x2.Max, maxSlice[float64]) // nan is wrong
 	// testFloat64x4Binary(t, archsimd.Float64x4.Max, maxSlice[float64]) // nan is wrong
 
-	testInt16x8Binary(t, archsimd.Int16x8.Max, maxSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Max, maxSlice[int32])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.Max, maxSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.Max, maxSlice[int32])
-	}
-
-	if archsimd.X86.AVX512() {
-		testInt64x2Binary(t, archsimd.Int64x2.Max, maxSlice[int64])
-		testInt64x4Binary(t, archsimd.Int64x4.Max, maxSlice[int64])
-	}
-
-	testInt8x16Binary(t, archsimd.Int8x16.Max, maxSlice[int8])
-
-	if archsimd.X86.AVX2() {
 		testInt8x32Binary(t, archsimd.Int8x32.Max, maxSlice[int8])
-	}
-
-	testUint16x8Binary(t, archsimd.Uint16x8.Max, maxSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Max, maxSlice[uint32])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.Max, maxSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.Max, maxSlice[uint32])
-	}
-
-	if archsimd.X86.AVX512() {
-		testUint64x2Binary(t, archsimd.Uint64x2.Max, maxSlice[uint64])
-		testUint64x4Binary(t, archsimd.Uint64x4.Max, maxSlice[uint64])
-	}
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Max, maxSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint8x32Binary(t, archsimd.Uint8x32.Max, maxSlice[uint8])
 	}
 
 	if archsimd.X86.AVX512() {
 		// testFloat32x16Binary(t, archsimd.Float32x16.Max, maxSlice[float32]) // nan is wrong
 		// testFloat64x8Binary(t, archsimd.Float64x8.Max, maxSlice[float64]) // nan is wrong
+		testInt64x2Binary(t, archsimd.Int64x2.Max, maxSlice[int64])
+		testInt64x4Binary(t, archsimd.Int64x4.Max, maxSlice[int64])
+		testUint64x2Binary(t, archsimd.Uint64x2.Max, maxSlice[uint64])
+		testUint64x4Binary(t, archsimd.Uint64x4.Max, maxSlice[uint64])
 		testInt8x64Binary(t, archsimd.Int8x64.Max, maxSlice[int8])
 		testInt16x32Binary(t, archsimd.Int16x32.Max, maxSlice[int16])
 		testInt32x16Binary(t, archsimd.Int32x16.Max, maxSlice[int32])
@@ -157,53 +106,26 @@
 	}
 }
 
-func TestMin(t *testing.T) {
-	// testFloat32x4Binary(t, archsimd.Float32x4.Min, minSlice[float32]) // nan is wrong
+func TestMinAMD64(t *testing.T) {
 	// testFloat32x8Binary(t, archsimd.Float32x8.Min, minSlice[float32]) // nan is wrong
-	// testFloat64x2Binary(t, archsimd.Float64x2.Min, minSlice[float64]) // nan is wrong
 	// testFloat64x4Binary(t, archsimd.Float64x4.Min, minSlice[float64]) // nan is wrong
 
-	testInt16x8Binary(t, archsimd.Int16x8.Min, minSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Min, minSlice[int32])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.Min, minSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.Min, minSlice[int32])
-	}
-
-	if archsimd.X86.AVX512() {
-		testInt64x2Binary(t, archsimd.Int64x2.Min, minSlice[int64])
-		testInt64x4Binary(t, archsimd.Int64x4.Min, minSlice[int64])
-	}
-
-	testInt8x16Binary(t, archsimd.Int8x16.Min, minSlice[int8])
-
-	if archsimd.X86.AVX2() {
 		testInt8x32Binary(t, archsimd.Int8x32.Min, minSlice[int8])
-	}
-
-	testUint16x8Binary(t, archsimd.Uint16x8.Min, minSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Min, minSlice[uint32])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.Min, minSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.Min, minSlice[uint32])
-	}
-
-	if archsimd.X86.AVX512() {
-		testUint64x2Binary(t, archsimd.Uint64x2.Min, minSlice[uint64])
-		testUint64x4Binary(t, archsimd.Uint64x4.Min, minSlice[uint64])
-	}
-
-	testUint8x16Binary(t, archsimd.Uint8x16.Min, minSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint8x32Binary(t, archsimd.Uint8x32.Min, minSlice[uint8])
 	}
 
 	if archsimd.X86.AVX512() {
 		// testFloat32x16Binary(t, archsimd.Float32x16.Min, minSlice[float32]) // nan is wrong
 		// testFloat64x8Binary(t, archsimd.Float64x8.Min, minSlice[float64]) // nan is wrong
+		testInt64x2Binary(t, archsimd.Int64x2.Min, minSlice[int64])
+		testInt64x4Binary(t, archsimd.Int64x4.Min, minSlice[int64])
+		testUint64x2Binary(t, archsimd.Uint64x2.Min, minSlice[uint64])
+		testUint64x4Binary(t, archsimd.Uint64x4.Min, minSlice[uint64])
 		testInt8x64Binary(t, archsimd.Int8x64.Min, minSlice[int8])
 		testInt16x32Binary(t, archsimd.Int16x32.Min, minSlice[int16])
 		testInt32x16Binary(t, archsimd.Int32x16.Min, minSlice[int32])
@@ -215,25 +137,13 @@
 	}
 }
 
-func TestAnd(t *testing.T) {
-	testInt16x8Binary(t, archsimd.Int16x8.And, andSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.And, andSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.And, andSlice[int64])
-	testInt8x16Binary(t, archsimd.Int8x16.And, andSlice[int8])
-
+func TestAndAMD64(t *testing.T) {
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.And, andSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.And, andSlice[int32])
 		testInt64x4Binary(t, archsimd.Int64x4.And, andSlice[int64])
 		testInt8x32Binary(t, archsimd.Int8x32.And, andSlice[int8])
-	}
 
-	testUint16x8Binary(t, archsimd.Uint16x8.And, andSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.And, andSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.And, andSlice[uint64])
-	testUint8x16Binary(t, archsimd.Uint8x16.And, andSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.And, andSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.And, andSlice[uint32])
 		testUint64x4Binary(t, archsimd.Uint64x4.And, andSlice[uint64])
@@ -241,36 +151,24 @@
 	}
 
 	if archsimd.X86.AVX512() {
-		//	testInt8x64Binary(t, archsimd.Int8x64.And, andISlice[int8]) // missing
-		//	testInt16x32Binary(t, archsimd.Int16x32.And, andISlice[int16]) // missing
+		testInt8x64Binary(t, archsimd.Int8x64.And, andSlice[int8])
+		testInt16x32Binary(t, archsimd.Int16x32.And, andSlice[int16])
 		testInt32x16Binary(t, archsimd.Int32x16.And, andSlice[int32])
 		testInt64x8Binary(t, archsimd.Int64x8.And, andSlice[int64])
-		//	testUint8x64Binary(t, archsimd.Uint8x64.And, andISlice[uint8]) // missing
-		//	testUint16x32Binary(t, archsimd.Uint16x32.And, andISlice[uint16]) // missing
+		testUint8x64Binary(t, archsimd.Uint8x64.And, andSlice[uint8])
+		testUint16x32Binary(t, archsimd.Uint16x32.And, andSlice[uint16])
 		testUint32x16Binary(t, archsimd.Uint32x16.And, andSlice[uint32])
 		testUint64x8Binary(t, archsimd.Uint64x8.And, andSlice[uint64])
 	}
 }
 
-func TestAndNot(t *testing.T) {
-	testInt16x8Binary(t, archsimd.Int16x8.AndNot, andNotSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.AndNot, andNotSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.AndNot, andNotSlice[int64])
-	testInt8x16Binary(t, archsimd.Int8x16.AndNot, andNotSlice[int8])
-
+func TestAndNotAMD64(t *testing.T) {
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.AndNot, andNotSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.AndNot, andNotSlice[int32])
 		testInt64x4Binary(t, archsimd.Int64x4.AndNot, andNotSlice[int64])
 		testInt8x32Binary(t, archsimd.Int8x32.AndNot, andNotSlice[int8])
-	}
 
-	testUint8x16Binary(t, archsimd.Uint8x16.AndNot, andNotSlice[uint8])
-	testUint16x8Binary(t, archsimd.Uint16x8.AndNot, andNotSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.AndNot, andNotSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.AndNot, andNotSlice[uint64])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.AndNot, andNotSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.AndNot, andNotSlice[uint32])
 		testUint64x4Binary(t, archsimd.Uint64x4.AndNot, andNotSlice[uint64])
@@ -289,25 +187,13 @@
 	}
 }
 
-func TestXor(t *testing.T) {
-	testInt16x8Binary(t, archsimd.Int16x8.Xor, xorSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Xor, xorSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.Xor, xorSlice[int64])
-	testInt8x16Binary(t, archsimd.Int8x16.Xor, xorSlice[int8])
-
+func TestXorAMD64(t *testing.T) {
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.Xor, xorSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.Xor, xorSlice[int32])
 		testInt64x4Binary(t, archsimd.Int64x4.Xor, xorSlice[int64])
 		testInt8x32Binary(t, archsimd.Int8x32.Xor, xorSlice[int8])
-	}
 
-	testUint16x8Binary(t, archsimd.Uint16x8.Xor, xorSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Xor, xorSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.Xor, xorSlice[uint64])
-	testUint8x16Binary(t, archsimd.Uint8x16.Xor, xorSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.Xor, xorSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.Xor, xorSlice[uint32])
 		testUint64x4Binary(t, archsimd.Uint64x4.Xor, xorSlice[uint64])
@@ -315,36 +201,24 @@
 	}
 
 	if archsimd.X86.AVX512() {
-		//	testInt8x64Binary(t, archsimd.Int8x64.Xor, andISlice[int8]) // missing
-		//	testInt16x32Binary(t, archsimd.Int16x32.Xor, andISlice[int16]) // missing
+		testInt8x64Binary(t, archsimd.Int8x64.Xor, xorSlice[int8])
+		testInt16x32Binary(t, archsimd.Int16x32.Xor, xorSlice[int16])
 		testInt32x16Binary(t, archsimd.Int32x16.Xor, xorSlice[int32])
 		testInt64x8Binary(t, archsimd.Int64x8.Xor, xorSlice[int64])
-		//	testUint8x64Binary(t, archsimd.Uint8x64.Xor, andISlice[uint8]) // missing
-		//	testUint16x32Binary(t, archsimd.Uint16x32.Xor, andISlice[uint16]) // missing
+		testUint8x64Binary(t, archsimd.Uint8x64.Xor, xorSlice[uint8])
+		testUint16x32Binary(t, archsimd.Uint16x32.Xor, xorSlice[uint16])
 		testUint32x16Binary(t, archsimd.Uint32x16.Xor, xorSlice[uint32])
 		testUint64x8Binary(t, archsimd.Uint64x8.Xor, xorSlice[uint64])
 	}
 }
 
-func TestOr(t *testing.T) {
-	testInt16x8Binary(t, archsimd.Int16x8.Or, orSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Or, orSlice[int32])
-	testInt64x2Binary(t, archsimd.Int64x2.Or, orSlice[int64])
-	testInt8x16Binary(t, archsimd.Int8x16.Or, orSlice[int8])
-
+func TestOrAMD64(t *testing.T) {
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.Or, orSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.Or, orSlice[int32])
 		testInt64x4Binary(t, archsimd.Int64x4.Or, orSlice[int64])
 		testInt8x32Binary(t, archsimd.Int8x32.Or, orSlice[int8])
-	}
 
-	testUint16x8Binary(t, archsimd.Uint16x8.Or, orSlice[uint16])
-	testUint32x4Binary(t, archsimd.Uint32x4.Or, orSlice[uint32])
-	testUint64x2Binary(t, archsimd.Uint64x2.Or, orSlice[uint64])
-	testUint8x16Binary(t, archsimd.Uint8x16.Or, orSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Binary(t, archsimd.Uint16x16.Or, orSlice[uint16])
 		testUint32x8Binary(t, archsimd.Uint32x8.Or, orSlice[uint32])
 		testUint64x4Binary(t, archsimd.Uint64x4.Or, orSlice[uint64])
@@ -352,26 +226,21 @@
 	}
 
 	if archsimd.X86.AVX512() {
-		//	testInt8x64Binary(t, archsimd.Int8x64.Or, andISlice[int8]) // missing
-		//	testInt16x32Binary(t, archsimd.Int16x32.Or, andISlice[int16]) // missing
+		testInt8x64Binary(t, archsimd.Int8x64.Or, orSlice[int8])
+		testInt16x32Binary(t, archsimd.Int16x32.Or, orSlice[int16])
 		testInt32x16Binary(t, archsimd.Int32x16.Or, orSlice[int32])
 		testInt64x8Binary(t, archsimd.Int64x8.Or, orSlice[int64])
-		//	testUint8x64Binary(t, archsimd.Uint8x64.Or, andISlice[uint8]) // missing
-		//	testUint16x32Binary(t, archsimd.Uint16x32.Or, andISlice[uint16]) // missing
+		testUint8x64Binary(t, archsimd.Uint8x64.Or, orSlice[uint8])
+		testUint16x32Binary(t, archsimd.Uint16x32.Or, orSlice[uint16])
 		testUint32x16Binary(t, archsimd.Uint32x16.Or, orSlice[uint32])
 		testUint64x8Binary(t, archsimd.Uint64x8.Or, orSlice[uint64])
 	}
 }
 
-func TestMul(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Mul, mulSlice[float32])
+func TestMulAMD64(t *testing.T) {
 	testFloat32x8Binary(t, archsimd.Float32x8.Mul, mulSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Mul, mulSlice[float64])
 	testFloat64x4Binary(t, archsimd.Float64x4.Mul, mulSlice[float64])
 
-	testInt16x8Binary(t, archsimd.Int16x8.Mul, mulSlice[int16])
-	testInt32x4Binary(t, archsimd.Int32x4.Mul, mulSlice[int32])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Binary(t, archsimd.Int16x16.Mul, mulSlice[int16])
 		testInt32x8Binary(t, archsimd.Int32x8.Mul, mulSlice[int32])
@@ -379,9 +248,6 @@
 		testUint8x32Binary(t, archsimd.Uint8x32.Mul, mulSlice[uint8])
 	}
 
-	testInt8x16Binary(t, archsimd.Int8x16.Mul, mulSlice[int8])
-	testUint8x16Binary(t, archsimd.Uint8x16.Mul, mulSlice[uint8])
-
 	// TODO we should be able to do these, there's no difference between signed/unsigned Mul
 	// testUint16x16Binary(t, archsimd.Uint16x16.Mul, mulSlice[uint16])
 	// testUint16x8Binary(t, archsimd.Uint16x8.Mul, mulSlice[uint16])
@@ -413,10 +279,8 @@
 	}
 }
 
-func TestDiv(t *testing.T) {
-	testFloat32x4Binary(t, archsimd.Float32x4.Div, divSlice[float32])
+func TestDivAMD64(t *testing.T) {
 	testFloat32x8Binary(t, archsimd.Float32x8.Div, divSlice[float32])
-	testFloat64x2Binary(t, archsimd.Float64x2.Div, divSlice[float64])
 	testFloat64x4Binary(t, archsimd.Float64x4.Div, divSlice[float64])
 
 	if archsimd.X86.AVX512() {
diff --git a/src/simd/archsimd/internal/simd_test/binary_helpers_128_test.go b/src/simd/archsimd/internal/simd_test/binary_helpers_128_test.go
index be1aee9..f3bf87e 100644
--- a/src/simd/archsimd/internal/simd_test/binary_helpers_128_test.go
+++ b/src/simd/archsimd/internal/simd_test/binary_helpers_128_test.go
@@ -1,6 +1,6 @@
 // Code generated by 'tmplgen'; DO NOT EDIT.
 
-//go:build goexperiment.simd && (amd64 || wasm)
+//go:build goexperiment.simd && (amd64 || wasm || arm64)
 
 // This file contains functions testing binary simd methods.
 // Each function in this file is specialized for a
diff --git a/src/simd/archsimd/internal/simd_test/binary_wasm_test.go b/src/simd/archsimd/internal/simd_test/binary_wasm_test.go
new file mode 100644
index 0000000..cbae26a
--- /dev/null
+++ b/src/simd/archsimd/internal/simd_test/binary_wasm_test.go
@@ -0,0 +1,27 @@
+// 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 && wasm
+
+package simd_test
+
+import (
+	"simd/archsimd"
+	"testing"
+)
+
+func TestMaxWasm(t *testing.T) {
+	testInt64x2Binary(t, archsimd.Int64x2.Max, maxSlice[int64])
+	testUint64x2Binary(t, archsimd.Uint64x2.Max, maxSlice[uint64])
+}
+
+func TestMinWasm(t *testing.T) {
+	testInt64x2Binary(t, archsimd.Int64x2.Min, minSlice[int64])
+	testUint64x2Binary(t, archsimd.Uint64x2.Min, minSlice[uint64])
+}
+
+func TestMulWasm(t *testing.T) {
+	testInt64x2Binary(t, archsimd.Int64x2.Mul, mulSlice[int64])
+	testUint64x2Binary(t, archsimd.Uint64x2.Mul, mulSlice[uint64])
+}
diff --git a/src/simd/archsimd/internal/simd_test/compare_128_test.go b/src/simd/archsimd/internal/simd_test/compare_128_test.go
index 2fa1dc8..98ade49 100644
--- a/src/simd/archsimd/internal/simd_test/compare_128_test.go
+++ b/src/simd/archsimd/internal/simd_test/compare_128_test.go
@@ -2,7 +2,7 @@
 // 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
+//go:build goexperiment.simd && (amd64 || wasm || arm64)
 
 package simd_test
 
diff --git a/src/simd/archsimd/internal/simd_test/compare_test.go b/src/simd/archsimd/internal/simd_test/compare_amd64_test.go
similarity index 68%
rename from src/simd/archsimd/internal/simd_test/compare_test.go
rename to src/simd/archsimd/internal/simd_test/compare_amd64_test.go
index 3ce0d54..f264be8 100644
--- a/src/simd/archsimd/internal/simd_test/compare_test.go
+++ b/src/simd/archsimd/internal/simd_test/compare_amd64_test.go
@@ -11,40 +11,16 @@
 	"testing"
 )
 
-func TestLess(t *testing.T) {
-	testFloat32x4Compare(t, archsimd.Float32x4.Less, lessSlice[float32])
+func TestLessAMD64(t *testing.T) {
 	testFloat32x8Compare(t, archsimd.Float32x8.Less, lessSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.Less, lessSlice[float64])
 	testFloat64x4Compare(t, archsimd.Float64x4.Less, lessSlice[float64])
 
-	testInt16x8Compare(t, archsimd.Int16x8.Less, lessSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.Less, lessSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.Less, lessSlice[int64])
-	testInt8x16Compare(t, archsimd.Int8x16.Less, lessSlice[int8])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Compare(t, archsimd.Int16x16.Less, lessSlice[int16])
 		testInt32x8Compare(t, archsimd.Int32x8.Less, lessSlice[int32])
 		testInt64x4Compare(t, archsimd.Int64x4.Less, lessSlice[int64])
 		testInt8x32Compare(t, archsimd.Int8x32.Less, lessSlice[int8])
 
-		testInt16x16Compare(t, archsimd.Int16x16.Less, lessSlice[int16])
-		testInt32x8Compare(t, archsimd.Int32x8.Less, lessSlice[int32])
-		testInt64x4Compare(t, archsimd.Int64x4.Less, lessSlice[int64])
-		testInt8x32Compare(t, archsimd.Int8x32.Less, lessSlice[int8])
-	}
-
-	testInt16x8Compare(t, archsimd.Int16x8.Less, lessSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.Less, lessSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.Less, lessSlice[int64])
-	testInt8x16Compare(t, archsimd.Int8x16.Less, lessSlice[int8])
-
-	testUint16x8Compare(t, archsimd.Uint16x8.Less, lessSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.Less, lessSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.Less, lessSlice[uint64])
-	testUint8x16Compare(t, archsimd.Uint8x16.Less, lessSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Compare(t, archsimd.Uint16x16.Less, lessSlice[uint16])
 		testUint32x8Compare(t, archsimd.Uint32x8.Less, lessSlice[uint32])
 		testUint64x4Compare(t, archsimd.Uint64x4.Less, lessSlice[uint64])
@@ -74,30 +50,16 @@
 	}
 }
 
-func TestLessEqual(t *testing.T) {
-	testFloat32x4Compare(t, archsimd.Float32x4.LessEqual, lessEqualSlice[float32])
+func TestLessEqualAMD64(t *testing.T) {
 	testFloat32x8Compare(t, archsimd.Float32x8.LessEqual, lessEqualSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.LessEqual, lessEqualSlice[float64])
 	testFloat64x4Compare(t, archsimd.Float64x4.LessEqual, lessEqualSlice[float64])
 
-	testInt16x8Compare(t, archsimd.Int16x8.LessEqual, lessEqualSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.LessEqual, lessEqualSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.LessEqual, lessEqualSlice[int64])
-	testInt8x16Compare(t, archsimd.Int8x16.LessEqual, lessEqualSlice[int8])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Compare(t, archsimd.Int16x16.LessEqual, lessEqualSlice[int16])
 		testInt32x8Compare(t, archsimd.Int32x8.LessEqual, lessEqualSlice[int32])
 		testInt64x4Compare(t, archsimd.Int64x4.LessEqual, lessEqualSlice[int64])
 		testInt8x32Compare(t, archsimd.Int8x32.LessEqual, lessEqualSlice[int8])
-	}
 
-	testUint16x8Compare(t, archsimd.Uint16x8.LessEqual, lessEqualSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.LessEqual, lessEqualSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.LessEqual, lessEqualSlice[uint64])
-	testUint8x16Compare(t, archsimd.Uint8x16.LessEqual, lessEqualSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Compare(t, archsimd.Uint16x16.LessEqual, lessEqualSlice[uint16])
 		testUint32x8Compare(t, archsimd.Uint32x8.LessEqual, lessEqualSlice[uint32])
 		testUint64x4Compare(t, archsimd.Uint64x4.LessEqual, lessEqualSlice[uint64])
@@ -118,30 +80,16 @@
 	}
 }
 
-func TestGreater(t *testing.T) {
-	testFloat32x4Compare(t, archsimd.Float32x4.Greater, greaterSlice[float32])
+func TestGreaterAMD64(t *testing.T) {
 	testFloat32x8Compare(t, archsimd.Float32x8.Greater, greaterSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.Greater, greaterSlice[float64])
 	testFloat64x4Compare(t, archsimd.Float64x4.Greater, greaterSlice[float64])
 
-	testInt16x8Compare(t, archsimd.Int16x8.Greater, greaterSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.Greater, greaterSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.Greater, greaterSlice[int64])
-	testInt8x16Compare(t, archsimd.Int8x16.Greater, greaterSlice[int8])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Compare(t, archsimd.Int16x16.Greater, greaterSlice[int16])
 		testInt32x8Compare(t, archsimd.Int32x8.Greater, greaterSlice[int32])
 		testInt64x4Compare(t, archsimd.Int64x4.Greater, greaterSlice[int64])
 		testInt8x32Compare(t, archsimd.Int8x32.Greater, greaterSlice[int8])
-	}
 
-	testUint16x8Compare(t, archsimd.Uint16x8.Greater, greaterSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.Greater, greaterSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.Greater, greaterSlice[uint64])
-	testUint8x16Compare(t, archsimd.Uint8x16.Greater, greaterSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Compare(t, archsimd.Uint16x16.Greater, greaterSlice[uint16])
 		testUint32x8Compare(t, archsimd.Uint32x8.Greater, greaterSlice[uint32])
 		testUint64x4Compare(t, archsimd.Uint64x4.Greater, greaterSlice[uint64])
@@ -163,30 +111,16 @@
 	}
 }
 
-func TestGreaterEqual(t *testing.T) {
-	testFloat32x4Compare(t, archsimd.Float32x4.GreaterEqual, greaterEqualSlice[float32])
+func TestGreaterEqualAMD64(t *testing.T) {
 	testFloat32x8Compare(t, archsimd.Float32x8.GreaterEqual, greaterEqualSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.GreaterEqual, greaterEqualSlice[float64])
 	testFloat64x4Compare(t, archsimd.Float64x4.GreaterEqual, greaterEqualSlice[float64])
 
-	testInt16x8Compare(t, archsimd.Int16x8.GreaterEqual, greaterEqualSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.GreaterEqual, greaterEqualSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.GreaterEqual, greaterEqualSlice[int64])
-	testInt8x16Compare(t, archsimd.Int8x16.GreaterEqual, greaterEqualSlice[int8])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Compare(t, archsimd.Int16x16.GreaterEqual, greaterEqualSlice[int16])
 		testInt32x8Compare(t, archsimd.Int32x8.GreaterEqual, greaterEqualSlice[int32])
 		testInt64x4Compare(t, archsimd.Int64x4.GreaterEqual, greaterEqualSlice[int64])
 		testInt8x32Compare(t, archsimd.Int8x32.GreaterEqual, greaterEqualSlice[int8])
-	}
 
-	testUint16x8Compare(t, archsimd.Uint16x8.GreaterEqual, greaterEqualSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.GreaterEqual, greaterEqualSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.GreaterEqual, greaterEqualSlice[uint64])
-	testUint8x16Compare(t, archsimd.Uint8x16.GreaterEqual, greaterEqualSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Compare(t, archsimd.Uint16x16.GreaterEqual, greaterEqualSlice[uint16])
 		testUint32x8Compare(t, archsimd.Uint32x8.GreaterEqual, greaterEqualSlice[uint32])
 		testUint64x4Compare(t, archsimd.Uint64x4.GreaterEqual, greaterEqualSlice[uint64])
@@ -207,30 +141,16 @@
 	}
 }
 
-func TestEqual(t *testing.T) {
-	testFloat32x4Compare(t, archsimd.Float32x4.Equal, equalSlice[float32])
+func TestEqualAMD64(t *testing.T) {
 	testFloat32x8Compare(t, archsimd.Float32x8.Equal, equalSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.Equal, equalSlice[float64])
 	testFloat64x4Compare(t, archsimd.Float64x4.Equal, equalSlice[float64])
 
-	testInt16x8Compare(t, archsimd.Int16x8.Equal, equalSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.Equal, equalSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.Equal, equalSlice[int64])
-	testInt8x16Compare(t, archsimd.Int8x16.Equal, equalSlice[int8])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Compare(t, archsimd.Int16x16.Equal, equalSlice[int16])
 		testInt32x8Compare(t, archsimd.Int32x8.Equal, equalSlice[int32])
 		testInt64x4Compare(t, archsimd.Int64x4.Equal, equalSlice[int64])
 		testInt8x32Compare(t, archsimd.Int8x32.Equal, equalSlice[int8])
-	}
 
-	testUint16x8Compare(t, archsimd.Uint16x8.Equal, equalSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.Equal, equalSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.Equal, equalSlice[uint64])
-	testUint8x16Compare(t, archsimd.Uint8x16.Equal, equalSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Compare(t, archsimd.Uint16x16.Equal, equalSlice[uint16])
 		testUint32x8Compare(t, archsimd.Uint32x8.Equal, equalSlice[uint32])
 		testUint64x4Compare(t, archsimd.Uint64x4.Equal, equalSlice[uint64])
@@ -251,30 +171,16 @@
 	}
 }
 
-func TestNotEqual(t *testing.T) {
-	testFloat32x4Compare(t, archsimd.Float32x4.NotEqual, notEqualSlice[float32])
+func TestNotEqualAMD64(t *testing.T) {
 	testFloat32x8Compare(t, archsimd.Float32x8.NotEqual, notEqualSlice[float32])
-	testFloat64x2Compare(t, archsimd.Float64x2.NotEqual, notEqualSlice[float64])
 	testFloat64x4Compare(t, archsimd.Float64x4.NotEqual, notEqualSlice[float64])
 
-	testInt16x8Compare(t, archsimd.Int16x8.NotEqual, notEqualSlice[int16])
-	testInt32x4Compare(t, archsimd.Int32x4.NotEqual, notEqualSlice[int32])
-	testInt64x2Compare(t, archsimd.Int64x2.NotEqual, notEqualSlice[int64])
-	testInt8x16Compare(t, archsimd.Int8x16.NotEqual, notEqualSlice[int8])
-
 	if archsimd.X86.AVX2() {
 		testInt16x16Compare(t, archsimd.Int16x16.NotEqual, notEqualSlice[int16])
 		testInt32x8Compare(t, archsimd.Int32x8.NotEqual, notEqualSlice[int32])
 		testInt64x4Compare(t, archsimd.Int64x4.NotEqual, notEqualSlice[int64])
 		testInt8x32Compare(t, archsimd.Int8x32.NotEqual, notEqualSlice[int8])
-	}
 
-	testUint16x8Compare(t, archsimd.Uint16x8.NotEqual, notEqualSlice[uint16])
-	testUint32x4Compare(t, archsimd.Uint32x4.NotEqual, notEqualSlice[uint32])
-	testUint64x2Compare(t, archsimd.Uint64x2.NotEqual, notEqualSlice[uint64])
-	testUint8x16Compare(t, archsimd.Uint8x16.NotEqual, notEqualSlice[uint8])
-
-	if archsimd.X86.AVX2() {
 		testUint16x16Compare(t, archsimd.Uint16x16.NotEqual, notEqualSlice[uint16])
 		testUint32x8Compare(t, archsimd.Uint32x8.NotEqual, notEqualSlice[uint32])
 		testUint64x4Compare(t, archsimd.Uint64x4.NotEqual, notEqualSlice[uint64])
diff --git a/src/simd/archsimd/internal/simd_test/compare_helpers_128_test.go b/src/simd/archsimd/internal/simd_test/compare_helpers_128_test.go
index 44819ba..c217440 100644
--- a/src/simd/archsimd/internal/simd_test/compare_helpers_128_test.go
+++ b/src/simd/archsimd/internal/simd_test/compare_helpers_128_test.go
@@ -1,6 +1,6 @@
 // Code generated by 'tmplgen'; DO NOT EDIT.
 
-//go:build goexperiment.simd && (amd64 || wasm)
+//go:build goexperiment.simd && (amd64 || wasm || arm64)
 
 // This file contains functions testing simd methods that compare two operands.
 // Each function in this file is specialized for a
diff --git a/src/simd/archsimd/internal/simd_test/shift_128_test.go b/src/simd/archsimd/internal/simd_test/shift_128_test.go
index 7da9ad1..61b55c6 100644
--- a/src/simd/archsimd/internal/simd_test/shift_128_test.go
+++ b/src/simd/archsimd/internal/simd_test/shift_128_test.go
@@ -2,7 +2,7 @@
 // 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
+//go:build goexperiment.simd && (amd64 || wasm || arm64)
 
 package simd_test
 
diff --git a/src/simd/archsimd/internal/simd_test/shift_test.go b/src/simd/archsimd/internal/simd_test/shift_amd64_test.go
similarity index 89%
rename from src/simd/archsimd/internal/simd_test/shift_test.go
rename to src/simd/archsimd/internal/simd_test/shift_amd64_test.go
index 18cc206..31ff375 100644
--- a/src/simd/archsimd/internal/simd_test/shift_test.go
+++ b/src/simd/archsimd/internal/simd_test/shift_amd64_test.go
@@ -11,7 +11,7 @@
 	"testing"
 )
 
-func TestRotateAllLeft(t *testing.T) {
+func TestRotateAllLeftAMD64(t *testing.T) {
 	x := uint8(0x81)
 	if y := rotl(x, 1); y != 3 {
 		t.Errorf("Expected 3, got 0x%x", y)
@@ -24,12 +24,6 @@
 	}
 
 	for i := uint64(0); i < 65; i++ {
-		testUint64x2Unary(t, curry2(archsimd.Uint64x2.RotateAllLeft, i), rotlOfSlice[uint64](i))
-		testUint32x4Unary(t, curry2(archsimd.Uint32x4.RotateAllLeft, i), rotlOfSlice[uint32](i))
-		//		testUint16x8Unary(t, curry2(archsimd.Uint16x8.RotateAllLeft, i), rotlOfSlice[uint16](i))
-		//		testUint8x16Unary(t, curry2(archsimd.Uint8x16.RotateAllLeft, i), rotlOfSlice[uint8](i))
-	}
-	for i := uint64(0); i < 65; i++ {
 		testUint64x4Unary(t, curry2(archsimd.Uint64x4.RotateAllLeft, i), rotlOfSlice[uint64](i))
 		testUint32x8Unary(t, curry2(archsimd.Uint32x8.RotateAllLeft, i), rotlOfSlice[uint32](i))
 		//		testUint16x16Unary(t, curry2(archsimd.Uint16x16.RotateAllLeft, i), rotlOfSlice[uint16](i))
@@ -38,7 +32,7 @@
 
 }
 
-func TestRotateAllRight(t *testing.T) {
+func TestRotateAllRightAMD64(t *testing.T) {
 	x := uint8(0x81)
 	if y := rotr(x, 1); y != 0xc0 {
 		t.Errorf("Expected 0xc0, got 0x%x", y)
@@ -51,12 +45,6 @@
 	}
 
 	for i := uint64(0); i < 65; i++ {
-		testUint64x2Unary(t, curry2(archsimd.Uint64x2.RotateAllRight, i), rotrOfSlice[uint64](i))
-		testUint32x4Unary(t, curry2(archsimd.Uint32x4.RotateAllRight, i), rotrOfSlice[uint32](i))
-		//		testUint16x8Unary(t, curry2(archsimd.Uint16x8.RotateAllLeft, i), rotlOfSlice[uint16](i))
-		//		testUint8x16Unary(t, curry2(archsimd.Uint8x16.RotateAllLeft, i), rotlOfSlice[uint8](i))
-	}
-	for i := uint64(0); i < 65; i++ {
 		testUint64x4Unary(t, curry2(archsimd.Uint64x4.RotateAllRight, i), rotrOfSlice[uint64](i))
 		testUint32x8Unary(t, curry2(archsimd.Uint32x8.RotateAllRight, i), rotrOfSlice[uint32](i))
 		//		testUint16x16Unary(t, curry2(archsimd.Uint16x16.RotateAllLeft, i), rotlOfSlice[uint16](i))
diff --git a/src/simd/archsimd/internal/simd_test/unary_128_test.go b/src/simd/archsimd/internal/simd_test/unary_128_test.go
index 416978d..afad266 100644
--- a/src/simd/archsimd/internal/simd_test/unary_128_test.go
+++ b/src/simd/archsimd/internal/simd_test/unary_128_test.go
@@ -2,11 +2,12 @@
 // 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
+//go:build goexperiment.simd && (amd64 || wasm || arm64)
 
 package simd_test
 
 import (
+	"runtime"
 	"simd/archsimd"
 	"testing"
 )
@@ -46,25 +47,30 @@
 	testInt64x2Unary(t, archsimd.Int64x2.Not, map1[int64](not))
 }
 
-func TestAbsolute(t *testing.T) {
+func TestAbs(t *testing.T) {
+	testFloat32x4Unary(t, archsimd.Float32x4.Abs, map1[float32](abs))
+	testFloat64x2Unary(t, archsimd.Float64x2.Abs, map1[float64](abs))
 	testInt8x16Unary(t, archsimd.Int8x16.Abs, map1[int8](abs))
 	testInt16x8Unary(t, archsimd.Int16x8.Abs, map1[int16](abs))
 	testInt32x4Unary(t, archsimd.Int32x4.Abs, map1[int32](abs))
+	if runtime.GOARCH != "amd64" || archsimd.X86.AVX512() {
+		testInt64x2Unary(t, archsimd.Int64x2.Abs, map1[int64](abs))
+	}
+}
+
+func TestNeg(t *testing.T) {
+	testFloat32x4Unary(t, archsimd.Float32x4.Neg, map1[float32](neg))
+	testFloat64x2Unary(t, archsimd.Float64x2.Neg, map1[float64](neg))
+	testInt8x16Unary(t, archsimd.Int8x16.Neg, map1[int8](neg))
+	testInt16x8Unary(t, archsimd.Int16x8.Neg, map1[int16](neg))
+	testInt32x4Unary(t, archsimd.Int32x4.Neg, map1[int32](neg))
+	testInt64x2Unary(t, archsimd.Int64x2.Neg, map1[int64](neg))
 }
 
 func TestOnesCount(t *testing.T) {
+	if runtime.GOARCH == "amd64" && !archsimd.X86.AVX512BITALG() {
+		t.Skip("OnesCount on 128-bit 8-bit vectors on amd64 requires AVX512BITALG")
+	}
 	testInt8x16Unary(t, archsimd.Int8x16.OnesCount, map1[int8](onesCount))
-	testInt16x8Unary(t, archsimd.Int16x8.OnesCount, map1[int16](onesCount))
-	testInt32x4Unary(t, archsimd.Int32x4.OnesCount, map1[int32](onesCount))
+	testUint8x16Unary(t, archsimd.Uint8x16.OnesCount, map1[uint8](onesCount))
 }
-
-// func TestConvert(t *testing.T) {
-// 	testFloat64x2ConvertToFloat32(t, archsimd.Float64x2.ConvertToFloat32, map1n[float64](toFloat32, 4))
-// 	testFloat32x4ConvertToFloat64(t, archsimd.Float32x4.ConvertToFloat64, map1[float32](toFloat64))
-
-// 	testFloat32x4ConvertToInt32(t, archsimd.Float32x4.ConvertToInt32, map1[float32](floatToInt32_x86))
-// 	testFloat64x2ConvertToInt32(t, archsimd.Float64x2.ConvertToInt32, map1n[float64](floatToInt32_x86, 4))
-
-// 	testInt32x4ConvertToFloat32(t, archsimd.Int32x4.ConvertToFloat32, map1[int32](toFloat32))
-// 	testInt32x4ConvertToFloat64(t, archsimd.Int32x4.ConvertToFloat64, map1[int32](toFloat64))
-// }
diff --git a/src/simd/archsimd/internal/simd_test/unary_test.go b/src/simd/archsimd/internal/simd_test/unary_amd64_test.go
similarity index 87%
rename from src/simd/archsimd/internal/simd_test/unary_test.go
rename to src/simd/archsimd/internal/simd_test/unary_amd64_test.go
index 8d390f0..734e21d 100644
--- a/src/simd/archsimd/internal/simd_test/unary_test.go
+++ b/src/simd/archsimd/internal/simd_test/unary_amd64_test.go
@@ -12,32 +12,46 @@
 	"testing"
 )
 
-func TestAbsFP(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Abs, map1[float32](abs))
+func TestAbsAMD64(t *testing.T) {
 	testFloat32x8Unary(t, archsimd.Float32x8.Abs, map1[float32](abs))
-	testFloat64x2Unary(t, archsimd.Float64x2.Abs, map1[float64](abs))
 	testFloat64x4Unary(t, archsimd.Float64x4.Abs, map1[float64](abs))
+	if archsimd.X86.AVX2() {
+		testInt8x32Unary(t, archsimd.Int8x32.Abs, map1[int8](abs))
+		testInt16x16Unary(t, archsimd.Int16x16.Abs, map1[int16](abs))
+		testInt32x8Unary(t, archsimd.Int32x8.Abs, map1[int32](abs))
+	}
 	if archsimd.X86.AVX512() {
-		testFloat32x16Unary(t, archsimd.Float32x16.Abs, map1[float32](abs)) // missing
-		testFloat64x8Unary(t, archsimd.Float64x8.Abs, map1[float64](abs))   // missing
+		testInt8x64Unary(t, archsimd.Int8x64.Abs, map1[int8](abs))
+		testInt16x32Unary(t, archsimd.Int16x32.Abs, map1[int16](abs))
+		testInt32x16Unary(t, archsimd.Int32x16.Abs, map1[int32](abs))
+		testInt64x4Unary(t, archsimd.Int64x4.Abs, map1[int64](abs))
+		testInt64x8Unary(t, archsimd.Int64x8.Abs, map1[int64](abs))
+		testFloat32x16Unary(t, archsimd.Float32x16.Abs, map1[float32](abs))
+		testFloat64x8Unary(t, archsimd.Float64x8.Abs, map1[float64](abs))
 	}
 }
 
-func TestNegFP(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Neg, map1[float32](neg))
+func TestNegAMD64(t *testing.T) {
 	testFloat32x8Unary(t, archsimd.Float32x8.Neg, map1[float32](neg))
-	testFloat64x2Unary(t, archsimd.Float64x2.Neg, map1[float64](neg))
 	testFloat64x4Unary(t, archsimd.Float64x4.Neg, map1[float64](neg))
+	if archsimd.X86.AVX2() {
+		testInt8x32Unary(t, archsimd.Int8x32.Neg, map1[int8](neg))
+		testInt16x16Unary(t, archsimd.Int16x16.Neg, map1[int16](neg))
+		testInt32x8Unary(t, archsimd.Int32x8.Neg, map1[int32](neg))
+		testInt64x4Unary(t, archsimd.Int64x4.Neg, map1[int64](neg))
+	}
 	if archsimd.X86.AVX512() {
-		testFloat32x16Unary(t, archsimd.Float32x16.Neg, map1[float32](neg)) // missing
-		testFloat64x8Unary(t, archsimd.Float64x8.Neg, map1[float64](neg))   // missing
+		testFloat32x16Unary(t, archsimd.Float32x16.Neg, map1[float32](neg))
+		testFloat64x8Unary(t, archsimd.Float64x8.Neg, map1[float64](neg))
+		testInt8x64Unary(t, archsimd.Int8x64.Neg, map1[int8](neg))
+		testInt16x32Unary(t, archsimd.Int16x32.Neg, map1[int16](neg))
+		testInt32x16Unary(t, archsimd.Int32x16.Neg, map1[int32](neg))
+		testInt64x8Unary(t, archsimd.Int64x8.Neg, map1[int64](neg))
 	}
 }
 
-func TestCeil(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Ceil, ceilSlice[float32])
+func TestCeilAMD64(t *testing.T) {
 	testFloat32x8Unary(t, archsimd.Float32x8.Ceil, ceilSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Ceil, ceilSlice[float64])
 	testFloat64x4Unary(t, archsimd.Float64x4.Ceil, ceilSlice[float64])
 	if archsimd.X86.AVX512() {
 		// testFloat32x16Unary(t, archsimd.Float32x16.Ceil, ceilSlice[float32]) // missing
@@ -45,10 +59,8 @@
 	}
 }
 
-func TestFloor(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Floor, floorSlice[float32])
+func TestFloorAMD64(t *testing.T) {
 	testFloat32x8Unary(t, archsimd.Float32x8.Floor, floorSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Floor, floorSlice[float64])
 	testFloat64x4Unary(t, archsimd.Float64x4.Floor, floorSlice[float64])
 	if archsimd.X86.AVX512() {
 		// testFloat32x16Unary(t, archsimd.Float32x16.Floor, floorSlice[float32]) // missing
@@ -56,10 +68,8 @@
 	}
 }
 
-func TestTrunc(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Trunc, truncSlice[float32])
+func TestTruncAMD64(t *testing.T) {
 	testFloat32x8Unary(t, archsimd.Float32x8.Trunc, truncSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Trunc, truncSlice[float64])
 	testFloat64x4Unary(t, archsimd.Float64x4.Trunc, truncSlice[float64])
 	if archsimd.X86.AVX512() {
 		// testFloat32x16Unary(t, archsimd.Float32x16.Trunc, truncSlice[float32]) // missing
@@ -67,10 +77,8 @@
 	}
 }
 
-func TestRound(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Round, roundSlice[float32])
+func TestRoundAMD64(t *testing.T) {
 	testFloat32x8Unary(t, archsimd.Float32x8.Round, roundSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Round, roundSlice[float64])
 	testFloat64x4Unary(t, archsimd.Float64x4.Round, roundSlice[float64])
 	if archsimd.X86.AVX512() {
 		// testFloat32x16Unary(t, archsimd.Float32x16.Round, roundSlice[float32]) // missing
@@ -78,10 +86,8 @@
 	}
 }
 
-func TestSqrt(t *testing.T) {
-	testFloat32x4Unary(t, archsimd.Float32x4.Sqrt, sqrtSlice[float32])
+func TestSqrtAMD64(t *testing.T) {
 	testFloat32x8Unary(t, archsimd.Float32x8.Sqrt, sqrtSlice[float32])
-	testFloat64x2Unary(t, archsimd.Float64x2.Sqrt, sqrtSlice[float64])
 	testFloat64x4Unary(t, archsimd.Float64x4.Sqrt, sqrtSlice[float64])
 	if archsimd.X86.AVX512() {
 		testFloat32x16Unary(t, archsimd.Float32x16.Sqrt, sqrtSlice[float32])
@@ -89,10 +95,8 @@
 	}
 }
 
-func TestNot(t *testing.T) {
-	testInt8x16Unary(t, archsimd.Int8x16.Not, map1[int8](not))
+func TestNotAMD64(t *testing.T) {
 	testInt16x8Unary(t, archsimd.Int16x8.Not, map1[int16](not))
-	testInt32x4Unary(t, archsimd.Int32x4.Not, map1[int32](not))
 
 	if archsimd.X86.AVX2() {
 		testInt8x32Unary(t, archsimd.Int8x32.Not, map1[int8](not))
@@ -101,32 +105,6 @@
 	}
 }
 
-func TestAbsolute(t *testing.T) {
-	testInt8x16Unary(t, archsimd.Int8x16.Abs, map1[int8](abs))
-	testInt16x8Unary(t, archsimd.Int16x8.Abs, map1[int16](abs))
-	testInt32x4Unary(t, archsimd.Int32x4.Abs, map1[int32](abs))
-	testFloat32x4Unary(t, archsimd.Float32x4.Abs, map1[float32](abs))
-	testFloat64x2Unary(t, archsimd.Float64x2.Abs, map1[float64](abs))
-
-	if archsimd.X86.AVX2() {
-		testInt8x32Unary(t, archsimd.Int8x32.Abs, map1[int8](abs))
-		testInt16x16Unary(t, archsimd.Int16x16.Abs, map1[int16](abs))
-		testInt32x8Unary(t, archsimd.Int32x8.Abs, map1[int32](abs))
-		testFloat32x8Unary(t, archsimd.Float32x8.Abs, map1[float32](abs))
-		testFloat64x4Unary(t, archsimd.Float64x4.Abs, map1[float64](abs))
-	}
-	if archsimd.X86.AVX512() {
-		testInt8x64Unary(t, archsimd.Int8x64.Abs, map1[int8](abs))
-		testInt16x32Unary(t, archsimd.Int16x32.Abs, map1[int16](abs))
-		testInt32x16Unary(t, archsimd.Int32x16.Abs, map1[int32](abs))
-		testInt64x2Unary(t, archsimd.Int64x2.Abs, map1[int64](abs))
-		testInt64x4Unary(t, archsimd.Int64x4.Abs, map1[int64](abs))
-		testInt64x8Unary(t, archsimd.Int64x8.Abs, map1[int64](abs))
-		testFloat32x16Unary(t, archsimd.Float32x16.Abs, map1[float32](abs))
-		testFloat64x8Unary(t, archsimd.Float64x8.Abs, map1[float64](abs))
-	}
-}
-
 func TestCeilScaledResidue(t *testing.T) {
 	if !archsimd.X86.AVX512() {
 		t.Skip("Needs AVX512")
@@ -340,3 +318,43 @@
 		testUint64x8ConvertToUint32(t, archsimd.Uint64x8.SaturateToUint32, map1[uint64](satToUint32))
 	}
 }
+
+func TestOnesCountAMD64(t *testing.T) {
+	if archsimd.X86.AVX512BITALG() {
+		// 128-bit
+		testInt16x8Unary(t, archsimd.Int16x8.OnesCount, map1[int16](onesCount))
+		testUint16x8Unary(t, archsimd.Uint16x8.OnesCount, map1[uint16](onesCount))
+
+		// 256-bit
+		testInt8x32Unary(t, archsimd.Int8x32.OnesCount, map1[int8](onesCount))
+		testUint8x32Unary(t, archsimd.Uint8x32.OnesCount, map1[uint8](onesCount))
+		testInt16x16Unary(t, archsimd.Int16x16.OnesCount, map1[int16](onesCount))
+		testUint16x16Unary(t, archsimd.Uint16x16.OnesCount, map1[uint16](onesCount))
+
+		// 512-bit
+		testInt8x64Unary(t, archsimd.Int8x64.OnesCount, map1[int8](onesCount))
+		testUint8x64Unary(t, archsimd.Uint8x64.OnesCount, map1[uint8](onesCount))
+		testInt16x32Unary(t, archsimd.Int16x32.OnesCount, map1[int16](onesCount))
+		testUint16x32Unary(t, archsimd.Uint16x32.OnesCount, map1[uint16](onesCount))
+	}
+
+	if archsimd.X86.AVX512VPOPCNTDQ() {
+		// 128-bit
+		testInt32x4Unary(t, archsimd.Int32x4.OnesCount, map1[int32](onesCount))
+		testUint32x4Unary(t, archsimd.Uint32x4.OnesCount, map1[uint32](onesCount))
+		testInt64x2Unary(t, archsimd.Int64x2.OnesCount, map1[int64](onesCount))
+		testUint64x2Unary(t, archsimd.Uint64x2.OnesCount, map1[uint64](onesCount))
+
+		// 256-bit
+		testInt32x8Unary(t, archsimd.Int32x8.OnesCount, map1[int32](onesCount))
+		testUint32x8Unary(t, archsimd.Uint32x8.OnesCount, map1[uint32](onesCount))
+		testInt64x4Unary(t, archsimd.Int64x4.OnesCount, map1[int64](onesCount))
+		testUint64x4Unary(t, archsimd.Uint64x4.OnesCount, map1[uint64](onesCount))
+
+		// 512-bit
+		testInt32x16Unary(t, archsimd.Int32x16.OnesCount, map1[int32](onesCount))
+		testUint32x16Unary(t, archsimd.Uint32x16.OnesCount, map1[uint32](onesCount))
+		testInt64x8Unary(t, archsimd.Int64x8.OnesCount, map1[int64](onesCount))
+		testUint64x8Unary(t, archsimd.Uint64x8.OnesCount, map1[uint64](onesCount))
+	}
+}
diff --git a/src/simd/archsimd/internal/simd_test/unary_helpers_128_test.go b/src/simd/archsimd/internal/simd_test/unary_helpers_128_test.go
index dee8c3a..dc6bf82 100644
--- a/src/simd/archsimd/internal/simd_test/unary_helpers_128_test.go
+++ b/src/simd/archsimd/internal/simd_test/unary_helpers_128_test.go
@@ -1,6 +1,6 @@
 // Code generated by 'tmplgen'; DO NOT EDIT.
 
-//go:build goexperiment.simd && (amd64 || wasm)
+//go:build goexperiment.simd && (amd64 || wasm || arm64)
 
 // This file contains functions testing unary simd methods.
 // Each function in this file is specialized for a
diff --git a/src/simd/archsimd/internal/simd_test/unary_wasm_test.go b/src/simd/archsimd/internal/simd_test/unary_wasm_test.go
new file mode 100644
index 0000000..3275030
--- /dev/null
+++ b/src/simd/archsimd/internal/simd_test/unary_wasm_test.go
@@ -0,0 +1,21 @@
+// 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 && wasm
+
+package simd_test
+
+import (
+	"simd/archsimd"
+	"testing"
+)
+
+func TestOnesCountWasm(t *testing.T) {
+	testInt16x8Unary(t, archsimd.Int16x8.OnesCount, map1[int16](onesCount))
+	testUint16x8Unary(t, archsimd.Uint16x8.OnesCount, map1[uint16](onesCount))
+	testInt32x4Unary(t, archsimd.Int32x4.OnesCount, map1[int32](onesCount))
+	testUint32x4Unary(t, archsimd.Uint32x4.OnesCount, map1[uint32](onesCount))
+	testInt64x2Unary(t, archsimd.Int64x2.OnesCount, map1[int64](onesCount))
+	testUint64x2Unary(t, archsimd.Uint64x2.OnesCount, map1[uint64](onesCount))
+}
