2021:BKSC ビット操作命令
ビット演算命令はシフト、ローテート、符号拡張、シャッフルなどを扱う。ビット列の入力を数値で操作してビット列を得る。
1_011_xxxx ビット演算命令
2オペランド命令
0000 ROR - 右ローテート
0001 ROL - 左ローテート
0010 SHR - 論理右シフト
0011 SHL - 論理左シフト
0100 RORB - 右ローテートバイト
0101 ROLB - 左ローテートバイト
0110 SHRB - 論理右シフトバイト
0111 SHLB - 論理左シフトバイト
1000 ZEXT - ゼロ拡張
1001 SEXT - 符号拡張
1010 SHUF - ビットシャッフル
1011 -
1100 ZEXTB - ゼロ拡張バイト
1101 SEXTB - 符号拡張バイト
1110 SHUFB - バイトシャッフル
1111 -
ビット操作は汎用レジスタの全体に対して行う場合とSIMD命令として汎用レジスタ内の要素に対して行う場合を区別する。これは算術演算命令も同様。論理演算命令は意味がない。
単項演算命令
0000~0111 すべてシフト量が1
以下はビット列から数値を得る
1000 CLZ - Count Leading 0
1001 CTZ - Count Trailing 0
1010 POPC - Population Count
1011 ~ Reserved
3項演算命令
0000 REPLACE pos,size ビット置き換え
0100 REPLACE pos,size バイト置き換え
0xxx はシフト/ローテート命令
x0xx はビットが操作対象
x1xx はバイトが操作対象
ビット演算命令は他の演算命令と較べて余地が多いがここに特殊な命令を埋め込むことは避ける。
1_011_xxxx ビット演算命令
2オペランド命令
0000 ROR - 右ローテート
0001 ROL - 左ローテート
0010 SHR - 論理右シフト
0011 SHL - 論理左シフト
0100 RORB - 右ローテートバイト
0101 ROLB - 左ローテートバイト
0110 SHRB - 論理右シフトバイト
0111 SHLB - 論理左シフトバイト
1000 ZEXT - ゼロ拡張
1001 SEXT - 符号拡張
1010 SHUF - ビットシャッフル
1011 -
1100 ZEXTB - ゼロ拡張バイト
1101 SEXTB - 符号拡張バイト
1110 SHUFB - バイトシャッフル
1111 -
ビット操作は汎用レジスタの全体に対して行う場合とSIMD命令として汎用レジスタ内の要素に対して行う場合を区別する。これは算術演算命令も同様。論理演算命令は意味がない。
単項演算命令
0000~0111 すべてシフト量が1
以下はビット列から数値を得る
1000 CLZ - Count Leading 0
1001 CTZ - Count Trailing 0
1010 POPC - Population Count
1011 ~ Reserved
3項演算命令
0000 REPLACE pos,size ビット置き換え
0100 REPLACE pos,size バイト置き換え
0xxx はシフト/ローテート命令
x0xx はビットが操作対象
x1xx はバイトが操作対象
ビット演算命令は他の演算命令と較べて余地が多いがここに特殊な命令を埋め込むことは避ける。
この記事へのコメント