古典的な積和演算はa = a + b * cです。 (をaとbは、64ビット整数、符号なしです:符号なしlong int型長い)しかし、私は現在、1つのクロックサイクルで整数に対して次の操作を行うことができASM命令が存在するかどうか疑問 C/C++/ASM:Multiply CPUにa = a * 2 + bを追加しますか?
a = a*2-1
a = a*2+b
現在、私が使用します。
a *= 2
--a
最初のものと
a *= 2
a += b
のために1秒間。そして、私はそれぞれがASMの2つの命令に変換されると思います。しかし、代わりに1 ASM命令を使用する方法があります(また、インテルCPU上の命令セット拡張もあります)。
(私はこの動作億回を行うので、私はそれを検索してください)インテルのCPUの場合
コンパイラが生成する命令の数が重要な理由は何ですか?これは、計算に必要なクロックサイクルの数に緩やかに関連するだけですか? –
たぶん 'lea'はそれを行うことができます... –
@KerrekSB、あなたはそうです - ' lea'は 'b'が0から4096の間であれば' a * 2 + b'を行うことができます。 – ugoren