| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | /* * Copyright (C) 2017 Hangzhou C-SKY Microsystems co.,ltd. * * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB * in this tarball. */#include <endian.h>#include "macro.S"#ifdef WANT_WIDE# define Wstrcpy wcscpy#else# define Wstrcpy strcpy#endif	.align 2	.global Wstrcpy	.type   Wstrcpy, @functionWstrcpy:        mov     a3, a0        or      a2, a1, a3        andi    t0, a2, 3        M_BEZ   t0, 2f        mov     t0, a1       1:        ld.b    a2, (t0)        stb     a2, (a3)        addi    t0, t0, 1        addi    a3, a3, 1        M_BNEZ  a2, 1b        jmp     r15       2:        ldw     a2, (a1)        tstnbz  a2        bf      11f        stw     a2, (a3)        ldw     a2, (a1, 4)        tstnbz  a2        bf      4f        stw     a2, (a3, 4)        ldw     a2, (a1, 8)        tstnbz  a2        bf      5f        stw     a2, (a3, 8)        ldw     a2, (a1, 12)        tstnbz  a2        bf      6f        stw     a2, (a3, 12)        ldw     a2, (a1, 16)        tstnbz  a2        bf      7f        stw     a2, (a3, 16)        ldw     a2, (a1, 20)        tstnbz  a2        bf      8f        stw     a2, (a3, 20)        ldw     a2, (a1, 24)        tstnbz  a2        bf      9f        stw     a2, (a3, 24)        ldw     a2, (a1, 28)        tstnbz  a2        bf      10f        stw     a2, (a3, 28)        addi     a3, 32        addi     a1, 32        br       2b       4:        addi    a3, 4        br      11f       5:        addi    a3, 8        br      11f       6:        addi    a3, 12        br      11f       7:        addi    a3, 16        br      11f       8:        addi    a3, 20        br      11f       9:        addi    a3, 24        br      11f       10:        addi    a3, 28       11:#ifdef __CSKYBE__        xtrb0   t0, a2        st.b    t0, (a3)        M_BEZ   t0, 5f        xtrb1   t0, a2        st.b    t0, (a3, 1)        M_BEZ   t0, 5f        xtrb2   t0, a2        st.b    t0, (a3, 2 )        M_BEZ   t0, 5f        stw     a2, (a3)#else        xtrb3   t0, a2        st.b    t0, (a3)        M_BEZ   t0, 5f        xtrb2   t0, a2        st.b    t0, (a3, 1)        M_BEZ   t0, 5f        xtrb1   t0, a2        st.b    t0, (a3, 2)        M_BEZ   t0, 5f        stw     a2, (a3)#endif       5:	jmp     r15libc_hidden_def(Wstrcpy).weak Wstrcpy
 |