authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-10-16 17:19:40+01:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-10-19 19:46:06+01:00
log387965a696e567357ca4729b41951e51592ef821
treed117dce4fcec67fef2adb58ff9341ee708ebb060
parentcf39652500df07d33470d89ba96a97463beff986
signaturelock-open Commit is signed but in an unrecognized format.

x86_64,riscv64: fix incorrect `incoming_stack_alignment` handling

The whole motivation behind this proposal in the first place was that the LLVM backend disagrees with the self-hosted backends on what `@setAlignStack` meant, so we can't just translate the old logic to the new system! These backends can introduce support for overriding `incoming_stack_alignment` later on.

3 files changed, 4 insertions(+), 9 deletions(-)

src/Zcu.zig+2-1
......@@ -3607,7 +3607,8 @@ pub fn callconvSupported(zcu: *Zcu, cc: std.builtin.CallingConvention) union(enu
36073607 else => false,
36083608 },
36093609 .stage2_x86_64 => switch (cc) {
3610 .x86_64_sysv, .x86_64_win, .naked => true, // stack alignment supported
3610 .x86_64_sysv, .x86_64_win => |opts| opts.incoming_stack_alignment == null,
3611 .naked => true,
36113612 else => false,
36123613 },
36133614 .stage2_aarch64 => switch (cc) {
src/arch/riscv64/CodeGen.zig+1-4
......@@ -820,10 +820,7 @@ pub fn generate(
820820 try function.frame_allocs.resize(gpa, FrameIndex.named_count);
821821 function.frame_allocs.set(
822822 @intFromEnum(FrameIndex.stack_frame),
823 FrameAlloc.init(.{
824 .size = 0,
825 .alignment = .fromByteUnits(target_util.stackAlignment(function.target.*, fn_type.fnCallingConvention(zcu))),
826 }),
823 FrameAlloc.init(.{ .size = 0, .alignment = .@"1" }),
827824 );
828825 function.frame_allocs.set(
829826 @intFromEnum(FrameIndex.call_frame),
src/arch/x86_64/CodeGen.zig+1-4
......@@ -871,10 +871,7 @@ pub fn generate(
871871 try function.frame_allocs.resize(gpa, FrameIndex.named_count);
872872 function.frame_allocs.set(
873873 @intFromEnum(FrameIndex.stack_frame),
874 FrameAlloc.init(.{
875 .size = 0,
876 .alignment = .fromByteUnits(target_util.stackAlignment(function.target.*, fn_type.fnCallingConvention(zcu))),
877 }),
874 FrameAlloc.init(.{ .size = 0, .alignment = .@"1" }),
878875 );
879876 function.frame_allocs.set(
880877 @intFromEnum(FrameIndex.call_frame),