rust/compiler
bors 62fe055aba Auto merge of #76986 - jonas-schievink:ret-in-reg, r=nagisa
Return values up to 128 bits in registers

This fixes https://github.com/rust-lang/rust/issues/26494#issuecomment-619506345 by making Rust's default ABI pass return values up to 128 bits in size in registers, just like the System V ABI.

The result is that these methods from the comment linked above now generate the same code, making the Rust ABI as efficient as the `"C"` ABI:

```rust
pub struct Stats { x: u32, y: u32, z: u32, }

pub extern "C" fn sum_c(a: &Stats, b: &Stats) -> Stats {
    return Stats {x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
}

pub fn sum_rust(a: &Stats, b: &Stats) -> Stats {
    return Stats {x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
}
```

```asm
sum_rust:
	movl	(%rsi), %eax
	addl	(%rdi), %eax
	movl	4(%rsi), %ecx
	addl	4(%rdi), %ecx
	movl	8(%rsi), %edx
	addl	8(%rdi), %edx
	shlq	$32, %rcx
	orq	%rcx, %rax
	retq
```
2020-09-27 02:35:11 +00:00
..
rustc
rustc_apfloat
rustc_arena Remove unused #[allow(...)] statements from compiler/ 2020-09-26 01:25:55 +02:00
rustc_ast
rustc_ast_lowering
rustc_ast_passes
rustc_ast_pretty
rustc_attr Allow multiple allow_internal_unstable attributes 2020-09-25 15:19:46 +02:00
rustc_builtin_macros Auto merge of #76485 - estebank:format_arg_capture_spans, r=davidtwco 2020-09-26 10:05:49 +00:00
rustc_codegen_llvm Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00
rustc_codegen_ssa Rollup merge of #77208 - mati865:late-link-args-order, r=petrochenkov 2020-09-27 01:53:23 +02:00
rustc_data_structures Remove unused #[allow(...)] statements from compiler/ 2020-09-26 01:25:55 +02:00
rustc_driver
rustc_error_codes Rollup merge of #76973 - lzutao:unstably-const-assume, r=oli-obk 2020-09-25 19:42:29 +02:00
rustc_errors
rustc_expand
rustc_feature Use proper issue for const_fn_floating_point_arithmetic 2020-09-25 10:39:11 -07:00
rustc_fs_util
rustc_graphviz
rustc_hir Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00
rustc_hir_pretty
rustc_incremental
rustc_index
rustc_infer Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00
rustc_interface
rustc_lexer
rustc_lint Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00
rustc_llvm Remove unused #[allow(...)] statements from compiler/ 2020-09-26 01:25:55 +02:00
rustc_macros Remove unused #[allow(...)] statements from compiler/ 2020-09-26 01:25:55 +02:00
rustc_metadata Encode less metadata for proc-macro crates 2020-09-26 12:26:27 -04:00
rustc_middle Auto merge of #76986 - jonas-schievink:ret-in-reg, r=nagisa 2020-09-27 02:35:11 +00:00
rustc_mir Rollup merge of #77231 - oli-obk:clippy_const_fn, r=Manishearth 2020-09-27 01:53:27 +02:00
rustc_mir_build Auto merge of #70743 - oli-obk:eager_const_to_pat_conversion, r=eddyb 2020-09-26 06:44:28 +00:00
rustc_parse pretty-print-reparse hack: Remove an impossible case 2020-09-26 20:27:14 +03:00
rustc_parse_format
rustc_passes Address review comment 2020-09-25 22:48:44 +01:00
rustc_plugin_impl
rustc_privacy
rustc_query_system
rustc_resolve
rustc_save_analysis
rustc_serialize
rustc_session Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00
rustc_span Rollup merge of #77122 - ecstatic-morse:const-fn-arithmetic, r=RalfJung,oli-obk 2020-09-26 12:58:20 +02:00
rustc_symbol_mangling Implement Display for DisambiguatedDefPathData and DefPathData 2020-09-25 22:46:15 +01:00
rustc_target Auto merge of #76986 - jonas-schievink:ret-in-reg, r=nagisa 2020-09-27 02:35:11 +00:00
rustc_trait_selection Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00
rustc_traits
rustc_ty Rollup merge of #77155 - lcnr:ImplSource, r=ecstatic-morse 2020-09-25 19:42:48 +02:00
rustc_typeck Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00