...

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
    14start:
    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
    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
   105clearmt32:
   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
   112clearlt256:
   113	CMPBEQ	R5, $0, done
   114	ADD	$-1, R5
   115	EXRL	$memclr_exrl_xc<>(SB), R5
   116done:
   117	RET
   118
   119// DO NOT CALL - target for exrl (execute relative long) instruction.
   120TEXT memclr_exrl_xc<>(SB),NOSPLIT|NOFRAME,$0-0
   121	XC	$1, 0(R4), 0(R4)
   122	MOVD	$0, 0(R0)
   123	RET
   124

View as plain text