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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.17.0/] [newlib/] [libc/] [machine/] [i386/] [strchr.S] - Diff between revs 148 and 158

Only display areas with differences | Details | Blame | View Log

Rev 148 Rev 158
/*
/*
 * ====================================================
 * ====================================================
 * Copyright (C) 1998, 2002, 2008 by Red Hat Inc. All rights reserved.
 * Copyright (C) 1998, 2002, 2008 by Red Hat Inc. All rights reserved.
 *
 *
 * Permission to use, copy, modify, and distribute this
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * software is freely granted, provided that this notice
 * is preserved.
 * is preserved.
 * ====================================================
 * ====================================================
 */
 */
        #include "i386mach.h"
        #include "i386mach.h"
        .global SYM (strchr)
        .global SYM (strchr)
       SOTYPE_FUNCTION(strchr)
       SOTYPE_FUNCTION(strchr)
SYM (strchr):
SYM (strchr):
        pushl ebp
        pushl ebp
        movl esp,ebp
        movl esp,ebp
        pushl edi
        pushl edi
        pushl ebx
        pushl ebx
        xorl ebx,ebx
        xorl ebx,ebx
        movl 8(ebp),edi
        movl 8(ebp),edi
        addb 12(ebp),bl
        addb 12(ebp),bl
#ifndef __OPTIMIZE_SIZE__
#ifndef __OPTIMIZE_SIZE__
/* Special case strchr(p,0).  */
/* Special case strchr(p,0).  */
        je L25
        je L25
/* Do byte-wise checks until string is aligned.  */
/* Do byte-wise checks until string is aligned.  */
        test $3,edi
        test $3,edi
        je L5
        je L5
        movl edi,eax
        movl edi,eax
        movb (eax),cl
        movb (eax),cl
        testb cl,cl
        testb cl,cl
        je L14
        je L14
        cmpb bl,cl
        cmpb bl,cl
        je L19
        je L19
        incl edi
        incl edi
        test $3,edi
        test $3,edi
        je L5
        je L5
        movl edi,eax
        movl edi,eax
        movb (eax),cl
        movb (eax),cl
        testb cl,cl
        testb cl,cl
        je L14
        je L14
        cmpb bl,cl
        cmpb bl,cl
        je L19
        je L19
        incl edi
        incl edi
        test $3,edi
        test $3,edi
        je L5
        je L5
        movl edi,eax
        movl edi,eax
        movb (eax),cl
        movb (eax),cl
        testb cl,cl
        testb cl,cl
        je L14
        je L14
        cmpb bl,cl
        cmpb bl,cl
        je L19
        je L19
        incl edi
        incl edi
/* create 4 byte mask which is just the desired byte repeated 4 times */
/* create 4 byte mask which is just the desired byte repeated 4 times */
L5:
L5:
        movl ebx,ecx
        movl ebx,ecx
        sall $8,ebx
        sall $8,ebx
        subl $4,edi
        subl $4,edi
        orl ecx,ebx
        orl ecx,ebx
        movl ebx,edx
        movl ebx,edx
        sall $16,ebx
        sall $16,ebx
        orl edx,ebx
        orl edx,ebx
/* loop performing 4 byte mask checking for 0 byte or desired byte */
/* loop performing 4 byte mask checking for 0 byte or desired byte */
        .p2align 4,,7
        .p2align 4,,7
L10:
L10:
        addl $4,edi
        addl $4,edi
        movl (edi),ecx
        movl (edi),ecx
        leal -16843009(ecx),edx
        leal -16843009(ecx),edx
        movl ecx,eax
        movl ecx,eax
        notl eax
        notl eax
        andl eax,edx
        andl eax,edx
        testl $-2139062144,edx
        testl $-2139062144,edx
        jne L9
        jne L9
        xorl ebx,ecx
        xorl ebx,ecx
        leal -16843009(ecx),edx
        leal -16843009(ecx),edx
        notl ecx
        notl ecx
        andl ecx,edx
        andl ecx,edx
        testl $-2139062144,edx
        testl $-2139062144,edx
        je L10
        je L10
#endif /* not __OPTIMIZE_SIZE__ */
#endif /* not __OPTIMIZE_SIZE__ */
/* loop while (*s && *s++ != c) */
/* loop while (*s && *s++ != c) */
L9:
L9:
        leal -1(edi),eax
        leal -1(edi),eax
        .p2align 4,,7
        .p2align 4,,7
L15:
L15:
        incl eax
        incl eax
        movb (eax),dl
        movb (eax),dl
        testb dl,dl
        testb dl,dl
        je L14
        je L14
        cmpb bl,dl
        cmpb bl,dl
        jne L15
        jne L15
L14:
L14:
/*  if (*s == c) return address otherwise return NULL */
/*  if (*s == c) return address otherwise return NULL */
        cmpb bl,(eax)
        cmpb bl,(eax)
        je L19
        je L19
        xorl eax,eax
        xorl eax,eax
L19:
L19:
        leal -8(ebp),esp
        leal -8(ebp),esp
        popl ebx
        popl ebx
        popl edi
        popl edi
        leave
        leave
        ret
        ret
#ifndef __OPTIMIZE_SIZE__
#ifndef __OPTIMIZE_SIZE__
/* Special case strchr(p,0).  */
/* Special case strchr(p,0).  */
#if 0
#if 0
        /* Hideous performance on modern machines.  */
        /* Hideous performance on modern machines.  */
L25:
L25:
        cld
        cld
        movl $-1,ecx
        movl $-1,ecx
        xor eax,eax
        xor eax,eax
        repnz
        repnz
        scasb
        scasb
        leal -1(edi),eax
        leal -1(edi),eax
        jmp L19
        jmp L19
#endif
#endif
L25:
L25:
/* Do byte-wise checks until string is aligned.  */
/* Do byte-wise checks until string is aligned.  */
        test $3,edi
        test $3,edi
        je L26
        je L26
        movl edi,eax
        movl edi,eax
        movb (eax),cl
        movb (eax),cl
        testb cl,cl
        testb cl,cl
        je L19
        je L19
        incl edi
        incl edi
        test $3,edi
        test $3,edi
        je L26
        je L26
        movl edi,eax
        movl edi,eax
        movb (eax),cl
        movb (eax),cl
        testb cl,cl
        testb cl,cl
        je L19
        je L19
        incl edi
        incl edi
        test $3,edi
        test $3,edi
        je L26
        je L26
        movl edi,eax
        movl edi,eax
        movb (eax),cl
        movb (eax),cl
        testb cl,cl
        testb cl,cl
        je L19
        je L19
        incl edi
        incl edi
L26:
L26:
        subl $4,edi
        subl $4,edi
/* loop performing 4 byte mask checking for desired 0 byte */
/* loop performing 4 byte mask checking for desired 0 byte */
        .p2align 4,,7
        .p2align 4,,7
L27:
L27:
        addl $4,edi
        addl $4,edi
        movl (edi),ecx
        movl (edi),ecx
        leal -16843009(ecx),edx
        leal -16843009(ecx),edx
        movl ecx,eax
        movl ecx,eax
        notl eax
        notl eax
        andl eax,edx
        andl eax,edx
        testl $-2139062144,edx
        testl $-2139062144,edx
        je L27
        je L27
        jmp L9
        jmp L9
#endif /* !__OPTIMIZE_SIZE__ */
#endif /* !__OPTIMIZE_SIZE__ */
 
 

powered by: WebSVN 2.1.0

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