root/arch/csky/abiv2/strcpy.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
   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 are not zero.  */
  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)

/* [<][>][^][v][top][bottom][index][help] */