diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2020-09-21 23:01:31 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonasschievink@gmail.com> | 2020-09-26 15:34:26 +0200 |
| commit | 4c5acc4ed72f2cd6cf4d2c4ca682d52a117a98d0 (patch) | |
| tree | c2dad4e1252a49620c472d2746a1a5c3e23c9e30 /compiler/rustc_target | |
| parent | 6f9a8a7f9b9732c55511d2a2a3914e8feafc7c52 (diff) | |
| download | rust-4c5acc4ed72f2cd6cf4d2c4ca682d52a117a98d0.tar.gz rust-4c5acc4ed72f2cd6cf4d2c4ca682d52a117a98d0.zip | |
Return values up to 128 bits in registers
Diffstat (limited to 'compiler/rustc_target')
| -rw-r--r-- | compiler/rustc_target/src/abi/call/mod.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/compiler/rustc_target/src/abi/call/mod.rs b/compiler/rustc_target/src/abi/call/mod.rs index 8f7e2bba5aa..602c424a043 100644 --- a/compiler/rustc_target/src/abi/call/mod.rs +++ b/compiler/rustc_target/src/abi/call/mod.rs @@ -610,3 +610,15 @@ impl<'a, Ty> FnAbi<'a, Ty> { 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, + } +} |
