// Copyright 2016 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 mips || mipsle

#include "textflag.h"

#ifdef GOARCH_mips
#define MOVWHI  MOVWL
#define MOVWLO  MOVWR
#else
#define MOVWHI  MOVWR
#define MOVWLO  MOVWL
#endif

// See memclrNoHeapPointers Go doc for important implementation constraints.

// func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT,$0-8
	MOVW	n+4(FP), R2
	MOVW	ptr+0(FP), R1

	SGTU	$4, R2, R3
	ADDU	R2, R1, R4
	BNE	R3, small_zero

ptr_align:
	AND	$3, R1, R3
	BEQ	R3, setup
	SUBU	R1, R0, R3
	AND	$3, R3		// R3 contains number of bytes needed to align ptr
	MOVWHI	R0, 0(R1)	// MOVWHI will write zeros up to next word boundary
	SUBU	R3, R2
	ADDU	R3, R1

setup:
	AND	$31, R2, R6
	AND	$3, R2, R5
	SUBU	R6, R4, R6	// end pointer for 32-byte chunks
	SUBU	R5, R4, R5	// end pointer for 4-byte chunks

large:
	BEQ	R1, R6, words
	MOVW	R0, 0(R1)
	MOVW	R0, 4(R1)
	MOVW	R0, 8(R1)
	MOVW	R0, 12(R1)
	MOVW	R0, 16(R1)
	MOVW	R0, 20(R1)
	MOVW	R0, 24(R1)
	MOVW	R0, 28(R1)
	ADDU	$32, R1
	JMP	large

words:
	BEQ	R1, R5, tail
	MOVW	R0, 0(R1)
	ADDU	$4, R1
	JMP	words

tail:
	BEQ	R1, R4, ret
	MOVWLO	R0, -1(R4)

ret:
	RET

small_zero:
	BEQ	R1, R4, ret
	MOVB	R0, 0(R1)
	ADDU	$1, R1
	JMP	small_zero
