Skip to content

Commit

Permalink
std.simd.iota: make it always called at comptime
Browse files Browse the repository at this point in the history
There's no reason for this to ever run at runtime; it should always be
used to generate a constant.
andrewrk committed Jan 5, 2023

Verified

This commit was signed with the committer’s verified signature.
cyriltovena Cyril Tovena
1 parent 5d94295 commit 079f628
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions lib/std/simd.zig
Original file line number Diff line number Diff line change
@@ -86,16 +86,18 @@ pub fn VectorCount(comptime VectorType: type) type {

/// Returns a vector containing the first `len` integers in order from 0 to `len`-1.
/// For example, `iota(i32, 8)` will return a vector containing `.{0, 1, 2, 3, 4, 5, 6, 7}`.
pub fn iota(comptime T: type, comptime len: usize) @Vector(len, T) {
var out: [len]T = undefined;
for (out) |*element, i| {
element.* = switch (@typeInfo(T)) {
.Int => @intCast(T, i),
.Float => @intToFloat(T, i),
else => @compileError("Can't use type " ++ @typeName(T) ++ " in iota."),
};
pub inline fn iota(comptime T: type, comptime len: usize) @Vector(len, T) {
comptime {
var out: [len]T = undefined;
for (out) |*element, i| {
element.* = switch (@typeInfo(T)) {
.Int => @intCast(T, i),
.Float => @intToFloat(T, i),
else => @compileError("Can't use type " ++ @typeName(T) ++ " in iota."),
};
}
return @as(@Vector(len, T), out);
}
return @as(@Vector(len, T), out);
}

/// Returns a vector containing the same elements as the input, but repeated until the desired length is reached.

0 comments on commit 079f628

Please sign in to comment.