github.com/MangoDowner/go-gm@v0.0.0-20180818020936-8baa2bd4408c/src/syscall/asm_openbsd_arm.s (about)

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