適用範囲:Armv8-A Architecture
回答:
実行状態は暗黙的であるためにソフトウェアルーチン自身が現在の実行状態を知ることはできません。この理由はプロセッサが正しく実行を行うには、現在の命令セットは適切な実行状態をターゲットにしている必要があるためです。
しかしながら、デバッガを使用している場合はプロセッサ状態の一部として実行状態を読み出せます。
あるいは、OSはアプリケーションの実行状態を知りたい場合があるでしょう。
SPSR_EL1のモードフィールドは例外を起こした側のモードを保持しています。M[4]がそのモードのRegister Widthを保持するために使用されます。
ここでは以下のようになります:
- 0: 64-bit Register Width (AArch64)
- 1: 32-bit Register Width (AArch32)
同じメカニズムがEL2のハイパーバイザあるいはEL3のセキュアモニターにおいてより低い例外レベルの実行状態を知るために利用できます。