new file mode 100644
--- /dev/null
+++ b/duff.c
@@ -0,0 +1,62 @@
+/**
+ * Duff's Device
+ * fast copy algorithm
+ * performs 8 times faster on long strings.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+char *duffcopy (char *to, char *from, int num)
+{
+ int n, pos = 0;
+
+ n = (num + 7) / 8;
+
+ switch (num % 8) {
+ case 0:
+ do {
+ to[pos] = from[pos];
+ pos++;
+ case 7:
+ to[pos] = from[pos];
+ pos++;
+ case 6:
+ to[pos] = from[pos];
+ pos++;
+ case 5:
+ to[pos] = from[pos];
+ pos++;
+ case 4:
+ to[pos] = from[pos];
+ pos++;
+ case 3:
+ to[pos] = from[pos];
+ pos++;
+ case 2:
+ to[pos] = from[pos];
+ pos++;
+ case 1:
+ to[pos] = from[pos];
+ pos++;
+ } while (--n > 0);
+ }
+
+ return to;
+}
+
+int main (int argc, char **argv)
+{
+ char to[80], *from;
+
+ if (argc != 2) {
+ printf ("Usage: %s <string>\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ from = argv[1];
+
+ printf ("DUFF: %s\n", duffcopy (to, from, strlen (from)));
+ return EXIT_SUCCESS;
+}