2つの数値を乗算して最終結果をシフトするサブルーチンを実行する必要があります。インプレース乗算サブルーチン - ポインタまたは値を渡す?
より適切サブルーチンである:コードは、DSPプロセッサ上で実行されるので、速度とサイズの両方でなければならない
void mul_inplace_both_pointers(q23* inout, q23* in)
{
*inout = (*inout * *in);
*inout = *inout << 8;
}
又は
void mul_inplace_one_pointer(q23* inout, q23 in)
{
*inout = (*inout * in);
*inout = *inout << 8;
}
又は
q23 mul_no_pointers(q23 in1, q23 in2)
{
q23 out;
out = in1 * in2;
out = out << 8;
return out;
}
最適化された。私はスピードとサイズの要件を省略し、単にビューのプログラマの観点から最も適切であるものを尋ねることができる分間
q23 a;
q23 b;
mul_inplace_both_pointers(&a, &b);
mul_inplace_one_pointer (&a, b);
a = mul_inplace_no_pointers ( a, b);
?
最適である必要がある場合は、3つのプロファイルとプロファイルをすべてコンパイルします。生成されたasmも見てください。しかし、このような単純な関数呼び出しを使用すると、インライン化されていない限り、実行時間が損なわれます。それをチェックする価値があるでしょう。 –
'' type_ef23'はどんな型ですか? –
ae_q23型がint(私が疑うところによると)型のパラメータがおそらく最も速いバージョンのレジスタにも渡されているのであれば、最後のバージョンははるかに優れています(私の意見)。 – Marco