...
▽

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

View as plain text