Black Lives Matter. Support the Equal Justice Initiative.

Text file src/runtime/memclr_mipsx.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  //go:build mips || mipsle
     6  // +build mips mipsle
     7  
     8  #include "textflag.h"
     9  
    10  #ifdef GOARCH_mips
    11  #define MOVWHI  MOVWL
    12  #define MOVWLO  MOVWR
    13  #else
    14  #define MOVWHI  MOVWR
    15  #define MOVWLO  MOVWL
    16  #endif
    17  
    18  // See memclrNoHeapPointers Go doc for important implementation constraints.
    19  
    20  // func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
    21  TEXT runtime¬∑memclrNoHeapPointers(SB),NOSPLIT,$0-8
    22  	MOVW	n+4(FP), R2
    23  	MOVW	ptr+0(FP), R1
    24  
    25  	SGTU	$4, R2, R3
    26  	ADDU	R2, R1, R4
    27  	BNE	R3, small_zero
    28  
    29  ptr_align:
    30  	AND	$3, R1, R3
    31  	BEQ	R3, setup
    32  	SUBU	R1, R0, R3
    33  	AND	$3, R3		// R3 contains number of bytes needed to align ptr
    34  	MOVWHI	R0, 0(R1)	// MOVWHI will write zeros up to next word boundary
    35  	SUBU	R3, R2
    36  	ADDU	R3, R1
    37  
    38  setup:
    39  	AND	$31, R2, R6
    40  	AND	$3, R2, R5
    41  	SUBU	R6, R4, R6	// end pointer for 32-byte chunks
    42  	SUBU	R5, R4, R5	// end pointer for 4-byte chunks
    43  
    44  large:
    45  	BEQ	R1, R6, words
    46  	MOVW	R0, 0(R1)
    47  	MOVW	R0, 4(R1)
    48  	MOVW	R0, 8(R1)
    49  	MOVW	R0, 12(R1)
    50  	MOVW	R0, 16(R1)
    51  	MOVW	R0, 20(R1)
    52  	MOVW	R0, 24(R1)
    53  	MOVW	R0, 28(R1)
    54  	ADDU	$32, R1
    55  	JMP	large
    56  
    57  words:
    58  	BEQ	R1, R5, tail
    59  	MOVW	R0, 0(R1)
    60  	ADDU	$4, R1
    61  	JMP	words
    62  
    63  tail:
    64  	BEQ	R1, R4, ret
    65  	MOVWLO	R0, -1(R4)
    66  
    67  ret:
    68  	RET
    69  
    70  small_zero:
    71  	BEQ	R1, R4, ret
    72  	MOVB	R0, 0(R1)
    73  	ADDU	$1, R1
    74  	JMP	small_zero
    75  

View as plain text