162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $ 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * "strlen" implementation of SuperH 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 1999 Kaz Kojima 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci/* size_t strlen (const char *s) */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/linkage.h> 1362306a36Sopenharmony_ciENTRY(strlen) 1462306a36Sopenharmony_ci mov r4,r0 1562306a36Sopenharmony_ci and #3,r0 1662306a36Sopenharmony_ci tst r0,r0 1762306a36Sopenharmony_ci bt/s 1f 1862306a36Sopenharmony_ci mov #0,r2 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci add #-1,r0 2162306a36Sopenharmony_ci shll2 r0 2262306a36Sopenharmony_ci shll r0 2362306a36Sopenharmony_ci braf r0 2462306a36Sopenharmony_ci nop 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci mov.b @r4+,r1 2762306a36Sopenharmony_ci tst r1,r1 2862306a36Sopenharmony_ci bt 8f 2962306a36Sopenharmony_ci add #1,r2 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci mov.b @r4+,r1 3262306a36Sopenharmony_ci tst r1,r1 3362306a36Sopenharmony_ci bt 8f 3462306a36Sopenharmony_ci add #1,r2 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci mov.b @r4+,r1 3762306a36Sopenharmony_ci tst r1,r1 3862306a36Sopenharmony_ci bt 8f 3962306a36Sopenharmony_ci add #1,r2 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci1: 4262306a36Sopenharmony_ci mov #0,r3 4362306a36Sopenharmony_ci2: 4462306a36Sopenharmony_ci mov.l @r4+,r1 4562306a36Sopenharmony_ci cmp/str r3,r1 4662306a36Sopenharmony_ci bf/s 2b 4762306a36Sopenharmony_ci add #4,r2 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci add #-4,r2 5062306a36Sopenharmony_ci#ifndef __LITTLE_ENDIAN__ 5162306a36Sopenharmony_ci swap.b r1,r1 5262306a36Sopenharmony_ci swap.w r1,r1 5362306a36Sopenharmony_ci swap.b r1,r1 5462306a36Sopenharmony_ci#endif 5562306a36Sopenharmony_ci extu.b r1,r0 5662306a36Sopenharmony_ci tst r0,r0 5762306a36Sopenharmony_ci bt/s 8f 5862306a36Sopenharmony_ci shlr8 r1 5962306a36Sopenharmony_ci add #1,r2 6062306a36Sopenharmony_ci extu.b r1,r0 6162306a36Sopenharmony_ci tst r0,r0 6262306a36Sopenharmony_ci bt/s 8f 6362306a36Sopenharmony_ci shlr8 r1 6462306a36Sopenharmony_ci add #1,r2 6562306a36Sopenharmony_ci extu.b r1,r0 6662306a36Sopenharmony_ci tst r0,r0 6762306a36Sopenharmony_ci bt 8f 6862306a36Sopenharmony_ci add #1,r2 6962306a36Sopenharmony_ci8: 7062306a36Sopenharmony_ci rts 7162306a36Sopenharmony_ci mov r2,r0 72