2012-01-30 25 views
2

嘗試將最新的ffmpeg遷移到iOS平臺時遇到了一些編譯錯誤。 這些錯誤來自GNU彙編程序(gas),它似乎無法在最新的ffmpeg中處理一些asm指令。asm指令「ldr」和「ldr_post」有什麼不同?

例如:

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

然而,指令 'ldr_post' 在先前版本的ffmpeg(更具體的,版本0.7)中沒有找到。

我的問題是'ldr_post'和'ldr'有什麼區別?我可以將「ldr_post」更改爲幾條較簡單的說明的組合,以避免這些編譯錯誤?

回答

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模式, 'T' 在Thumb模式發射的指令。所以基本上相當於ldr r4, [r1], r2,但在ARM和Thumb模式下都可以使用(Thumb-1不支持後增加版本,因此必須使用兩條指令進行模擬)。

1

ldr_post不是ARM有效指令

我想這是一個宏... 所以要儘量找到宏定義。