...

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

View as plain text