github.com/ice-blockchain/go/src@v0.0.0-20240403114104-1564d284e521/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 #include "textflag.h" 6 #include "funcdata.h" 7 8 // 9 // System call support for 386, Plan 9 10 // 11 12 //func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string) 13 //func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string) 14 //func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) 15 //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) 16 17 #define SYS_ERRSTR 41 /* from zsysnum_plan9.go */ 18 19 // Trap # in AX, args on stack above caller pc. 20 TEXT ·Syscall(SB),NOSPLIT,$148-32 21 NO_LOCAL_POINTERS 22 CALL runtime·entersyscall(SB) 23 MOVL trap+0(FP), AX // syscall entry 24 // copy args down 25 LEAL a1+4(FP), SI 26 LEAL sysargs-144(SP), DI 27 CLD 28 MOVSL 29 MOVSL 30 MOVSL 31 INT $64 32 MOVL AX, r1+16(FP) 33 MOVL $0, r2+20(FP) 34 CMPL AX, $-1 35 JNE ok3 36 37 LEAL errbuf-128(SP), AX 38 MOVL AX, sysargs-144(SP) 39 MOVL $128, sysargs1-140(SP) 40 MOVL $SYS_ERRSTR, AX 41 INT $64 42 CALL runtime·exitsyscall(SB) 43 MOVL sysargs-144(SP), AX 44 MOVL AX, errbuf-148(SP) 45 CALL runtime·gostring(SB) 46 LEAL str-144(SP), SI 47 JMP copyresult3 48 49 ok3: 50 CALL runtime·exitsyscall(SB) 51 LEAL ·emptystring(SB), SI 52 53 copyresult3: 54 LEAL err+24(FP), DI 55 56 CLD 57 MOVSL 58 MOVSL 59 60 RET 61 62 TEXT ·Syscall6(SB),NOSPLIT,$148-44 63 NO_LOCAL_POINTERS 64 CALL runtime·entersyscall(SB) 65 MOVL trap+0(FP), AX // syscall entry 66 // copy args down 67 LEAL a1+4(FP), SI 68 LEAL sysargs-144(SP), DI 69 CLD 70 MOVSL 71 MOVSL 72 MOVSL 73 MOVSL 74 MOVSL 75 MOVSL 76 INT $64 77 MOVL AX, r1+28(FP) 78 MOVL $0, r2+32(FP) 79 CMPL AX, $-1 80 JNE ok4 81 82 LEAL errbuf-128(SP), AX 83 MOVL AX, sysargs-144(SP) 84 MOVL $128, sysargs1-140(SP) 85 MOVL $SYS_ERRSTR, AX 86 INT $64 87 CALL runtime·exitsyscall(SB) 88 MOVL sysargs-144(SP), AX 89 MOVL AX, errbuf-148(SP) 90 CALL runtime·gostring(SB) 91 LEAL str-144(SP), SI 92 JMP copyresult4 93 94 ok4: 95 CALL runtime·exitsyscall(SB) 96 LEAL ·emptystring(SB), SI 97 98 copyresult4: 99 LEAL err+36(FP), DI 100 101 CLD 102 MOVSL 103 MOVSL 104 105 RET 106 107 TEXT ·RawSyscall(SB),NOSPLIT,$0-28 108 MOVL trap+0(FP), AX // syscall entry 109 // slide args down on top of system call number 110 LEAL a1+4(FP), SI 111 LEAL trap+0(FP), DI 112 CLD 113 MOVSL 114 MOVSL 115 MOVSL 116 INT $64 117 MOVL AX, r1+16(FP) 118 MOVL AX, r2+20(FP) 119 MOVL AX, err+24(FP) 120 RET 121 122 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 123 MOVL trap+0(FP), AX // syscall entry 124 // slide args down on top of system call number 125 LEAL a1+4(FP), SI 126 LEAL trap+0(FP), DI 127 CLD 128 MOVSL 129 MOVSL 130 MOVSL 131 MOVSL 132 MOVSL 133 MOVSL 134 INT $64 135 MOVL AX, r1+28(FP) 136 MOVL AX, r2+32(FP) 137 MOVL AX, err+36(FP) 138 RET 139 140 #define SYS_SEEK 39 /* from zsysnum_plan9.go */ 141 142 //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) 143 TEXT ·seek(SB),NOSPLIT,$24-36 144 NO_LOCAL_POINTERS 145 LEAL newoffset+20(FP), AX 146 MOVL AX, placeholder+0(FP) 147 148 // copy args down 149 LEAL placeholder+0(FP), SI 150 LEAL sysargs-20(SP), DI 151 CLD 152 MOVSL 153 MOVSL 154 MOVSL 155 MOVSL 156 MOVSL 157 MOVL $SYS_SEEK, AX // syscall entry 158 INT $64 159 160 CMPL AX, $-1 161 JNE ok6 162 MOVL AX, newoffset_lo+20(FP) 163 MOVL AX, newoffset_hi+24(FP) 164 165 CALL syscall·errstr(SB) 166 MOVL SP, SI 167 JMP copyresult6 168 169 ok6: 170 LEAL ·emptystring(SB), SI 171 172 copyresult6: 173 LEAL err+28(FP), DI 174 175 CLD 176 MOVSL 177 MOVSL 178 RET