ARMのtagged pointerと条件付き命令

久しぶりに面白そうな機械語命令の話題を目にしました。
2
前田敦司 @maeda

「新たにJavaScriptなどの軽量言語を効率的に実行できる、「Tagged Pointer(タグ付きポインタ)」と呼ぶ機構を64ビットコアに盛り込んだ。」 / “日経コンピュータReport - アームがプロセッサを64ビット化:…” http://t.co/GUNHeqU7

2012-11-22 11:21:08
_ko1 @_ko1

@maeda H/W 支援ってなんでしょうね ぱっと思いついたのは (1) メモリアクセス時,bit 上位を無視する (2) タグによる分岐の支援(特化した branch prediction),(3) その他

2012-11-22 11:23:08
寺田 実 @miterada

@_ko1 @maeda タグ部分だけを(マスクしなくても)比較できる命令なんてのもいいなあ

2012-11-22 11:26:05
_ko1 @_ko1

@miterada @maeda ああなるほど,数値演算系がありましたね.

2012-11-22 11:26:56
前田敦司 @maeda

@_ko1 @miterada もっとも抽象的にはタグによって処理を変える処理,少し具体的には1)タグの種類によってそれぞれの(正常)処理に分岐 2)タグがある値ならオーバーヘッドなしで正常処理,そうでなければトラップとかですかねえ.

2012-11-22 11:38:30
前田敦司 @maeda

@kiszk "Upper 8 bits of address can be configured for Tagged Pointers → Meaning interpreted by software"…上位8ビット無視するだけかな? @_ko1 @miterada

2012-11-22 11:44:06
寺田 実 @miterada

@maeda @kiszk @_ko1 データのポインタのタグとは別に、PCのタグを利用できないかな。同じアドレスの命令でも、PCのタグによって動作が変わるとか。

2012-11-22 11:48:53
前田敦司 @maeda

@miterada なるほど.X番地の関数を呼ぶのと,X+2^56番地を呼ぶのとでは,同じコードでも動作が異なる? @kiszk @_ko1

2012-11-22 11:52:01
寺田 実 @miterada

@maeda @kiszk @_ko1 特権レベルとかをPC上位にエンコードしてるみたいなもんかな。コンディションコードもいれちゃえば条件ジャンプなんて不要だ!

2012-11-22 11:55:07
前田敦司 @maeda

@miterada おー,同じADDでもccによってやったりやらなかったりとか? …いやいや,それはもともとARMに入ってます.ADDEQ, ADDNE, ADDGTとかhttp://t.co/HP69pnrm @kiszk @_ko1

2012-11-22 12:00:45
寺田 実 @miterada

@maeda @kiszk @_ko1 へえ、そうなんですか。コンパイラがうまく使えるのかな、ADDEQとか。しかし考えてみれば条件ジャンプにポインタタグを使うのも意味ないですな。普通の条件ジャンプと一緒だ。うーん。

2012-11-22 12:12:48
前田敦司 @maeda

@miterada コードのコンパクトさとか,分岐と違ってバイプライン処理を乱さないとかの利点があるんでしょうね.後者を強調するのはpredicationなんて言うんだと思います. @kiszk @_ko1

2012-11-22 12:17:06
寺田 実 @miterada

@maeda @kiszk @_ko1 なんとなくSIMD的な風味がありますね。ADDEQ。

2012-11-22 12:27:03
横山大作 @dyokoyama

@maeda @kiszk @_ko1 @miterada おー、KL1の処理系を思い出しました。上位2bitがタグになってて、変数、atom,整数を区別できるの。「PIMにはタグ付きポインタのハードウェア支援機構入れてもらった」って近山先生が言ってたような…。

2012-11-22 14:29:28
前田敦司 @maeda

@dyokoyama 68k等では上位bitのタグ(マスクしないでも比較命令で型判別できる),SPARCなんかだと下位bitのタグ(下位2bitが0でないとトラップする加算命令や,アラインメントが狂ってるとバスエラー)が定石でした @kiszk @_ko1 @miterada

2012-11-22 14:47:02
前田敦司 @maeda

@tshindoh ありがとうございます.48bitしか使わないけど,上位16bitにもちゃんとした値(オール0かオール1)入れなきゃいけない.でも,モードによって8bit自由な値が入れられるようにしたってことなのかな.@miterada @kiszk @_ko1

2012-11-22 14:52:42
Tomonori SHINDOH @tshindoh

@maeda そのような感じかと思います。

2012-11-22 15:44:16
前田敦司 @maeda

関連する技法をスライドにまとめてみました.→ 実行時のデータ型の表現手法 on @slideshare http://t.co/XSZ24otp http://t.co/9t6aLjBW

2012-11-23 16:59:26
Hirotaka Kawata @hktechno

64bit 命令セットでは CC 消えてるような。32bit なら別だけど。 ARMのtagged pointerと条件付き命令 http://t.co/5A5XCfup

2012-11-23 17:06:45
まとめたひと