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:
@@ -721,6 +721,26 @@ impl<'a> Verifier<'a> {
|
||||
));
|
||||
}
|
||||
}
|
||||
NullAry {
|
||||
opcode: Opcode::GetFramePointer | Opcode::GetReturnAddress,
|
||||
} => {
|
||||
if let Some(isa) = &self.isa {
|
||||
if !isa.flags().preserve_frame_pointers() {
|
||||
return errors.fatal((
|
||||
inst,
|
||||
self.context(inst),
|
||||
"`get_frame_pointer`/`get_return_address` cannot be used without \
|
||||
enabling `preserve_frame_pointers`",
|
||||
));
|
||||
}
|
||||
} else {
|
||||
return errors.fatal((
|
||||
inst,
|
||||
self.context(inst),
|
||||
"`get_frame_pointer`/`get_return_address` require an ISA!",
|
||||
));
|
||||
}
|
||||
}
|
||||
Unary {
|
||||
opcode: Opcode::Bitcast,
|
||||
arg,
|
||||
|
||||
Reference in New Issue
Block a user