0001
0002 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
0003
0004 #include <linux/linkage.h>
0005 #include "sysdep.h"
0006
0007 ENTRY(strcmp)
0008 mov a3, a0
0009
0010 xor a2, a3, a1
0011 andi a2, 0x3
0012 bnez a2, 7f
0013 andi t1, a0, 0x3
0014 bnez t1, 5f
0015
0016 1:
0017
0018 ldw t0, (a3, 0)
0019 ldw t1, (a1, 0)
0020
0021 cmpne t0, t1
0022 bt 2f
0023
0024 tstnbz t0
0025
0026 bf 3f
0027
0028 ldw t0, (a3, 4)
0029 ldw t1, (a1, 4)
0030 cmpne t0, t1
0031 bt 2f
0032 tstnbz t0
0033 bf 3f
0034
0035 ldw t0, (a3, 8)
0036 ldw t1, (a1, 8)
0037 cmpne t0, t1
0038 bt 2f
0039 tstnbz t0
0040 bf 3f
0041
0042 ldw t0, (a3, 12)
0043 ldw t1, (a1, 12)
0044 cmpne t0, t1
0045 bt 2f
0046 tstnbz t0
0047 bf 3f
0048
0049 ldw t0, (a3, 16)
0050 ldw t1, (a1, 16)
0051 cmpne t0, t1
0052 bt 2f
0053 tstnbz t0
0054 bf 3f
0055
0056 ldw t0, (a3, 20)
0057 ldw t1, (a1, 20)
0058 cmpne t0, t1
0059 bt 2f
0060 tstnbz t0
0061 bf 3f
0062
0063 ldw t0, (a3, 24)
0064 ldw t1, (a1, 24)
0065 cmpne t0, t1
0066 bt 2f
0067 tstnbz t0
0068 bf 3f
0069
0070 ldw t0, (a3, 28)
0071 ldw t1, (a1, 28)
0072 cmpne t0, t1
0073 bt 2f
0074 tstnbz t0
0075 bf 3f
0076
0077 addi a3, 32
0078 addi a1, 32
0079
0080 br 1b
0081
0082 # ifdef __CSKYBE__
0083
0084 2:
0085 xtrb0 a0, t0
0086 xtrb0 a2, t1
0087 subu a0, a2
0088 bez a2, 4f
0089 bnez a0, 4f
0090
0091
0092 xtrb1 a0, t0
0093 xtrb1 a2, t1
0094 subu a0, a2
0095 bez a2, 4f
0096 bnez a0, 4f
0097
0098
0099 xtrb2 a0, t0
0100 xtrb2 a2, t1
0101 subu a0, a2
0102 bez a2, 4f
0103 bnez a0, 4f
0104
0105
0106 xtrb3 a0, t0
0107 xtrb3 a2, t1
0108 subu a0, a2
0109 # else
0110
0111 2:
0112 xtrb3 a0, t0
0113 xtrb3 a2, t1
0114 subu a0, a2
0115 bez a2, 4f
0116 bnez a0, 4f
0117
0118
0119 xtrb2 a0, t0
0120 xtrb2 a2, t1
0121 subu a0, a2
0122 bez a2, 4f
0123 bnez a0, 4f
0124
0125
0126 xtrb1 a0, t0
0127 xtrb1 a2, t1
0128 subu a0, a2
0129 bez a2, 4f
0130 bnez a0, 4f
0131
0132
0133 xtrb0 a0, t0
0134 xtrb0 a2, t1
0135 subu a0, a2
0136
0137 # endif
0138 jmp lr
0139 3:
0140 movi a0, 0
0141 4:
0142 jmp lr
0143
0144
0145 5:
0146 subi t1, 4
0147 6:
0148 ldb a0, (a3, 0)
0149 ldb a2, (a1, 0)
0150 subu a0, a2
0151 bez a2, 4b
0152 bnez a0, 4b
0153 addi t1, 1
0154 addi a1, 1
0155 addi a3, 1
0156 bnez t1, 6b
0157 br 1b
0158
0159 7:
0160 ldb a0, (a3, 0)
0161 addi a3, 1
0162 ldb a2, (a1, 0)
0163 addi a1, 1
0164 subu a0, a2
0165 bnez a0, 4b
0166 bnez a2, 7b
0167 jmp r15
0168 ENDPROC(strcmp)