github.com/mtsmfm/go/src@v0.0.0-20221020090648-44bdcb9f8fde/runtime/memclr_riscv64.s (about) 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 #include "textflag.h" 6 7 // See memclrNoHeapPointers Go doc for important implementation constraints. 8 9 // void runtime·memclrNoHeapPointers(void*, uintptr) 10 TEXT runtime·memclrNoHeapPointers<ABIInternal>(SB),NOSPLIT,$0-16 11 #ifndef GOEXPERIMENT_regabiargs 12 MOV ptr+0(FP), X10 13 MOV n+8(FP), X11 14 #endif 15 16 // If less than 8 bytes, do single byte zeroing. 17 MOV $8, X9 18 BLT X11, X9, check4 19 20 // Check alignment 21 AND $3, X10, X5 22 BEQZ X5, aligned 23 24 // Zero one byte at a time until we reach 8 byte alignment. 25 SUB X5, X11, X11 26 align: 27 ADD $-1, X5 28 MOVB ZERO, 0(X10) 29 ADD $1, X10 30 BNEZ X5, align 31 32 aligned: 33 MOV $8, X9 34 BLT X11, X9, check4 35 MOV $16, X9 36 BLT X11, X9, zero8 37 MOV $32, X9 38 BLT X11, X9, zero16 39 MOV $64, X9 40 BLT X11, X9, zero32 41 loop64: 42 MOV ZERO, 0(X10) 43 MOV ZERO, 8(X10) 44 MOV ZERO, 16(X10) 45 MOV ZERO, 24(X10) 46 MOV ZERO, 32(X10) 47 MOV ZERO, 40(X10) 48 MOV ZERO, 48(X10) 49 MOV ZERO, 56(X10) 50 ADD $64, X10 51 ADD $-64, X11 52 BGE X11, X9, loop64 53 BEQZ X11, done 54 55 check32: 56 MOV $32, X9 57 BLT X11, X9, check16 58 zero32: 59 MOV ZERO, 0(X10) 60 MOV ZERO, 8(X10) 61 MOV ZERO, 16(X10) 62 MOV ZERO, 24(X10) 63 ADD $32, X10 64 ADD $-32, X11 65 BEQZ X11, done 66 67 check16: 68 MOV $16, X9 69 BLT X11, X9, check8 70 zero16: 71 MOV ZERO, 0(X10) 72 MOV ZERO, 8(X10) 73 ADD $16, X10 74 ADD $-16, X11 75 BEQZ X11, done 76 77 check8: 78 MOV $8, X9 79 BLT X11, X9, check4 80 zero8: 81 MOV ZERO, 0(X10) 82 ADD $8, X10 83 ADD $-8, X11 84 BEQZ X11, done 85 86 check4: 87 MOV $4, X9 88 BLT X11, X9, loop1 89 zero4: 90 MOVB ZERO, 0(X10) 91 MOVB ZERO, 1(X10) 92 MOVB ZERO, 2(X10) 93 MOVB ZERO, 3(X10) 94 ADD $4, X10 95 ADD $-4, X11 96 97 loop1: 98 BEQZ X11, done 99 MOVB ZERO, 0(X10) 100 ADD $1, X10 101 ADD $-1, X11 102 JMP loop1 103 104 done: 105 RET