Thumb-2命令の機能に加えて、マネージド・ランタイムのコンパイル済みコードがよく使う操作を16ビット命令として提供する動作モード。
ThumbEEは、次の例外を除き、Thumb命令と同じ。
- 幾つかの命令は、ThumbEE状態からの遷移の影響で変化する。
- 殆どの命令は、他の操作をする前にnullチェックをするが、それ以外はほぼ同じ。
- 3つのThumb命令、BLX(イミディエイト)、16ビットLDM、16ビットSTMは、ThumbEE状態では削除される。オペコードは、BLX(イミディエイト)は未定義になり、16ビットLDM/STMは他の新命令に置き換えられている。
- ENTERXとLEAVEXという新命令が、Thumb命令セットとThumbEE命令セットの双方に追加されている。
nullチェックをしながら動作し、一部の命令を廃止して別の命令に置き換えているため、T32(Thumbステート)とは別のモードとしている。
- ENTERX ‐ Thumbステート→ThumbEEステート
- LEAVEX ‐ ThumbEEステート→Thumbステート
- CHKA ‐ 配列チェック命令
- HB、HBL ‐ ハンドラー分岐命令
- HBLP ‐ リンクとパラメーター付きハンドラー分岐命令
- HBP ‐ パラメーター付きハンドラー分岐命令
- LDR (イミディエイト) ‐ レジスターロード
- STR (イミディエイト) ‐ レジスターストア
ThumbEE命令は次の通り
15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 |
1 | 1 | 0 | 0 | opcode | |
Thumb命令で16ビットLDM/STMだった機械語をThumbEE命令に置き換えている。
したがってこの2つの命令は使用できなくなる。
opcode | 命令または命令クラス |
0000 | パラメーター付きハンドラー分岐(HBP) |
0001 | UNDEFINED |
001x | ハンドラー分岐、リンク付きハンドラー分岐(HB、HBL) |
01xx | リンクとパラメーター付きハンドラー分岐(HBLP) |
100x | フレームからレジスターロード(LDR (イミディエイト)) |
1010 | 配列チェック(CHKA) |
1011 | リテラルプールからレジスターロード(LDR (イミディエイト)) |
110x | レジスターロード(配列操作) (LDR (イミディエイト)) |
111x | フレームへのレジスターストア(STR (イミディエイト)) |
ENTERXとLEAVEXは、T32(Thumbステート)でもThumbEEステートでも利用できる命令として、上のオペコードとは別に定義されている。
- ENTERX 0xF3BF 0x8F0F
- LEAVEX 0xF3BF 0x8F1F
次の16ビットThumb命令はT32と動作が異なる。
- LDR (レジスター)
- LDRH (レジスター)
- LDRSH (レジスター)
- STR (レジスター)
- STRH (レジスター)
いずれも1ビットまたは2ビットの左シフトが付いている。
用語の所属
ARMアーキテクチャ
関連する用語
T32
Thumb-2命令