mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-25 21:34:18 +00:00
Returns values up to 2*usize by value
This commit is contained in:
parent
8fe73e80d7
commit
b01694e0a2
@ -2787,8 +2787,9 @@ where
|
|||||||
_ => return,
|
_ => return,
|
||||||
}
|
}
|
||||||
|
|
||||||
let max_by_val_size =
|
// Return structures up to 2 pointers in size by value, matching `ScalarPair`. LLVM
|
||||||
if is_ret { call::max_ret_by_val(cx) } else { Pointer.size(cx) };
|
// will usually return these in 2 registers, which is more efficient than by-ref.
|
||||||
|
let max_by_val_size = if is_ret { Pointer.size(cx) * 2 } else { Pointer.size(cx) };
|
||||||
let size = arg.layout.size;
|
let size = arg.layout.size;
|
||||||
|
|
||||||
if arg.layout.is_unsized() || size > max_by_val_size {
|
if arg.layout.is_unsized() || size > max_by_val_size {
|
||||||
|
@ -610,15 +610,3 @@ impl<'a, Ty> FnAbi<'a, Ty> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the maximum size of return values to be passed by value in the Rust ABI.
|
|
||||||
///
|
|
||||||
/// Return values beyond this size will use an implicit out-pointer instead.
|
|
||||||
pub fn max_ret_by_val<C: HasTargetSpec + HasDataLayout>(spec: &C) -> Size {
|
|
||||||
match spec.target_spec().arch.as_str() {
|
|
||||||
// System-V will pass return values up to 128 bits in RAX/RDX.
|
|
||||||
"x86_64" => Size::from_bits(128),
|
|
||||||
|
|
||||||
_ => spec.data_layout().pointer_size,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user