github.com/zxy12/go_duplicate_112_new@v0.0.0-20200807091221-747231827200/src/syscall/asm_linux_arm64.s (about) 1 // Copyright 2015 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 7 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); 8 TEXT ·Syscall(SB),NOSPLIT,$0-56 9 BL runtime·entersyscall(SB) 10 MOVD a1+8(FP), R0 11 MOVD a2+16(FP), R1 12 MOVD a3+24(FP), R2 13 MOVD $0, R3 14 MOVD $0, R4 15 MOVD $0, R5 16 MOVD trap+0(FP), R8 // syscall entry 17 SVC 18 CMN $4095, R0 19 BCC ok 20 MOVD $-1, R4 21 MOVD R4, r1+32(FP) // r1 22 MOVD ZR, r2+40(FP) // r2 23 NEG R0, R0 24 MOVD R0, err+48(FP) // errno 25 BL runtime·exitsyscall(SB) 26 RET 27 ok: 28 MOVD R0, r1+32(FP) // r1 29 MOVD R1, r2+40(FP) // r2 30 MOVD ZR, err+48(FP) // errno 31 BL runtime·exitsyscall(SB) 32 RET 33 34 TEXT ·Syscall6(SB),NOSPLIT,$0-80 35 BL runtime·entersyscall(SB) 36 MOVD a1+8(FP), R0 37 MOVD a2+16(FP), R1 38 MOVD a3+24(FP), R2 39 MOVD a4+32(FP), R3 40 MOVD a5+40(FP), R4 41 MOVD a6+48(FP), R5 42 MOVD trap+0(FP), R8 // syscall entry 43 SVC 44 CMN $4095, R0 45 BCC ok 46 MOVD $-1, R4 47 MOVD R4, r1+56(FP) // r1 48 MOVD ZR, r2+64(FP) // r2 49 NEG R0, R0 50 MOVD R0, err+72(FP) // errno 51 BL runtime·exitsyscall(SB) 52 RET 53 ok: 54 MOVD R0, r1+56(FP) // r1 55 MOVD R1, r2+64(FP) // r2 56 MOVD ZR, err+72(FP) // errno 57 BL runtime·exitsyscall(SB) 58 RET 59 60 TEXT ·RawSyscall(SB),NOSPLIT,$0-56 61 MOVD a1+8(FP), R0 62 MOVD a2+16(FP), R1 63 MOVD a3+24(FP), R2 64 MOVD $0, R3 65 MOVD $0, R4 66 MOVD $0, R5 67 MOVD trap+0(FP), R8 // syscall entry 68 SVC 69 CMN $4095, R0 70 BCC ok 71 MOVD $-1, R4 72 MOVD R4, r1+32(FP) // r1 73 MOVD ZR, r2+40(FP) // r2 74 NEG R0, R0 75 MOVD R0, err+48(FP) // errno 76 RET 77 ok: 78 MOVD R0, r1+32(FP) // r1 79 MOVD R1, r2+40(FP) // r2 80 MOVD ZR, err+48(FP) // errno 81 RET 82 83 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 84 MOVD a1+8(FP), R0 85 MOVD a2+16(FP), R1 86 MOVD a3+24(FP), R2 87 MOVD a4+32(FP), R3 88 MOVD a5+40(FP), R4 89 MOVD a6+48(FP), R5 90 MOVD trap+0(FP), R8 // syscall entry 91 SVC 92 CMN $4095, R0 93 BCC ok 94 MOVD $-1, R4 95 MOVD R4, r1+56(FP) // r1 96 MOVD ZR, r2+64(FP) // r2 97 NEG R0, R0 98 MOVD R0, err+72(FP) // errno 99 RET 100 ok: 101 MOVD R0, r1+56(FP) // r1 102 MOVD R1, r2+64(FP) // r2 103 MOVD ZR, err+72(FP) // errno 104 RET 105 106 // func rawSyscallNoError(trap uintptr, a1, a2, a3 uintptr) (r1, r2 uintptr); 107 TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48 108 MOVD a1+8(FP), R0 109 MOVD a2+16(FP), R1 110 MOVD a3+24(FP), R2 111 MOVD $0, R3 112 MOVD $0, R4 113 MOVD $0, R5 114 MOVD trap+0(FP), R8 // syscall entry 115 SVC 116 MOVD R0, r1+32(FP) 117 MOVD R1, r2+40(FP) 118 RET