about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-09-02 19:46:51 +0000
committerbors <bors@rust-lang.org>2017-09-02 19:46:51 +0000
commit744dd6c1d5db522d5d3b7f2bb82abde5dc41cbeb (patch)
tree8aa52013c4f9fb978c3d47c4e8a7b41f122a61a5 /src/rustllvm/RustWrapper.cpp
parent204c0a47e7b7e371cf1cdc159404d405b86386ba (diff)
parent40b14736a05c1d26d5be38a48a88cb938e317e59 (diff)
downloadrust-744dd6c1d5db522d5d3b7f2bb82abde5dc41cbeb.tar.gz
rust-744dd6c1d5db522d5d3b7f2bb82abde5dc41cbeb.zip
Auto merge of #44066 - cuviper:powerpc64-extern-abi, r=alexcrichton
powerpc64: improve extern struct ABI

These fixes all have to do with the 64-bit PowerPC ELF ABI for big-endian
targets.  The ELF v2 ABI for powerpc64le already worked well.

- Return after marking return aggregates indirect. Fixes #42757.
- Pass one-member float aggregates as direct argument values.
- Aggregate arguments less than 64-bit must be written in the least-
  significant bits of the parameter space.
- Larger aggregates are instead padded at the tail.
  (i.e. filling MSBs, padding the remaining LSBs.)

New tests were also added for the single-float aggregate, and a 3-byte
aggregate to check that it's filled into LSBs.  Overall, at least these
formerly-failing tests now pass on powerpc64:

- run-make/extern-fn-struct-passing-abi
- run-make/extern-fn-with-packed-struct
- run-pass/extern-pass-TwoU16s.rs
- run-pass/extern-pass-TwoU8s.rs
- run-pass/struct-return.rs
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions