1/* $NetBSD: memcpy.S,v 1.2 2014/05/23 03:17:31 uebayasi Exp $ */ 2/*- 3 * Copyright (c) 2011 The NetBSD Foundation, Inc. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to The NetBSD Foundation 7 * by Joerg Sonnenberger. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31#include <machine/asm.h> 32 RCSID("$NetBSD: memcpy.S,v 1.2 2014/05/23 03:17:31 uebayasi Exp $") 33 34# ifdef BCOPY 35ENTRY(bcopy) 36 pushl %esi 37 pushl %edi 38 movl 12(%esp), %esi 39 movl 16(%esp), %edi 40 jmp __memmove_start 41# endif 42# if defined(MEMMOVE) 43ENTRY(memcpy) 44ENTRY(memmove) 45 pushl %esi 46 pushl %edi 47 movl 12(%esp), %edi 48 movl 16(%esp), %esi 49 .globl __memmove_start 50__memmove_start: 51 movl 20(%esp), %ecx 52 pushl %edi 53 testl %ecx, %ecx 54 jz 2f 55 cmpl %esi, %edi 56 jb 1f 57 addl %ecx, %esi 58 decl %esi 59 addl %ecx, %edi 60 decl %edi 61 std 621: 63 rep 64 movsb 652: 66 cld 67 popl %eax 68 popl %edi 69 popl %esi 70 ret 71END(memcpy) 72END(memmove) 73# endif /* MEMMOVE */ 74# ifdef BCOPY 75END(bcopy) 76# endif 77