///|
pub(all) enum AbiValueLocation {
Reg(PReg)
Stack(offset~ : Int, size~ : Int, align~ : Int)
ReturnArea(offset~ : Int, size~ : Int, align~ : Int)
} derive(Eq, Debug)
///|
pub(all) struct AbiReturnArea {
size : Int
align : Int
} derive(Eq, Debug)
///|
pub fn abi_location_stack_size(location : AbiValueLocation) -> Int {
match location {
Stack(size~, ..) | ReturnArea(size~, ..) => size
Reg(_) => 0
}
}
///|
pub fn abi_location_stack_align(location : AbiValueLocation) -> Int {
match location {
Stack(align~, ..) | ReturnArea(align~, ..) => align
Reg(_) => 1
}
}