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 just max_level_info 2020-09-11 09:37:51 -07:00
rustc_apfloat /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_arena Remove unused #[allow(...)] statements from compiler/ 2020-09-26 01:25:55 +02:00
rustc_ast tidy 2020-09-23 22:08:30 +02:00
rustc_ast_lowering simplfy condition in ItemLowerer::with_trait_impl_ref() 2020-09-16 23:09:57 +02:00
rustc_ast_passes use matches!() macro for simple if let conditions 2020-09-18 20:28:35 +02:00
rustc_ast_pretty Fully integrate token collection for additional AST structs 2020-09-10 17:58:14 -04:00
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 /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_error_codes Rollup merge of #76973 - lzutao:unstably-const-assume, r=oli-obk 2020-09-25 19:42:29 +02:00
rustc_errors /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_expand Remove redundant #![feature(...)] 's from compiler/ 2020-09-17 07:58:45 +02:00
rustc_feature Use proper issue for `const_fn_floating_point_arithmetic` 2020-09-25 10:39:11 -07:00
rustc_fs_util
rustc_graphviz /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
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 /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_index cache types during normalization 2020-09-19 17:27:13 +02:00
rustc_infer Rollup merge of #77211 - est31:remove_unused_allow, r=oli-obk 2020-09-26 12:58:34 +02:00
rustc_interface PR feedback 2020-09-17 12:18:09 +02:00
rustc_lexer Fix typo in rustc_lexer docs 2020-09-21 05:43:39 +02:00
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 /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_passes Address review comment 2020-09-25 22:48:44 +01:00
rustc_plugin_impl /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_privacy /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_query_system update the version of itertools and parking_lot 2020-09-12 08:26:53 +02:00
rustc_resolve /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_save_analysis /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_serialize /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
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 Upgrade chalk to 0.28.0 2020-09-24 20:54:33 +02:00
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