rsc.io/go@v0.0.0-20150416155037-e040fd465409/src/runtime/memmove_nacl_amd64p32.s (about)

     1  // Copyright 2013 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  TEXT runtime·memmove(SB), NOSPLIT, $0-12
     8  	MOVL	to+0(FP), DI
     9  	MOVL	from+4(FP), SI
    10  	MOVL	n+8(FP), BX
    11  
    12  	CMPL	SI, DI
    13  	JLS back
    14  
    15  forward:
    16  	MOVL	BX, CX
    17  	SHRL	$3, CX
    18  	ANDL	$7, BX
    19  	REP; MOVSQ
    20  	MOVL	BX, CX
    21  	REP; MOVSB
    22  	RET
    23  
    24  back:
    25  	MOVL	SI, CX
    26  	ADDL	BX, CX
    27  	CMPL	CX, DI
    28  	JLS forward
    29  
    30  	ADDL	BX, DI
    31  	ADDL	BX, SI
    32  	STD
    33  	
    34  	MOVL	BX, CX
    35  	SHRL	$3, CX
    36  	ANDL	$7, BX
    37  	SUBL	$8, DI
    38  	SUBL	$8, SI
    39  	REP; MOVSQ
    40  	ADDL	$7, DI
    41  	ADDL	$7, SI
    42  	MOVL	BX, CX
    43  	REP; MOVSB
    44  	CLD
    45  
    46  	RET