| // 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. |
| |
| #include "textflag.h" |
| |
| // void runtime·memclrNoHeapPointers(void*, uintptr) |
| TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT,$0-16 |
| MOVD ptr+0(FP), R3 |
| MOVD n+8(FP), R4 |
| // TODO(mwhudson): this is written this way to avoid tickling |
| // warnings from addpool when written as AND $7, R4, R6 (see |
| // https://golang.org/issue/12708) |
| AND $~7, R4, R5 // R5 is N&~7 |
| SUB R5, R4, R6 // R6 is N&7 |
| |
| CMP $0, R5 |
| BEQ nowords |
| |
| ADD R3, R5, R5 |
| |
| wordloop: // TODO: Optimize for unaligned ptr. |
| MOVD.P $0, 8(R3) |
| CMP R3, R5 |
| BNE wordloop |
| nowords: |
| CMP $0, R6 |
| BEQ done |
| |
| ADD R3, R6, R6 |
| |
| byteloop: |
| MOVBU.P $0, 1(R3) |
| CMP R3, R6 |
| BNE byteloop |
| done: |
| RET |