ref: 639f832114c6812f174b2387c597d9d0b1d36769
parent: 6585d63cfc438f142ca928079aeeefbefe6beca4
author: Ori Bernstein <[email protected]>
date: Mon Dec 22 18:31:25 EST 2014
Add untested syscall code for plan9.
--- a/libstd/syscall+plan9-x64.s
+++ b/libstd/syscall+plan9-x64.s
@@ -1,0 +1,48 @@
+.globl sys$syscall
+sys$syscall:
+ /*
+ Ugly: Kernel is caller-save, Myrddin
+ is callee-save. We need to preserve
+ registers before entering the kernel.
+
+ However, we also need SP to point to the
+ start of the arguments.
+
+ Luckily, the kernel doesn't touch our stack,
+ and we have 256 bytes of gap if we get a note.
+ */
+ MOVQ BX,-16(SP)
+ MOVQ CX,-24(SP)
+ MOVQ DX,-32(SP)
+ MOVQ SI,-40(SP)
+ MOVQ DI,-48(SP)
+ MOVQ BP,-56(SP)
+ MOVQ R8,-64(SP)
+ MOVQ R9,-72(SP)
+ MOVQ R10,-80(SP)
+ MOVQ R11,-88(SP)
+ MOVQ R12,-104(SP)
+ MOVQ R13,-112(SP)
+ MOVQ R14,-120(SP)
+ MOVQ R15,-128(SP)
+ ADDQ $8,SP
+
+ SYSCALL
+
+ SUBQ $8,SP
+ MOVQ -16(SP),BX
+ MOVQ -24(SP),CX
+ MOVQ -32(SP),DX
+ MOVQ -40(SP),SI
+ MOVQ -48(SP),DI
+ MOVQ -56(SP),BP
+ MOVQ -64(SP),R8
+ MOVQ -72(SP),R9
+ MOVQ -80(SP),R10
+ MOVQ -88(SP),R11
+ MOVQ -104(SP),R12
+ MOVQ -112(SP),R13
+ MOVQ -120(SP),R14
+ MOVQ -128(SP),R15
+ RET
+