MD5 optimized in MMX part3


#define MD5STEP(f, w, x, y, z, data, s) \
( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
ってのがMD5のコアの部分をマクロ化した所なのですよ。*1
f()関数、rotation部*2はpart2で発見した最適化ですべてMMX化できます。
問題は足し算しているところなのです。32bitだとオーバーフローしていいところなのだろうけど(定かではないが)MMXレジスタは32bit変数を二つ並べて持っているわけだからオーバーフローしたら隣の変数領域まで侵食していくのですよ。(追記:資料を見て思ったんだけどなんか侵食しないような気が・・・しました!)
さて、どうするべきか〜。
http://homepage1.nifty.com/herumi/adv/adv10.html
http://www1.kcn.ne.jp/~robe/pf/pf009.html
http://hp.vector.co.jp/authors/VA014520/asmhsp/chap8.html
http://mcierror.axisz.jp/wares/c_tips/mmx_1.html
を読んでみてもっと考えてみようと思う。記事と著者に感謝。
... I Can't optimize MD5 algorithm in MMX! :-(
解決:padddとか使えば別に普通に大丈夫みたいですね。ではでは。

*1:出展:google:GNETmd5.c public domainです。

*2:カンマで区切っている2番目のところ