linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

最適化 - likely()

概要

値が0でないことを確認し、0以外の場合に最適化されたコードを生成する

詳細

比較する値xを引数として受け取り、CONFIG_TRACE_BRANCH_PROFILINGDISABLE_BRANCH_PROFILING__CHECKER__の値によって以下のように処理が異なる

  • CONFIG_TRACE_BRANCH_PROFILINGが定義済されており、かつDISABLE_BRANCH_PROFILING__CHECKER__未定義の場合
    • __builtin_constant_p()によりxが定数の場合は0か1のいずれかの値を返し、定数でない場合は、branch_check()に引数の値と1を引数として実行した結果を返す
  • それ以外
    • __builtin_expect()の第一引数にx、第二引数に1を渡すことでxが0以外のときに高速に処理できるようコンパイルされる