strlen.S (827B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $ 3 * 4 * "strlen" implementation of SuperH 5 * 6 * Copyright (C) 1999 Kaz Kojima 7 * 8 */ 9 10/* size_t strlen (const char *s) */ 11 12#include <linux/linkage.h> 13ENTRY(strlen) 14 mov r4,r0 15 and #3,r0 16 tst r0,r0 17 bt/s 1f 18 mov #0,r2 19 20 add #-1,r0 21 shll2 r0 22 shll r0 23 braf r0 24 nop 25 26 mov.b @r4+,r1 27 tst r1,r1 28 bt 8f 29 add #1,r2 30 31 mov.b @r4+,r1 32 tst r1,r1 33 bt 8f 34 add #1,r2 35 36 mov.b @r4+,r1 37 tst r1,r1 38 bt 8f 39 add #1,r2 40 411: 42 mov #0,r3 432: 44 mov.l @r4+,r1 45 cmp/str r3,r1 46 bf/s 2b 47 add #4,r2 48 49 add #-4,r2 50#ifndef __LITTLE_ENDIAN__ 51 swap.b r1,r1 52 swap.w r1,r1 53 swap.b r1,r1 54#endif 55 extu.b r1,r0 56 tst r0,r0 57 bt/s 8f 58 shlr8 r1 59 add #1,r2 60 extu.b r1,r0 61 tst r0,r0 62 bt/s 8f 63 shlr8 r1 64 add #1,r2 65 extu.b r1,r0 66 tst r0,r0 67 bt 8f 68 add #1,r2 698: 70 rts 71 mov r2,r0