2006-06-17

Magic Numbers

Hacker's Delightから。
ある固定値で割る処理を掛け算とシフトのみで行なう際の係数を算出してくれる。
たとえばxを10で割る処理は"x * 0xcccccccdULL >> 32 >> 3"みたいな。

ルネサスのSH2は32ビット×32ビット=64ビットの掛け算をハードウェア乗算器で行えるので、
この種の処理に向いている。
実際、純正コンパイラでは黙っててもこのコードに落としてくれる。
でも微妙に補正っぽい命令も追加されていて、そこがまだ理解できてない。

0 件のコメント: