| // 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 |
| SRADCC $3, R4, R6 // R6 is the number of words to zero |
| BEQ bytes |
| |
| SUB $8, R3 |
| MOVD R6, CTR |
| MOVDU R0, 8(R3) |
| BC 25, 0, -1(PC) // bdnz+ $-4 |
| ADD $8, R3 |
| |
| bytes: |
| ANDCC $7, R4, R7 // R7 is the number of bytes to zero |
| BEQ done |
| SUB $1, R3 |
| MOVD R7, CTR |
| MOVBU R0, 1(R3) |
| BC 25, 0, -1(PC) // bdnz+ $-4 |
| |
| done: |
| RET |