diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2025-05-24 11:37:13 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2025-05-28 15:10:22 -0400 |
| commit | a4a1ebdeed16494270a0111aeee6fec8e04ef7ee (patch) | |
| tree | 6a3cac6bbd6efde299d15991fa04b261e4459890 /src/codegen | |
| parent | 612f5784cf0a02b4d3be5aaf9e3822d72e220c96 (diff) | |
| download | zig-a4a1ebdeed16494270a0111aeee6fec8e04ef7ee.tar.gz zig-a4a1ebdeed16494270a0111aeee6fec8e04ef7ee.zip | |
x86_64: implement optimized float `@reduce(.Mul)`
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/c/Type.zig | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/codegen/c/Type.zig b/src/codegen/c/Type.zig index 2fa3856cfc..93e52cd2ec 100644 --- a/src/codegen/c/Type.zig +++ b/src/codegen/c/Type.zig @@ -1885,6 +1885,36 @@ pub const Pool = struct { }; return pool.fromFields(allocator, .@"struct", &fields, kind); }, + .vector_16_f16_type => { + const vector_ctype = try pool.getVector(allocator, .{ + .elem_ctype = .f16, + .len = 16, + }); + if (!kind.isParameter()) return vector_ctype; + var fields = [_]Info.Field{ + .{ + .name = .{ .index = .array }, + .ctype = vector_ctype, + .alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)), + }, + }; + return pool.fromFields(allocator, .@"struct", &fields, kind); + }, + .vector_32_f16_type => { + const vector_ctype = try pool.getVector(allocator, .{ + .elem_ctype = .f16, + .len = 32, + }); + if (!kind.isParameter()) return vector_ctype; + var fields = [_]Info.Field{ + .{ + .name = .{ .index = .array }, + .ctype = vector_ctype, + .alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)), + }, + }; + return pool.fromFields(allocator, .@"struct", &fields, kind); + }, .vector_2_f32_type => { const vector_ctype = try pool.getVector(allocator, .{ .elem_ctype = .f32, @@ -1930,6 +1960,21 @@ pub const Pool = struct { }; return pool.fromFields(allocator, .@"struct", &fields, kind); }, + .vector_16_f32_type => { + const vector_ctype = try pool.getVector(allocator, .{ + .elem_ctype = .f32, + .len = 16, + }); + if (!kind.isParameter()) return vector_ctype; + var fields = [_]Info.Field{ + .{ + .name = .{ .index = .array }, + .ctype = vector_ctype, + .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)), + }, + }; + return pool.fromFields(allocator, .@"struct", &fields, kind); + }, .vector_2_f64_type => { const vector_ctype = try pool.getVector(allocator, .{ .elem_ctype = .f64, @@ -1960,6 +2005,21 @@ pub const Pool = struct { }; return pool.fromFields(allocator, .@"struct", &fields, kind); }, + .vector_8_f64_type => { + const vector_ctype = try pool.getVector(allocator, .{ + .elem_ctype = .f64, + .len = 8, + }); + if (!kind.isParameter()) return vector_ctype; + var fields = [_]Info.Field{ + .{ + .name = .{ .index = .array }, + .ctype = vector_ctype, + .alignas = AlignAs.fromAbiAlignment(Type.f64.abiAlignment(zcu)), + }, + }; + return pool.fromFields(allocator, .@"struct", &fields, kind); + }, .undef, .zero, |
