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

     1  // Copyright 2025 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 && amd64
     6  
     7  package simd_test
     8  
     9  import (
    10  	"simd/archsimd"
    11  	"testing"
    12  )
    13  
    14  func TestAddAMD64(t *testing.T) {
    15  	testFloat32x8Binary(t, archsimd.Float32x8.Add, addSlice[float32])
    16  	testFloat64x4Binary(t, archsimd.Float64x4.Add, addSlice[float64])
    17  
    18  	if archsimd.X86.AVX2() {
    19  		testUint16x16Binary(t, archsimd.Uint16x16.Add, addSlice[uint16])
    20  		testUint32x8Binary(t, archsimd.Uint32x8.Add, addSlice[uint32])
    21  		testUint64x4Binary(t, archsimd.Uint64x4.Add, addSlice[uint64])
    22  		testUint8x32Binary(t, archsimd.Uint8x32.Add, addSlice[uint8])
    23  	}
    24  
    25  	if archsimd.X86.AVX2() {
    26  		testInt16x16Binary(t, archsimd.Int16x16.Add, addSlice[int16])
    27  		testInt32x8Binary(t, archsimd.Int32x8.Add, addSlice[int32])
    28  		testInt64x4Binary(t, archsimd.Int64x4.Add, addSlice[int64])
    29  		testInt8x32Binary(t, archsimd.Int8x32.Add, addSlice[int8])
    30  	}
    31  
    32  	if archsimd.X86.AVX512() {
    33  		testFloat32x16Binary(t, archsimd.Float32x16.Add, addSlice[float32])
    34  		testFloat64x8Binary(t, archsimd.Float64x8.Add, addSlice[float64])
    35  		testInt8x64Binary(t, archsimd.Int8x64.Add, addSlice[int8])
    36  		testInt16x32Binary(t, archsimd.Int16x32.Add, addSlice[int16])
    37  		testInt32x16Binary(t, archsimd.Int32x16.Add, addSlice[int32])
    38  		testInt64x8Binary(t, archsimd.Int64x8.Add, addSlice[int64])
    39  		testUint8x64Binary(t, archsimd.Uint8x64.Add, addSlice[uint8])
    40  		testUint16x32Binary(t, archsimd.Uint16x32.Add, addSlice[uint16])
    41  		testUint32x16Binary(t, archsimd.Uint32x16.Add, addSlice[uint32])
    42  		testUint64x8Binary(t, archsimd.Uint64x8.Add, addSlice[uint64])
    43  	}
    44  }
    45  
    46  func TestSubAMD64(t *testing.T) {
    47  	testFloat32x8Binary(t, archsimd.Float32x8.Sub, subSlice[float32])
    48  	testFloat64x4Binary(t, archsimd.Float64x4.Sub, subSlice[float64])
    49  
    50  	if archsimd.X86.AVX2() {
    51  		testInt16x16Binary(t, archsimd.Int16x16.Sub, subSlice[int16])
    52  		testInt32x8Binary(t, archsimd.Int32x8.Sub, subSlice[int32])
    53  		testInt64x4Binary(t, archsimd.Int64x4.Sub, subSlice[int64])
    54  		testInt8x32Binary(t, archsimd.Int8x32.Sub, subSlice[int8])
    55  	}
    56  
    57  	if archsimd.X86.AVX2() {
    58  		testUint16x16Binary(t, archsimd.Uint16x16.Sub, subSlice[uint16])
    59  		testUint32x8Binary(t, archsimd.Uint32x8.Sub, subSlice[uint32])
    60  		testUint64x4Binary(t, archsimd.Uint64x4.Sub, subSlice[uint64])
    61  		testUint8x32Binary(t, archsimd.Uint8x32.Sub, subSlice[uint8])
    62  	}
    63  
    64  	if archsimd.X86.AVX512() {
    65  		testFloat32x16Binary(t, archsimd.Float32x16.Sub, subSlice[float32])
    66  		testFloat64x8Binary(t, archsimd.Float64x8.Sub, subSlice[float64])
    67  		testInt8x64Binary(t, archsimd.Int8x64.Sub, subSlice[int8])
    68  		testInt16x32Binary(t, archsimd.Int16x32.Sub, subSlice[int16])
    69  		testInt32x16Binary(t, archsimd.Int32x16.Sub, subSlice[int32])
    70  		testInt64x8Binary(t, archsimd.Int64x8.Sub, subSlice[int64])
    71  		testUint8x64Binary(t, archsimd.Uint8x64.Sub, subSlice[uint8])
    72  		testUint16x32Binary(t, archsimd.Uint16x32.Sub, subSlice[uint16])
    73  		testUint32x16Binary(t, archsimd.Uint32x16.Sub, subSlice[uint32])
    74  		testUint64x8Binary(t, archsimd.Uint64x8.Sub, subSlice[uint64])
    75  	}
    76  }
    77  
    78  func TestMaxAMD64(t *testing.T) {
    79  	// testFloat32x8Binary(t, archsimd.Float32x8.Max, maxSlice[float32]) // nan is wrong
    80  	// testFloat64x4Binary(t, archsimd.Float64x4.Max, maxSlice[float64]) // nan is wrong
    81  
    82  	if archsimd.X86.AVX2() {
    83  		testInt16x16Binary(t, archsimd.Int16x16.Max, maxSlice[int16])
    84  		testInt32x8Binary(t, archsimd.Int32x8.Max, maxSlice[int32])
    85  		testInt8x32Binary(t, archsimd.Int8x32.Max, maxSlice[int8])
    86  		testUint16x16Binary(t, archsimd.Uint16x16.Max, maxSlice[uint16])
    87  		testUint32x8Binary(t, archsimd.Uint32x8.Max, maxSlice[uint32])
    88  		testUint8x32Binary(t, archsimd.Uint8x32.Max, maxSlice[uint8])
    89  	}
    90  
    91  	if archsimd.X86.AVX512() {
    92  		// testFloat32x16Binary(t, archsimd.Float32x16.Max, maxSlice[float32]) // nan is wrong
    93  		// testFloat64x8Binary(t, archsimd.Float64x8.Max, maxSlice[float64]) // nan is wrong
    94  		testInt64x2Binary(t, archsimd.Int64x2.Max, maxSlice[int64])
    95  		testInt64x4Binary(t, archsimd.Int64x4.Max, maxSlice[int64])
    96  		testUint64x2Binary(t, archsimd.Uint64x2.Max, maxSlice[uint64])
    97  		testUint64x4Binary(t, archsimd.Uint64x4.Max, maxSlice[uint64])
    98  		testInt8x64Binary(t, archsimd.Int8x64.Max, maxSlice[int8])
    99  		testInt16x32Binary(t, archsimd.Int16x32.Max, maxSlice[int16])
   100  		testInt32x16Binary(t, archsimd.Int32x16.Max, maxSlice[int32])
   101  		testInt64x8Binary(t, archsimd.Int64x8.Max, maxSlice[int64])
   102  		testUint8x64Binary(t, archsimd.Uint8x64.Max, maxSlice[uint8])
   103  		testUint16x32Binary(t, archsimd.Uint16x32.Max, maxSlice[uint16])
   104  		testUint32x16Binary(t, archsimd.Uint32x16.Max, maxSlice[uint32])
   105  		testUint64x8Binary(t, archsimd.Uint64x8.Max, maxSlice[uint64])
   106  	}
   107  }
   108  
   109  func TestMinAMD64(t *testing.T) {
   110  	// testFloat32x8Binary(t, archsimd.Float32x8.Min, minSlice[float32]) // nan is wrong
   111  	// testFloat64x4Binary(t, archsimd.Float64x4.Min, minSlice[float64]) // nan is wrong
   112  
   113  	if archsimd.X86.AVX2() {
   114  		testInt16x16Binary(t, archsimd.Int16x16.Min, minSlice[int16])
   115  		testInt32x8Binary(t, archsimd.Int32x8.Min, minSlice[int32])
   116  		testInt8x32Binary(t, archsimd.Int8x32.Min, minSlice[int8])
   117  		testUint16x16Binary(t, archsimd.Uint16x16.Min, minSlice[uint16])
   118  		testUint32x8Binary(t, archsimd.Uint32x8.Min, minSlice[uint32])
   119  		testUint8x32Binary(t, archsimd.Uint8x32.Min, minSlice[uint8])
   120  	}
   121  
   122  	if archsimd.X86.AVX512() {
   123  		// testFloat32x16Binary(t, archsimd.Float32x16.Min, minSlice[float32]) // nan is wrong
   124  		// testFloat64x8Binary(t, archsimd.Float64x8.Min, minSlice[float64]) // nan is wrong
   125  		testInt64x2Binary(t, archsimd.Int64x2.Min, minSlice[int64])
   126  		testInt64x4Binary(t, archsimd.Int64x4.Min, minSlice[int64])
   127  		testUint64x2Binary(t, archsimd.Uint64x2.Min, minSlice[uint64])
   128  		testUint64x4Binary(t, archsimd.Uint64x4.Min, minSlice[uint64])
   129  		testInt8x64Binary(t, archsimd.Int8x64.Min, minSlice[int8])
   130  		testInt16x32Binary(t, archsimd.Int16x32.Min, minSlice[int16])
   131  		testInt32x16Binary(t, archsimd.Int32x16.Min, minSlice[int32])
   132  		testInt64x8Binary(t, archsimd.Int64x8.Min, minSlice[int64])
   133  		testUint8x64Binary(t, archsimd.Uint8x64.Min, minSlice[uint8])
   134  		testUint16x32Binary(t, archsimd.Uint16x32.Min, minSlice[uint16])
   135  		testUint32x16Binary(t, archsimd.Uint32x16.Min, minSlice[uint32])
   136  		testUint64x8Binary(t, archsimd.Uint64x8.Min, minSlice[uint64])
   137  	}
   138  }
   139  
   140  func TestAndAMD64(t *testing.T) {
   141  	if archsimd.X86.AVX2() {
   142  		testInt16x16Binary(t, archsimd.Int16x16.And, andSlice[int16])
   143  		testInt32x8Binary(t, archsimd.Int32x8.And, andSlice[int32])
   144  		testInt64x4Binary(t, archsimd.Int64x4.And, andSlice[int64])
   145  		testInt8x32Binary(t, archsimd.Int8x32.And, andSlice[int8])
   146  
   147  		testUint16x16Binary(t, archsimd.Uint16x16.And, andSlice[uint16])
   148  		testUint32x8Binary(t, archsimd.Uint32x8.And, andSlice[uint32])
   149  		testUint64x4Binary(t, archsimd.Uint64x4.And, andSlice[uint64])
   150  		testUint8x32Binary(t, archsimd.Uint8x32.And, andSlice[uint8])
   151  	}
   152  
   153  	if archsimd.X86.AVX512() {
   154  		testInt8x64Binary(t, archsimd.Int8x64.And, andSlice[int8])
   155  		testInt16x32Binary(t, archsimd.Int16x32.And, andSlice[int16])
   156  		testInt32x16Binary(t, archsimd.Int32x16.And, andSlice[int32])
   157  		testInt64x8Binary(t, archsimd.Int64x8.And, andSlice[int64])
   158  		testUint8x64Binary(t, archsimd.Uint8x64.And, andSlice[uint8])
   159  		testUint16x32Binary(t, archsimd.Uint16x32.And, andSlice[uint16])
   160  		testUint32x16Binary(t, archsimd.Uint32x16.And, andSlice[uint32])
   161  		testUint64x8Binary(t, archsimd.Uint64x8.And, andSlice[uint64])
   162  	}
   163  }
   164  
   165  func TestAndNotAMD64(t *testing.T) {
   166  	if archsimd.X86.AVX2() {
   167  		testInt16x16Binary(t, archsimd.Int16x16.AndNot, andNotSlice[int16])
   168  		testInt32x8Binary(t, archsimd.Int32x8.AndNot, andNotSlice[int32])
   169  		testInt64x4Binary(t, archsimd.Int64x4.AndNot, andNotSlice[int64])
   170  		testInt8x32Binary(t, archsimd.Int8x32.AndNot, andNotSlice[int8])
   171  
   172  		testUint16x16Binary(t, archsimd.Uint16x16.AndNot, andNotSlice[uint16])
   173  		testUint32x8Binary(t, archsimd.Uint32x8.AndNot, andNotSlice[uint32])
   174  		testUint64x4Binary(t, archsimd.Uint64x4.AndNot, andNotSlice[uint64])
   175  		testUint8x32Binary(t, archsimd.Uint8x32.AndNot, andNotSlice[uint8])
   176  	}
   177  
   178  	if archsimd.X86.AVX512() {
   179  		testInt8x64Binary(t, archsimd.Int8x64.AndNot, andNotSlice[int8])
   180  		testInt16x32Binary(t, archsimd.Int16x32.AndNot, andNotSlice[int16])
   181  		testInt32x16Binary(t, archsimd.Int32x16.AndNot, andNotSlice[int32])
   182  		testInt64x8Binary(t, archsimd.Int64x8.AndNot, andNotSlice[int64])
   183  		testUint8x64Binary(t, archsimd.Uint8x64.AndNot, andNotSlice[uint8])
   184  		testUint16x32Binary(t, archsimd.Uint16x32.AndNot, andNotSlice[uint16])
   185  		testUint32x16Binary(t, archsimd.Uint32x16.AndNot, andNotSlice[uint32])
   186  		testUint64x8Binary(t, archsimd.Uint64x8.AndNot, andNotSlice[uint64])
   187  	}
   188  }
   189  
   190  func TestXorAMD64(t *testing.T) {
   191  	if archsimd.X86.AVX2() {
   192  		testInt16x16Binary(t, archsimd.Int16x16.Xor, xorSlice[int16])
   193  		testInt32x8Binary(t, archsimd.Int32x8.Xor, xorSlice[int32])
   194  		testInt64x4Binary(t, archsimd.Int64x4.Xor, xorSlice[int64])
   195  		testInt8x32Binary(t, archsimd.Int8x32.Xor, xorSlice[int8])
   196  
   197  		testUint16x16Binary(t, archsimd.Uint16x16.Xor, xorSlice[uint16])
   198  		testUint32x8Binary(t, archsimd.Uint32x8.Xor, xorSlice[uint32])
   199  		testUint64x4Binary(t, archsimd.Uint64x4.Xor, xorSlice[uint64])
   200  		testUint8x32Binary(t, archsimd.Uint8x32.Xor, xorSlice[uint8])
   201  	}
   202  
   203  	if archsimd.X86.AVX512() {
   204  		testInt8x64Binary(t, archsimd.Int8x64.Xor, xorSlice[int8])
   205  		testInt16x32Binary(t, archsimd.Int16x32.Xor, xorSlice[int16])
   206  		testInt32x16Binary(t, archsimd.Int32x16.Xor, xorSlice[int32])
   207  		testInt64x8Binary(t, archsimd.Int64x8.Xor, xorSlice[int64])
   208  		testUint8x64Binary(t, archsimd.Uint8x64.Xor, xorSlice[uint8])
   209  		testUint16x32Binary(t, archsimd.Uint16x32.Xor, xorSlice[uint16])
   210  		testUint32x16Binary(t, archsimd.Uint32x16.Xor, xorSlice[uint32])
   211  		testUint64x8Binary(t, archsimd.Uint64x8.Xor, xorSlice[uint64])
   212  	}
   213  }
   214  
   215  func TestOrAMD64(t *testing.T) {
   216  	if archsimd.X86.AVX2() {
   217  		testInt16x16Binary(t, archsimd.Int16x16.Or, orSlice[int16])
   218  		testInt32x8Binary(t, archsimd.Int32x8.Or, orSlice[int32])
   219  		testInt64x4Binary(t, archsimd.Int64x4.Or, orSlice[int64])
   220  		testInt8x32Binary(t, archsimd.Int8x32.Or, orSlice[int8])
   221  
   222  		testUint16x16Binary(t, archsimd.Uint16x16.Or, orSlice[uint16])
   223  		testUint32x8Binary(t, archsimd.Uint32x8.Or, orSlice[uint32])
   224  		testUint64x4Binary(t, archsimd.Uint64x4.Or, orSlice[uint64])
   225  		testUint8x32Binary(t, archsimd.Uint8x32.Or, orSlice[uint8])
   226  	}
   227  
   228  	if archsimd.X86.AVX512() {
   229  		testInt8x64Binary(t, archsimd.Int8x64.Or, orSlice[int8])
   230  		testInt16x32Binary(t, archsimd.Int16x32.Or, orSlice[int16])
   231  		testInt32x16Binary(t, archsimd.Int32x16.Or, orSlice[int32])
   232  		testInt64x8Binary(t, archsimd.Int64x8.Or, orSlice[int64])
   233  		testUint8x64Binary(t, archsimd.Uint8x64.Or, orSlice[uint8])
   234  		testUint16x32Binary(t, archsimd.Uint16x32.Or, orSlice[uint16])
   235  		testUint32x16Binary(t, archsimd.Uint32x16.Or, orSlice[uint32])
   236  		testUint64x8Binary(t, archsimd.Uint64x8.Or, orSlice[uint64])
   237  	}
   238  }
   239  
   240  func TestMulAMD64(t *testing.T) {
   241  	testFloat32x8Binary(t, archsimd.Float32x8.Mul, mulSlice[float32])
   242  	testFloat64x4Binary(t, archsimd.Float64x4.Mul, mulSlice[float64])
   243  
   244  	if archsimd.X86.AVX2() {
   245  		testInt16x16Binary(t, archsimd.Int16x16.Mul, mulSlice[int16])
   246  		testInt32x8Binary(t, archsimd.Int32x8.Mul, mulSlice[int32])
   247  		testInt8x32Binary(t, archsimd.Int8x32.Mul, mulSlice[int8])
   248  		testUint8x32Binary(t, archsimd.Uint8x32.Mul, mulSlice[uint8])
   249  	}
   250  
   251  	// TODO we should be able to do these, there's no difference between signed/unsigned Mul
   252  	// testUint16x16Binary(t, archsimd.Uint16x16.Mul, mulSlice[uint16])
   253  	// testUint16x8Binary(t, archsimd.Uint16x8.Mul, mulSlice[uint16])
   254  	// testUint32x4Binary(t, archsimd.Uint32x4.Mul, mulSlice[uint32])
   255  	// testUint32x8Binary(t, archsimd.Uint32x8.Mul, mulSlice[uint32])
   256  	// testUint64x2Binary(t, archsimd.Uint64x2.Mul, mulSlice[uint64])
   257  	// testUint64x4Binary(t, archsimd.Uint64x4.Mul, mulSlice[uint64])
   258  
   259  	// testUint8x16Binary(t, archsimd.Uint8x16.Mul, mulSlice[uint8]) // nope
   260  	// testUint8x32Binary(t, archsimd.Uint8x32.Mul, mulSlice[uint8])
   261  
   262  	if archsimd.X86.AVX512() {
   263  		testInt64x2Binary(t, archsimd.Int64x2.Mul, mulSlice[int64]) // avx512 only
   264  		testInt64x4Binary(t, archsimd.Int64x4.Mul, mulSlice[int64])
   265  
   266  		testFloat32x16Binary(t, archsimd.Float32x16.Mul, mulSlice[float32])
   267  		testFloat64x8Binary(t, archsimd.Float64x8.Mul, mulSlice[float64])
   268  
   269  		// testInt8x64Binary(t, archsimd.Int8x64.Mul, mulSlice[int8]) // nope
   270  		testInt16x32Binary(t, archsimd.Int16x32.Mul, mulSlice[int16])
   271  		testInt32x16Binary(t, archsimd.Int32x16.Mul, mulSlice[int32])
   272  		testInt64x8Binary(t, archsimd.Int64x8.Mul, mulSlice[int64])
   273  		// testUint8x64Binary(t, archsimd.Uint8x64.Mul, mulSlice[uint8]) // nope
   274  
   275  		// TODO signed should do the job
   276  		// testUint16x32Binary(t, archsimd.Uint16x32.Mul, mulSlice[uint16])
   277  		// testUint32x16Binary(t, archsimd.Uint32x16.Mul, mulSlice[uint32])
   278  		// testUint64x8Binary(t, archsimd.Uint64x8.Mul, mulSlice[uint64])
   279  	}
   280  }
   281  
   282  func TestDivAMD64(t *testing.T) {
   283  	testFloat32x8Binary(t, archsimd.Float32x8.Div, divSlice[float32])
   284  	testFloat64x4Binary(t, archsimd.Float64x4.Div, divSlice[float64])
   285  
   286  	if archsimd.X86.AVX512() {
   287  		testFloat32x16Binary(t, archsimd.Float32x16.Div, divSlice[float32])
   288  		testFloat64x8Binary(t, archsimd.Float64x8.Div, divSlice[float64])
   289  	}
   290  }
   291  
   292  func TestInterleaveLo(t *testing.T) {
   293  	testInt16x8Binary(t, archsimd.Int16x8.InterleaveLo, interleaveSlice[int16](128, false))
   294  	testInt32x4Binary(t, archsimd.Int32x4.InterleaveLo, interleaveSlice[int32](128, false))
   295  	testInt64x2Binary(t, archsimd.Int64x2.InterleaveLo, interleaveSlice[int64](128, false))
   296  	testUint16x8Binary(t, archsimd.Uint16x8.InterleaveLo, interleaveSlice[uint16](128, false))
   297  	testUint32x4Binary(t, archsimd.Uint32x4.InterleaveLo, interleaveSlice[uint32](128, false))
   298  	testUint64x2Binary(t, archsimd.Uint64x2.InterleaveLo, interleaveSlice[uint64](128, false))
   299  
   300  	if archsimd.X86.AVX2() {
   301  		testInt16x16Binary(t, archsimd.Int16x16.InterleaveLoGrouped, interleaveSlice[int16](128, false))
   302  		testInt32x8Binary(t, archsimd.Int32x8.InterleaveLoGrouped, interleaveSlice[int32](128, false))
   303  		testInt64x4Binary(t, archsimd.Int64x4.InterleaveLoGrouped, interleaveSlice[int64](128, false))
   304  		testUint16x16Binary(t, archsimd.Uint16x16.InterleaveLoGrouped, interleaveSlice[uint16](128, false))
   305  		testUint32x8Binary(t, archsimd.Uint32x8.InterleaveLoGrouped, interleaveSlice[uint32](128, false))
   306  		testUint64x4Binary(t, archsimd.Uint64x4.InterleaveLoGrouped, interleaveSlice[uint64](128, false))
   307  	}
   308  
   309  	if archsimd.X86.AVX512() {
   310  		testInt16x32Binary(t, archsimd.Int16x32.InterleaveLoGrouped, interleaveSlice[int16](128, false))
   311  		testInt32x16Binary(t, archsimd.Int32x16.InterleaveLoGrouped, interleaveSlice[int32](128, false))
   312  		testInt64x8Binary(t, archsimd.Int64x8.InterleaveLoGrouped, interleaveSlice[int64](128, false))
   313  		testUint16x32Binary(t, archsimd.Uint16x32.InterleaveLoGrouped, interleaveSlice[uint16](128, false))
   314  		testUint32x16Binary(t, archsimd.Uint32x16.InterleaveLoGrouped, interleaveSlice[uint32](128, false))
   315  		testUint64x8Binary(t, archsimd.Uint64x8.InterleaveLoGrouped, interleaveSlice[uint64](128, false))
   316  	}
   317  }
   318  
   319  func TestInterleaveHi(t *testing.T) {
   320  	testInt16x8Binary(t, archsimd.Int16x8.InterleaveHi, interleaveSlice[int16](128, true))
   321  	testInt32x4Binary(t, archsimd.Int32x4.InterleaveHi, interleaveSlice[int32](128, true))
   322  	testInt64x2Binary(t, archsimd.Int64x2.InterleaveHi, interleaveSlice[int64](128, true))
   323  	testUint16x8Binary(t, archsimd.Uint16x8.InterleaveHi, interleaveSlice[uint16](128, true))
   324  	testUint32x4Binary(t, archsimd.Uint32x4.InterleaveHi, interleaveSlice[uint32](128, true))
   325  	testUint64x2Binary(t, archsimd.Uint64x2.InterleaveHi, interleaveSlice[uint64](128, true))
   326  
   327  	if archsimd.X86.AVX2() {
   328  		testInt16x16Binary(t, archsimd.Int16x16.InterleaveHiGrouped, interleaveSlice[int16](128, true))
   329  		testInt32x8Binary(t, archsimd.Int32x8.InterleaveHiGrouped, interleaveSlice[int32](128, true))
   330  		testInt64x4Binary(t, archsimd.Int64x4.InterleaveHiGrouped, interleaveSlice[int64](128, true))
   331  		testUint16x16Binary(t, archsimd.Uint16x16.InterleaveHiGrouped, interleaveSlice[uint16](128, true))
   332  		testUint32x8Binary(t, archsimd.Uint32x8.InterleaveHiGrouped, interleaveSlice[uint32](128, true))
   333  		testUint64x4Binary(t, archsimd.Uint64x4.InterleaveHiGrouped, interleaveSlice[uint64](128, true))
   334  	}
   335  
   336  	if archsimd.X86.AVX512() {
   337  		testInt16x32Binary(t, archsimd.Int16x32.InterleaveHiGrouped, interleaveSlice[int16](128, true))
   338  		testInt32x16Binary(t, archsimd.Int32x16.InterleaveHiGrouped, interleaveSlice[int32](128, true))
   339  		testInt64x8Binary(t, archsimd.Int64x8.InterleaveHiGrouped, interleaveSlice[int64](128, true))
   340  		testUint16x32Binary(t, archsimd.Uint16x32.InterleaveHiGrouped, interleaveSlice[uint16](128, true))
   341  		testUint32x16Binary(t, archsimd.Uint32x16.InterleaveHiGrouped, interleaveSlice[uint32](128, true))
   342  		testUint64x8Binary(t, archsimd.Uint64x8.InterleaveHiGrouped, interleaveSlice[uint64](128, true))
   343  	}
   344  }
   345  

View as plain text