命令セットアーキテクチャを考える9 (ビット操作命令)
どんどんいきます。次はビット操作命令です。
[ビット操作命令]:6命令
setbit [v] [b|hw|w|dw] Rs,{Rt|=imm},Rd
・Rsの内容を、Rtまたはimmで示されるビット位置を"1"にセットし、Rdに格納する。
・セットする元の値によってCCR0を設定(正/零)する。(結果ではなくて、元の値によってCCR0がセットされることに注意)
・byteモード/half-wordモード/wordモードモードの場合、Rsの下位8ビット/16ビット/32ビットのうちの指定ビットのみがセットされ、残りの上位ビットは変更されない。
・byteモード/half-wordモード/wordモード/double-wordモードの場合、Rtまたはimmの下位3ビット/4ビット/5ビット/6ビットのみが有効であり、符号無し二進数とみなされる。
・SIMDモードの場合、Rsレジスタ内のデータを8bit*8、16bit*4、32bit*2のデータとしてそれぞれセットされる。
・SIMDモードの場合、Rtまたはimmの下位ビットが用いられ、すべてのパックドデータに対して同じビット位置がセットされる。
・CCRは変更されない。
clrbit [v] [b|hw|w|dw] Rs,{Rt|=imm},Rd
・"0"にクリア(clear)するほかはsetbitと同様。
revbit [v] [b|hw|w|dw] Rs,{Rt|=imm},Rd
・もとのビットを反転(reverse)する("0"→"1"、"1"→"0")ほかはsetbitと同様。
[擬似命令]
tstbit [b|hw|w|dw] Rs,{Rt|=imm}
・指定位置のビット状態をテストする。結果はCCR0にセットされる。(正/零)
・アセンブラが「setbit [b|hw|w|dw]Rs,{Rt|=imm},R0」に翻訳する。Rdにゼロレジスタを指定しているため、CCR0以外はなにも変更されない。
[ビットカウント命令]:4命令
ctzero [v] [b|hw|w|dw] Rs,Rd
・Rs内の"0"ビットの数をカウントし(count zero bits)、Rdに格納する。
・byteモード/half-wordモード/wordモード/double-wordモードでは、Rsの下位8ビット/16ビット/32ビット/64ビット内の"0"ビットの数のみをカウントし、Rdの下位8ビット/16ビット/32ビット/64ビットに格納する。Rdの余った上位ビットは変化しない。
・"0"ビットのカウント数によって、CCR0をセットする。(正/零)
・SIMDモードの場合、Rsレジスタ内のデータを8bit*8、16bit*4、32bit*2のデータとしてそれぞれゼロビットの個数がカウントされ、Rdの対応する領域に格納される。
・CCRは変更されない。
ctbit [v] [b|hw|w|dw] Rs,Rd
・Rs内の"1"ビットを数える(count bits)ほかはctzeroと同様。
・反転してから"0"ビットを数えても同じ結果が得られるので不要とも言えるが…
ctlzero [v] [b|hw|w|dw] Rs,Rd
・上位ビットからの連続した"0"ビットを数える(count leading zero bits) ほかはctzeroと同様。
cttzero [v] [b|hw|w|dw] Rs,Rd
・下位ビットからの連続した"0"ビットを数える(count trailing zero bits)ほかはctzeroと同様。
| 固定リンク
この記事へのコメントは終了しました。


コメント