diff options
| author | kennytm <kennytm@gmail.com> | 2018-01-23 17:03:36 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-01-23 17:03:36 +0800 |
| commit | 82981a77c45fcdb3c78c80b3e3a265413c934bbb (patch) | |
| tree | 82f302b1eeaa55bdfde30ce3abd466662b6a058b | |
| parent | 150f2baca82726eca4b0bc68a070f1b0015e954c (diff) | |
| parent | 1203b3d892b6f8424f6540173e31af1cda304e36 (diff) | |
| download | rust-82981a77c45fcdb3c78c80b3e3a265413c934bbb.tar.gz rust-82981a77c45fcdb3c78c80b3e3a265413c934bbb.zip | |
Rollup merge of #47541 - psumbera:master, r=eddyb
Fixes sparc64 cabi fixes. Argument up to 16 bytes size is provided in registers. Return value up to 32 bytes size is stored in registers. Fixes: #46679 --- Firefox now (almost) build on sparc. Original rust issue seems to be gone. Note that I'm not rust expert and the fix was suggested in bug.
| -rw-r--r-- | src/librustc_trans/cabi_sparc64.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/librustc_trans/cabi_sparc64.rs b/src/librustc_trans/cabi_sparc64.rs index fb94b09d626..b3fc6a68061 100644 --- a/src/librustc_trans/cabi_sparc64.rs +++ b/src/librustc_trans/cabi_sparc64.rs @@ -50,7 +50,7 @@ fn classify_ret_ty<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, ret: &mut ArgType<'tcx>) } let size = ret.layout.size; let bits = size.bits(); - if bits <= 128 { + if bits <= 256 { let unit = if bits <= 8 { Reg::i8() } else if bits <= 16 { @@ -84,6 +84,11 @@ fn classify_arg_ty<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, arg: &mut ArgType<'tcx>) } let total = arg.layout.size; + if total.bits() > 128 { + arg.make_indirect(); + return; + } + arg.cast_to(Uniform { unit: Reg::i64(), total |
