|
|
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.