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);
}