asm指令“ldr”和“ldr_post”之间有什么不同?

时间:2012-01-30 03:55:16

标签: assembly ffmpeg arm gas

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

例如:

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

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

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

2 个答案:

答案 0 :(得分:2)

来自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模式下发出的指令,在Thumb模式下'T'。所以基本上它等同于ldr r4, [r1], r2,但在ARM和Thumb模式下都有效(Thumb-1不支持后增量版本,因此必须使用两条指令进行模拟)。

答案 1 :(得分:1)

ldr_post不是ARM有效指令

我认为这是一个宏...... 所以试着找到宏观定义。