読者です 読者をやめる 読者になる 読者になる

linuxのメモ

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

最適化 - unlikely()

概要

値が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()に引数の値と0を引数として実行した結果を返す
  • それ以外
    • __builtin_expect()の第一引数にx、第二引数に0を渡すことでxが0のときに高速に処理できるようコンパイルされる