先週から首と肩の痛みが酷くて困る. 今までの肩こりと違って横になると起きるときに頭を持って首を固定しないと痛くて起き上がれない.
gccで-msse4つきで_mm_cvtsi128_si32()を使うとmovdではなくpextrdが使われてしまう.
% cat t.c
#include <xmmintrin.h>
int main(int argc)
{
return _mm_cvtsi128_si32(_mm_cvtsi32_si128(argc));
}
% gcc t.c -S -O3 -msse4 -fomit-frame-pointer && cat t.s
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ecx
movd (%ecx), %xmm0
popl %ecx
pextrd $0, %xmm0, %eax
leal -4(%ecx), %esp
ret
-march=core2もつけるとmovdにしてくれるけどなんでそうなってるのかわからない(-march=k8やamdfam10でもpextrd).
pextrdなんてSSE4.1(と一部のcore2)でしか使えないし, 使えたとしてもmovdの方が速いんだから常にmovdでいいのに.
というかintrinsicなのに勝手に命令を変えないで欲しい. バグじゃないのと言ってみたけどrejectされた.
いまいち納得できない.
で今更ながら気がついたのだけど, gccではcpuidに応じてSIMD命令を切り換えるプログラムを書くには実装を分割してそれぞれのコンパイルオプションを変えるしかないんだな. めんどくさ.
ヘッダのみのライブラリを提供するのは不可能だ.
公開鍵暗号の数理最終回
全部で7日間. これだけまとめて系統だって暗号の話を聞いたのは初めてで非常に勉強になった. それ系の論文も大分読みやすくなるんじゃないかと思う.
毎日いかせてもらえたのもありがたかった.