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

アクセスカウンタ

zoom RSS シフト命令、ビットフィールド命令

<<   作成日時 : 2014/10/12 03:32   >>

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

 基本的なシフト命令は論理左シフト、論理右シフト、算術右シフト。SPARCはこれだけしかない。
その他のRISCにはローテート命令や任意のbit位置を取り出したり挿入したりするビットフィールド命令が存在する。
 32bitから64bitになったプロセッサはシフト命令が32bitの範囲で動作するものと64bitの範囲で動作するもので分けてある。これは32bitモードでの互換性を保つため。常に64bitで動作させると謎の値を上位から持ってきたりする可能性がある。

※PA-RISC、POWERはbit位置をMSB側から0,1,2,...と数えるので注意

・Extract命令
 レジスタ内のある位置から指定したbit幅の部分を取り出し、右詰めで返す。あまった左側のフィールドは0で埋めるか、または符号拡張する。

画像


□MIPS
DEXT/DEXTM/DEXTU命令 これらは同じ動作をする命令をビット指定の制限で分けただけ。

DEXT rt,rs,pos,size // pos,sizeは定数
0≦pos<32,0<size≦32,0<pos+size≦63
rs[pos+size-1:pos] をrdの下位に詰めて代入、rdの残り上位[63:size]は0で埋める

DEXTM rt,rs,pos,size // pos,sizeは定数
0≦pos<32,32<size≦64,32<pos+size≦64
rs[pos+size-1:pos]をrdの下位に詰めて代入、rdの残り上位[63:size]は0で埋める

DEXTU rt,rs,pos,size // pos,sizeは定数
32≦pos<64,0<size≦32,32<pos+size≦64
rs[pos+size-1:pos]をrdの下位に詰めて代入、rdの残り上位[63:size]は0で埋める

EXT命令 同様 32bit版

□PA-RISC
Extract Doubleword
EXTRD,{U|S} r,pos,len,t

GRrの中のposから上方向へlenサイズを、GRtの下位へ。あまった上位は符号拡張(S)か0で埋める(U)


・Insert(Deposit)命令

 レジスタの下位からある長さのbit列を、別のレジスタの途中に埋め込む。
画像


□MIPS

DINS rt,rs,pos,size
DINSM,DINSUも同様
rt[size-1:0]をrd[pos+size-1:pos]に上書き

INS命令 同様 32bit版

□PA-RISC

Deposit Doubleword
DEPD r,pos,len,t

GRr の下位からlenサイズを、GRtのposより上に挿入


 さて、POWERはExtract/Insert動作をひとつの命令で実現している。
□POWER

画像



 Insertの場合は、挿入したいbit列があるレジスタをローテートし、その部分をマスクして取り出す。その値を対象となるレジスタの部分と置き換える。
 Extractの場合は、取り出したいbit列を最下位に並ぶようローテートし、その部分をマスクして取り出す。値が0のレジスタと置き換えれば良い。

以下の説明が詳しい。
玄箱でアセンブリ-8 - シフト/ローテイト命令(Jun's Homepage)
PowerPC アセンブラ ニーモニック(ysd@KLab)


□Alpha
 バイト単位で操作する命令がある。本来はメモリアクセスでバイト/ハーフワードを加工するもの。メモリアクセスでバイト/ハーフワード単位のロード/ストアが追加されたので本来の用途はなくなったはず。

EXT{B|W|Q|L}{L|H}
INS{B|W|Q|L}{L|H}
MSK{B|W|Q|L}{L|H}
SEXTB/SEXTW
ZAP/ZAPNOT


 Extract動作は論理左シフト後、論理右シフトまたは算術右シフトで実現できる。Insert動作はちょっと面倒で、POWERがやっている動作そのものになる。(シフト→マスク抽出、対象をマスク、その後OR)

 Insert動作やPOWERのRotate Left Word then AND with Maskは1サイクルで済まなさそうな感じがするけどどうでしょうね。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




シフト命令、ビットフィールド命令 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる