github.com/ice-blockchain/go/src@v0.0.0-20240403114104-1564d284e521/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 // X10 = ptr 12 // X11 = n 13 14 // If less than 8 bytes, do single byte zeroing. 15 MOV $8, X9 16 BLT X11, X9, check4 17 18 // Check alignment 19 AND $7, X10, X5 20 BEQZ X5, aligned 21 22 // Zero one byte at a time until we reach 8 byte alignment. 23 SUB X5, X9, X5 24 SUB X5, X11, X11 25 align: 26 SUB $1, X5 27 MOVB ZERO, 0(X10) 28 ADD $1, X10 29 BNEZ X5, align 30 31 aligned: 32 // X9 already contains $8 33 BLT X11, X9, check4 34 MOV $16, X9 35 BLT X11, X9, zero8 36 MOV $32, X9 37 BLT X11, X9, zero16 38 MOV $64, X9 39 BLT X11, X9, zero32 40 loop64: 41 MOV ZERO, 0(X10) 42 MOV ZERO, 8(X10) 43 MOV ZERO, 16(X10) 44 MOV ZERO, 24(X10) 45 MOV ZERO, 32(X10) 46 MOV ZERO, 40(X10) 47 MOV ZERO, 48(X10) 48 MOV ZERO, 56(X10) 49 ADD $64, X10 50 SUB $64, X11 51 BGE X11, X9, loop64 52 BEQZ X11, done 53 54 check32: 55 MOV $32, X9 56 BLT X11, X9, check16 57 zero32: 58 MOV ZERO, 0(X10) 59 MOV ZERO, 8(X10) 60 MOV ZERO, 16(X10) 61 MOV ZERO, 24(X10) 62 ADD $32, X10 63 SUB $32, X11 64 BEQZ X11, done 65 66 check16: 67 MOV $16, X9 68 BLT X11, X9, check8 69 zero16: 70 MOV ZERO, 0(X10) 71 MOV ZERO, 8(X10) 72 ADD $16, X10 73 SUB $16, X11 74 BEQZ X11, done 75 76 check8: 77 MOV $8, X9 78 BLT X11, X9, check4 79 zero8: 80 MOV ZERO, 0(X10) 81 ADD $8, X10 82 SUB $8, X11 83 BEQZ X11, done 84 85 check4: 86 MOV $4, X9 87 BLT X11, X9, loop1 88 zero4: 89 MOVB ZERO, 0(X10) 90 MOVB ZERO, 1(X10) 91 MOVB ZERO, 2(X10) 92 MOVB ZERO, 3(X10) 93 ADD $4, X10 94 SUB $4, X11 95 96 loop1: 97 BEQZ X11, done 98 MOVB ZERO, 0(X10) 99 ADD $1, X10 100 SUB $1, X11 101 JMP loop1 102 103 done: 104 RET