memcpy asm for i386 and x86_64
[musl] / src / string / i386 / memcpy.s
diff --git a/src/string/i386/memcpy.s b/src/string/i386/memcpy.s
new file mode 100644 (file)
index 0000000..b2977c8
--- /dev/null
@@ -0,0 +1,29 @@
+.global memcpy
+.type memcpy,@function
+memcpy:
+       push %esi
+       push %edi
+       mov 12(%esp),%edi
+       mov 16(%esp),%esi
+       mov 20(%esp),%ecx
+       mov %edi,%eax
+       cmp $4,%ecx
+       jc 1f
+       test $3,%edi
+       jz 1f
+2:     movsb
+       dec %ecx
+       test $3,%edi
+       jnz 2b
+1:     mov %ecx,%edx
+       shr $2,%ecx
+       rep
+       movsl
+       and $3,%edx
+       jz 1f
+2:     movsb
+       dec %edx
+       jnz 2b
+1:     pop %edi
+       pop %esi
+       ret