+#else
+void * memcpy(void * dst, const void * src, size_t len)
+{
+ asm volatile ( "cld \n\t"
+ "movl %%ecx, %%edx \n\t"
+ "shrl $2, %%ecx \n\t"
+ "rep; movsl \n\t"
+ "movl %%edx, %%ecx \n\t"
+ "andl $3, %%ecx \n\t"
+ "rep; movsb \n\t"
+ : "=D" (dst)
+ : "c" (len), "D" (dst), "S" (src)
+ : "memory", "%edx" );
+
+ return dst;
+}
+
+void bcopy(const void * src, void * dst, size_t len)
+{
+ asm volatile ( "cld \n\t"
+ "movl %%ecx, %%edx \n\t"
+ "shrl $2, %%ecx \n\t"
+ "rep; movsl \n\t"
+ "movl %%edx, %%ecx \n\t"
+ "andl $3, %%ecx \n\t"
+ "rep; movsb \n\t"
+ :
+ : "c" (len), "D" (dst), "S" (src)
+ : "memory", "%edx" );
+}
+
+void bzero(void * dst, size_t len)
+{
+ asm volatile ( "xorl %%eax, %%eax \n\t"
+ "cld \n\t"
+ "movl %%ecx, %%edx \n\t"
+ "shrl $2, %%ecx \n\t"
+ "rep; stosl \n\t"
+ "movl %%edx, %%ecx \n\t"
+ "andl $3, %%ecx \n\t"
+ "rep; stosb \n\t"
+ :
+ : "c" (len), "D" (dst)
+ : "memory", "%eax" );
+}
+#endif
+