asm_linux_arm.s raw

   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  //
   9  // System calls for arm, Linux
  10  //
  11  
  12  #define SYS__LLSEEK 140  /* from zsysnum_linux_arm.go */
  13  // func seek(fd int, offset int64, whence int) (newoffset int64, errno int)
  14  // Implemented in assembly to avoid allocation when
  15  // taking the address of the return value newoffset.
  16  // Underlying system call is
  17  //	llseek(int fd, int offhi, int offlo, int64 *result, int whence)
  18  TEXT ·seek(SB),NOSPLIT,$0-28
  19  	BL	runtime·entersyscall(SB)
  20  	MOVW	$SYS__LLSEEK, R7	// syscall entry
  21  	MOVW	fd+0(FP), R0
  22  	MOVW	offset_hi+8(FP), R1
  23  	MOVW	offset_lo+4(FP), R2
  24  	MOVW	$newoffset_lo+16(FP), R3
  25  	MOVW	whence+12(FP), R4
  26  	SWI	$0
  27  	MOVW	$0xfffff001, R6
  28  	CMP	R6, R0
  29  	BLS	okseek
  30  	MOVW	$0, R1
  31  	MOVW	R1, newoffset_lo+16(FP)
  32  	MOVW	R1, newoffset_hi+20(FP)
  33  	RSB	$0, R0, R0
  34  	MOVW	R0, err+24(FP)
  35  	BL	runtime·exitsyscall(SB)
  36  	RET
  37  okseek:
  38  	// system call filled in newoffset already
  39  	MOVW	$0, R0
  40  	MOVW	R0, err+24(FP)
  41  	BL	runtime·exitsyscall(SB)
  42  	RET
  43  
  44  // func rawVforkSyscall(trap, a1, a2, a3 uintptr) (r1, err uintptr)
  45  TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-24
  46  	MOVW	trap+0(FP), R7	// syscall entry
  47  	MOVW	a1+4(FP), R0
  48  	MOVW	a2+8(FP), R1
  49  	MOVW	a3+12(FP), R2
  50  	SWI	$0
  51  	MOVW	$0xfffff001, R1
  52  	CMP	R1, R0
  53  	BLS	ok
  54  	MOVW	$-1, R1
  55  	MOVW	R1, r1+16(FP)
  56  	RSB	$0, R0, R0
  57  	MOVW	R0, err+20(FP)
  58  	RET
  59  ok:
  60  	MOVW	R0, r1+16(FP)
  61  	MOVW	$0, R0
  62  	MOVW	R0, err+20(FP)
  63  	RET
  64  
  65  // func rawSyscallNoError(trap uintptr, a1, a2, a3 uintptr) (r1, r2 uintptr);
  66  TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-24
  67  	MOVW	trap+0(FP), R7	// syscall entry
  68  	MOVW	a1+4(FP), R0
  69  	MOVW	a2+8(FP), R1
  70  	MOVW	a3+12(FP), R2
  71  	SWI	$0
  72  	MOVW	R0, r1+16(FP)
  73  	MOVW	$0, R0
  74  	MOVW	R0, r2+20(FP)
  75  	RET
  76