"ARMv8 Instruction Set Overview"を見てメモ書き。
- tetsu_koba
- 8149
- 4
- 5
- 1
LDM, STM, PUSH, POPのような複数のレジスタをロードストアする命令は無い。ただし連続しないレジスタペアのロードスストアは可能。-> 2つまとめてならできるということか。
2012-04-08 20:55:30条件付きの命令は減った。条件付きブランチとhandful of data processing命令のみ。Thumb2のIT命令に相当するものは無い。
2012-04-08 21:02:25ARM命令のアドレシングモードにあったrotated 8-bit immediate はもっとわかりやすいものに置き換えられた。:)
2012-04-08 21:05:35CPSRをひとつのレジスタとしてアクセスする命令はなくなった。その代わりそれぞれのプロセッサ状態を更新する新しいシステム命令が導入された。
2012-04-08 21:09:12@tetsu_koba さん、条件付命令なくなったと聞いてたんですが残ってるんですか。分岐命令は当たり前として最悪move命令だけでも条件付実行できればなんとかなりそうですけど。
2012-04-08 21:10:52“coprocessor”という概念は削除された。--> ARMv7まではMMUやTLB, Cacheなどはコプロセッサに対する操作だった。
2012-04-08 21:11:2332bit演算の場合: ソースレジスタの上位32bitは無視される。デスティネーションレジスタの上位32bitはゼロクリアされる。コンディションbitは下位32bitの結果を反映する。
2012-04-08 21:20:31AArch64のメモリ変換システムは49bitの仮想アドレスをサポートする。(変換テーブルあたり48bit) --> ?? 残りの1bitは?
2012-04-08 21:24:32仮想アドレスは49bitから符号拡張されて64bitポインタに格納される。オプションとして64bitの中の上位8bitはタグとして扱うことを選択できる。ロードストア命令と間接ブランチ命令では無視される。
2012-04-08 21:31:41符号付き/無し/32bit/64bitの割り算命令がある。剰余算は無い。“divide by zero”に対するハードウェアのチェックは無い。しかし長いレイテンシの後で0割りの結果は0が書き込まれる。--> 例外は発生しないということかな。
2012-04-08 21:44:27ゼロレジスタとしてのレジスタ31の表記。32bit: WZR, 64bit: XZR。スタックポインタとしてのレジスタ31の表記。32bit: WSP, 64bit: SP。W31やX31は無い。
2012-04-08 22:01:10レジスタの無条件ブランチで、BR XmとRET {Xm}が区別されている。CPUにサブルーチンからの戻りかどうかのヒントを付ける。分岐予測のためのものかな。RETはレジスタ省略するとX30が使われる。
2012-04-08 22:15:00オフセットを加算する前のスタックポインタの値は16byteアラインでなければならない。そうでないとstack alignment exception が生成される。
2012-04-08 22:19:26LDNP, STNP: Load-Store Non-temporal Pair 2つのレジスタのロードストアを"non-temporal”のヒント付きで行う。このあと再び同じところをアクセスする可能性は低いという意味。キャッシュシステムはこのヒントで処理を変える。
2012-04-08 22:26:54