Commit 90f7034b69
Changed files (2)
lib
std
lib/std/zig/cross_target.zig
@@ -827,6 +827,11 @@ test "CrossTarget.parse" {
std.testing.expect(Target.x86.featureSetHas(target.cpu.features, .cmov));
std.testing.expect(Target.x86.featureSetHas(target.cpu.features, .fxsr));
+ std.testing.expect(Target.x86.featureSetHasAny(target.cpu.features, .{ .sse, .avx, .cmov }));
+ std.testing.expect(!Target.x86.featureSetHasAny(target.cpu.features, .{ .sse, .avx }));
+ std.testing.expect(Target.x86.featureSetHasAll(target.cpu.features, .{ .mmx, .x87 }));
+ std.testing.expect(!Target.x86.featureSetHasAll(target.cpu.features, .{ .mmx, .x87, .sse }));
+
const text = try cross_target.zigTriple(std.testing.allocator);
defer std.testing.allocator.free(text);
std.testing.expectEqualSlices(u8, "x86_64-linux-gnu", text);
lib/std/target.zig
@@ -637,9 +637,28 @@ pub const Target = struct {
return x;
}
+ /// Returns true if the specified feature is enabled.
pub fn featureSetHas(set: Set, feature: F) bool {
return set.isEnabled(@enumToInt(feature));
}
+
+ /// Returns true if any specified feature is enabled.
+ pub fn featureSetHasAny(set: Set, features: anytype) bool {
+ comptime std.debug.assert(std.meta.trait.isIndexable(@TypeOf(features)));
+ inline for (features) |feature| {
+ if (set.isEnabled(@enumToInt(@as(F, feature)))) return true;
+ }
+ return false;
+ }
+
+ /// Returns true if every specified feature is enabled.
+ pub fn featureSetHasAll(set: Set, features: anytype) bool {
+ comptime std.debug.assert(std.meta.trait.isIndexable(@TypeOf(features)));
+ inline for (features) |feature| {
+ if (!set.isEnabled(@enumToInt(@as(F, feature)))) return false;
+ }
+ return true;
+ }
};
}
};