...

Text file src/pkg/syscall/asm_linux_s390x.s

     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 Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64)
    12	TEXT ·Syscall(SB),NOSPLIT,$0-56
    13		BL	runtime·entersyscall(SB)
    14		MOVD	a1+8(FP), R2
    15		MOVD	a2+16(FP), R3
    16		MOVD	a3+24(FP), R4
    17		MOVD	$0, R5
    18		MOVD	$0, R6
    19		MOVD	$0, R7
    20		MOVD	trap+0(FP), R1	// syscall entry
    21		SYSCALL
    22		MOVD	$0xfffffffffffff001, R8
    23		CMPUBLT	R2, R8, ok
    24		MOVD	$-1, r1+32(FP)
    25		MOVD	$0, r2+40(FP)
    26		NEG	R2, R2
    27		MOVD	R2, err+48(FP)	// errno
    28		BL	runtime·exitsyscall(SB)
    29		RET
    30	ok:
    31		MOVD	R2, r1+32(FP)
    32		MOVD	R3, r2+40(FP)
    33		MOVD	$0, err+48(FP)	// errno
    34		BL	runtime·exitsyscall(SB)
    35		RET
    36	
    37	// func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
    38	TEXT ·Syscall6(SB),NOSPLIT,$0-80
    39		BL	runtime·entersyscall(SB)
    40		MOVD	a1+8(FP), R2
    41		MOVD	a2+16(FP), R3
    42		MOVD	a3+24(FP), R4
    43		MOVD	a4+32(FP), R5
    44		MOVD	a5+40(FP), R6
    45		MOVD	a6+48(FP), R7
    46		MOVD	trap+0(FP), R1	// syscall entry
    47		SYSCALL
    48		MOVD	$0xfffffffffffff001, R8
    49		CMPUBLT	R2, R8, ok6
    50		MOVD	$-1, r1+56(FP)
    51		MOVD	$0, r2+64(FP)
    52		NEG	R2, R2
    53		MOVD	R2, err+72(FP)	// errno
    54		BL	runtime·exitsyscall(SB)
    55		RET
    56	ok6:
    57		MOVD	R2, r1+56(FP)
    58		MOVD	R3, r2+64(FP)
    59		MOVD	$0, err+72(FP)	// errno
    60		BL	runtime·exitsyscall(SB)
    61		RET
    62	
    63	// func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
    64	TEXT ·RawSyscall(SB),NOSPLIT,$0-56
    65		MOVD	a1+8(FP), R2
    66		MOVD	a2+16(FP), R3
    67		MOVD	a3+24(FP), R4
    68		MOVD	$0, R5
    69		MOVD	$0, R6
    70		MOVD	$0, R7
    71		MOVD	trap+0(FP), R1	// syscall entry
    72		SYSCALL
    73		MOVD	$0xfffffffffffff001, R8
    74		CMPUBLT	R2, R8, ok1
    75		MOVD	$-1, r1+32(FP)
    76		MOVD	$0, r2+40(FP)
    77		NEG	R2, R2
    78		MOVD	R2, err+48(FP)	// errno
    79		RET
    80	ok1:
    81		MOVD	R2, r1+32(FP)
    82		MOVD	R3, r2+40(FP)
    83		MOVD	$0, err+48(FP)	// errno
    84		RET
    85	
    86	// func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
    87	TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
    88		MOVD	a1+8(FP), R2
    89		MOVD	a2+16(FP), R3
    90		MOVD	a3+24(FP), R4
    91		MOVD	a4+32(FP), R5
    92		MOVD	a5+40(FP), R6
    93		MOVD	a6+48(FP), R7
    94		MOVD	trap+0(FP), R1	// syscall entry
    95		SYSCALL
    96		MOVD	$0xfffffffffffff001, R8
    97		CMPUBLT	R2, R8, ok2
    98		MOVD	$-1, r1+56(FP)
    99		MOVD	$0, r2+64(FP)
   100		NEG	R2, R2
   101		MOVD	R2, err+72(FP)	// errno
   102		RET
   103	ok2:
   104		MOVD	R2, r1+56(FP)
   105		MOVD	R3, r2+64(FP)
   106		MOVD	$0, err+72(FP)	// errno
   107		RET
   108	
   109	// func rawVforkSyscall(trap, a1 uintptr) (r1, err uintptr)
   110	TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-32
   111		MOVD	$0, R2
   112		MOVD	a1+8(FP), R3
   113		MOVD	$0, R4
   114		MOVD	$0, R5
   115		MOVD	$0, R6
   116		MOVD	$0, R7
   117		MOVD	trap+0(FP), R1	// syscall entry
   118		SYSCALL
   119		MOVD	$0xfffffffffffff001, R8
   120		CMPUBLT	R2, R8, ok2
   121		MOVD	$-1, r1+16(FP)
   122		NEG	R2, R2
   123		MOVD	R2, err+24(FP)	// errno
   124		RET
   125	ok2:
   126		MOVD	R2, r1+16(FP)
   127		MOVD	$0, err+24(FP)	// errno
   128		RET
   129	
   130	// func rawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
   131	TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
   132		MOVD	a1+8(FP), R2
   133		MOVD	a2+16(FP), R3
   134		MOVD	a3+24(FP), R4
   135		MOVD	$0, R5
   136		MOVD	$0, R6
   137		MOVD	$0, R7
   138		MOVD	trap+0(FP), R1	// syscall entry
   139		SYSCALL
   140		MOVD	R2, r1+32(FP)
   141		MOVD	R3, r2+40(FP)
   142		RET
   143	
   144	#define SYS_SOCKETCALL 102	/* from zsysnum_linux_s390x.go */
   145	
   146	// func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
   147	// Kernel interface gets call sub-number and pointer to a0.
   148	TEXT ·socketcall(SB),NOSPLIT,$0-72
   149		BL	runtime·entersyscall(SB)
   150		MOVD	$SYS_SOCKETCALL, R1	// syscall entry
   151		MOVD	call+0(FP), R2		// socket call number
   152		MOVD	$a0+8(FP), R3		// pointer to call arguments
   153		MOVD	$0, R4
   154		MOVD	$0, R5
   155		MOVD	$0, R6
   156		MOVD	$0, R7
   157		SYSCALL
   158		MOVD	$0xfffffffffffff001, R8
   159		CMPUBLT	R2, R8, oksock
   160		MOVD	$-1, n+56(FP)
   161		NEG	R2, R2
   162		MOVD	R2, err+64(FP)
   163		BL	runtime·exitsyscall(SB)
   164		RET
   165	oksock:
   166		MOVD	R2, n+56(FP)
   167		MOVD	$0, err+64(FP)
   168		CALL	runtime·exitsyscall(SB)
   169		RET
   170	
   171	// func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
   172	// Kernel interface gets call sub-number and pointer to a0.
   173	TEXT ·rawsocketcall(SB),NOSPLIT,$0-72
   174		MOVD	$SYS_SOCKETCALL, R1	// syscall entry
   175		MOVD	call+0(FP), R2		// socket call number
   176		MOVD	$a0+8(FP), R3		// pointer to call arguments
   177		MOVD	$0, R4
   178		MOVD	$0, R5
   179		MOVD	$0, R6
   180		MOVD	$0, R7
   181		SYSCALL
   182		MOVD	$0xfffffffffffff001, R8
   183		CMPUBLT	R2, R8, oksock1
   184		MOVD	$-1, n+56(FP)
   185		NEG	R2, R2
   186		MOVD	R2, err+64(FP)
   187		RET
   188	oksock1:
   189		MOVD	R2, n+56(FP)
   190		MOVD	$0, err+64(FP)
   191		RET

View as plain text