Index: generic/src/lib/memstr.c
===================================================================
--- generic/src/lib/memstr.c	(revision 8b80b72bc933011825a2ff4663337fac00213667)
+++ generic/src/lib/memstr.c	(revision d87c3f3d6ecce3cef508faa5142aa822aa7ad387)
@@ -30,10 +30,9 @@
 #include <arch/types.h>
 
-
 /** Copy block of memory
  *
  * Copy cnt bytes from src address to dst address.
- * The copying is done byte-by-byte. The source
- * and destination memory areas cannot overlap.
+ * The copying is done word-by-word and then byte-by-byte.
+ * The source and destination memory areas cannot overlap.
  *
  * @param src Origin address to copy from.
@@ -44,8 +43,11 @@
 void *_memcpy(void * dst, const void *src, size_t cnt)
 {
-	int i;
+	int i, j;
 	
-	for (i=0; i<cnt; i++)
-		*((__u8 *) (dst + i)) = *((__u8 *) (src + i));
+	for (i = 0; i < cnt/sizeof(__native); i++)
+		((__native *) dst)[i] = ((__native *) src)[i];
+		
+	for (j = 0; j < cnt%sizeof(__native); j++)
+		((__u8 *)(((__native *) dst) + i))[j] = ((__u8 *)(((__native *) src) + i))[j];
 		
 	return (char *)src;
