Original Version
Straightforward code to copy items from an array to a memory-mapped output register might look like this:
do { /* count > 0 assumed */ *to = *from++; /* Note that the 'to' pointer is NOT incremented */ } while(--count > 0);Note that this is not a memory-to-memory copy, in which you would see *to++.
While optimizing this, Duff realized that an unrolled version of his loop could be implemented by interlacing the structures of a switch and a loop.
send(to, from, count) register short *to, *from; register count; { register n = (count + 7) / 8; switch(count % 8) { case 0: do { *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *from++; case 3: *to = *from++; case 2: *to = *from++; case 1: *to = *from++; } while(--n > 0); } }Notice that Duff's device can just as easily be applied with any other size for the unrolled loop, not just 8.
Read more about this topic: Duff's Device
Famous quotes containing the words original and/or version:
“Mother has always been a generic term synonymous with love, devotion, and sacrifice. Theres always been something mystical and reverent about them. Theyre the Walter Cronkites of the human race . . . infallible, virtuous, without flaws and conceived without original sin, with no room for ambivalence.”
—Erma Bombeck (20th century)
“Exercise is the yuppie version of bulimia.”
—Barbara Ehrenreich (b. 1941)