| author | |
| committer | |
| log | 095e24e537fcb6a702b992d946d1ca73d6f608b3 |
| tree | ff875289e34de2ddba235648435b2abe5dae5bc9 |
| parent | d3542be875704bffc931970948345d1a44e25b8e |
closes #118563 files changed, 31 insertions(+), 4 deletions(-)
lib/std/simd.zig-1| ... | ... | @@ -160,7 +160,6 @@ pub fn extract( |
| 160 | 160 | } |
| 161 | 161 | |
| 162 | 162 | test "vector patterns" { |
| 163 | if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; | |
| 164 | 163 | const base = @Vector(4, u32){ 10, 20, 30, 40 }; |
| 165 | 164 | const other_base = @Vector(4, u32){ 55, 66, 77, 88 }; |
| 166 | 165 |
src/type.zig+7-3| ... | ... | @@ -2906,9 +2906,13 @@ pub const Type = extern union { |
| 2906 | 2906 | |
| 2907 | 2907 | .array, .array_sentinel => return ty.elemType().abiAlignmentAdvanced(target, strat), |
| 2908 | 2908 | |
| 2909 | // TODO audit this - is there any more complicated logic to determine | |
| 2910 | // ABI alignment of vectors? | |
| 2911 | .vector => return AbiAlignmentAdvanced{ .scalar = 16 }, | |
| 2909 | .vector => { | |
| 2910 | const len = ty.arrayLen(); | |
| 2911 | const bits = try bitSizeAdvanced(ty.elemType(), target, sema_kit); | |
| 2912 | const bytes = (bits + 7) / 8; | |
| 2913 | const alignment = std.math.ceilPowerOfTwoAssert(u64, bytes * len); | |
| 2914 | return AbiAlignmentAdvanced{ .scalar = @intCast(u32, alignment) }; | |
| 2915 | }, | |
| 2912 | 2916 | |
| 2913 | 2917 | .i16, .u16 => return AbiAlignmentAdvanced{ .scalar = intAbiAlignment(16, target) }, |
| 2914 | 2918 | .u29 => return AbiAlignmentAdvanced{ .scalar = intAbiAlignment(29, target) }, |
test/behavior/vector.zig+24| ... | ... | @@ -1048,3 +1048,27 @@ test "@shlWithOverflow" { |
| 1048 | 1048 | try S.doTheTest(); |
| 1049 | 1049 | comptime try S.doTheTest(); |
| 1050 | 1050 | } |
| 1051 | ||
| 1052 | test "alignment of vectors" { | |
| 1053 | try expect(@alignOf(@Vector(2, u8)) == 2); | |
| 1054 | try expect(@alignOf(@Vector(2, u1)) == 2); | |
| 1055 | try expect(@alignOf(@Vector(1, u1)) == 1); | |
| 1056 | try expect(@alignOf(@Vector(2, u16)) == 4); | |
| 1057 | } | |
| 1058 | ||
| 1059 | test "loading the second vector from a slice of vectors" { | |
| 1060 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | |
| 1061 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | |
| 1062 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1063 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | |
| 1064 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | |
| 1065 | ||
| 1066 | @setRuntimeSafety(false); | |
| 1067 | var small_bases = [2]@Vector(2, u8){ | |
| 1068 | @Vector(2, u8){ 0, 1 }, | |
| 1069 | @Vector(2, u8){ 2, 3 }, | |
| 1070 | }; | |
| 1071 | var a: []const @Vector(2, u8) = &small_bases; | |
| 1072 | var a4 = a[1][1]; | |
| 1073 | try expect(a4 == 3); | |
| 1074 | } |