// Copyright 2014 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.

// +build ppc64 ppc64le

#include "textflag.h"

// void runtime·memclr(void*, uintptr)
TEXT runtime·memclr(SB), NOSPLIT|NOFRAME, $0-16
	MOVD ptr+0(FP), R3
	MOVD n+8(FP), R4

	// Determine if there are doublewords to clear
check:
	ANDCC $7, R4, R5  // R5: leftover bytes to clear
	SRAD  $3, R4, R6  // R6: double words to clear
	CMP   R6, $0, CR1 // CR1[EQ] set if no double words

	BC     12, 6, nozerolarge // only single bytes
	MOVD   R6, CTR            // R6 = number of double words
	SRADCC $2, R6, R7         // 32 byte chunks?
	BNE    zero32setup

	// Clear double words

zero8:
	MOVD R0, 0(R3)    // double word
	ADD  $8, R3
	BC   16, 0, zero8 // dec ctr, br zero8 if ctr not 0
	BR   nozerolarge  // handle remainder

	// Prepare to clear 32 bytes at a time.

zero32setup:
	DCBTST (R3)    // prepare data cache
	MOVD   R7, CTR // number of 32 byte chunks

zero32:
	MOVD    R0, 0(R3)       // clear 4 double words
	MOVD    R0, 8(R3)
	MOVD    R0, 16(R3)
	MOVD    R0, 24(R3)
	ADD     $32, R3
	BC      16, 0, zero32   // dec ctr, br zero32 if ctr not 0
	RLDCLCC $61, R4, $3, R6 // remaining doublewords
	BEQ     nozerolarge
	MOVD    R6, CTR         // set up the CTR for doublewords
	BR      zero8

nozerolarge:
	CMP R5, $0   // any remaining bytes
	BC  4, 1, LR // ble lr

zerotail:
	MOVD R5, CTR // set up to clear tail bytes

zerotailloop:
	MOVB R0, 0(R3)           // clear single bytes
	ADD  $1, R3
	BC   16, 0, zerotailloop // dec ctr, br zerotailloop if ctr not 0
	RET
