pub struct Call { /* private fields */ }Expand description
The registers one call has left.
Made by AbiDescription::call, asked about the return value first and then about each
argument in order.
Implementations§
Source§impl Call
impl Call
Sourcepub const fn abi(&self) -> &'static AbiDescription
pub const fn abi(&self) -> &'static AbiDescription
The ABI this call follows.
Sourcepub const fn integer_left(&self) -> u32
pub const fn integer_left(&self) -> u32
General purpose argument registers left, which is what a test asserts about draining.
Sourcepub const fn float_left(&self) -> u32
pub const fn float_left(&self) -> u32
Floating point argument registers left.
Sourcepub fn returns(&mut self, arg: &Arg<'_>) -> Pass
pub fn returns(&mut self, arg: &Arg<'_>) -> Pass
How the return value comes back, which is asked before anything else.
Sourcepub fn argument(&mut self, arg: &Arg<'_>) -> Pass
pub fn argument(&mut self, arg: &Arg<'_>) -> Pass
How the next fixed argument travels, which spends whatever registers it takes.
Sourcepub fn variadic_argument(&mut self, arg: &Arg<'_>) -> Pass
pub fn variadic_argument(&mut self, arg: &Arg<'_>) -> Pass
How the next argument past the ... travels.
Only one of the three policies changes the answer this crate gives. Under
Variadic::AlwaysMemory the argument is classified as though no argument registers were
left, which is Darwin arm64’s rule stated in the one form that needs no new mechanism.
Variadic::BothBanks is a fact about which registers the backend has to write, not
about the form the value travels in, so the answer here is the same as for a fixed
argument and the description carries the flag for the backend to read.