|
|
1.1 root 1: //////////
2: / libc/string/i386/memcpy.s
3: / i386 C string library.
4: / ANSI 4.11.2.1.
5: //////////
6:
7: //////////
8: / void *
9: / memcpy(void *To, void *From, size_t Count)
10: /
11: / Copy Count bytes from From to To, return To.
12: / Copies first by dwords, then by words, then by bytes, for efficiency;
13: / does not try to align the arguments.
14: //////////
15:
16: To .equ 12
17: From .equ To+4
18: Count .equ From+4
19:
20: .globl memcpy
21: .globl _memcpy
22:
23: memcpy:
24: push %esi
25: push %edi
26:
27: movl %esi, From(%esp) / From to ESI
28: movl %edi, To(%esp) / To to EDI
29: movl %ecx, Count(%esp) / Count to ECX
30: movl %eax, %edi / Return value to EAX
31:
32: _memcpy: / memmove() entry point
33: cld
34: movl %edx, %ecx / Save Count in EDX
35: shrl %ecx, $2 / Count/4
36: rep
37: movsl / move Count/4 dwords
38: jnc ?byte / CF contains Count bit 1 from shrl above
39: movsw / move a word
40:
41: ?byte:
42: shrl %edx, $1
43: jnc ?done
44: movsb / move a byte
45:
46: ?done:
47: pop %edi
48: pop %esi
49: ret
50:
51: / end of libc/string/i386/memcpy.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.