Annotation of sys/lib/libkern/arch/amd64/bcopy.S, Revision 1.1.1.1
1.1 nbrk 1: /*-
2: * Copyright (c) 1990 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from locore.s.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: * 3. All advertising materials mentioning features or use of this software
16: * must display the following acknowledgement:
17: * This product includes software developed by the University of
18: * California, Berkeley and its contributors.
19: * 4. Neither the name of the University nor the names of its contributors
20: * may be used to endorse or promote products derived from this software
21: * without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33: * SUCH DAMAGE.
34: */
35:
36: #include <machine/asm.h>
37:
38: #if defined(LIBC_SCCS)
39: RCSID("$NetBSD: bcopy.S,v 1.1 2001/06/19 00:22:45 fvdl Exp $")
40: #endif
41:
42: /*
43: * (ov)bcopy (src,dst,cnt)
44: * ws@tools.de (Wolfgang Solfrank, TooLs GmbH) +49-228-985800
45: */
46:
47: #ifdef MEMCOPY
48: ENTRY(memcpy)
49: #else
50: #ifdef MEMMOVE
51: ENTRY(memmove)
52: #else
53: #ifdef OVBCOPY
54: ENTRY(ovbcopy)
55: #else
56: ENTRY(bcopy)
57: #endif
58: #endif
59: #endif
60: #if defined(MEMCOPY) || defined(MEMMOVE)
61: movq %rdi,%r11 /* save dest */
62: #else
63: xchgq %rdi,%rsi
64: #endif
65: movq %rdx,%rcx
66: movq %rdi,%rax
67: subq %rsi,%rax
68: cmpq %rcx,%rax /* overlapping? */
69: jb 1f
70: cld /* nope, copy forwards. */
71: shrq $3,%rcx /* copy by words */
72: rep
73: movsq
74: movq %rdx,%rcx
75: andq $7,%rcx /* any bytes left? */
76: rep
77: movsb
78: #if defined(MEMCOPY) || defined(MEMMOVE)
79: movq %r11,%rax
80: #endif
81: ret
82: 1:
83: addq %rcx,%rdi /* copy backwards. */
84: addq %rcx,%rsi
85: std
86: andq $7,%rcx /* any fractional bytes? */
87: decq %rdi
88: decq %rsi
89: rep
90: movsb
91: movq %rdx,%rcx /* copy remainder by words */
92: shrq $3,%rcx
93: subq $7,%rsi
94: subq $7,%rdi
95: rep
96: movsq
97: #if defined(MEMCOPY) || defined(MEMMOVE)
98: movq %r11,%rax
99: #endif
100: cld
101: ret
CVSweb