Source file src/simd/archsimd/internal/simd_test/arm64_bitwise_test.go

     1  // Copyright 2026 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build goexperiment.simd && arm64
     6  
     7  package simd_test
     8  
     9  import (
    10  	"simd/archsimd"
    11  	"testing"
    12  )
    13  
    14  func TestAnd(t *testing.T) {
    15  	testInt8x16Binary(t, archsimd.Int8x16.And, andSlice[int8])
    16  	testInt16x8Binary(t, archsimd.Int16x8.And, andSlice[int16])
    17  	testInt32x4Binary(t, archsimd.Int32x4.And, andSlice[int32])
    18  	testInt64x2Binary(t, archsimd.Int64x2.And, andSlice[int64])
    19  
    20  	testUint8x16Binary(t, archsimd.Uint8x16.And, andSlice[uint8])
    21  	testUint16x8Binary(t, archsimd.Uint16x8.And, andSlice[uint16])
    22  	testUint32x4Binary(t, archsimd.Uint32x4.And, andSlice[uint32])
    23  	testUint64x2Binary(t, archsimd.Uint64x2.And, andSlice[uint64])
    24  }
    25  
    26  func TestOr(t *testing.T) {
    27  	testInt8x16Binary(t, archsimd.Int8x16.Or, orSlice[int8])
    28  	testInt16x8Binary(t, archsimd.Int16x8.Or, orSlice[int16])
    29  	testInt32x4Binary(t, archsimd.Int32x4.Or, orSlice[int32])
    30  	testInt64x2Binary(t, archsimd.Int64x2.Or, orSlice[int64])
    31  
    32  	testUint8x16Binary(t, archsimd.Uint8x16.Or, orSlice[uint8])
    33  	testUint16x8Binary(t, archsimd.Uint16x8.Or, orSlice[uint16])
    34  	testUint32x4Binary(t, archsimd.Uint32x4.Or, orSlice[uint32])
    35  	testUint64x2Binary(t, archsimd.Uint64x2.Or, orSlice[uint64])
    36  }
    37  
    38  func TestXor(t *testing.T) {
    39  	testInt8x16Binary(t, archsimd.Int8x16.Xor, xorSlice[int8])
    40  	testInt16x8Binary(t, archsimd.Int16x8.Xor, xorSlice[int16])
    41  	testInt32x4Binary(t, archsimd.Int32x4.Xor, xorSlice[int32])
    42  	testInt64x2Binary(t, archsimd.Int64x2.Xor, xorSlice[int64])
    43  
    44  	testUint8x16Binary(t, archsimd.Uint8x16.Xor, xorSlice[uint8])
    45  	testUint16x8Binary(t, archsimd.Uint16x8.Xor, xorSlice[uint16])
    46  	testUint32x4Binary(t, archsimd.Uint32x4.Xor, xorSlice[uint32])
    47  	testUint64x2Binary(t, archsimd.Uint64x2.Xor, xorSlice[uint64])
    48  }
    49  
    50  func TestAndNot(t *testing.T) {
    51  	testInt8x16Binary(t, archsimd.Int8x16.AndNot, andNotSlice[int8])
    52  	testInt16x8Binary(t, archsimd.Int16x8.AndNot, andNotSlice[int16])
    53  	testInt32x4Binary(t, archsimd.Int32x4.AndNot, andNotSlice[int32])
    54  	testInt64x2Binary(t, archsimd.Int64x2.AndNot, andNotSlice[int64])
    55  
    56  	testUint8x16Binary(t, archsimd.Uint8x16.AndNot, andNotSlice[uint8])
    57  	testUint16x8Binary(t, archsimd.Uint16x8.AndNot, andNotSlice[uint16])
    58  	testUint32x4Binary(t, archsimd.Uint32x4.AndNot, andNotSlice[uint32])
    59  	testUint64x2Binary(t, archsimd.Uint64x2.AndNot, andNotSlice[uint64])
    60  }
    61  
    62  func TestOrNot(t *testing.T) {
    63  	testInt8x16Binary(t, archsimd.Int8x16.OrNot, orNotSlice[int8])
    64  	testInt16x8Binary(t, archsimd.Int16x8.OrNot, orNotSlice[int16])
    65  	testInt32x4Binary(t, archsimd.Int32x4.OrNot, orNotSlice[int32])
    66  	testInt64x2Binary(t, archsimd.Int64x2.OrNot, orNotSlice[int64])
    67  
    68  	testUint8x16Binary(t, archsimd.Uint8x16.OrNot, orNotSlice[uint8])
    69  	testUint16x8Binary(t, archsimd.Uint16x8.OrNot, orNotSlice[uint16])
    70  	testUint32x4Binary(t, archsimd.Uint32x4.OrNot, orNotSlice[uint32])
    71  	testUint64x2Binary(t, archsimd.Uint64x2.OrNot, orNotSlice[uint64])
    72  }
    73  
    74  func TestNot(t *testing.T) {
    75  	testInt8x16Unary(t, archsimd.Int8x16.Not, notSlice[int8])
    76  	testInt16x8Unary(t, archsimd.Int16x8.Not, notSlice[int16])
    77  	testInt32x4Unary(t, archsimd.Int32x4.Not, notSlice[int32])
    78  	testInt64x2Unary(t, archsimd.Int64x2.Not, notSlice[int64])
    79  
    80  	testUint8x16Unary(t, archsimd.Uint8x16.Not, notSlice[uint8])
    81  	testUint16x8Unary(t, archsimd.Uint16x8.Not, notSlice[uint16])
    82  	testUint32x4Unary(t, archsimd.Uint32x4.Not, notSlice[uint32])
    83  	testUint64x2Unary(t, archsimd.Uint64x2.Not, notSlice[uint64])
    84  }
    85  

View as plain text