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  	CMPBGE	R5, $32, clearge32
    15  
    16  start:
    17  	CMPBLE	R5, $3, clear0to3
    18  	CMPBLE	R5, $7, clear4to7
    19  	CMPBLE	R5, $11, clear8to11
    20  	CMPBLE	R5, $15, clear12to15
    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  clearge32:
   106  	CMP	R5, $4096
   107  	BLT	clear256Bto4KB
   108  
   109  // For size >= 4KB, XC is loop unrolled 16 times (4KB = 256B * 16)
   110  clearge4KB:
   111  	XC	$256, 0(R4), 0(R4)
   112  	ADD	$256, R4
   113  	ADD	$-256, R5
   114  	XC	$256, 0(R4), 0(R4)
   115  	ADD	$256, R4
   116  	ADD	$-256, R5
   117  	XC	$256, 0(R4), 0(R4)
   118  	ADD	$256, R4
   119  	ADD	$-256, R5
   120  	XC	$256, 0(R4), 0(R4)
   121  	ADD	$256, R4
   122  	ADD	$-256, R5
   123  	XC	$256, 0(R4), 0(R4)
   124  	ADD	$256, R4
   125  	ADD	$-256, R5
   126  	XC	$256, 0(R4), 0(R4)
   127  	ADD	$256, R4
   128  	ADD	$-256, R5
   129  	XC	$256, 0(R4), 0(R4)
   130  	ADD	$256, R4
   131  	ADD	$-256, R5
   132  	XC	$256, 0(R4), 0(R4)
   133  	ADD	$256, R4
   134  	ADD	$-256, R5
   135  	XC	$256, 0(R4), 0(R4)
   136  	ADD	$256, R4
   137  	ADD	$-256, R5
   138  	XC	$256, 0(R4), 0(R4)
   139  	ADD	$256, R4
   140  	ADD	$-256, R5
   141  	XC	$256, 0(R4), 0(R4)
   142  	ADD	$256, R4
   143  	ADD	$-256, R5
   144  	XC	$256, 0(R4), 0(R4)
   145  	ADD	$256, R4
   146  	ADD	$-256, R5
   147  	XC	$256, 0(R4), 0(R4)
   148  	ADD	$256, R4
   149  	ADD	$-256, R5
   150  	XC	$256, 0(R4), 0(R4)
   151  	ADD	$256, R4
   152  	ADD	$-256, R5
   153  	XC	$256, 0(R4), 0(R4)
   154  	ADD	$256, R4
   155  	ADD	$-256, R5
   156  	XC	$256, 0(R4), 0(R4)
   157  	ADD	$256, R4
   158  	ADD	$-256, R5
   159  	CMP	R5, $4096
   160  	BGE	clearge4KB
   161  
   162  clear256Bto4KB:
   163  	CMP	R5, $256
   164  	BLT	clear32to255
   165  	XC	$256, 0(R4), 0(R4)
   166  	ADD	$256, R4
   167  	ADD	$-256, R5
   168  	BR	clear256Bto4KB
   169  
   170  clear32to255:
   171  	CMPBEQ	R5, $0, done
   172  	CMPBLT	R5, $32, start
   173  	CMPBEQ	R5, $32, clear32
   174  	CMPBLE	R5, $64, clear33to64
   175  	CMP	R5, $128
   176  	BLE	clear65to128
   177  	CMP	R5, $255
   178  	BLE	clear129to255
   179  
   180  clear32:
   181  	VZERO	V1
   182  	VST	V1, 0(R4)
   183  	VST 	V1, 16(R4)
   184  	RET
   185  
   186  clear33to64:
   187  	VZERO	V1
   188  	VST	V1, 0(R4)
   189  	VST	V1, 16(R4)
   190  	ADD	$-32, R5
   191  	VST	V1, 0(R4)(R5)
   192  	VST	V1, 16(R4)(R5)
   193  	RET
   194  
   195  clear65to128:
   196  	VZERO	V1
   197  	VST	V1, 0(R4)
   198  	VST	V1, 16(R4)
   199  	VST	V1, 32(R4)
   200  	VST	V1, 48(R4)
   201  	ADD	$-64, R5
   202  	VST	V1, 0(R4)(R5)
   203  	VST	V1, 16(R4)(R5)
   204  	VST	V1, 32(R4)(R5)
   205  	VST	V1, 48(R4)(R5)
   206  	RET
   207  
   208  clear129to255:
   209  	VZERO	V1
   210  	VST	V1, 0(R4)
   211  	VST	V1, 16(R4)
   212  	VST	V1, 32(R4)
   213  	VST	V1, 48(R4)
   214  	VST	V1, 64(R4)
   215  	VST	V1, 80(R4)
   216  	VST	V1, 96(R4)
   217  	VST	V1, 112(R4)
   218  	ADD	$-128, R5
   219  	VST	V1, 0(R4)(R5)
   220  	VST	V1, 16(R4)(R5)
   221  	VST	V1, 32(R4)(R5)
   222  	VST	V1, 48(R4)(R5)
   223  	VST	V1, 64(R4)(R5)
   224  	VST	V1, 80(R4)(R5)
   225  	VST	V1, 96(R4)(R5)
   226  	VST	V1, 112(R4)(R5)
   227  	RET
   228  
   229  done:
   230  	RET
   231  
   232  

View as plain text