【问题标题】:What's the different between asm instruction "ldr" and "ldr_post"?asm 指令“ldr”和“ldr_post”有什么区别?
【发布时间】:2012-01-30 03:55:15
【问题描述】:

我在尝试将最新的 ffmpeg 迁移到 iOS 平台时遇到了一些编译错误。 这些错误来自 GNU 汇编器(gas),它似乎无法处理最新 ffmpeg 中的一些 asm 指令。

例如:

libavcodec/arm/dsputil_armv6.S:109:bad instruction 'ldr_post r4,r1,r2'

但是,在 ffmpeg 的先前版本(更具体地说,0.7 版)中找不到指令“ldr_post”。

我的问题是,“ldr_post”和“ldr”有什么区别?我可以将“ldr_post”更改为一些更简单的指令的组合,以避免这些编译错误吗?

【问题讨论】:

    标签: assembly ffmpeg arm gnu-assembler


    【解决方案1】:

    来自asm.S

    .macro  ldr_post        rt,  rn,  rm:vararg
    A       ldr             \rt, [\rn], \rm
    T       ldr             \rt, [\rn]
    T       add             \rn, \rn, \rm
    .endm
    

    'A' 标记在 ARM 模式下发出的指令,'T' 在 Thumb 模式下发出。所以基本上它等同于ldr r4, [r1], r2,但在 ARM 和 Thumb 模式下都可以工作(Thumb-1 不支持后增量版本,因此必须使用两条指令进行模拟)。

    【讨论】:

      【解决方案2】:

      ldr_post 不是 ARM 有效指令

      我假设这是一个宏... 所以试着找到宏定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-13
        • 2011-03-20
        • 2016-04-09
        • 2020-02-28
        • 1970-01-01
        相关资源
        最近更新 更多