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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [newlib/] [libc/] [machine/] [i386/] [memcmp.S] - Rev 1765

Compare with Previous | Blame | View Log

/*
 * ====================================================
 * Copyright (C) 1998 by Cygnus Solutions. All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * is preserved.
 * ====================================================
 */

        #include "i386mach.h"

        .global SYM (memcmp)

SYM (memcmp):

        pushl ebp
        movl esp,ebp
        subl $16,esp
        pushl ebx
        pushl edi
        pushl esi
        movl 8(ebp),edi
        movl 12(ebp),esi
        movl 16(ebp),ecx
        cld

/* check if length is zero in which case just return 0 */

        xorl eax,eax
        testl ecx,ecx
        jz L4

#ifndef __OPTIMIZE_SIZE__

/* if aligned on long boundary, compare doublewords at a time first */

        movl edi,eax
        orl esi,eax
        testb $3,al
        jne BYTECMP
        movl ecx,ebx
        shrl $2,ecx             /* calculate number of long words to compare */
        repz
        cmpsl
        jz L5
        subl $4,esi
        subl $4,edi
        movl $4,ecx
        jmp BYTECMP
L5:
        andl $3,ebx             /* calculate number of remaining bytes */
        movl ebx,ecx

#endif /* not __OPTIMIZE_SIZE__ */

BYTECMP: /* compare any unaligned bytes or remainder bytes */
        repz
        cmpsb

/* set output to be < 0 if less than, 0 if equal, or > 0 if greater than */
L3:
        xorl edx,edx
        movb -1(esi),dl
        xorl eax,eax
        movb -1(edi),al
        subl edx,eax

L4:
        leal -28(ebp),esp
        popl esi
        popl edi
        popl ebx
        leave
        ret

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.