Skip to content

Commit

Permalink
Remove hardcoded alignment and addend
Browse files Browse the repository at this point in the history
  • Loading branch information
saulecabrera committed May 16, 2023
1 parent e9fecc4 commit 0fc38d5
Showing 1 changed file with 24 additions and 10 deletions.
34 changes: 24 additions & 10 deletions winch/codegen/src/codegen/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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, <A as ABI>::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, <A as ABI>::scratch_reg());
CalleeKind::Direct(callee.as_u32())
},
);
self.post_call::<M, A>(masm, context, reserved_stack);
}

Expand All @@ -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 = <A as ABI>::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 = <A as ABI>::scratch_reg();
self.assign_args(context, masm, scratch);
masm.load(addr, scratch, OperandSize::S64);
CalleeKind::Indirect(scratch)
},
);
self.post_call::<M, A>(masm, context, reserved_stack);
}

Expand Down

0 comments on commit 0fc38d5

Please sign in to comment.