diff options
author | Anthony Green <green@moxielogic.com> | 2011-11-12 15:52:08 -0500 |
---|---|---|
committer | Anthony Green <green@moxielogic.com> | 2011-11-12 15:52:08 -0500 |
commit | af18df2bc2f52df81e7b5c619bd86db8489dc873 (patch) | |
tree | 5e360395da6b59c7c44892944886ff868c55a7da /src/powerpc/sysv.S | |
parent | 236c9391321f83ad40daf03f40c35c9ebc1da6b3 (diff) | |
download | libffi-af18df2bc2f52df81e7b5c619bd86db8489dc873.tar.gz |
Remove use of ppc string instructions
Diffstat (limited to 'src/powerpc/sysv.S')
-rw-r--r-- | src/powerpc/sysv.S | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/powerpc/sysv.S b/src/powerpc/sysv.S index 96ea22b..9ad8d9f 100644 --- a/src/powerpc/sysv.S +++ b/src/powerpc/sysv.S @@ -136,19 +136,14 @@ L(float_return_value): b L(done_return_value) L(small_struct_return_value): - extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */ - mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */ - extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */ - subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */ - bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */ -/* smst_one_register: */ - slw %r3,%r3,%r5 /* Left-justify value in r3 */ - mtxer %r6 /* move byte count to XER ... */ - stswx %r3,0,%r30 /* ... and store that many bytes */ - bf+ 26,L(done_return_value) /* struct in r3:r4 ? */ - add %r6,%r6,%r30 /* adjust pointer */ - stswi %r4,%r6,4 /* store last four bytes */ - b L(done_return_value) + /* + * The C code always allocates a properly-aligned 8-byte bounce + * buffer to make this assembly code very simple. Just write out + * r3 and r4 to the buffer to allow the C code to handle the rest. + */ + stw %r3, 0(%r30) + stw %r4, 4(%r30) + b L(done_return_value) .LFE1: END(ffi_call_SYSV) |