Index: /trunk/src/kmk/config.h.win
===================================================================
--- /trunk/src/kmk/config.h.win	(revision 1809)
+++ /trunk/src/kmk/config.h.win	(revision 1810)
@@ -525,2 +525,61 @@
 #define BATCH_MODE_ONLY_SHELL
 
+#if defined(_M_X64)
+#include <string.h>
+static void *
+my_inline_memchr(const void *pv, int ch, register size_t cb)
+{
+    register const unsigned int   uch = (unsigned)ch;
+    register const unsigned char *pb = (const unsigned char *)pv;
+#if 1 /* this one beats the CRT (on 2nd gen AMD64). */
+    while (cb >= 4)
+    {
+        if (*pb == uch)
+            return (unsigned char *)pb;
+        if (pb[1] == uch)
+            return (unsigned char *)pb + 1;
+        if (pb[2] == uch)
+            return (unsigned char *)pb + 2;
+        if (pb[3] == uch)
+            return (unsigned char *)pb + 3;
+        cb -= 4;
+        pb += 4;
+    }
+    switch (cb & 3)
+    {
+        case 0:
+            break;
+        case 1:
+            if (*pb == uch)
+                return (unsigned char *)pb;
+            break;
+        case 2:
+            if (*pb == uch)
+                return (unsigned char *)pb;
+            if (pb[1] == uch)
+                return (unsigned char *)pb + 1;
+            break;
+        case 3:
+            if (*pb == uch)
+                return (unsigned char *)pb;
+            if (pb[1] == uch)
+                return (unsigned char *)pb + 1;
+            if (pb[2] == uch)
+                return (unsigned char *)pb + 2;
+            break;
+    }
+
+#else /* This is just as good the CRT one. */
+    while (cb > 0)
+    {
+        if (*pb == uch)
+            return (void *)pb;
+        cb--;
+        pb++;
+    }
+#endif
+    return 0;
+}
+#define memchr my_inline_memchr
+#endif
+
