aboutsummaryrefslogtreecommitdiff
path: root/libffi/src/powerpc/sysv.S
diff options
context:
space:
mode:
Diffstat (limited to 'libffi/src/powerpc/sysv.S')
-rw-r--r--libffi/src/powerpc/sysv.S10
1 files changed, 8 insertions, 2 deletions
diff --git a/libffi/src/powerpc/sysv.S b/libffi/src/powerpc/sysv.S
index 235acfa..6d5a707 100644
--- a/libffi/src/powerpc/sysv.S
+++ b/libffi/src/powerpc/sysv.S
@@ -140,8 +140,14 @@ L(smst_one_register):
b L(done_return_value)
L(smst_two_register):
rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */
- bl __ashldi3 /* libgcc function to shift r3/r4,
- shift value in r5. */
+ cmpwi %r5,0
+ subfic %r9,%r5,32
+ slw %r29,%r3,%r5
+ srw %r9,%r4,%r9
+ beq- L(smst_8byte)
+ or %r3,%r9,%r29
+ slw %r4,%r4,%r5
+L(smst_8byte):
stw %r3,0(%r30)
stw %r4,4(%r30)
b L(done_return_value)