1 /* SPDX-License-Identifier: GPL-2.0 */ 2 // Copyright (C) 2018 Hangzhou C-SKY Microsyst 3 4 #include <linux/linkage.h> 5 #include "sysdep.h" 6 7 ENTRY(strcpy) 8 mov a3, a0 9 /* Check if the src addr is aligned. 10 andi t0, a1, 3 11 bnez t0, 11f 12 1: 13 /* Check if all the bytes in the word 14 ldw a2, (a1) 15 tstnbz a2 16 bf 9f 17 stw a2, (a3) 18 19 ldw a2, (a1, 4) 20 tstnbz a2 21 bf 2f 22 stw a2, (a3, 4) 23 24 ldw a2, (a1, 8) 25 tstnbz a2 26 bf 3f 27 stw a2, (a3, 8) 28 29 ldw a2, (a1, 12) 30 tstnbz a2 31 bf 4f 32 stw a2, (a3, 12) 33 34 ldw a2, (a1, 16) 35 tstnbz a2 36 bf 5f 37 stw a2, (a3, 16) 38 39 ldw a2, (a1, 20) 40 tstnbz a2 41 bf 6f 42 stw a2, (a3, 20) 43 44 ldw a2, (a1, 24) 45 tstnbz a2 46 bf 7f 47 stw a2, (a3, 24) 48 49 ldw a2, (a1, 28) 50 tstnbz a2 51 bf 8f 52 stw a2, (a3, 28) 53 54 addi a3, 32 55 addi a1, 32 56 br 1b 57 58 59 2: 60 addi a3, 4 61 br 9f 62 63 3: 64 addi a3, 8 65 br 9f 66 67 4: 68 addi a3, 12 69 br 9f 70 71 5: 72 addi a3, 16 73 br 9f 74 75 6: 76 addi a3, 20 77 br 9f 78 79 7: 80 addi a3, 24 81 br 9f 82 83 8: 84 addi a3, 28 85 9: 86 # ifdef __CSKYBE__ 87 xtrb0 t0, a2 88 st.b t0, (a3) 89 bez t0, 10f 90 xtrb1 t0, a2 91 st.b t0, (a3, 1) 92 bez t0, 10f 93 xtrb2 t0, a2 94 st.b t0, (a3, 2) 95 bez t0, 10f 96 stw a2, (a3) 97 # else 98 xtrb3 t0, a2 99 st.b t0, (a3) 100 bez t0, 10f 101 xtrb2 t0, a2 102 st.b t0, (a3, 1) 103 bez t0, 10f 104 xtrb1 t0, a2 105 st.b t0, (a3, 2) 106 bez t0, 10f 107 stw a2, (a3) 108 # endif /* !__CSKYBE__ */ 109 10: 110 jmp lr 111 112 11: 113 subi t0, 4 114 12: 115 ld.b a2, (a1) 116 st.b a2, (a3) 117 bez a2, 10b 118 addi t0, 1 119 addi a1, a1, 1 120 addi a3, a3, 1 121 bnez t0, 12b 122 jbr 1b 123 ENDPROC(strcpy)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.