組み込み関数
Visual C++ 2005 では組み込み関数がいくらか拡充されています.Visual C++ 2005 での x64 アプリケーション開発では今までのように困ったときのインラインアセンブラ頼り,とはいかなくなったので,予めどんな組み込み関数があるか一通り眺めておくと良いでしょう.
http://msdn2.microsoft.com/library/w5405h95%28en-us,vs.80%29.aspx
- __rdtsc
- おなじみ rdtsc 命令でクロックカウンタを取得.
- __movsb, __movsw, __movsd, __movsq
- string 命令による rep movsX.
- __stosb, __stosw, __stosd, __stosq
- string 命令による rep stosX.
- _bittest, _bittest64
- bt 命令による指定ビット目の評価.
- _BitScanForward, _BitScanForward64
- bsf 命令により bit0 から始めて最初に立っているビットを探す.
- _BitScanReverse, _BitScanReverse64
- bsr 命令により MSF から始めて最初に立っているビットを探す.
あわせて Hacker's Delight も読んでおくと面白いかもしれませんね.
ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
- 作者: ジュニア,ヘンリー・S.ウォーレン,Jr.,Henry S. Warren,滝沢徹,玉井浩,鈴木貢,赤池英夫,葛毅,藤波順久
- 出版社/メーカー: エスアイビーアクセス
- 発売日: 2004/09
- メディア: 単行本
- 購入: 33人 クリック: 683回
- この商品を含むブログ (123件) を見る
例えば _BitScanReverse については nlz の項に典型的な RISC 命令での実装例が載っています.
http://www.hackersdelight.org/HDcode/nlz.cc
DirectX でも,例えばテクスチャの辺の長さを次に大きな 2 の累乗に合わせる場合にこの計算が必要となります.実際何度もこれを計算するコードを書いたことがあるという方もおられるのではないでしょうか.まあ今後は組み込み関数で書いてしまうという方法もひとつの手ではあるでしょうということで.