...

Text file src/syscall/asm_linux_arm64.s

     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

View as plain text