18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $ 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * "strlen" implementation of SuperH 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Copyright (C) 1999 Kaz Kojima 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci/* size_t strlen (const char *s) */ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/linkage.h> 138c2ecf20Sopenharmony_ciENTRY(strlen) 148c2ecf20Sopenharmony_ci mov r4,r0 158c2ecf20Sopenharmony_ci and #3,r0 168c2ecf20Sopenharmony_ci tst r0,r0 178c2ecf20Sopenharmony_ci bt/s 1f 188c2ecf20Sopenharmony_ci mov #0,r2 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci add #-1,r0 218c2ecf20Sopenharmony_ci shll2 r0 228c2ecf20Sopenharmony_ci shll r0 238c2ecf20Sopenharmony_ci braf r0 248c2ecf20Sopenharmony_ci nop 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci mov.b @r4+,r1 278c2ecf20Sopenharmony_ci tst r1,r1 288c2ecf20Sopenharmony_ci bt 8f 298c2ecf20Sopenharmony_ci add #1,r2 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci mov.b @r4+,r1 328c2ecf20Sopenharmony_ci tst r1,r1 338c2ecf20Sopenharmony_ci bt 8f 348c2ecf20Sopenharmony_ci add #1,r2 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci mov.b @r4+,r1 378c2ecf20Sopenharmony_ci tst r1,r1 388c2ecf20Sopenharmony_ci bt 8f 398c2ecf20Sopenharmony_ci add #1,r2 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci1: 428c2ecf20Sopenharmony_ci mov #0,r3 438c2ecf20Sopenharmony_ci2: 448c2ecf20Sopenharmony_ci mov.l @r4+,r1 458c2ecf20Sopenharmony_ci cmp/str r3,r1 468c2ecf20Sopenharmony_ci bf/s 2b 478c2ecf20Sopenharmony_ci add #4,r2 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci add #-4,r2 508c2ecf20Sopenharmony_ci#ifndef __LITTLE_ENDIAN__ 518c2ecf20Sopenharmony_ci swap.b r1,r1 528c2ecf20Sopenharmony_ci swap.w r1,r1 538c2ecf20Sopenharmony_ci swap.b r1,r1 548c2ecf20Sopenharmony_ci#endif 558c2ecf20Sopenharmony_ci extu.b r1,r0 568c2ecf20Sopenharmony_ci tst r0,r0 578c2ecf20Sopenharmony_ci bt/s 8f 588c2ecf20Sopenharmony_ci shlr8 r1 598c2ecf20Sopenharmony_ci add #1,r2 608c2ecf20Sopenharmony_ci extu.b r1,r0 618c2ecf20Sopenharmony_ci tst r0,r0 628c2ecf20Sopenharmony_ci bt/s 8f 638c2ecf20Sopenharmony_ci shlr8 r1 648c2ecf20Sopenharmony_ci add #1,r2 658c2ecf20Sopenharmony_ci extu.b r1,r0 668c2ecf20Sopenharmony_ci tst r0,r0 678c2ecf20Sopenharmony_ci bt 8f 688c2ecf20Sopenharmony_ci add #1,r2 698c2ecf20Sopenharmony_ci8: 708c2ecf20Sopenharmony_ci rts 718c2ecf20Sopenharmony_ci mov r2,r0 72