Refactor AArch64 ABI support to extract common bits for shared impl with x64.
We have observed that the ABI implementations for AArch64 and x64 are very similar; in fact, x64's implementation started as a modified copy of AArch64's implementation. This is an artifact of both a similar ABI (both machines pass args and return values in registers first, then the stack, and both machines give considerable freedom with stack-frame layout) and a too-low-level ABI abstraction in the existing design. For machines that fit the mainstream or most common ABI-design idioms, we should be able to do much better. This commit factors AArch64 into machine-specific and machine-independent parts, but does not yet modify x64; that will come next. This should be completely neutral with respect to compile time and generated code performance.
This commit is contained in:
18
cranelift/codegen/src/machinst/helpers.rs
Normal file
18
cranelift/codegen/src/machinst/helpers.rs
Normal file
@@ -0,0 +1,18 @@
|
||||
//! Miscellaneous helpers for machine backends.
|
||||
|
||||
use crate::ir::Type;
|
||||
|
||||
/// Returns the size (in bits) of a given type.
|
||||
pub fn ty_bits(ty: Type) -> usize {
|
||||
usize::from(ty.bits())
|
||||
}
|
||||
|
||||
/// Is the type represented by an integer (not float) at the machine level?
|
||||
pub(crate) fn ty_has_int_representation(ty: Type) -> bool {
|
||||
ty.is_int() || ty.is_bool() || ty.is_ref()
|
||||
}
|
||||
|
||||
/// Is the type represented by a float or vector value at the machine level?
|
||||
pub(crate) fn ty_has_float_or_vec_representation(ty: Type) -> bool {
|
||||
ty.is_vector() || ty.is_float()
|
||||
}
|
||||
Reference in New Issue
Block a user