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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [newlib/] [libc/] [machine/] [i386/] [memcpy.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 (memcpy)

SYM (memcpy):

        pushl ebp
        movl esp,ebp
        pushl esi
        pushl edi
        pushl ebx
        movl 8(ebp),edi
        movl 16(ebp),ecx
        movl 12(ebp),esi
        cld
                
#ifndef __OPTIMIZE_SIZE__
                
        cmpl $8,ecx
        jbe .L3

/* move any preceding bytes until destination address is long word aligned */
                
        movl edi,edx    
        movl ecx,ebx
        andl $3,edx
        jz .L11
        movl $4,ecx
        subl edx,ecx
        andl $3,ecx
        subl ecx,ebx
        rep
        movsb
        
        mov ebx,ecx

/* move bytes a long word at a time */
                
.L11:
        shrl $2,ecx
        .p2align 2
        rep
        movsl
        
        movl ebx,ecx
        andl $3,ecx
        
#endif /* !__OPTIMIZE_SIZE__ */

/* handle any remaining bytes */
                
.L3:            
        rep
        movsb
.L5:            
        movl 8(ebp),eax

        leal -12(ebp),esp
        popl ebx
        popl edi
        popl esi
        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.