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<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-16
    11  	MOVD	R2, R4
    12  	MOVD	R3, R5
    13  	CMPBGE	R5, $32, clearge32
    14  
    15  start:
    16  	CMPBLE	R5, $3, clear0to3
    17  	CMPBLE	R5, $7, clear4to7
    18  	CMPBLE	R5, $11, clear8to11
    19  	CMPBLE	R5, $15, clear12to15
    20  	MOVD	$0, 0(R4)
    21  	MOVD	$0, 8(R4)
    22  	ADD	$16, R4
    23  	SUB	$16, R5
    24  	BR	start
    25  
    26  clear0to3:
    27  	CMPBEQ	R5, $0, done
    28  	CMPBNE	R5, $1, clear2
    29  	MOVB	$0, 0(R4)
    30  	RET
    31  clear2:
    32  	CMPBNE	R5, $2, clear3
    33  	MOVH	$0, 0(R4)
    34  	RET
    35  clear3:
    36  	MOVH	$0, 0(R4)
    37  	MOVB	$0, 2(R4)
    38  	RET
    39  
    40  clear4to7:
    41  	CMPBNE	R5, $4, clear5
    42  	MOVW	$0, 0(R4)
    43  	RET
    44  clear5:
    45  	CMPBNE	R5, $5, clear6
    46  	MOVW	$0, 0(R4)
    47  	MOVB	$0, 4(R4)
    48  	RET
    49  clear6:
    50  	CMPBNE	R5, $6, clear7
    51  	MOVW	$0, 0(R4)
    52  	MOVH	$0, 4(R4)
    53  	RET
    54  clear7:
    55  	MOVW	$0, 0(R4)
    56  	MOVH	$0, 4(R4)
    57  	MOVB	$0, 6(R4)
    58  	RET
    59  
    60  clear8to11:
    61  	CMPBNE	R5, $8, clear9
    62  	MOVD	$0, 0(R4)
    63  	RET
    64  clear9:
    65  	CMPBNE	R5, $9, clear10
    66  	MOVD	$0, 0(R4)
    67  	MOVB	$0, 8(R4)
    68  	RET
    69  clear10:
    70  	CMPBNE	R5, $10, clear11
    71  	MOVD	$0, 0(R4)
    72  	MOVH	$0, 8(R4)
    73  	RET
    74  clear11:
    75  	MOVD	$0, 0(R4)
    76  	MOVH	$0, 8(R4)
    77  	MOVB	$0, 10(R4)
    78  	RET
    79  
    80  clear12to15:
    81  	CMPBNE	R5, $12, clear13
    82  	MOVD	$0, 0(R4)
    83  	MOVW	$0, 8(R4)
    84  	RET
    85  clear13:
    86  	CMPBNE	R5, $13, clear14
    87  	MOVD	$0, 0(R4)
    88  	MOVW	$0, 8(R4)
    89  	MOVB	$0, 12(R4)
    90  	RET
    91  clear14:
    92  	CMPBNE	R5, $14, clear15
    93  	MOVD	$0, 0(R4)
    94  	MOVW	$0, 8(R4)
    95  	MOVH	$0, 12(R4)
    96  	RET
    97  clear15:
    98  	MOVD	$0, 0(R4)
    99  	MOVW	$0, 8(R4)
   100  	MOVH	$0, 12(R4)
   101  	MOVB	$0, 14(R4)
   102  	RET
   103  
   104  clearge32:
   105  	CMP	R5, $4096
   106  	BLT	clear256Bto4KB
   107  
   108  // For size >= 4KB, XC is loop unrolled 16 times (4KB = 256B * 16)
   109  clearge4KB:
   110  	XC	$256, 0(R4), 0(R4)
   111  	XC	$256, 256(R4), 256(R4)
   112  	XC	$256, 512(R4), 512(R4)
   113  	XC	$256, 768(R4), 768(R4)
   114  	XC	$256, 1024(R4), 1024(R4)
   115  	XC	$256, 1280(R4), 1280(R4)
   116  	XC	$256, 1536(R4), 1536(R4)
   117  	XC	$256, 1792(R4), 1792(R4)
   118  	XC	$256, 2048(R4), 2048(R4)
   119  	XC	$256, 2304(R4), 2304(R4)
   120  	XC	$256, 2560(R4), 2560(R4)
   121  	XC	$256, 2816(R4), 2816(R4)
   122  	XC	$256, 3072(R4), 3072(R4)
   123  	XC	$256, 3328(R4), 3328(R4)
   124  	XC	$256, 3584(R4), 3584(R4)
   125  	XC	$256, 3840(R4), 3840(R4)
   126  	ADD	$4096, R4
   127  	ADD	$-4096, R5
   128  	CMP	R5, $4096
   129  	BGE	clearge4KB
   130  
   131  clear256Bto4KB:
   132  	CMP	R5, $256
   133  	BLT	clear32to255
   134  	XC	$256, 0(R4), 0(R4)
   135  	ADD	$256, R4
   136  	ADD	$-256, R5
   137  	BR	clear256Bto4KB
   138  
   139  clear32to255:
   140  	CMPBEQ	R5, $0, done
   141  	CMPBLT	R5, $32, start
   142  	CMPBEQ	R5, $32, clear32
   143  	CMPBLE	R5, $64, clear33to64
   144  	CMP	R5, $128
   145  	BLE	clear65to128
   146  	CMP	R5, $255
   147  	BLE	clear129to255
   148  
   149  clear32:
   150  	VZERO	V1
   151  	VST	V1, 0(R4)
   152  	VST	V1, 16(R4)
   153  	RET
   154  
   155  clear33to64:
   156  	VZERO	V1
   157  	VST	V1, 0(R4)
   158  	VST	V1, 16(R4)
   159  	ADD	$-32, R5
   160  	VST	V1, 0(R4)(R5)
   161  	VST	V1, 16(R4)(R5)
   162  	RET
   163  
   164  clear65to128:
   165  	VZERO	V1
   166  	VST	V1, 0(R4)
   167  	VST	V1, 16(R4)
   168  	VST	V1, 32(R4)
   169  	VST	V1, 48(R4)
   170  	ADD	$-64, R5
   171  	VST	V1, 0(R4)(R5)
   172  	VST	V1, 16(R4)(R5)
   173  	VST	V1, 32(R4)(R5)
   174  	VST	V1, 48(R4)(R5)
   175  	RET
   176  
   177  clear129to255:
   178  	VZERO	V1
   179  	VST	V1, 0(R4)
   180  	VST	V1, 16(R4)
   181  	VST	V1, 32(R4)
   182  	VST	V1, 48(R4)
   183  	VST	V1, 64(R4)
   184  	VST	V1, 80(R4)
   185  	VST	V1, 96(R4)
   186  	VST	V1, 112(R4)
   187  	ADD	$-128, R5
   188  	VST	V1, 0(R4)(R5)
   189  	VST	V1, 16(R4)(R5)
   190  	VST	V1, 32(R4)(R5)
   191  	VST	V1, 48(R4)(R5)
   192  	VST	V1, 64(R4)(R5)
   193  	VST	V1, 80(R4)(R5)
   194  	VST	V1, 96(R4)(R5)
   195  	VST	V1, 112(R4)(R5)
   196  	RET
   197  
   198  done:
   199  	RET
   200  
   201  

View as plain text