Cranelift: Add instructions for getting the current stack/frame/return pointers (#4573)
* Cranelift: Add instructions for getting the current stack/frame pointers and return address This is the initial part of https://github.com/bytecodealliance/wasmtime/issues/4535 * x64: Remove `Amode::RbpOffset` and use `Amode::ImmReg` instead We just special case getting operands from `Amode`s now. * Fix s390x `get_return_address`; require `preserve_frame_pointers=true` * Assert that `Amode::ImmRegRegShift` doesn't use rbp/rsp * Handle non-allocatable registers in Amode::with_allocs * Use "stack" instead of "r15" on s390x * r14 is an allocatable register on s390x, so it shouldn't be used with `MovPReg`
This commit is contained in:
@@ -31,6 +31,7 @@ use crate::{
|
||||
VCodeConstant, VCodeConstantData,
|
||||
},
|
||||
};
|
||||
use regalloc2::PReg;
|
||||
use smallvec::SmallVec;
|
||||
use std::boxed::Box;
|
||||
use std::convert::TryFrom;
|
||||
@@ -636,6 +637,16 @@ where
|
||||
|
||||
self.gen_call_common(abi, num_rets, caller, args)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn preg_rbp(&mut self) -> PReg {
|
||||
regs::rbp().to_real_reg().unwrap().into()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn preg_rsp(&mut self) -> PReg {
|
||||
regs::rsp().to_real_reg().unwrap().into()
|
||||
}
|
||||
}
|
||||
|
||||
impl<C> IsleContext<'_, C, Flags, IsaFlags, 6>
|
||||
|
||||
Reference in New Issue
Block a user