ここで疑似コードを使用します。これらのスタイルには長所と短所があります:
add、and、or、および xor を実行できる alu があるとします。可能な答えを常に計算し、オペコードに基づいて答えを選択するコードを用意する方が良いですか (この場合は 1 つのホット):
alu_add = a + b;
alu_and = a & b;
alu_or = a | b;
alu_xor = a ^ b;
...
if(opcode[0]) alu_out = alu_add;
else if(opcode[1]) alu_out = alu_and;
else if(opcode[2]) alu_out = alu_or;
else if(opcode[3]) alu_out = alu_xor;
別の方法は、次のようにコーディングすることです。
if(opcode[0]) alu_out = a + b;
else if(opcode[1]) alu_out = a & b;
else if(opcode[2]) alu_out = a | b;
else if(opcode[3]) alu_out = a ^ b;
私はそれを次のようにも見ました:
alu_add = a + b;
alu_and = a & b;
alu_or = a | b;
alu_xor = a ^ b;
...
alu_out =
( 8{opcode[0]} & alu_add ) |
( 8{opcode[1]} & alu_and ) |
( 8{opcode[2]} & alu_or ) |
( 8{opcode[3]} & alu_xor );
どちらの方法にも長所と短所がありますか、それとも最終的にはほぼ同じ結果になりますか?