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