| author | |
| committer | |
| log | 9f23702c21645aeddd64bcf203bc8b62a328f75f |
| tree | 5305f31f4a4bfa34630cbab71f20c6f76e34f659 |
| parent | 6da070c5ac1707f2f5370e2e26124a3e114e25ea |
Closes #139183 files changed, 32 insertions(+), 1 deletions(-)
src/arch/x86_64/abi.zig+2-1| ... | ... | @@ -143,7 +143,8 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { |
| 143 | 143 | .integer, .integer, .integer, .integer, |
| 144 | 144 | .integer, .integer, .integer, .integer, |
| 145 | 145 | }; |
| 146 | if (has_avx512 and bit_size <= 256) return .{ | |
| 146 | const has_avx = target.cpu.features.isEnabled(@enumToInt(std.Target.x86.Feature.avx)); | |
| 147 | if (has_avx and bit_size <= 256) return .{ | |
| 147 | 148 | .integer, .integer, .integer, .integer, |
| 148 | 149 | .none, .none, .none, .none, |
| 149 | 150 | }; |
test/c_abi/cfuncs.c+13| ... | ... | @@ -742,6 +742,19 @@ SmallVec c_ret_small_vec(void) { |
| 742 | 742 | return (SmallVec){3, 4}; |
| 743 | 743 | } |
| 744 | 744 | |
| 745 | typedef size_t MediumVec __attribute__((vector_size(4 * sizeof(size_t)))); | |
| 746 | ||
| 747 | void c_medium_vec(MediumVec vec) { | |
| 748 | assert_or_panic(vec[0] == 1); | |
| 749 | assert_or_panic(vec[1] == 2); | |
| 750 | assert_or_panic(vec[2] == 3); | |
| 751 | assert_or_panic(vec[3] == 4); | |
| 752 | } | |
| 753 | ||
| 754 | MediumVec c_ret_medium_vec(void) { | |
| 755 | return (MediumVec){5, 6, 7, 8}; | |
| 756 | } | |
| 757 | ||
| 745 | 758 | typedef size_t BigVec __attribute__((vector_size(8 * sizeof(size_t)))); |
| 746 | 759 | |
| 747 | 760 | void c_big_vec(BigVec vec) { |
test/c_abi/main.zig+17| ... | ... | @@ -801,6 +801,23 @@ test "small simd vector" { |
| 801 | 801 | try expect(x[1] == 4); |
| 802 | 802 | } |
| 803 | 803 | |
| 804 | const MediumVec = @Vector(4, usize); | |
| 805 | ||
| 806 | extern fn c_medium_vec(MediumVec) void; | |
| 807 | extern fn c_ret_medium_vec() MediumVec; | |
| 808 | ||
| 809 | test "medium simd vector" { | |
| 810 | if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest; | |
| 811 | ||
| 812 | c_medium_vec(.{ 1, 2, 3, 4 }); | |
| 813 | ||
| 814 | var x = c_ret_medium_vec(); | |
| 815 | try expect(x[0] == 5); | |
| 816 | try expect(x[1] == 6); | |
| 817 | try expect(x[2] == 7); | |
| 818 | try expect(x[3] == 8); | |
| 819 | } | |
| 820 | ||
| 804 | 821 | const BigVec = @Vector(8, usize); |
| 805 | 822 | |
| 806 | 823 | extern fn c_big_vec(BigVec) void; |