...

Text file src/runtime/memmove_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 memmove Go doc for important implementation constraints.
     8
     9// func memmove(to, from unsafe.Pointer, n uintptr)
    10TEXT runtime·memmove(SB),NOSPLIT|NOFRAME,$0-24
    11	MOVD	to+0(FP), R6
    12	MOVD	from+8(FP), R4
    13	MOVD	n+16(FP), R5
    14
    15	CMPBEQ	R6, R4, done
    16
    17start:
    18	CMPBLE	R5, $3, move0to3
    19	CMPBLE	R5, $7, move4to7
    20	CMPBLE	R5, $11, move8to11
    21	CMPBLE	R5, $15, move12to15
    22	CMPBNE	R5, $16, movemt16
    23	MOVD	0(R4), R7
    24	MOVD	8(R4), R8
    25	MOVD	R7, 0(R6)
    26	MOVD	R8, 8(R6)
    27	RET
    28
    29movemt16:
    30	CMPBGT	R4, R6, forwards
    31	ADD	R5, R4, R7
    32	CMPBLE	R7, R6, forwards
    33	ADD	R5, R6, R8
    34backwards:
    35	MOVD	-8(R7), R3
    36	MOVD	R3, -8(R8)
    37	MOVD	-16(R7), R3
    38	MOVD	R3, -16(R8)
    39	ADD	$-16, R5
    40	ADD	$-16, R7
    41	ADD	$-16, R8
    42	CMP	R5, $16
    43	BGE	backwards
    44	BR	start
    45
    46forwards:
    47	CMPBGT	R5, $64, forwards_fast
    48	MOVD	0(R4), R3
    49	MOVD	R3, 0(R6)
    50	MOVD	8(R4), R3
    51	MOVD	R3, 8(R6)
    52	ADD	$16, R4
    53	ADD	$16, R6
    54	ADD	$-16, R5
    55	CMP	R5, $16
    56	BGE	forwards
    57	BR	start
    58
    59forwards_fast:
    60	CMP	R5, $256
    61	BLE	forwards_small
    62	MVC	$256, 0(R4), 0(R6)
    63	ADD	$256, R4
    64	ADD	$256, R6
    65	ADD	$-256, R5
    66	BR	forwards_fast
    67
    68forwards_small:
    69	CMPBEQ	R5, $0, done
    70	ADD	$-1, R5
    71	EXRL	$memmove_exrl_mvc<>(SB), R5
    72	RET
    73
    74move0to3:
    75	CMPBEQ	R5, $0, done
    76move1:
    77	CMPBNE	R5, $1, move2
    78	MOVB	0(R4), R3
    79	MOVB	R3, 0(R6)
    80	RET
    81move2:
    82	CMPBNE	R5, $2, move3
    83	MOVH	0(R4), R3
    84	MOVH	R3, 0(R6)
    85	RET
    86move3:
    87	MOVH	0(R4), R3
    88	MOVB	2(R4), R7
    89	MOVH	R3, 0(R6)
    90	MOVB	R7, 2(R6)
    91	RET
    92
    93move4to7:
    94	CMPBNE	R5, $4, move5
    95	MOVW	0(R4), R3
    96	MOVW	R3, 0(R6)
    97	RET
    98move5:
    99	CMPBNE	R5, $5, move6
   100	MOVW	0(R4), R3
   101	MOVB	4(R4), R7
   102	MOVW	R3, 0(R6)
   103	MOVB	R7, 4(R6)
   104	RET
   105move6:
   106	CMPBNE	R5, $6, move7
   107	MOVW	0(R4), R3
   108	MOVH	4(R4), R7
   109	MOVW	R3, 0(R6)
   110	MOVH	R7, 4(R6)
   111	RET
   112move7:
   113	MOVW	0(R4), R3
   114	MOVH	4(R4), R7
   115	MOVB	6(R4), R8
   116	MOVW	R3, 0(R6)
   117	MOVH	R7, 4(R6)
   118	MOVB	R8, 6(R6)
   119	RET
   120
   121move8to11:
   122	CMPBNE	R5, $8, move9
   123	MOVD	0(R4), R3
   124	MOVD	R3, 0(R6)
   125	RET
   126move9:
   127	CMPBNE	R5, $9, move10
   128	MOVD	0(R4), R3
   129	MOVB	8(R4), R7
   130	MOVD	R3, 0(R6)
   131	MOVB	R7, 8(R6)
   132	RET
   133move10:
   134	CMPBNE	R5, $10, move11
   135	MOVD	0(R4), R3
   136	MOVH	8(R4), R7
   137	MOVD	R3, 0(R6)
   138	MOVH	R7, 8(R6)
   139	RET
   140move11:
   141	MOVD	0(R4), R3
   142	MOVH	8(R4), R7
   143	MOVB	10(R4), R8
   144	MOVD	R3, 0(R6)
   145	MOVH	R7, 8(R6)
   146	MOVB	R8, 10(R6)
   147	RET
   148
   149move12to15:
   150	CMPBNE	R5, $12, move13
   151	MOVD	0(R4), R3
   152	MOVW	8(R4), R7
   153	MOVD	R3, 0(R6)
   154	MOVW	R7, 8(R6)
   155	RET
   156move13:
   157	CMPBNE	R5, $13, move14
   158	MOVD	0(R4), R3
   159	MOVW	8(R4), R7
   160	MOVB	12(R4), R8
   161	MOVD	R3, 0(R6)
   162	MOVW	R7, 8(R6)
   163	MOVB	R8, 12(R6)
   164	RET
   165move14:
   166	CMPBNE	R5, $14, move15
   167	MOVD	0(R4), R3
   168	MOVW	8(R4), R7
   169	MOVH	12(R4), R8
   170	MOVD	R3, 0(R6)
   171	MOVW	R7, 8(R6)
   172	MOVH	R8, 12(R6)
   173	RET
   174move15:
   175	MOVD	0(R4), R3
   176	MOVW	8(R4), R7
   177	MOVH	12(R4), R8
   178	MOVB	14(R4), R10
   179	MOVD	R3, 0(R6)
   180	MOVW	R7, 8(R6)
   181	MOVH	R8, 12(R6)
   182	MOVB	R10, 14(R6)
   183done:
   184	RET
   185
   186// DO NOT CALL - target for exrl (execute relative long) instruction.
   187TEXT memmove_exrl_mvc<>(SB),NOSPLIT|NOFRAME,$0-0
   188	MVC	$1, 0(R4), 0(R6)
   189	MOVD	R0, 0(R0)
   190	RET
   191

View as plain text