我试图在 iOS 上使用 ffmpeg 并在优化的 arm 代码中调试崩溃。我发现一些无符号(.u16,.u32)指令已被有符号(.i16,.i32)取代。很容易看出,因为 GDB 上的反汇编指令与源代码不太匹配。
例如,
vrshrn.u32 -> vrshrn.i32
vrshrn.u16 -> vrshrn.i16
vadd.u16 -> vadd.i16
我的问题:
- 这种行为是否正确且符合预期?如果不是,我们如何纠正它?
- 如果它们是等价的,为什么我们还需要未签名的呢?是因为这样代码更明确吗?
- 其他平台的工具包是否会出现这种行为?比如Android的工具包?(听说苹果的AS很老了)