32bitのAlphaコード?

 七誌の開発日記 Windows NT/Alpha用のクロスgccを読んで、え?ナンデ32bit?Alphaってピュア64bitアーキテクチャじゃなかったっけ?と思って調べなおしてみた。

 Alphaの加算、減算と乗算命令にはLongwordとQuadwordの形式がある。

ADDQ 64bit加算
SUBQ 64bit減算
MULQ 64bit乗算

これらは64bit同士での演算。/Vが付いた命令はオーバーフローでトラップを発生させる。


ADDL 32bit加算
SUBL 32bit減算
MULL 32bit減算

これらはLongword形式で、ソースに指定するレジスタの上位32bitを無視して計算し、結果は符号拡張して64bit幅に収める。
オーバーフローの検出は/Vが付いた命令形式でトラップを発生させ、演算結果が32bitの範囲内に収まるかどうかで判定する。

ハードウェアの実装としては、LongwordでもQuadwordでもそのまま演算器に渡し、Longwordの場合は結果のbit31を符号拡張してbit63~32を塗りつぶしてしまえばよい。またオーバーフローの判定は32bit幅で行う。つまり結果を加工するだけ。

 ということで32bitの範囲内で演算する命令があった。Alphaデビュー当時はまだ32bitが主流だったこと、VAXも32bitなので互換性のために実装されていたものと思われる。

 また、ADD命令にはS4ADDL、S8ADDL、S4ADDQ、S8ADDQというソースレジスタの片方を×4、×8してから加算する命令がある。
これらはPA-RISCのSH2ADD/SH3ADD命令と同等。値を定数倍する時に使える。→PA-RISC1.1の演算命令(1)

 散発的に命令セットアーキテクチャを調べているがそろそろまとめんといかんなあ。元ボスの口癖は「表にしろ、表に」だったなあ。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック