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:
1160
cranelift/codegen/src/machinst/abi_impl.rs
Normal file
1160
cranelift/codegen/src/machinst/abi_impl.rs
Normal file
File diff suppressed because it is too large
Load Diff
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()
|
||||
}
|
||||
@@ -123,12 +123,16 @@ pub mod blockorder;
|
||||
pub use blockorder::*;
|
||||
pub mod abi;
|
||||
pub use abi::*;
|
||||
pub mod abi_impl;
|
||||
pub use abi_impl::*;
|
||||
pub mod pretty_print;
|
||||
pub use pretty_print::*;
|
||||
pub mod buffer;
|
||||
pub use buffer::*;
|
||||
pub mod adapter;
|
||||
pub use adapter::*;
|
||||
pub mod helpers;
|
||||
pub use helpers::*;
|
||||
|
||||
/// A machine instruction.
|
||||
pub trait MachInst: Clone + Debug {
|
||||
|
||||
Reference in New Issue
Block a user