mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
827 B
71 lines
827 B
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $ |
|
* |
|
* "strlen" implementation of SuperH |
|
* |
|
* Copyright (C) 1999 Kaz Kojima |
|
* |
|
*/ |
|
|
|
/* size_t strlen (const char *s) */ |
|
|
|
#include <linux/linkage.h> |
|
ENTRY(strlen) |
|
mov r4,r0 |
|
and #3,r0 |
|
tst r0,r0 |
|
bt/s 1f |
|
mov #0,r2 |
|
|
|
add #-1,r0 |
|
shll2 r0 |
|
shll r0 |
|
braf r0 |
|
nop |
|
|
|
mov.b @r4+,r1 |
|
tst r1,r1 |
|
bt 8f |
|
add #1,r2 |
|
|
|
mov.b @r4+,r1 |
|
tst r1,r1 |
|
bt 8f |
|
add #1,r2 |
|
|
|
mov.b @r4+,r1 |
|
tst r1,r1 |
|
bt 8f |
|
add #1,r2 |
|
|
|
1: |
|
mov #0,r3 |
|
2: |
|
mov.l @r4+,r1 |
|
cmp/str r3,r1 |
|
bf/s 2b |
|
add #4,r2 |
|
|
|
add #-4,r2 |
|
#ifndef __LITTLE_ENDIAN__ |
|
swap.b r1,r1 |
|
swap.w r1,r1 |
|
swap.b r1,r1 |
|
#endif |
|
extu.b r1,r0 |
|
tst r0,r0 |
|
bt/s 8f |
|
shlr8 r1 |
|
add #1,r2 |
|
extu.b r1,r0 |
|
tst r0,r0 |
|
bt/s 8f |
|
shlr8 r1 |
|
add #1,r2 |
|
extu.b r1,r0 |
|
tst r0,r0 |
|
bt 8f |
|
add #1,r2 |
|
8: |
|
rts |
|
mov r2,r0
|
|
|