...

Text file src/syscall/asm_freebsd_arm.s

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

View as plain text