> 5) Complex SIMD instructions like PSHUFB or PUNPCKxx which modern compilers can't reason deeply enough about your code to use effectively. (I'd love to be proven wrong on this one!)
I ran his example on my own machine and found this:
193110 vshufps
179984 pshufd
129664 vpshufd
88279 vpshufb
73569 shufps
14409 pshuflw
8931 pshufhw
8896 vpshuflw
5997 pshufb
3115 vshufpd
1730 pshufw
1514 vpshufhw
1281 vshufi
620 shufpd
42 vpshufbitqmb
4 vshuff
113872 vunpcklps
89357 vpunpcklwd
87224 vpunpcklqdq
80218 vpunpckhwd
69531 vunpckhps
51203 punpcklbw
36962 punpcklqdq
29082 punpcklwd
28967 vpunpckldq
22217 vunpcklpd
20415 vpunpcklbw
19423 vpunpckhdq
18669 unpcklps
16693 punpckldq
16620 vpunpckhbw
14712 vpunpckhqdq
12289 punpckhwd
10788 vunpckhpd
9446 punpckhbw
8006 unpckhps
6207 punpckhdq
3278 punpckhqdq
803 unpcklpd
483 unpckhpd
6 kunpckwd
5 kunpckdq
4 kunpckbw
It's probably pretty likely that some of the lower counts are a result of hand written assembly, but the compiler has to be doing the high count ones.