Text file src/syscall/asm_openbsd_arm.s

Documentation: syscall

     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
    18TEXT	·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
    32error:
    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
    40TEXT	·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
    58error6:
    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
    66TEXT	·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
    84error9:
    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
    92TEXT	·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
   104errorr:
   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
   111TEXT	·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
   127errorr6:
   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

View as plain text