...

Text file src/pkg/runtime/memclr_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	// func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
     8	TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT|NOFRAME,$0-16
     9		MOVD	ptr+0(FP), R4
    10		MOVD	n+8(FP), R5
    11	
    12	start:
    13		CMPBLE	R5, $3, clear0to3
    14		CMPBLE	R5, $7, clear4to7
    15		CMPBLE	R5, $11, clear8to11
    16		CMPBLE	R5, $15, clear12to15
    17		CMP	R5, $32
    18		BGE	clearmt32
    19		MOVD	$0, 0(R4)
    20		MOVD	$0, 8(R4)
    21		ADD	$16, R4
    22		SUB	$16, R5
    23		BR	start
    24	
    25	clear0to3:
    26		CMPBEQ	R5, $0, done
    27		CMPBNE	R5, $1, clear2
    28		MOVB	$0, 0(R4)
    29		RET
    30	clear2:
    31		CMPBNE	R5, $2, clear3
    32		MOVH	$0, 0(R4)
    33		RET
    34	clear3:
    35		MOVH	$0, 0(R4)
    36		MOVB	$0, 2(R4)
    37		RET
    38	
    39	clear4to7:
    40		CMPBNE	R5, $4, clear5
    41		MOVW	$0, 0(R4)
    42		RET
    43	clear5:
    44		CMPBNE	R5, $5, clear6
    45		MOVW	$0, 0(R4)
    46		MOVB	$0, 4(R4)
    47		RET
    48	clear6:
    49		CMPBNE	R5, $6, clear7
    50		MOVW	$0, 0(R4)
    51		MOVH	$0, 4(R4)
    52		RET
    53	clear7:
    54		MOVW	$0, 0(R4)
    55		MOVH	$0, 4(R4)
    56		MOVB	$0, 6(R4)
    57		RET
    58	
    59	clear8to11:
    60		CMPBNE	R5, $8, clear9
    61		MOVD	$0, 0(R4)
    62		RET
    63	clear9:
    64		CMPBNE	R5, $9, clear10
    65		MOVD	$0, 0(R4)
    66		MOVB	$0, 8(R4)
    67		RET
    68	clear10:
    69		CMPBNE	R5, $10, clear11
    70		MOVD	$0, 0(R4)
    71		MOVH	$0, 8(R4)
    72		RET
    73	clear11:
    74		MOVD	$0, 0(R4)
    75		MOVH	$0, 8(R4)
    76		MOVB	$0, 10(R4)
    77		RET
    78	
    79	clear12to15:
    80		CMPBNE	R5, $12, clear13
    81		MOVD	$0, 0(R4)
    82		MOVW	$0, 8(R4)
    83		RET
    84	clear13:
    85		CMPBNE	R5, $13, clear14
    86		MOVD	$0, 0(R4)
    87		MOVW	$0, 8(R4)
    88		MOVB	$0, 12(R4)
    89		RET
    90	clear14:
    91		CMPBNE	R5, $14, clear15
    92		MOVD	$0, 0(R4)
    93		MOVW	$0, 8(R4)
    94		MOVH	$0, 12(R4)
    95		RET
    96	clear15:
    97		MOVD	$0, 0(R4)
    98		MOVW	$0, 8(R4)
    99		MOVH	$0, 12(R4)
   100		MOVB	$0, 14(R4)
   101		RET
   102	
   103	clearmt32:
   104		CMP	R5, $256
   105		BLT	clearlt256
   106		XC	$256, 0(R4), 0(R4)
   107		ADD	$256, R4
   108		ADD	$-256, R5
   109		BR	clearmt32
   110	clearlt256:
   111		CMPBEQ	R5, $0, done
   112		ADD	$-1, R5
   113		EXRL	$memclr_exrl_xc<>(SB), R5
   114	done:
   115		RET
   116	
   117	// DO NOT CALL - target for exrl (execute relative long) instruction.
   118	TEXT memclr_exrl_xc<>(SB),NOSPLIT|NOFRAME,$0-0
   119		XC	$1, 0(R4), 0(R4)
   120		MOVD	$0, 0(R0)
   121		RET
   122	

View as plain text