std.Target.maxIntAlignment: move to compiler implementation

This should not be a public API, and the x86 backend does not support
the value 16.
This commit is contained in:
Andrew Kelley
2024-04-29 17:40:49 -07:00
parent 62381011e0
commit b7799ef322
7 changed files with 145 additions and 111 deletions
+5 -5
View File
@@ -1312,10 +1312,10 @@ pub const Pool = struct {
},
else => {
const target = &mod.resolved_target.result;
const abi_align = Type.intAbiAlignment(int_info.bits, target.*);
const abi_align = Type.intAbiAlignment(int_info.bits, target.*, false);
const abi_align_bytes = abi_align.toByteUnits().?;
const array_ctype = try pool.getArray(allocator, .{
.len = @divExact(Type.intAbiSize(int_info.bits, target.*), abi_align_bytes),
.len = @divExact(Type.intAbiSize(int_info.bits, target.*, false), abi_align_bytes),
.elem_ctype = try pool.fromIntInfo(allocator, .{
.signedness = .unsigned,
.bits = @intCast(abi_align_bytes * 8),
@@ -1443,7 +1443,7 @@ pub const Pool = struct {
.name = .{ .index = .len },
.ctype = CType.usize,
.alignas = AlignAs.fromAbiAlignment(
Type.intAbiAlignment(target.ptrBitWidth(), target.*),
Type.intAbiAlignment(target.ptrBitWidth(), target.*, false),
),
},
};
@@ -1545,7 +1545,7 @@ pub const Pool = struct {
.name = .{ .index = .len },
.ctype = CType.usize,
.alignas = AlignAs.fromAbiAlignment(
Type.intAbiAlignment(target.ptrBitWidth(), target.*),
Type.intAbiAlignment(target.ptrBitWidth(), target.*, false),
),
},
};
@@ -1665,7 +1665,7 @@ pub const Pool = struct {
.name = .{ .index = .@"error" },
.ctype = error_set_ctype,
.alignas = AlignAs.fromAbiAlignment(
Type.intAbiAlignment(error_set_bits, target.*),
Type.intAbiAlignment(error_set_bits, target.*, false),
),
},
.{
+1 -1
View File
@@ -609,7 +609,7 @@ const DataLayoutBuilder = struct {
switch (kind) {
.integer => {
if (self.target.ptrBitWidth() <= 16 and size >= 128) return;
abi = @min(abi, self.target.maxIntAlignment() * 8);
abi = @min(abi, Type.maxIntAlignment(self.target, true) * 8);
switch (self.target.cpu.arch) {
.aarch64,
.aarch64_be,