OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [sh/] [lib/] [strlen.S] - Rev 1781

Go to most recent revision | Compare with Previous | Blame | View Log

/* $Id: strlen.S,v 1.1.1.1 2004-04-15 01:17:17 phoenix 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

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.