github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/src/runtime/memmove_ppc64x.s (about)

     1  // Copyright 2014 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  // +build ppc64 ppc64le
     6  
     7  #include "textflag.h"
     8  
     9  // void runtime·memmove(void*, void*, uintptr)
    10  TEXT runtime·memmove(SB), NOSPLIT, $-8-24
    11  	MOVD	to+0(FP), R3
    12  	MOVD	from+8(FP), R4
    13  	MOVD	n+16(FP), R5
    14  	CMP	R5, $0
    15  	BNE	check
    16  	RETURN
    17  
    18  check:
    19  	CMP	R3, R4
    20  	BGT	backward
    21  
    22  	SUB	$1, R3
    23  	ADD	R3, R5
    24  	SUB	$1, R4
    25  loop:
    26  	MOVBU	1(R4), R6
    27  	MOVBU	R6, 1(R3)
    28  	CMP	R3, R5
    29  	BNE	loop
    30  	RETURN
    31  
    32  backward:
    33  	ADD	R5, R4
    34  	ADD	R3, R5
    35  loop1:
    36  	MOVBU	-1(R4), R6
    37  	MOVBU	R6, -1(R5)
    38  	CMP	R3, R5
    39  	BNE	loop1
    40  	RETURN