| ... | @@ -19326,12 +19326,12 @@ fn resolveCallingConventionValues( | ... | @@ -19326,12 +19326,12 @@ fn resolveCallingConventionValues( |
| 19326 | result.return_value = InstTracking.init(.unreach); | 19326 | result.return_value = InstTracking.init(.unreach); |
| 19327 | result.stack_align = .@"8"; | 19327 | result.stack_align = .@"8"; |
| 19328 | }, | 19328 | }, |
| 19329 | .x86_64_sysv, .x86_64_win => { | 19329 | .x86_64_sysv, .x86_64_win => |cc_opts| { |
| 19330 | var ret_int_reg_i: u32 = 0; | 19330 | var ret_int_reg_i: u32 = 0; |
| 19331 | var ret_sse_reg_i: u32 = 0; | 19331 | var ret_sse_reg_i: u32 = 0; |
| 19332 | var param_int_reg_i: u32 = 0; | 19332 | var param_int_reg_i: u32 = 0; |
| 19333 | var param_sse_reg_i: u32 = 0; | 19333 | var param_sse_reg_i: u32 = 0; |
| 19334 | result.stack_align = .@"16"; | 19334 | result.stack_align = .fromByteUnits(cc_opts.incoming_stack_alignment orelse 16); |
| 19335 | | 19335 | |
| 19336 | switch (resolved_cc) { | 19336 | switch (resolved_cc) { |
| 19337 | .x86_64_sysv => {}, | 19337 | .x86_64_sysv => {}, |
| ... | @@ -19512,10 +19512,13 @@ fn resolveCallingConventionValues( | ... | @@ -19512,10 +19512,13 @@ fn resolveCallingConventionValues( |
| 19512 | } | 19512 | } |
| 19513 | | 19513 | |
| 19514 | const param_size: u31 = @intCast(ty.abiSize(zcu)); | 19514 | const param_size: u31 = @intCast(ty.abiSize(zcu)); |
| 19515 | const param_align: u31 = | 19515 | const param_align = ty.abiAlignment(zcu).max(.@"8"); |
| 19516 | @intCast(@max(ty.abiAlignment(zcu).toByteUnits().?, 8)); | 19516 | result.stack_byte_count = mem.alignForward( |
| 19517 | result.stack_byte_count = | 19517 | u31, |
| 19518 | mem.alignForward(u31, result.stack_byte_count, param_align); | 19518 | result.stack_byte_count, |
| | 19519 | @intCast(param_align.toByteUnits().?), |
| | 19520 | ); |
| | 19521 | result.stack_align = result.stack_align.max(param_align); |
| 19519 | arg.* = .{ .load_frame = .{ | 19522 | arg.* = .{ .load_frame = .{ |
| 19520 | .index = stack_frame_base, | 19523 | .index = stack_frame_base, |
| 19521 | .off = result.stack_byte_count, | 19524 | .off = result.stack_byte_count, |
| ... | @@ -19557,9 +19560,13 @@ fn resolveCallingConventionValues( | ... | @@ -19557,9 +19560,13 @@ fn resolveCallingConventionValues( |
| 19557 | continue; | 19560 | continue; |
| 19558 | } | 19561 | } |
| 19559 | const param_size: u31 = @intCast(ty.abiSize(zcu)); | 19562 | const param_size: u31 = @intCast(ty.abiSize(zcu)); |
| 19560 | const param_align: u31 = @intCast(ty.abiAlignment(zcu).toByteUnits().?); | 19563 | const param_align = ty.abiAlignment(zcu); |
| 19561 | result.stack_byte_count = | 19564 | result.stack_byte_count = mem.alignForward( |
| 19562 | mem.alignForward(u31, result.stack_byte_count, param_align); | 19565 | u31, |
| | 19566 | result.stack_byte_count, |
| | 19567 | @intCast(param_align.toByteUnits().?), |
| | 19568 | ); |
| | 19569 | result.stack_align = result.stack_align.max(param_align); |
| 19563 | arg.* = .{ .load_frame = .{ | 19570 | arg.* = .{ .load_frame = .{ |
| 19564 | .index = stack_frame_base, | 19571 | .index = stack_frame_base, |
| 19565 | .off = result.stack_byte_count, | 19572 | .off = result.stack_byte_count, |