Index: fusl/src/internal/sh/syscall.s |
diff --git a/fusl/src/internal/sh/syscall.s b/fusl/src/internal/sh/syscall.s |
new file mode 100644 |
index 0000000000000000000000000000000000000000..331918a5aaddd0a673606dbb25c2c300d2a83cc7 |
--- /dev/null |
+++ b/fusl/src/internal/sh/syscall.s |
@@ -0,0 +1,23 @@ |
+.global __syscall |
+.hidden __syscall |
+.type __syscall, @function |
+__syscall: |
+ ! The kernel syscall entry point documents that the trap number indicates |
+ ! the number of arguments being passed, but it then ignores that information. |
+ ! Since we do not actually know how many arguments are being passed, we will |
+ ! say there are six, since that is the maximum we support here. |
+ mov r4, r3 |
+ mov r5, r4 |
+ mov r6, r5 |
+ mov r7, r6 |
+ mov.l @r15, r7 |
+ mov.l @(4,r15), r0 |
+ mov.l @(8,r15), r1 |
+ trapa #31 |
+ or r0, r0 |
+ or r0, r0 |
+ or r0, r0 |
+ or r0, r0 |
+ or r0, r0 |
+ rts |
+ nop |