about summary refs log tree commit diff
path: root/src/internal
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/powerpc/syscall.s18
-rw-r--r--src/internal/ppc/syscall.S24
2 files changed, 18 insertions, 24 deletions
diff --git a/src/internal/powerpc/syscall.s b/src/internal/powerpc/syscall.s
new file mode 100644
index 00000000..bca620db
--- /dev/null
+++ b/src/internal/powerpc/syscall.s
@@ -0,0 +1,18 @@
+	.global __syscall
+	.type   __syscall,@function
+__syscall:
+	mr      0, 3                  # Save the system call number
+	mr      3, 4                  # Shift the arguments: arg1
+	mr      4, 5                  # arg2
+	mr      5, 6                  # arg3
+	mr      6, 7                  # arg4
+	mr      7, 8                  # arg5
+	mr      8, 9                  # arg6
+	sc
+	bnslr+ # return if not summary overflow
+	#else error:
+	# return negated value.
+	neg 3, 3
+	blr
+	.end    __syscall
+	.size   __syscall, .-__syscall
diff --git a/src/internal/ppc/syscall.S b/src/internal/ppc/syscall.S
deleted file mode 100644
index e56abc6f..00000000
--- a/src/internal/ppc/syscall.S
+++ /dev/null
@@ -1,24 +0,0 @@
-#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