...

Text file src/syscall/asm_linux_arm64.s

Documentation: syscall

     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);
     8TEXT ·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
    27ok:
    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
    34TEXT ·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
    53ok:
    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
    60TEXT ·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
    77ok:
    78	MOVD	R0, r1+32(FP)	// r1
    79	MOVD	R1, r2+40(FP)	// r2
    80	MOVD	ZR, err+48(FP)	// errno
    81	RET
    82
    83TEXT ·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
   100ok:
   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);
   107TEXT ·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