asm_linux_s390x.s raw

   1  // Copyright 2016 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  //
   8  // System calls for s390x, Linux
   9  //
  10  
  11  // func rawVforkSyscall(trap, a1, a2, a3 uintptr) (r1, err uintptr)
  12  TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-48
  13  	MOVD	a1+8(FP), R2
  14  	MOVD	a2+16(FP), R3
  15  	MOVD	a3+24(FP), R4
  16  	MOVD	$0, R5
  17  	MOVD	$0, R6
  18  	MOVD	$0, R7
  19  	MOVD	trap+0(FP), R1	// syscall entry
  20  	SYSCALL
  21  	MOVD	$0xfffffffffffff001, R8
  22  	CMPUBLT	R2, R8, ok2
  23  	MOVD	$-1, r1+32(FP)
  24  	NEG	R2, R2
  25  	MOVD	R2, err+40(FP)	// errno
  26  	RET
  27  ok2:
  28  	MOVD	R2, r1+32(FP)
  29  	MOVD	$0, err+40(FP)	// errno
  30  	RET
  31  
  32  // func rawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
  33  TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
  34  	MOVD	a1+8(FP), R2
  35  	MOVD	a2+16(FP), R3
  36  	MOVD	a3+24(FP), R4
  37  	MOVD	$0, R5
  38  	MOVD	$0, R6
  39  	MOVD	$0, R7
  40  	MOVD	trap+0(FP), R1	// syscall entry
  41  	SYSCALL
  42  	MOVD	R2, r1+32(FP)
  43  	MOVD	R3, r2+40(FP)
  44  	RET
  45  
  46  #define SYS_SOCKETCALL 102	/* from zsysnum_linux_s390x.go */
  47  
  48  // func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
  49  // Kernel interface gets call sub-number and pointer to a0.
  50  TEXT ·socketcall(SB),NOSPLIT,$0-72
  51  	BL	runtime·entersyscall(SB)
  52  	MOVD	$SYS_SOCKETCALL, R1	// syscall entry
  53  	MOVD	call+0(FP), R2		// socket call number
  54  	MOVD	$a0+8(FP), R3		// pointer to call arguments
  55  	MOVD	$0, R4
  56  	MOVD	$0, R5
  57  	MOVD	$0, R6
  58  	MOVD	$0, R7
  59  	SYSCALL
  60  	MOVD	$0xfffffffffffff001, R8
  61  	CMPUBLT	R2, R8, oksock
  62  	MOVD	$-1, n+56(FP)
  63  	NEG	R2, R2
  64  	MOVD	R2, err+64(FP)
  65  	BL	runtime·exitsyscall(SB)
  66  	RET
  67  oksock:
  68  	MOVD	R2, n+56(FP)
  69  	MOVD	$0, err+64(FP)
  70  	CALL	runtime·exitsyscall(SB)
  71  	RET
  72  
  73  // func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
  74  // Kernel interface gets call sub-number and pointer to a0.
  75  TEXT ·rawsocketcall(SB),NOSPLIT,$0-72
  76  	MOVD	$SYS_SOCKETCALL, R1	// syscall entry
  77  	MOVD	call+0(FP), R2		// socket call number
  78  	MOVD	$a0+8(FP), R3		// pointer to call arguments
  79  	MOVD	$0, R4
  80  	MOVD	$0, R5
  81  	MOVD	$0, R6
  82  	MOVD	$0, R7
  83  	SYSCALL
  84  	MOVD	$0xfffffffffffff001, R8
  85  	CMPUBLT	R2, R8, oksock1
  86  	MOVD	$-1, n+56(FP)
  87  	NEG	R2, R2
  88  	MOVD	R2, err+64(FP)
  89  	RET
  90  oksock1:
  91  	MOVD	R2, n+56(FP)
  92  	MOVD	$0, err+64(FP)
  93  	RET
  94