"ARMv8 Instruction Set Overview"を見てメモ書き。
- tetsu_koba
- 8137
- 4
- 5
- 1
"ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition" 通称ARM ARM を見てる。ダウンロードするのに登録が必要。
2012-04-08 15:09:2323 November 2011のARM ARM issue CからThumbEE instruction setがdeprecatedになってる。なんでだろう?もしかしてARMv8では削除されているのかな。
2012-04-08 15:16:06ThumbEEモードではJavaのJITコンパイラが生成するのに便利な命令が使える。ロードするだけで自動でNullチェックするとか、配列indexの範囲チェックを一命令でおこなえるとか。DalvikVMのJITではまだ使ってなかった。
2012-04-08 15:19:12"ARMv8 Instruction Set Overview"もダウンロードして見てる。32bitモードのThumbEE に関しては言及無し。でも..
2012-04-08 15:48:23ARMv8の32bitモードではIT命令の使用が特定のパターン以外はdeprecatedになってる。要するに、IT命令とその次の一個のThumb命令でCPUからひとつの条件付き32bit命令として扱えるパターン以外はダメらしい。CPUの気持ちになればそうかもね。
2012-04-08 15:54:27ARMv8の64bit命令。条件付きで実行できる命令が減っている。ARM命令のように全てのopcodeに条件bitの領域をとるのは無駄。効果のあるものだけ条件bitをつける。なるほど、これが32bitモードでのIT命令のdeprecateに関連するのね。
2012-04-08 16:24:03@tetsu_koba ARMv8の64bit命令。条件付きで実行できる命令が減っている。ARM命令のように全てのopcodeに条件bitの領域をとるのは無駄。効果のあるものだけ条件bitをつける。なるほど、これが32bitモードでのIT命令のdeprecateに関連するのね。
2012-04-08 16:36:14"ARMv8 ISA Overview"では32bitのARM命令はA32, 16/32bit混合のThumb2命令はT32と呼ばれている。ThumbEEについては何も書かれていない。あっさりと削除というのもあり得るな。実装が複雑で遅くなるのに世の中で使われている形跡がないから。
2012-04-08 16:57:39AArch64: ARMv8での64bitの実行状態。 AArch32: ARMv8での32bitの実行状態。ほぼARMv7互換。追加されてる命令がある。
2012-04-08 20:12:09A64: AArch64状態で利用可能な命令セット。A32: 32bitのARM命令セット。T32: 16/32bit混合のThumb2命令セット。
2012-04-08 20:16:10A64 overview: A clean, fixed length instruction set. 32bit固定長。"clean" Thumb2の時は隙間に無理矢理詰め込んだから、すごく不規則なビットパターンだった。逆アセンブラを作るのは大変だった。A64はすっきり。
2012-04-08 20:22:04これは、AArch64モードとAArch32モードではデコーダが完全に切り替わるということだね。逆アセンブラを作ろうとしたら、まずどっちのモードが確認しなきゃ。
2012-04-08 20:24:24load/storeのベースレジスタとしてレジスタ31が使われた場合と、一部の算術演算命令でレジスタ31はcurrent stack pointerを参照する。
2012-04-08 20:33:13MIPSにもゼロレジスタがあったけど、確かR0だったよね。A64だと31。でもアセンブラ表記では普通に#0と書けばいいんだろうね。
2012-04-08 20:35:14PC(Program Counter)は汎用レジスタに含まれない。PC相対のアドレッシングモードがあるので、これを使ってPCの値は取得できる。PCへの書き込みはジャンプ命令使え。
2012-04-08 20:38:58ARM命令だとR15がPCで、R15にmovするとブランチした。R15にaddすることでswitch文をシンプルに実装したりとか。Thumb2ではR15への書き込みはunpredictableだったはず。
2012-04-08 20:41:40パイプラインが深くなる今時のCPUの実装を考えたら、任意の時点でPCをレジスタとして読み書きを許すのはきついね。どの時点でPCの値がどうなっているかを全部仕様で明らかにしなきゃならない。それを守ることが実装の足かせになる。
2012-04-08 20:43:54