]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - arch/arc/lib/strcmp-archs.S
KVM: arm64: vgic-v3: Log which GICv3 system registers are trapped
[mirror_ubuntu-zesty-kernel.git] / arch / arc / lib / strcmp-archs.S
1 /*
2 * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9 #include <linux/linkage.h>
10
11 ENTRY_CFI(strcmp)
12 or r2, r0, r1
13 bmsk_s r2, r2, 1
14 brne r2, 0, @.Lcharloop
15
16 ;;; s1 and s2 are word aligned
17 ld.ab r2, [r0, 4]
18
19 mov_s r12, 0x01010101
20 ror r11, r12
21 .align 4
22 .LwordLoop:
23 ld.ab r3, [r1, 4]
24 ;; Detect NULL char in str1
25 sub r4, r2, r12
26 ld.ab r5, [r0, 4]
27 bic r4, r4, r2
28 and r4, r4, r11
29 brne.d.nt r4, 0, .LfoundNULL
30 ;; Check if the read locations are the same
31 cmp r2, r3
32 beq.d .LwordLoop
33 mov.eq r2, r5
34
35 ;; A match is found, spot it out
36 #ifdef __LITTLE_ENDIAN__
37 swape r3, r3
38 mov_s r0, 1
39 swape r2, r2
40 #else
41 mov_s r0, 1
42 #endif
43 cmp_s r2, r3
44 j_s.d [blink]
45 bset.lo r0, r0, 31
46
47 .align 4
48 .LfoundNULL:
49 #ifdef __BIG_ENDIAN__
50 swape r4, r4
51 swape r2, r2
52 swape r3, r3
53 #endif
54 ;; Find null byte
55 ffs r0, r4
56 bmsk r2, r2, r0
57 bmsk r3, r3, r0
58 swape r2, r2
59 swape r3, r3
60 ;; make the return value
61 sub.f r0, r2, r3
62 mov.hi r0, 1
63 j_s.d [blink]
64 bset.lo r0, r0, 31
65
66 .align 4
67 .Lcharloop:
68 ldb.ab r2, [r0, 1]
69 ldb.ab r3, [r1, 1]
70 nop
71 breq r2, 0, .Lcmpend
72 breq r2, r3, .Lcharloop
73
74 .align 4
75 .Lcmpend:
76 j_s.d [blink]
77 sub r0, r2, r3
78 END_CFI(strcmp)