void* memset64(void* d, uint64_t i, int n) { asm("cld; rep stosq;" :: "D"(d), "a"(i), "c"(n) : "memory"); return d; } 最近の CPU はクソ賢い。そのため、下手に手で loop unrolling するよりも、逆に CPU に「ここはループなんだぞおおお~」というのを明示的に指示してあげたほうが CPU 側が勝手かつ不気味に最適な挙動を示しやがる。そういう意味では現代はある種の CISC ルネサンスとよべる時期ではあるのだろう( 10 年後はわからんが)。
![卜部昌平のあまりreblogしないtumblr - 最速の memset64 を求めて 今回のお題は char 幅じゃなくて word 幅の...](https://cdn-ak-scissors.b.st-hatena.com/image/square/500c30d42f79fe2b689fff300a12d9e8e8523977/height=288;version=1;width=512/https%3A%2F%2F64.media.tumblr.com%2Ftumblr_lfroarlYHu1qzt7z1.png)