関連するデータがfloat、double、int、short、longなどであるかどうかに応じて、さまざまなx86命令に対していくつの異なる操作サイクル時間がありますか?
特定のデータ型に関する特定の命令を回避するかどうかを判断できるようにしたいと思います。
プロセッサが実際にx86命令を実行する時代は過ぎ去りました。486プロセッサは、それらをマイクロオペレーションに変換し始めた最初のプロセッサでした。これは、複数の実行ユニットでスーパースカラー実行を実現するために、さまざまな方法で並べ替えて組み合わせることができます。
これにより、x86命令をサイクルカウントごとに分類すると、危険な冒険になります。Intelプロセッサのマニュアルはヒントを提供するだけで、ボリューム4にあります。
特定のデータ型に関する特定の命令を回避するかどうかを判断できるようにしたいと思います。
特定のデータ型とサイズを処理する命令を他のデータ型またはサイズで使用することは、予期しない動作につながるため、使用しないでください。たとえば、一般的なx86実装でDWORD
は、aのサイズはaと同じですfloat
が、エンコードが異なります。それぞれ、リトルエンディアンと仮数/指数です。
アセンブリレベルの言語では、マシンには「タイプ」の概念がなく、現在の命令ポインタのオペコードから推測されるサイズ/エンコーディング情報に基づいてメモリのブロックを操作します。
一方、自分が何をしているのかを本当に知っている場合は、あるタイプを別のタイプとして扱い、まれな状況でそのように変更すると、例外的な結果が得られます-高速逆平方根。
除算(剰余/剰余を含む)は避けてください。残りの基本的な操作とタイプを自然に使用します。