竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS 単項演算命令

<<   作成日時 : 2017/01/17 02:25   >>

面白い ブログ気持玉 1 / トラックバック 0 / コメント 0

 引数として1つのレジスタを入力とし、何らかの加工をして結果を返す命令を整理してみた。すぐ思いつくのは全bit反転のNOTだけど、これは論理演算命令の入力または出力を反転することで求めることができる。

(1)元のデータを加工するもの

NOT bit反転
INC +1する。ADD A,1,Y と同等
DEC -1する。DEC A,1,Y と同等
NEG 引数を2の補数とみなして符号を反転する。負の最大値が引数の場合はオーバーフロー
ABS 引数を2の補数とみなして絶対値を求める。負の最大値が引数の場合はオーバーフロー
SRL Shift Right Logical  右1bitシフト
SRA Shift Right Arithmetic 右1bitシフト ÷2相当
SL Shift Left(Logical/Arithmetic) 左1bitシフト×2相当
ROL Rotate Left 左1bitローテート
ROR Rotate Right 右1bitローテート
REV Reverse ビット順を反対にする

 これらの命令が必須かというとそうでもない。あればコードサイズが短縮できる。

(2)元のデータを調べるもの

POPC Population Count 1が立っているビットの数を数える
CLZ Count Leading Zero MSB側から見て0が連続しているビットの数を数える。別名NLZ(Number of Leading Zero)
CTZ Count Trailing Zero LSB側から見て0が連続しているビットの数を数える。別名NTZ(Number of Trailing Zero)
BSR Bit Scan Reverse 1に立っているもっとも高位のbit位置を返す。all0の場合結果は不定。
BSF Bit Scan Forward 1が立っているもっとも低位のbit位置を返す。all0の場合結果は不定。

・BSR/BSF命令はIA32に存在する。BSR+1+CLZ=レジスタ幅、BSF+1+CTZ=レジスタ幅の関係がある。また、POPC命令があればレジスタ幅が求められる。

 AlphaではCLZ/CTZ/POPC相当の命令は仕様書のFourth Editionで追加されていた。

参考:
明日使えないすごいビット演算
ビットを数える・探すアルゴリズム
Bit scan reverseをAVXで並列化する

Tips IA32(x86)汎用命令一覧 Bから始まる命令 BSF命令
BSR―Bit Scan Reverse


ハッカーのたのしみ―本物のプログラマはいかにして問題を解くかハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
ジュニア,ヘンリー・S. ウォーレン Jr.,Henry S. Warren

エスアイビーアクセス 2015-01
売り上げランキング : 324051

Amazonで詳しく見る
by G-Tools


テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
面白い

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




単項演算命令 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる