diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-10-21 19:30:45 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-10-23 22:42:18 -0400 |
| commit | fe93332ba26b0cb8ca6ecce0b2c605d49a02ca87 (patch) | |
| tree | 54dc414f0ed33c259f717cdef5eeda7f136a7e81 /lib/std/simd.zig | |
| parent | 794dc694b140908a9affc5b449cda09bbe971cfe (diff) | |
| download | zig-fe93332ba26b0cb8ca6ecce0b2c605d49a02ca87.tar.gz zig-fe93332ba26b0cb8ca6ecce0b2c605d49a02ca87.zip | |
x86_64: implement enough to pass unicode tests
* implement vector comparison
* implement reduce for bool vectors
* fix `@memcpy` bug
* enable passing std tests
Diffstat (limited to 'lib/std/simd.zig')
| -rw-r--r-- | lib/std/simd.zig | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/std/simd.zig b/lib/std/simd.zig index 7629dfac1a..53df15aa18 100644 --- a/lib/std/simd.zig +++ b/lib/std/simd.zig @@ -13,7 +13,7 @@ pub fn suggestVectorSizeForCpu(comptime T: type, comptime cpu: std.Target.Cpu) ? const vector_bit_size: u16 = blk: { if (cpu.arch.isX86()) { if (T == bool and std.Target.x86.featureSetHas(cpu.features, .prefer_mask_registers)) return 64; - if (std.Target.x86.featureSetHas(cpu.features, .avx512f) and !std.Target.x86.featureSetHasAny(cpu.features, .{ .prefer_256_bit, .prefer_128_bit })) break :blk 512; + if (builtin.zig_backend != .stage2_x86_64 and std.Target.x86.featureSetHas(cpu.features, .avx512f) and !std.Target.x86.featureSetHasAny(cpu.features, .{ .prefer_256_bit, .prefer_128_bit })) break :blk 512; if (std.Target.x86.featureSetHasAny(cpu.features, .{ .prefer_256_bit, .avx2 }) and !std.Target.x86.featureSetHas(cpu.features, .prefer_128_bit)) break :blk 256; if (std.Target.x86.featureSetHas(cpu.features, .sse)) break :blk 128; if (std.Target.x86.featureSetHasAny(cpu.features, .{ .mmx, .@"3dnow" })) break :blk 64; @@ -62,10 +62,15 @@ pub fn suggestVectorSize(comptime T: type) ?comptime_int { test "suggestVectorSizeForCpu works with signed and unsigned values" { comptime var cpu = std.Target.Cpu.baseline(std.Target.Cpu.Arch.x86_64); comptime cpu.features.addFeature(@intFromEnum(std.Target.x86.Feature.avx512f)); + comptime cpu.features.populateDependencies(&std.Target.x86.all_features); + const expected_size: usize = switch (builtin.zig_backend) { + .stage2_x86_64 => 8, + else => 16, + }; const signed_integer_size = suggestVectorSizeForCpu(i32, cpu).?; const unsigned_integer_size = suggestVectorSizeForCpu(u32, cpu).?; - try std.testing.expectEqual(@as(usize, 16), unsigned_integer_size); - try std.testing.expectEqual(@as(usize, 16), signed_integer_size); + try std.testing.expectEqual(expected_size, unsigned_integer_size); + try std.testing.expectEqual(expected_size, signed_integer_size); } fn vectorLength(comptime VectorType: type) comptime_int { |
