iOS で ffmpeg を使用しようとしていて、最適化されたアーム コードでクラッシュをデバッグしていました。一部の未署名 (.u16、.u32) 命令が署名付き命令 (.i16、.i32) に置き換えられていることを発見しました。GDB の逆アセンブルされた命令はソース コードと完全には一致しないため、簡単に確認できます。
例えば、
vrshrn.u32 -> vrshrn.i32
vrshrn.u16 -> vrshrn.i16
vadd.u16 -> vadd.i16
私の質問:
- この動作は正しく、期待どおりですか? そうでない場合、どのように修正しますか?
- それらが同等である場合、なぜ署名されていないものが必要なのですか? そのようにコードがより明示的であるためですか?
- この動作は、他のプラットフォームのツールキットで想定されていますか? たとえば、Android のツールキットは?(AppleのASは古いものだと聞いたことがあります)