Skip to content

Commit b936762

Browse files
committed
stage2: fix @sizeof() for vector types.
1 parent 1653a9b commit b936762

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

src/type.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3251,7 +3251,7 @@ pub const Type = extern union {
32513251

32523252
.array_u8 => return AbiSizeAdvanced{ .scalar = ty.castTag(.array_u8).?.data },
32533253
.array_u8_sentinel_0 => return AbiSizeAdvanced{ .scalar = ty.castTag(.array_u8_sentinel_0).?.data + 1 },
3254-
.array, .vector => {
3254+
.array => {
32553255
const payload = ty.cast(Payload.Array).?.data;
32563256
switch (try payload.elem_type.abiSizeAdvanced(target, strat)) {
32573257
.scalar => |elem_size| return AbiSizeAdvanced{ .scalar = payload.len * elem_size },
@@ -3262,6 +3262,7 @@ pub const Type = extern union {
32623262
},
32633263
}
32643264
},
3265+
.vector => return AbiSizeAdvanced{ .scalar = abiAlignment(ty, target) },
32653266
.array_sentinel => {
32663267
const payload = ty.castTag(.array_sentinel).?.data;
32673268
switch (try payload.elem_type.abiSizeAdvanced(target, strat)) {

test/behavior/vector.zig

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,10 +1072,61 @@ test "@shlWithOverflow" {
10721072
}
10731073

10741074
test "alignment of vectors" {
1075-
try expect(@alignOf(@Vector(2, u8)) == 2);
1076-
try expect(@alignOf(@Vector(2, u1)) == 1);
1077-
try expect(@alignOf(@Vector(1, u1)) == 1);
1078-
try expect(@alignOf(@Vector(2, u16)) == 4);
1075+
const expectEqual = std.testing.expectEqual;
1076+
try expectEqual(@alignOf(@Vector(2, u8)), 2);
1077+
try expectEqual(@alignOf(@Vector(2, u1)), 1);
1078+
try expectEqual(@alignOf(@Vector(1, u1)), 1);
1079+
try expectEqual(@alignOf(@Vector(2, u16)), 4);
1080+
1081+
try expectEqual(@alignOf(@Vector(7, i8)), 8);
1082+
try expectEqual(@alignOf(@Vector(8, i8)), 8);
1083+
try expectEqual(@alignOf(@Vector(9, i8)), 16);
1084+
try expectEqual(@alignOf(@Vector(16, i8)), 16);
1085+
try expectEqual(@alignOf(@Vector(31, i8)), 32);
1086+
try expectEqual(@alignOf(@Vector(32, i8)), 32);
1087+
try expectEqual(@alignOf(@Vector(33, i8)), 64);
1088+
1089+
try expectEqual(@alignOf(@Vector(3, u16)), 8);
1090+
try expectEqual(@alignOf(@Vector(3, f32)), 16);
1091+
try expectEqual(@alignOf(@Vector(3, u64)), 32);
1092+
try expectEqual(@alignOf(@Vector(1, *u8)), @sizeOf(*u8) * 1);
1093+
try expectEqual(@alignOf(@Vector(2, *u8)), @sizeOf(*u8) * 2);
1094+
try expectEqual(@alignOf(@Vector(3, *u8)), @sizeOf(*u8) * 4);
1095+
1096+
try expectEqual(@alignOf(@Vector(8, bool)), 1);
1097+
try expectEqual(@alignOf(@Vector(8, u1)), 1);
1098+
try expectEqual(@alignOf(@Vector(9, u1)), 2);
1099+
try expectEqual(@alignOf(@Vector(32, u1)), 4);
1100+
try expectEqual(@alignOf(@Vector(33, u1)), 8);
1101+
}
1102+
1103+
test "size of vectors" {
1104+
const expectEqual = std.testing.expectEqual;
1105+
try expectEqual(@sizeOf(@Vector(2, u8)), 2);
1106+
try expectEqual(@sizeOf(@Vector(2, u1)), 1);
1107+
try expectEqual(@sizeOf(@Vector(1, u1)), 1);
1108+
try expectEqual(@sizeOf(@Vector(2, u16)), 4);
1109+
1110+
try expectEqual(@sizeOf(@Vector(7, i8)), 8);
1111+
try expectEqual(@sizeOf(@Vector(8, i8)), 8);
1112+
try expectEqual(@sizeOf(@Vector(9, i8)), 16);
1113+
try expectEqual(@sizeOf(@Vector(16, i8)), 16);
1114+
try expectEqual(@sizeOf(@Vector(31, i8)), 32);
1115+
try expectEqual(@sizeOf(@Vector(32, i8)), 32);
1116+
try expectEqual(@sizeOf(@Vector(33, i8)), 64);
1117+
1118+
try expectEqual(@sizeOf(@Vector(3, u16)), 8);
1119+
try expectEqual(@sizeOf(@Vector(3, f32)), 16);
1120+
try expectEqual(@sizeOf(@Vector(3, u64)), 32);
1121+
try expectEqual(@sizeOf(@Vector(1, *u8)), @sizeOf(*u8) * 1);
1122+
try expectEqual(@sizeOf(@Vector(2, *u8)), @sizeOf(*u8) * 2);
1123+
try expectEqual(@sizeOf(@Vector(3, *u8)), @sizeOf(*u8) * 4);
1124+
1125+
try expectEqual(@sizeOf(@Vector(8, bool)), 1);
1126+
try expectEqual(@sizeOf(@Vector(8, u1)), 1);
1127+
try expectEqual(@sizeOf(@Vector(9, u1)), 2);
1128+
try expectEqual(@sizeOf(@Vector(32, u1)), 4);
1129+
try expectEqual(@sizeOf(@Vector(33, u1)), 8);
10791130
}
10801131

10811132
test "loading the second vector from a slice of vectors" {

0 commit comments

Comments
 (0)