| // 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. |
| |
| //specgen:category Logical |
| |
| package spec |
| |
| // And returns the bitwise AND of x and y. |
| // |
| // z[i] = x[i] & y[i] |
| // |
| //specgen:commutative |
| func And[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) { |
| return map2[E, W, E, W](x, y, func(x, y E) E { |
| return x & y |
| }) |
| } |
| |
| // AndNot returns the bitwise AND NOT of x and y. |
| // |
| // z[i] = x[i] &^ y[i] |
| func AndNot[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) { |
| return map2[E, W, E, W](x, y, func(x, y E) E { |
| return x &^ y |
| }) |
| } |
| |
| // Or returns the bitwise OR of x and y. |
| // |
| // z[i] = x[i] | y[i] |
| // |
| //specgen:commutative |
| func Or[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) { |
| return map2[E, W, E, W](x, y, func(x, y E) E { |
| return x | y |
| }) |
| } |
| |
| // Xor returns the bitwise XOR of x and y. |
| // |
| // z[i] = x[i] ^ y[i] |
| // |
| //specgen:commutative |
| func Xor[E Ints | Uints | MaskElt, W Width](x, y Vec[E, W]) (z Vec[E, W]) { |
| return map2[E, W, E, W](x, y, func(x, y E) E { |
| return x ^ y |
| }) |
| } |
| |
| // Not returns the bitwise negation of x. |
| // |
| // z[i] = ^x[i] |
| func Not[E Ints | Uints | MaskElt, W Width](x Vec[E, W]) (z Vec[E, W]) { |
| return map1[E, W, E, W](x, func(x E) E { |
| return ^x |
| }) |
| } |