...

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

View as plain text