diff --git a/winch/codegen/src/codegen/call.rs b/winch/codegen/src/codegen/call.rs index 02ce6b08945e..f417ac2a8dc5 100644 --- a/winch/codegen/src/codegen/call.rs +++ b/winch/codegen/src/codegen/call.rs @@ -148,10 +148,17 @@ impl<'a> FnCall<'a> { context: &mut CodeGenContext, callee: FuncIndex, ) { - let reserved_stack = masm.call(16, 16, self.arg_stack_space, |masm| { - self.assign_args(context, masm, ::scratch_reg()); - CalleeKind::Direct(callee.as_u32()) - }); + let alignment = self.abi.call_stack_align(); + let addend = self.abi.arg_base_offset(); + let reserved_stack = masm.call( + alignment.into(), + addend.into(), + self.arg_stack_space, + |masm| { + self.assign_args(context, masm, ::scratch_reg()); + CalleeKind::Direct(callee.as_u32()) + }, + ); self.post_call::(masm, context, reserved_stack); } @@ -162,12 +169,19 @@ impl<'a> FnCall<'a> { context: &mut CodeGenContext, addr: M::Address, ) { - let reserved_stack = masm.call(16, 16, self.arg_stack_space, |masm| { - let scratch = ::scratch_reg(); - self.assign_args(context, masm, scratch); - masm.load(addr, scratch, OperandSize::S64); - CalleeKind::Indirect(scratch) - }); + let alignment = self.abi.call_stack_align(); + let addend = self.abi.arg_base_offset(); + let reserved_stack = masm.call( + alignment.into(), + addend.into(), + self.arg_stack_space, + |masm| { + let scratch = ::scratch_reg(); + self.assign_args(context, masm, scratch); + masm.load(addr, scratch, OperandSize::S64); + CalleeKind::Indirect(scratch) + }, + ); self.post_call::(masm, context, reserved_stack); }