« 命令セットアーキテクチャを考える8 (シフト/ローテート/バイトスワップ命令) | トップページ | 命令セットアーキテクチャを考える10 (浮動小数点数演算命令) »

2014/06/12

命令セットアーキテクチャを考える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と同様。

|

« 命令セットアーキテクチャを考える8 (シフト/ローテート/バイトスワップ命令) | トップページ | 命令セットアーキテクチャを考える10 (浮動小数点数演算命令) »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 命令セットアーキテクチャを考える9 (ビット操作命令):

« 命令セットアーキテクチャを考える8 (シフト/ローテート/バイトスワップ命令) | トップページ | 命令セットアーキテクチャを考える10 (浮動小数点数演算命令) »