github.com/c12o16h1/go/src@v0.0.0-20200114212001-5a151c0f00ed/syscall/asm_linux_ppc64x.s (about) 1 // Copyright 2014 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 // +build linux 6 // +build ppc64 ppc64le 7 8 #include "textflag.h" 9 10 // 11 // System calls for ppc64, Linux 12 // 13 14 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); 15 TEXT ·Syscall(SB),NOSPLIT,$0-56 16 BL runtime·entersyscall(SB) 17 MOVD a1+8(FP), R3 18 MOVD a2+16(FP), R4 19 MOVD a3+24(FP), R5 20 MOVD R0, R6 21 MOVD R0, R7 22 MOVD R0, R8 23 MOVD trap+0(FP), R9 // syscall entry 24 SYSCALL R9 25 BVC ok 26 MOVD $-1, R4 27 MOVD R4, r1+32(FP) // r1 28 MOVD R0, r2+40(FP) // r2 29 MOVD R3, err+48(FP) // errno 30 BL runtime·exitsyscall(SB) 31 RET 32 ok: 33 MOVD R3, r1+32(FP) // r1 34 MOVD R4, r2+40(FP) // r2 35 MOVD R0, err+48(FP) // errno 36 BL runtime·exitsyscall(SB) 37 RET 38 39 TEXT ·Syscall6(SB),NOSPLIT,$0-80 40 BL runtime·entersyscall(SB) 41 MOVD a1+8(FP), R3 42 MOVD a2+16(FP), R4 43 MOVD a3+24(FP), R5 44 MOVD a4+32(FP), R6 45 MOVD a5+40(FP), R7 46 MOVD a6+48(FP), R8 47 MOVD trap+0(FP), R9 // syscall entry 48 SYSCALL R9 49 BVC ok6 50 MOVD $-1, R4 51 MOVD R4, r1+56(FP) // r1 52 MOVD R0, r2+64(FP) // r2 53 MOVD R3, err+72(FP) // errno 54 BL runtime·exitsyscall(SB) 55 RET 56 ok6: 57 MOVD R3, r1+56(FP) // r1 58 MOVD R4, r2+64(FP) // r2 59 MOVD R0, err+72(FP) // errno 60 BL runtime·exitsyscall(SB) 61 RET 62 63 TEXT ·RawSyscall(SB),NOSPLIT,$0-56 64 MOVD a1+8(FP), R3 65 MOVD a2+16(FP), R4 66 MOVD a3+24(FP), R5 67 MOVD R0, R6 68 MOVD R0, R7 69 MOVD R0, R8 70 MOVD trap+0(FP), R9 // syscall entry 71 SYSCALL R9 72 BVC ok1 73 MOVD $-1, R4 74 MOVD R4, r1+32(FP) // r1 75 MOVD R0, r2+40(FP) // r2 76 MOVD R3, err+48(FP) // errno 77 RET 78 ok1: 79 MOVD R3, r1+32(FP) // r1 80 MOVD R4, r2+40(FP) // r2 81 MOVD R0, err+48(FP) // errno 82 RET 83 84 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 85 MOVD a1+8(FP), R3 86 MOVD a2+16(FP), R4 87 MOVD a3+24(FP), R5 88 MOVD a4+32(FP), R6 89 MOVD a5+40(FP), R7 90 MOVD a6+48(FP), R8 91 MOVD trap+0(FP), R9 // syscall entry 92 SYSCALL R9 93 BVC ok2 94 MOVD $-1, R4 95 MOVD R4, r1+56(FP) // r1 96 MOVD R0, r2+64(FP) // r2 97 MOVD R3, err+72(FP) // errno 98 RET 99 ok2: 100 MOVD R3, r1+56(FP) // r1 101 MOVD R4, r2+64(FP) // r2 102 MOVD R0, err+72(FP) // errno 103 RET 104 105 // func rawVforkSyscall(trap, a1 uintptr) (r1, err uintptr) 106 TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-32 107 MOVD a1+8(FP), R3 108 MOVD R0, R4 109 MOVD R0, R5 110 MOVD R0, R6 111 MOVD R0, R7 112 MOVD R0, R8 113 MOVD trap+0(FP), R9 // syscall entry 114 SYSCALL R9 115 BVC ok 116 MOVD $-1, R4 117 MOVD R4, r1+16(FP) // r1 118 MOVD R3, err+24(FP) // errno 119 RET 120 ok: 121 MOVD R3, r1+16(FP) // r1 122 MOVD R0, err+24(FP) // errno 123 RET 124 125 TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48 126 MOVD a1+8(FP), R3 127 MOVD a2+16(FP), R4 128 MOVD a3+24(FP), R5 129 MOVD R0, R6 130 MOVD R0, R7 131 MOVD R0, R8 132 MOVD trap+0(FP), R9 // syscall entry 133 SYSCALL R9 134 MOVD R3, r1+32(FP) 135 MOVD R4, r2+40(FP) 136 RET