...
Run Format

Text file src/runtime/memclr_s390x.s

Documentation: runtime

     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)
    10TEXT 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
    16start:
    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
    27clear0to3:
    28	CMPBEQ	R5, $0, done
    29	CMPBNE	R5, $1, clear2
    30	MOVB	$0, 0(R4)
    31	RET
    32clear2:
    33	CMPBNE	R5, $2, clear3
    34	MOVH	$0, 0(R4)
    35	RET
    36clear3:
    37	MOVH	$0, 0(R4)
    38	MOVB	$0, 2(R4)
    39	RET
    40
    41clear4to7:
    42	CMPBNE	R5, $4, clear5
    43	MOVW	$0, 0(R4)
    44	RET
    45clear5:
    46	CMPBNE	R5, $5, clear6
    47	MOVW	$0, 0(R4)
    48	MOVB	$0, 4(R4)
    49	RET
    50clear6:
    51	CMPBNE	R5, $6, clear7
    52	MOVW	$0, 0(R4)
    53	MOVH	$0, 4(R4)
    54	RET
    55clear7:
    56	MOVW	$0, 0(R4)
    57	MOVH	$0, 4(R4)
    58	MOVB	$0, 6(R4)
    59	RET
    60
    61clear8to11:
    62	CMPBNE	R5, $8, clear9
    63	MOVD	$0, 0(R4)
    64	RET
    65clear9:
    66	CMPBNE	R5, $9, clear10
    67	MOVD	$0, 0(R4)
    68	MOVB	$0, 8(R4)
    69	RET
    70clear10:
    71	CMPBNE	R5, $10, clear11
    72	MOVD	$0, 0(R4)
    73	MOVH	$0, 8(R4)
    74	RET
    75clear11:
    76	MOVD	$0, 0(R4)
    77	MOVH	$0, 8(R4)
    78	MOVB	$0, 10(R4)
    79	RET
    80
    81clear12to15:
    82	CMPBNE	R5, $12, clear13
    83	MOVD	$0, 0(R4)
    84	MOVW	$0, 8(R4)
    85	RET
    86clear13:
    87	CMPBNE	R5, $13, clear14
    88	MOVD	$0, 0(R4)
    89	MOVW	$0, 8(R4)
    90	MOVB	$0, 12(R4)
    91	RET
    92clear14:
    93	CMPBNE	R5, $14, clear15
    94	MOVD	$0, 0(R4)
    95	MOVW	$0, 8(R4)
    96	MOVH	$0, 12(R4)
    97	RET
    98clear15:
    99	MOVD	$0, 0(R4)
   100	MOVW	$0, 8(R4)
   101	MOVH	$0, 12(R4)
   102	MOVB	$0, 14(R4)
   103	RET
   104
   105clearge32:
   106	CMP	R5, $4096
   107	BLT	clear256Bto4KB
   108
   109// For size >= 4KB, XC is loop unrolled 16 times (4KB = 256B * 16)
   110clearge4KB:
   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
   162clear256Bto4KB:
   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
   170clear32to255:
   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
   180clear32:
   181	VZERO	V1
   182	VST	V1, 0(R4)
   183	VST 	V1, 16(R4)
   184	RET
   185
   186clear33to64:
   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
   195clear65to128:
   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
   208clear129to255:
   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
   229done:
   230	RET
   231

View as plain text