tiny.simd.allEqual
Defined in algo.
Returns whether every lane of input equals value, as std.mem.allEqual does.
Source
Source: lib/simd/src/algo.zig:148
zig
/// Returns whether every lane of `input` equals `value`, as/// `std.mem.allEqual` does. Whole vectors compare with the broadcast value,/// and the last vector overlaps lanes already compared. A span shorter than/// a vector compares lane by lane.pub fn allEqual(comptime D: type, input: []const D.Lane, value: D.Lane) bool { if (input.len < D.lane_count) { for (input) |lane| { if (lane != value) return false; } return true; } const broadcast: D.Vector = @splat(value); const last = input.len - D.lane_count; var index: usize = 0; while (index < last) : (index += D.lane_count) { const lanes: D.Vector = input[index..][0..D.lane_count].*; if (@reduce(.Or, lanes != broadcast)) return false; } std.debug.assert(index >= last); std.debug.assert(index - last < D.lane_count); const lanes: D.Vector = input[last..][0..D.lane_count].*; return !@reduce(.Or, lanes != broadcast);}Source: lib/simd/src/root.zig:462
zig
pub const allEqual = algo.allEqual;Audit
| Definitions | 1 |
|---|---|
| Public names | 2 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |