linuxのメモ

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

bit操作 - CONST_MASK_ADDR()

概要

ビットマップ内の対象ビットが含まれるメモリアドレスを引数とする拡張インラインアセンブラ命令を生成する

詳細

このマクロでは以下の引数を受け取る

  • ビット番号を示す : nr
  • ビットマップを保持する変数へのポインタ : addr

BITOP_ADDR()addrが示すアドレスにnrを3ビット右にシフトした値を渡すことで、拡張インラインアセンブラに使用する引数の命令を取得する

尚、3ビット右にシフトする理由は、アセンブラ命令のオペランドのサイズがバイト(8ビット)を想定しているため対象のビットが格納されているアドレスを算出するためである