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.
This commit is contained in:
Andrew Kelley 2022-05-04 15:22:41 -07:00
parent 5b1c0d922c
commit f21c11a7f7
3 changed files with 11 additions and 10 deletions

View File

@ -1784,7 +1784,6 @@ pub const Target = struct {
.armeb,
.thumb,
.thumbeb,
.x86_64,
.hexagon,
.mips,
.mipsel,
@ -1811,6 +1810,12 @@ pub const Target = struct {
.windows => 8,
else => 4,
},
// For x86_64, LLVMABIAlignmentOfType(i128) reports 8. However I think 16
// is a better number because of two reasons:
// 1. Better machine code when loading into SIMD register.
// 2. The C ABI wants 16 for extern structs.
.x86_64,
.aarch64,
.aarch64_be,
.aarch64_32,

View File

@ -555,7 +555,7 @@ pub const AtomicPtrAlignmentDiagnostics = struct {
max_bits: u16 = undefined,
};
/// If ABI alignment of `ty` is OK for atomic operations, returs 0.
/// If ABI alignment of `ty` is OK for atomic operations, returns 0.
/// Otherwise returns the alignment required on a pointer for the target
/// to perform atomic operations.
pub fn atomicPtrAlignment(
@ -645,9 +645,6 @@ pub fn atomicPtrAlignment(
};
return error.FloatTooBig;
}
if (target.cpu.arch == .x86_64 and bit_count > 64) {
return 16;
}
return 0;
},
.Bool => return 0,
@ -666,10 +663,6 @@ pub fn atomicPtrAlignment(
return error.IntTooBig;
}
if (target.cpu.arch == .x86_64 and bit_count > 64) {
return 16;
}
return 0;
}

View File

@ -55,6 +55,9 @@ test "alignment of struct with pointer has same alignment as usize" {
}
test "alignment and size of structs with 128-bit fields" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
const A = struct {
x: u128,
};
@ -67,7 +70,6 @@ test "alignment and size of structs with 128-bit fields" {
.armeb,
.thumb,
.thumbeb,
.x86_64,
.hexagon,
.mips,
.mipsel,
@ -128,6 +130,7 @@ test "alignment and size of structs with 128-bit fields" {
},
},
.x86_64,
.aarch64,
.aarch64_be,
.aarch64_32,