mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
parent
6da070c5ac
commit
9f23702c21
3 changed files with 32 additions and 1 deletions
|
|
@ -143,7 +143,8 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class {
|
|||
.integer, .integer, .integer, .integer,
|
||||
.integer, .integer, .integer, .integer,
|
||||
};
|
||||
if (has_avx512 and bit_size <= 256) return .{
|
||||
const has_avx = target.cpu.features.isEnabled(@enumToInt(std.Target.x86.Feature.avx));
|
||||
if (has_avx and bit_size <= 256) return .{
|
||||
.integer, .integer, .integer, .integer,
|
||||
.none, .none, .none, .none,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -742,6 +742,19 @@ SmallVec c_ret_small_vec(void) {
|
|||
return (SmallVec){3, 4};
|
||||
}
|
||||
|
||||
typedef size_t MediumVec __attribute__((vector_size(4 * sizeof(size_t))));
|
||||
|
||||
void c_medium_vec(MediumVec vec) {
|
||||
assert_or_panic(vec[0] == 1);
|
||||
assert_or_panic(vec[1] == 2);
|
||||
assert_or_panic(vec[2] == 3);
|
||||
assert_or_panic(vec[3] == 4);
|
||||
}
|
||||
|
||||
MediumVec c_ret_medium_vec(void) {
|
||||
return (MediumVec){5, 6, 7, 8};
|
||||
}
|
||||
|
||||
typedef size_t BigVec __attribute__((vector_size(8 * sizeof(size_t))));
|
||||
|
||||
void c_big_vec(BigVec vec) {
|
||||
|
|
|
|||
|
|
@ -801,6 +801,23 @@ test "small simd vector" {
|
|||
try expect(x[1] == 4);
|
||||
}
|
||||
|
||||
const MediumVec = @Vector(4, usize);
|
||||
|
||||
extern fn c_medium_vec(MediumVec) void;
|
||||
extern fn c_ret_medium_vec() MediumVec;
|
||||
|
||||
test "medium simd vector" {
|
||||
if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
|
||||
|
||||
c_medium_vec(.{ 1, 2, 3, 4 });
|
||||
|
||||
var x = c_ret_medium_vec();
|
||||
try expect(x[0] == 5);
|
||||
try expect(x[1] == 6);
|
||||
try expect(x[2] == 7);
|
||||
try expect(x[3] == 8);
|
||||
}
|
||||
|
||||
const BigVec = @Vector(8, usize);
|
||||
|
||||
extern fn c_big_vec(BigVec) void;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue