github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/pkg/syscall/asm_freebsd_arm.s (about) 1 // Copyright 2012 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 "../../cmd/ld/textflag.h" 6 7 // 8 // System call support for ARM, FreeBSD 9 // 10 11 // func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, errno uintptr); 12 // func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr); 13 // func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, errno uintptr) 14 15 TEXT ·Syscall(SB),NOSPLIT,$0-28 16 BL runtime·entersyscall(SB) 17 MOVW 0(FP), R7 // syscall number 18 MOVW 4(FP), R0 // a1 19 MOVW 8(FP), R1 // a2 20 MOVW 12(FP), R2 // a3 21 SWI $0 // syscall 22 MOVW $0, R2 23 BCS error 24 MOVW R0, 16(FP) // r1 25 MOVW R1, 20(FP) // r2 26 MOVW R2, 24(FP) // errno 27 BL runtime·exitsyscall(SB) 28 RET 29 error: 30 MOVW $-1, R3 31 MOVW R3, 16(FP) // r1 32 MOVW R2, 20(FP) // r2 33 MOVW R0, 24(FP) // errno 34 BL runtime·exitsyscall(SB) 35 RET 36 37 TEXT ·Syscall6(SB),NOSPLIT,$0-40 38 BL runtime·entersyscall(SB) 39 MOVW 0(FP), R7 // syscall number 40 MOVW 4(FP), R0 // a1 41 MOVW 8(FP), R1 // a2 42 MOVW 12(FP), R2 // a3 43 MOVW 16(FP), R3 // a4 44 MOVW R13, R4 45 MOVW $20(FP), R13 // a5 to a6 are passed on stack 46 SWI $0 // syscall 47 MOVW R4, R13 48 MOVW $0, R2 49 BCS error6 50 MOVW R0, 28(FP) // r1 51 MOVW R1, 32(FP) // r2 52 MOVW R2, 36(FP) // errno 53 BL runtime·exitsyscall(SB) 54 RET 55 error6: 56 MOVW $-1, R3 57 MOVW R3, 28(FP) // r1 58 MOVW R2, 32(FP) // r2 59 MOVW R0, 36(FP) // errno 60 BL runtime·exitsyscall(SB) 61 RET 62 63 TEXT ·Syscall9(SB),NOSPLIT,$0-52 64 BL runtime·entersyscall(SB) 65 MOVW 0(FP), R7 // syscall number 66 MOVW 4(FP), R0 // a1 67 MOVW 8(FP), R1 // a2 68 MOVW 12(FP), R2 // a3 69 MOVW 16(FP), R3 // a4 70 MOVW R13, R4 71 MOVW $20(FP), R13 // a5 to a9 are passed on stack 72 SWI $0 // syscall 73 MOVW R4, R13 74 MOVW $0, R2 75 BCS error9 76 MOVW R0, 40(FP) // r1 77 MOVW R1, 44(FP) // r2 78 MOVW R2, 48(FP) // errno 79 BL runtime·exitsyscall(SB) 80 RET 81 error9: 82 MOVW $-1, R3 83 MOVW R3, 40(FP) // r1 84 MOVW R2, 44(FP) // r2 85 MOVW R0, 48(FP) // errno 86 BL runtime·exitsyscall(SB) 87 RET 88 89 TEXT ·RawSyscall(SB),NOSPLIT,$0-28 90 MOVW 0(FP), R7 // syscall number 91 MOVW 4(FP), R0 // a1 92 MOVW 8(FP), R1 // a2 93 MOVW 12(FP), R2 // a3 94 SWI $0 // syscall 95 MOVW $0, R2 96 BCS errorr 97 MOVW R0, 16(FP) // r1 98 MOVW R1, 20(FP) // r2 99 MOVW R2, 24(FP) // errno 100 RET 101 errorr: 102 MOVW $-1, R3 103 MOVW R3, 16(FP) // r1 104 MOVW R2, 20(FP) // r2 105 MOVW R0, 24(FP) // errno 106 RET 107 108 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 109 MOVW 0(FP), R7 // syscall number 110 MOVW 4(FP), R0 // a1 111 MOVW 8(FP), R1 // a2 112 MOVW 12(FP), R2 // a3 113 MOVW 16(FP), R3 // a4 114 MOVW R13, R4 115 MOVW $20(FP), R13 // a5 to a6 are passed on stack 116 SWI $0 // syscall 117 MOVW R4, R13 118 MOVW $0, R2 119 BCS errorr6 120 MOVW R0, 28(FP) // r1 121 MOVW R1, 32(FP) // r2 122 MOVW R2, 36(FP) // errno 123 RET 124 errorr6: 125 MOVW $-1, R3 126 MOVW R3, 28(FP) // r1 127 MOVW R2, 32(FP) // r2 128 MOVW R0, 36(FP) // errno 129 RET