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

View as plain text