grn_io_win_map() 内部の除算

grn_ts で Text カラムにアクセスするときは grn_ja_ref() を使っています.そして,その内部で呼び出される関数の一つが grn_io_win_map() です.より具体的には, 8 bytes 以上の値にアクセスするときに呼び出されます.

気になったのは, grn_io_win_map() の内部で除算が使われていることです.除算は 1 回の演算で 10-20 cycles くらい消費してしまうので,できれば使いたくありません. grn_io_win_map() だと除数が 2 の冪になることがほとんどであり,ビットシフトで置き換えできるケースが大半です.

そういうわけで,除数が 2 の冪になるときはビットシフトを使うようなパッチを作成してみたのですが,性能に有意な差は確認できませんでした.という残念な Issue が以下になります.試算では 5% くらい短縮できるケースもあるんじゃないかと思っていたので残念です.コストが上手いこと隠蔽されているのか,あるいは試算が間違っていただけなのかは不明です.