License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[linux-block.git] / arch / sparc / lib / strlen.S
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
ae984d72 2/* strlen.S: Sparc optimized strlen code
1da177e4
LT
3 * Hand optimized from GNU libc's strlen
4 * Copyright (C) 1991,1996 Free Software Foundation
ae984d72 5 * Copyright (C) 1996,2008 David S. Miller (davem@davemloft.net)
1da177e4
LT
6 * Copyright (C) 1996, 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
7 */
8
ae984d72
DM
9#include <linux/linkage.h>
10#include <asm/asm.h>
d3867f04 11#include <asm/export.h>
ae984d72 12
1da177e4
LT
13#define LO_MAGIC 0x01010101
14#define HI_MAGIC 0x80808080
15
ae984d72
DM
16 .text
17ENTRY(strlen)
1da177e4
LT
18 mov %o0, %o1
19 andcc %o0, 3, %g0
ae984d72 20 BRANCH32(be, pt, 9f)
1da177e4
LT
21 sethi %hi(HI_MAGIC), %o4
22 ldub [%o0], %o5
ae984d72 23 BRANCH_REG_ZERO(pn, %o5, 11f)
1da177e4
LT
24 add %o0, 1, %o0
25 andcc %o0, 3, %g0
ae984d72 26 BRANCH32(be, pn, 4f)
1da177e4
LT
27 or %o4, %lo(HI_MAGIC), %o3
28 ldub [%o0], %o5
ae984d72 29 BRANCH_REG_ZERO(pn, %o5, 12f)
1da177e4
LT
30 add %o0, 1, %o0
31 andcc %o0, 3, %g0
ae984d72 32 BRANCH32(be, pt, 5f)
1da177e4
LT
33 sethi %hi(LO_MAGIC), %o4
34 ldub [%o0], %o5
ae984d72 35 BRANCH_REG_ZERO(pn, %o5, 13f)
1da177e4 36 add %o0, 1, %o0
ae984d72 37 BRANCH32(ba, pt, 8f)
1da177e4
LT
38 or %o4, %lo(LO_MAGIC), %o2
399:
40 or %o4, %lo(HI_MAGIC), %o3
414:
42 sethi %hi(LO_MAGIC), %o4
435:
44 or %o4, %lo(LO_MAGIC), %o2
458:
46 ld [%o0], %o5
472:
48 sub %o5, %o2, %o4
49 andcc %o4, %o3, %g0
ae984d72 50 BRANCH32(be, pt, 8b)
1da177e4
LT
51 add %o0, 4, %o0
52
53 /* Check every byte. */
54 srl %o5, 24, %g7
55 andcc %g7, 0xff, %g0
ae984d72 56 BRANCH32(be, pn, 1f)
1da177e4
LT
57 add %o0, -4, %o4
58 srl %o5, 16, %g7
59 andcc %g7, 0xff, %g0
ae984d72 60 BRANCH32(be, pn, 1f)
1da177e4
LT
61 add %o4, 1, %o4
62 srl %o5, 8, %g7
63 andcc %g7, 0xff, %g0
ae984d72 64 BRANCH32(be, pn, 1f)
1da177e4
LT
65 add %o4, 1, %o4
66 andcc %o5, 0xff, %g0
ae984d72 67 BRANCH32_ANNUL(bne, pt, 2b)
1da177e4
LT
68 ld [%o0], %o5
69 add %o4, 1, %o4
701:
71 retl
72 sub %o4, %o1, %o0
7311:
74 retl
75 mov 0, %o0
7612:
77 retl
78 mov 1, %o0
7913:
80 retl
81 mov 2, %o0
ae984d72 82ENDPROC(strlen)
d3867f04 83EXPORT_SYMBOL(strlen)