3

モジュロ関数timespec 正規化の両方で、カーネル コードはループによってモジュロを計算し、コンパイラがループをモジュロ演算子に最適化するのを防ぎます。

なぜそれが必要なのですか?

この最適化が適切でない場合、コンパイラは単純にそれを行わないことを期待しています。ただし、この最適化がより高速なアーキテクチャが存在する可能性があります。このコードがすべてのアーキテクチャに必要なのはなぜですか?

4

1 に答える 1

2

これは、被除数が除数より少しだけ大きいと予想されることをプログラマーが知っている場合に行われます(したがって、反復バージョンは 1 回または 2 回だけループします)。コンパイラがこれを理解することは期待できません。これは、次のコメントで説明されていdiv64.cます。

/*
 * Iterative div/mod for use when dividend is not expected to be much
 * bigger than divisor.
 */

あなたが指摘したモジュロ関数はiter_div_u64_rem()、これが必要なときに明示的に使用されます。通常のモジュロ バージョンの場合、 がありdiv_u64_rem()ます。

于 2013-06-27T11:37:11.277 に答える