mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
x86_64: fix stack realignment
This commit is contained in:
parent
db76ae8260
commit
50f96c2949
@ -1673,15 +1673,16 @@ fn allocFrameIndex(self: *Self, alloc: FrameAlloc) !FrameIndex {
|
||||
const frame_allocs_slice = self.frame_allocs.slice();
|
||||
const frame_size = frame_allocs_slice.items(.abi_size);
|
||||
const frame_align = frame_allocs_slice.items(.abi_align);
|
||||
|
||||
const stack_frame_align = &frame_align[@enumToInt(FrameIndex.stack_frame)];
|
||||
stack_frame_align.* = @max(stack_frame_align.*, alloc.abi_align);
|
||||
|
||||
for (self.free_frame_indices.keys(), 0..) |frame_index, free_i| {
|
||||
const abi_size = frame_size[@enumToInt(frame_index)];
|
||||
if (abi_size != alloc.abi_size) continue;
|
||||
const abi_align = &frame_align[@enumToInt(frame_index)];
|
||||
abi_align.* = @max(abi_align.*, alloc.abi_align);
|
||||
|
||||
const stack_frame_align = &frame_align[@enumToInt(FrameIndex.stack_frame)];
|
||||
stack_frame_align.* = @max(stack_frame_align.*, alloc.abi_align);
|
||||
|
||||
_ = self.free_frame_indices.swapRemoveAt(free_i);
|
||||
return frame_index;
|
||||
}
|
||||
|
||||
@ -282,7 +282,6 @@ fn give() anyerror!u128 {
|
||||
|
||||
test "page aligned array on stack" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -491,10 +490,6 @@ test "read 128-bit field from default aligned struct in global memory" {
|
||||
}
|
||||
|
||||
test "struct field explicit alignment" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) {
|
||||
// Careful enabling this test, fails randomly.
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user