Skip to content

Commit 290e44a

Browse files
committed
stage2: change x86_64 max int alignment from 8 to 16
For x86_64, LLVMABIAlignmentOfType(i128) reports 8. However I think 16 is a better number for two reasons: 1. Better machine code when loading into SIMD register. 2. The C ABI wants 16 for extern structs.
1 parent 258d07f commit 290e44a

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

lib/std/target.zig

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1784,7 +1784,6 @@ pub const Target = struct {
17841784
.armeb,
17851785
.thumb,
17861786
.thumbeb,
1787-
.x86_64,
17881787
.hexagon,
17891788
.mips,
17901789
.mipsel,
@@ -1811,6 +1810,12 @@ pub const Target = struct {
18111810
.windows => 8,
18121811
else => 4,
18131812
},
1813+
1814+
// For x86_64, LLVMABIAlignmentOfType(i128) reports 8. However I think 16
1815+
// is a better number because of two reasons:
1816+
// 1. Better machine code when loading into SIMD register.
1817+
// 2. The C ABI wants 16 for extern structs.
1818+
.x86_64,
18141819
.aarch64,
18151820
.aarch64_be,
18161821
.aarch64_32,

test/behavior/align.zig

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ test "alignment of struct with pointer has same alignment as usize" {
5555
}
5656

5757
test "alignment and size of structs with 128-bit fields" {
58+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
59+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
60+
5861
const A = struct {
5962
x: u128,
6063
};
@@ -67,7 +70,6 @@ test "alignment and size of structs with 128-bit fields" {
6770
.armeb,
6871
.thumb,
6972
.thumbeb,
70-
.x86_64,
7173
.hexagon,
7274
.mips,
7375
.mipsel,
@@ -128,6 +130,7 @@ test "alignment and size of structs with 128-bit fields" {
128130
},
129131
},
130132

133+
.x86_64,
131134
.aarch64,
132135
.aarch64_be,
133136
.aarch64_32,

0 commit comments

Comments
 (0)