0001
0002 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
0003
0004 #include <linux/linkage.h>
0005 #include "sysdep.h"
0006
0007 ENTRY(strcpy)
0008 mov a3, a0
0009
0010 andi t0, a1, 3
0011 bnez t0, 11f
0012 1:
0013
0014 ldw a2, (a1)
0015 tstnbz a2
0016 bf 9f
0017 stw a2, (a3)
0018
0019 ldw a2, (a1, 4)
0020 tstnbz a2
0021 bf 2f
0022 stw a2, (a3, 4)
0023
0024 ldw a2, (a1, 8)
0025 tstnbz a2
0026 bf 3f
0027 stw a2, (a3, 8)
0028
0029 ldw a2, (a1, 12)
0030 tstnbz a2
0031 bf 4f
0032 stw a2, (a3, 12)
0033
0034 ldw a2, (a1, 16)
0035 tstnbz a2
0036 bf 5f
0037 stw a2, (a3, 16)
0038
0039 ldw a2, (a1, 20)
0040 tstnbz a2
0041 bf 6f
0042 stw a2, (a3, 20)
0043
0044 ldw a2, (a1, 24)
0045 tstnbz a2
0046 bf 7f
0047 stw a2, (a3, 24)
0048
0049 ldw a2, (a1, 28)
0050 tstnbz a2
0051 bf 8f
0052 stw a2, (a3, 28)
0053
0054 addi a3, 32
0055 addi a1, 32
0056 br 1b
0057
0058
0059 2:
0060 addi a3, 4
0061 br 9f
0062
0063 3:
0064 addi a3, 8
0065 br 9f
0066
0067 4:
0068 addi a3, 12
0069 br 9f
0070
0071 5:
0072 addi a3, 16
0073 br 9f
0074
0075 6:
0076 addi a3, 20
0077 br 9f
0078
0079 7:
0080 addi a3, 24
0081 br 9f
0082
0083 8:
0084 addi a3, 28
0085 9:
0086 # ifdef __CSKYBE__
0087 xtrb0 t0, a2
0088 st.b t0, (a3)
0089 bez t0, 10f
0090 xtrb1 t0, a2
0091 st.b t0, (a3, 1)
0092 bez t0, 10f
0093 xtrb2 t0, a2
0094 st.b t0, (a3, 2)
0095 bez t0, 10f
0096 stw a2, (a3)
0097 # else
0098 xtrb3 t0, a2
0099 st.b t0, (a3)
0100 bez t0, 10f
0101 xtrb2 t0, a2
0102 st.b t0, (a3, 1)
0103 bez t0, 10f
0104 xtrb1 t0, a2
0105 st.b t0, (a3, 2)
0106 bez t0, 10f
0107 stw a2, (a3)
0108 # endif
0109 10:
0110 jmp lr
0111
0112 11:
0113 subi t0, 4
0114 12:
0115 ld.b a2, (a1)
0116 st.b a2, (a3)
0117 bez a2, 10b
0118 addi t0, 1
0119 addi a1, a1, 1
0120 addi a3, a3, 1
0121 bnez t0, 12b
0122 jbr 1b
0123 ENDPROC(strcpy)