Text file src/syscall/asm_plan9_arm.s

     1  // Copyright 2009 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  #define SYS_ERRSTR 41	/* from zsysnum_plan9.go */
     9  #define SYS_SEEK 39	/* from zsysnum_plan9.go */
    10  
    11  // System call support for plan9 on arm
    12  
    13  //func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err ErrorString)
    14  TEXT	·Syscall(SB),NOSPLIT,$144-32
    15  	NO_LOCAL_POINTERS
    16  	BL		runtime·entersyscall(SB)
    17  	MOVW	$a1+4(FP), R0	// move syscall args
    18  	MOVW	$sysargs-144(SP), R1
    19  	MOVM.IA	(R0), [R2-R4]
    20  	MOVM.IA	[R2-R4], (R1)
    21  	MOVW	trap+0(FP), R0	// syscall num
    22  	SWI		$0
    23  	MOVW	$0, R2
    24  	MOVW	$r1+16(FP), R3
    25  	MOVM.IA	[R0,R2], (R3)
    26  	CMP		$-1, R0
    27  	B.EQ	syscallerr
    28  	BL		runtime·exitsyscall(SB)
    29  	MOVW	$·emptystring+0(SB), R2
    30  	B		syscallok
    31  syscallerr:
    32  	MOVW	$errbuf-128(SP), R2
    33  	MOVW	$128, R3
    34  	MOVM.IA	[R2,R3], (R1)
    35  	MOVW	$SYS_ERRSTR, R0
    36  	SWI		$0
    37  	BL		runtime·exitsyscall(SB)
    38  	BL		runtime·gostring(SB)
    39  	MOVW	$str-140(SP), R2
    40  syscallok:
    41  	MOVW	$err+24(FP), R1
    42  	MOVM.IA	(R2), [R3-R4]
    43  	MOVM.IA	[R3-R4], (R1)
    44  	RET
    45  
    46  
    47  //func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err ErrorString)
    48  // Actually Syscall5 but the rest of the code expects it to be named Syscall6.
    49  TEXT	·Syscall6(SB),NOSPLIT,$144-44
    50  	NO_LOCAL_POINTERS
    51  	BL		runtime·entersyscall(SB)
    52  	MOVW	$a1+4(FP), R0	// move syscall args
    53  	MOVW	$sysargs-144(SP), R1
    54  	MOVM.IA	(R0), [R2-R6]
    55  	MOVM.IA	[R2-R6], (R1)
    56  	MOVW	trap+0(FP), R0	// syscall num
    57  	SWI		$0
    58  	MOVW	$0, R2
    59  	MOVW	$r1+28(FP), R3
    60  	MOVM.IA.W	[R0,R2], (R3)
    61  	CMP		$-1, R0
    62  	B.EQ	syscall6err
    63  	BL		runtime·exitsyscall(SB)
    64  	MOVW	$·emptystring+0(SB), R2
    65  	B		syscall6ok
    66  syscall6err:
    67  	MOVW	$errbuf-128(SP), R2
    68  	MOVW	$128, R3
    69  	MOVM.IA	[R2,R3], (R1)
    70  	MOVW	$SYS_ERRSTR, R0
    71  	SWI		$0
    72  	BL		runtime·exitsyscall(SB)
    73  	BL		runtime·gostring(SB)
    74  	MOVW	$str-140(SP), R2
    75  syscall6ok:
    76  	MOVW	$err+36(FP), R1
    77  	MOVM.IA	(R2), [R3-R4]
    78  	MOVM.IA	[R3-R4], (R1)
    79  	RET
    80  
    81  //func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
    82  TEXT ·RawSyscall(SB),NOSPLIT,$12-28
    83  	MOVW	$a1+4(FP), R0	// move syscall args
    84  	MOVW	$sysargs-12(SP), R1
    85  	MOVM.IA	(R0), [R2-R4]
    86  	MOVM.IA	[R2-R4], (R1)
    87  	MOVW	trap+0(FP), R0	// syscall num
    88  	SWI		$0
    89  	MOVW	R0, r1+16(FP)
    90  	MOVW	R0, r2+20(FP)
    91  	MOVW	R0, err+24(FP)
    92  	RET
    93  
    94  //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
    95  // Actually RawSyscall5 but the rest of the code expects it to be named RawSyscall6.
    96  TEXT	·RawSyscall6(SB),NOSPLIT,$20-40
    97  	MOVW	$a1+4(FP), R0	// move syscall args
    98  	MOVW	$sysargs-20(SP), R1
    99  	MOVM.IA	(R0), [R2-R6]
   100  	MOVM.IA	[R2-R6], (R1)
   101  	MOVW	trap+0(FP), R0	// syscall num
   102  	SWI		$0
   103  	MOVW	R0, r1+28(FP)
   104  	MOVW	R0, r2+32(FP)
   105  	MOVW	R0, err+36(FP)
   106  	RET
   107  
   108  //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
   109  TEXT ·seek(SB),NOSPLIT,$20-36
   110  	NO_LOCAL_POINTERS
   111  	MOVW	$newoffset_lo+20(FP), R6
   112  	MOVW	R6, sysargs-20(SP)	// dest for return value
   113  	MOVW	$fd+4(FP), R0		// move syscall args
   114  	MOVW	$sysarg1-16(SP), R1
   115  	MOVM.IA	(R0), [R2-R5]
   116  	MOVM.IA	[R2-R5], (R1)
   117  	MOVW	$SYS_SEEK, R0		// syscall num
   118  	SWI		$0
   119  	CMP		$-1, R0
   120  	B.EQ	seekerr
   121  	MOVW	$·emptystring+0(SB), R2
   122  	B		seekok
   123  seekerr:
   124  	MOVW	R0, 0(R6)
   125  	MOVW	R0, 4(R6)
   126  	BL		·errstr(SB)
   127  	MOVW	$ret-20(SP), R2
   128  seekok:
   129  	MOVW	$err+28(FP), R1
   130  	MOVM.IA	(R2), [R3-R4]
   131  	MOVM.IA	[R3-R4], (R1)
   132  	RET
   133  

View as plain text