diff options
author | Richard Pennington <rich@pennware.com> | 2012-11-09 23:32:57 +0100 |
---|---|---|
committer | rofl0r <retnyg@gmx.net> | 2012-11-13 18:15:10 +0100 |
commit | 7669d1e334e6b96455eece78da43bf830b93d697 (patch) | |
tree | 6649acfaa61ec6780498b55fa8015ca4f7a6cdae /src/internal | |
parent | 1e717ea3d2a864e00e507f1a70a892c551955f1b (diff) | |
download | musl-7669d1e334e6b96455eece78da43bf830b93d697.tar.gz musl-7669d1e334e6b96455eece78da43bf830b93d697.tar.bz2 musl-7669d1e334e6b96455eece78da43bf830b93d697.tar.xz musl-7669d1e334e6b96455eece78da43bf830b93d697.zip |
import preliminary ppc work by rdp.
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/ppc/syscall.S | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/internal/ppc/syscall.S b/src/internal/ppc/syscall.S new file mode 100644 index 00000000..e56abc6f --- /dev/null +++ b/src/internal/ppc/syscall.S @@ -0,0 +1,24 @@ +#include <bits/asm.h> + .global __syscall + .type __syscall,@function +__syscall: + mflr r0 + stw r0, -4(r1) // Save the return address. + mr r0, r3 // Save the system call number + mr r3, r4 // Shift the arguments: arg1 + mr r4, r5 // arg2 + mr r5, r6 // arg3 + mr r6, r7 // arg4 + mr r7, r8 // arg5 + mr r8, r9 // arg6 + sc + mfcr r0 // Check for an error + rlwinm r4, r0, r0, 3, 3 // by checking for bit 28. + cmplwi r0, r4, 0 // It is an error if non-zero. + beq r0, 1f // Jump if not an error. + neg r3, r3 // Negate the error number. +1: lwz r0, -4(r1) // Restore the return address. + mtlr r0 + blr + .end __syscall + .size __syscall, .-__syscall |