指示は次のようなものですか
fstmiaxne ip!, {d8-d15}
現在の条件コードにより、コプロセッサが存在しない限り操作が実行されないことが保証されている場合、必要なコプロセッサが存在しない可能性がある場合に ARM アセンブリで使用しても有効/安全ですか?
アーキテクチャのバージョンとバリアントによって異なります。ARM アーキテクチャ リファレンス マニュアル (DDI 0406B) から:
未定義命令の条件付き実行
A8-8 ページの「条件付き実行」で説明されている条件付き実行規則は、すべての命令に適用されます。これには、未定義命令および未定義命令例外へのエントリを引き起こすその他の命令が含まれます。
そのような命令が条件チェックに失敗した場合、動作は、次のように、アーキテクチャ プロファイルと、未定義命令例外へのエントリの潜在的な原因によって異なります。
ARMv7-A プロファイルでは:
— 潜在的な原因が命令自体の実行であり、命令が読み取るデータ値に依存する場合、命令は NOP として実行され、未定義命令例外は発生しません。
— 潜在的な原因が以前のコプロセッサ命令の実行、または命令自体の実行であるが、命令が読み取るデータ値に依存しない場合、命令が NOP として実行されるか、または未定義命令例外が発生するかは実装定義です。実装では、そのようなすべてのケースを同じ方法で処理する必要があります。
- ARMv7-R プロファイルでは、命令は NOP として実行され、未定義命令例外は発生しません。
ノート
ARMv7 より前は、未定義命令例外が発生した場合でも、条件チェックに失敗した命令をすべての実装が NOP として実行していました。これらの実装用に作成された未定義命令ハンドラーは、未定義命令がその条件チェックに合格したことをチェックせずに想定する場合があります。このような未定義の命令ハンドラは、すべての ARMv7-A 実装で正しく機能する前に、条件が渡されたことを確認するために書き直す必要がある可能性があります。
非推奨の VFP 命令を例として使用しているため、ARMv7 より前のアーキテクチャを扱っていると想定しているため、NOP として扱われると想定できるようです。
編集:ARMv7-Mの場合(DDI 0403Dから):
未定義命令の条件付き実行
未定義の命令が ARMv7-M の条件チェックに失敗した場合、その命令は NOP として動作し、例外は発生しません。
ノート
条件フィールドが「1110」の分岐 (B) 命令は UNDEFINED であり、IT 命令からの条件チェックの失敗によって修飾されない限り、例外が発生します。
このサイトには答えがあるようです:
http://www.peter-cockerell.net/aalp/html/app-a.html
また、条件コードによって ARM が命令を無視するために命令が実行されない場合、コプロセッサに「提供」されたり、未定義の命令としてトラップされたりすることはありません。これは、条件コードが「never」であるために命令が「操作なし」である場合、残りの命令は何でもかまいません。トラップが発生することはありません。
しかし、私はその主張の信頼できる情報源がなければ、それを信頼することを少しためらっています.