github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/pkg/syscall/asm_plan9_386.s (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) 6 // so that go vet can check that they are correct. 7 8 #include "../../cmd/ld/textflag.h" 9 10 // 11 // System call support for 386, Plan 9 12 // 13 14 //func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string) 15 //func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string) 16 //func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) 17 //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) 18 19 // Trap # in AX, args on stack above caller pc. 20 TEXT ·Syscall(SB),NOSPLIT,$0-32 21 CALL runtime·entersyscall(SB) 22 MOVL 4(SP), AX // syscall entry 23 // slide args down on top of system call number 24 LEAL 8(SP), SI 25 LEAL 4(SP), DI 26 CLD 27 MOVSL 28 MOVSL 29 MOVSL 30 INT $64 31 MOVL AX, r1+20(SP) 32 MOVL $0, r2+24(SP) 33 CMPL AX, $-1 34 JNE ok3 35 36 SUBL $8, SP 37 CALL runtime·errstr(SB) 38 MOVL SP, SI 39 ADDL $8, SP 40 JMP copyresult3 41 42 ok3: 43 LEAL runtime·emptystring(SB), SI 44 45 copyresult3: 46 LEAL err+28(SP), DI 47 48 CLD 49 MOVSL 50 MOVSL 51 52 CALL runtime·exitsyscall(SB) 53 RET 54 55 TEXT ·Syscall6(SB),NOSPLIT,$0-44 56 CALL runtime·entersyscall(SB) 57 MOVL 4(SP), AX // syscall entry 58 // slide args down on top of system call number 59 LEAL 8(SP), SI 60 LEAL 4(SP), DI 61 CLD 62 MOVSL 63 MOVSL 64 MOVSL 65 MOVSL 66 MOVSL 67 MOVSL 68 INT $64 69 MOVL AX, r1+32(SP) 70 MOVL $0, r2+36(SP) 71 CMPL AX, $-1 72 JNE ok4 73 74 SUBL $8, SP 75 CALL runtime·errstr(SB) 76 MOVL SP, SI 77 ADDL $8, SP 78 JMP copyresult4 79 80 ok4: 81 LEAL runtime·emptystring(SB), SI 82 83 copyresult4: 84 LEAL err+40(SP), DI 85 86 CLD 87 MOVSL 88 MOVSL 89 90 CALL runtime·exitsyscall(SB) 91 RET 92 93 TEXT ·RawSyscall(SB),NOSPLIT,$0-28 94 MOVL 4(SP), AX // syscall entry 95 // slide args down on top of system call number 96 LEAL 8(SP), SI 97 LEAL 4(SP), DI 98 CLD 99 MOVSL 100 MOVSL 101 MOVSL 102 INT $64 103 MOVL AX, r1+20(SP) 104 MOVL AX, r2+24(SP) 105 MOVL AX, err+28(SP) 106 RET 107 108 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 109 MOVL 4(SP), AX // syscall entry 110 // slide args down on top of system call number 111 LEAL 8(SP), SI 112 LEAL 4(SP), DI 113 CLD 114 MOVSL 115 MOVSL 116 MOVSL 117 MOVSL 118 MOVSL 119 MOVSL 120 INT $64 121 MOVL AX, r1+32(SP) 122 MOVL AX, r2+36(SP) 123 MOVL AX, err+40(SP) 124 RET 125 126 #define SYS_SEEK 39 /* from zsysnum_plan9_386.go */ 127 128 //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) 129 TEXT ·seek(SB),NOSPLIT,$0-36 130 LEAL newoffset+24(SP), AX 131 MOVL AX, placeholder+4(SP) 132 133 MOVL $SYS_SEEK, AX // syscall entry 134 INT $64 135 136 CMPL AX, $-1 137 JNE ok6 138 MOVL AX, 24(SP) // newoffset low 139 MOVL AX, 28(SP) // newoffset high 140 141 SUBL $8, SP 142 CALL syscall·errstr(SB) 143 MOVL SP, SI 144 ADDL $8, SP 145 JMP copyresult6 146 147 ok6: 148 LEAL runtime·emptystring(SB), SI 149 150 copyresult6: 151 LEAL err+32(SP), DI 152 153 CLD 154 MOVSL 155 MOVSL 156 RET 157 158 //func exit(code int) 159 // Import runtime·exit for cleanly exiting. 160 TEXT ·exit(SB),NOSPLIT,$4-4 161 MOVL code+0(FP), AX 162 MOVL AX, 0(SP) 163 CALL runtime·exit(SB) 164 RET