ARM Assembler Tips

よく、下位 1bit が 1 である時は〜をするっていう処理を、こうやって書く。

if( (b & 1) != 0 ){
    // 処理
}

これは、AND と CMP の2命令に変換される

AND     r0,b,#1
CMP     r0,#0
...

比較のために2命令を使うのは、ちょっと勿体ない。


これを短くするには、次のように書く。

if( (b << 31) != 0 ){
    // 処理
}

こうすれば、

CMP     r0,b,LSL #31
...

こんな感じで、1命令にしてくれる。