/
/
opt
/
golang
/
1.22.0
/
src
/
runtime
Server: in-mum-web1112.main-hosting.eu (62.72.28.111)
You: 216.73.216.137
PHP 8.3.16
Dir:
/opt/golang/1.22.0/src/runtime
Edit:
/opt/golang/1.22.0/src/runtime/memmove_mips64x.s
// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build mips64 || mips64le #include "textflag.h" // See memmove Go doc for important implementation constraints. // func memmove(to, from unsafe.Pointer, n uintptr) TEXT runtime·memmove(SB), NOSPLIT|NOFRAME, $0-24 MOVV to+0(FP), R1 MOVV from+8(FP), R2 MOVV n+16(FP), R3 BNE R3, check RET check: SGTU R1, R2, R4 BNE R4, backward ADDV R1, R3, R6 // end pointer // if the two pointers are not of same alignments, do byte copying SUBVU R2, R1, R4 AND $7, R4 BNE R4, out // if less than 8 bytes, do byte copying SGTU $8, R3, R4 BNE R4, out // do one byte at a time until 8-aligned AND $7, R1, R5 BEQ R5, words MOVB (R2), R4 ADDV $1, R2 MOVB R4, (R1) ADDV $1, R1 JMP -6(PC) words: // do 8 bytes at a time if there is room ADDV $-7, R6, R3 // R3 is end pointer-7 SGTU R3, R1, R5 BEQ R5, out MOVV (R2), R4 ADDV $8, R2 MOVV R4, (R1) ADDV $8, R1 JMP -6(PC) out: BEQ R1, R6, done MOVB (R2), R4 ADDV $1, R2 MOVB R4, (R1) ADDV $1, R1 JMP -5(PC) done: RET backward: ADDV R3, R2 // from-end pointer ADDV R1, R3, R6 // to-end pointer // if the two pointers are not of same alignments, do byte copying SUBVU R6, R2, R4 AND $7, R4 BNE R4, out1 // if less than 8 bytes, do byte copying SGTU $8, R3, R4 BNE R4, out1 // do one byte at a time until 8-aligned AND $7, R6, R5 BEQ R5, words1 ADDV $-1, R2 MOVB (R2), R4 ADDV $-1, R6 MOVB R4, (R6) JMP -6(PC) words1: // do 8 bytes at a time if there is room ADDV $7, R1, R3 // R3 is start pointer+7 SGTU R6, R3, R5 BEQ R5, out1 ADDV $-8, R2 MOVV (R2), R4 ADDV $-8, R6 MOVV R4, (R6) JMP -6(PC) out1: BEQ R1, R6, done1 ADDV $-1, R2 MOVB (R2), R4 ADDV $-1, R6 MOVB R4, (R6) JMP -5(PC) done1: RET
Ukuran: 1.8 KB