File tree 3 files changed +11
-10
lines changed 3 files changed +11
-10
lines changed Original file line number Diff line number Diff line change @@ -1784,7 +1784,6 @@ pub const Target = struct {
1784
1784
.armeb ,
1785
1785
.thumb ,
1786
1786
.thumbeb ,
1787
- .x86_64 ,
1788
1787
.hexagon ,
1789
1788
.mips ,
1790
1789
.mipsel ,
@@ -1811,6 +1810,12 @@ pub const Target = struct {
1811
1810
.windows = > 8 ,
1812
1811
else = > 4 ,
1813
1812
},
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 ,
1814
1819
.aarch64 ,
1815
1820
.aarch64_be ,
1816
1821
.aarch64_32 ,
Original file line number Diff line number Diff line change @@ -555,7 +555,7 @@ pub const AtomicPtrAlignmentDiagnostics = struct {
555
555
max_bits : u16 = undefined ,
556
556
};
557
557
558
- /// If ABI alignment of `ty` is OK for atomic operations, returs 0.
558
+ /// If ABI alignment of `ty` is OK for atomic operations, returns 0.
559
559
/// Otherwise returns the alignment required on a pointer for the target
560
560
/// to perform atomic operations.
561
561
pub fn atomicPtrAlignment (
@@ -645,9 +645,6 @@ pub fn atomicPtrAlignment(
645
645
};
646
646
return error .FloatTooBig ;
647
647
}
648
- if (target .cpu .arch == .x86_64 and bit_count > 64 ) {
649
- return 16 ;
650
- }
651
648
return 0 ;
652
649
},
653
650
.Bool = > return 0 ,
@@ -666,10 +663,6 @@ pub fn atomicPtrAlignment(
666
663
return error .IntTooBig ;
667
664
}
668
665
669
- if (target .cpu .arch == .x86_64 and bit_count > 64 ) {
670
- return 16 ;
671
- }
672
-
673
666
return 0 ;
674
667
}
675
668
Original file line number Diff line number Diff line change @@ -55,6 +55,9 @@ test "alignment of struct with pointer has same alignment as usize" {
55
55
}
56
56
57
57
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
+
58
61
const A = struct {
59
62
x : u128 ,
60
63
};
@@ -67,7 +70,6 @@ test "alignment and size of structs with 128-bit fields" {
67
70
.armeb ,
68
71
.thumb ,
69
72
.thumbeb ,
70
- .x86_64 ,
71
73
.hexagon ,
72
74
.mips ,
73
75
.mipsel ,
@@ -128,6 +130,7 @@ test "alignment and size of structs with 128-bit fields" {
128
130
},
129
131
},
130
132
133
+ .x86_64 ,
131
134
.aarch64 ,
132
135
.aarch64_be ,
133
136
.aarch64_32 ,
You can’t perform that action at this time.
0 commit comments