仕事すすまなすぎて辛いので何か出力したくなった。
-
16bit -> 32bit (386)
結構色々変わっていて、レジスタの自由度が上がって少しRISCっぽくなっている。 -
32bit -> mmx (MMX Pentium)
mmxはまじめに使ってないのでよく知らない。飽和加算はMMXではできるがSSEではできないとかそういう命令もある。 -
MMX -> SSE (世代知らない)
単精度SIMD。80bit スタック型FPUというおもしろアーキテクチャをやめてしまった。 -
SSE -> SSE2 (世代知らない)
整数、倍精度のSIMDが入っている。これ以降追加されるのは便利命令系ばっかりなので一旦完成した感がある。 -
SSE2 -> SSE3 (世代知らない)
何が違うんだっけよく知らない
(今調べた)地味にx87 FPUも拡張されてて、これより前は整数への丸めが制御レジスタ変更しないと丸められない残念FPUだったが、丸めモード変えないでC言語の浮動小数→整数変換ができるようになってる -
SSE3 -> SSSE3 (世代知らない)
何が違うんだっけよく知らない -
32bit -> 64bit
aaa とかのCISCっぽい命令が消えてるので少しRISCに近付いている。
r12かなんかが地味にオペランドフォーマットで不利になってる理不尽な目にあってるのが好き。
あと si,di の8bit部が使えるという拡張が入っているので、%sil とか %dil とかなんだっけってやっちゃう。
追記:rip相対が実装されてうれしい -
SSSE3 -> SSE4.1 (Core2のあとのほう)
pshufb が入ったのでうれしい(まちがい。今調べたらpshufb、SSSE3だった) -
SSE4.1 -> SSE4.2 (Nehalem)
文字列、CRCとかもうSIMDじゃない。
あと命令拡張じゃないけど、Nehalemからmovdquがmovdqaと同じ性能になったの非常に嬉しかったし、確実にSIMDプログラミングが楽になったので世界中の全SIMDは同じようにしてほしい。 -
SSE4.2 -> AVX (SandyBridge)
256bit 3オペランド。
3オペランド速くなりそうなのだけど、いつも-mavx付けたら結果遅くなってる気がするがこれコンパイラが悪いの?そんなわけないと思うんだけど。 -
AVX -> AVX2, FMA, gather (Haswell)
なんで整数あと付けなんですか?最初から付けてくださいよ。
全世界待望のgather命令登場からのガッカリ性能。 -
AVX2 -> AVX512
KNLください。
CPUによって使える機能が違うみたいなことをやりはじめたので32bit ARMみたいな闇になるかもしれない。
512ビットになった以外も結構変わっていてレジスタx32、マスクレジスタが1要素1bitに、sae、broadcast