Чем отличается инструкция asm "ldr" и "ldr_post"? - PullRequest
2 голосов
/ 30 января 2012

Я столкнулся с некоторыми ошибками компиляции при попытке перенести последнюю версию ffmpeg на платформу iOS. Эти ошибки произошли от ассемблера GNU (газ), который, кажется, не в состоянии обработать некоторые инструкции asm в последней версии ffmpeg.

Например:

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

Однако инструкция 'ldr_post' не найдена в предыдущей версии ffmpeg (более конкретно, версия 0.7).

Мой вопрос: в чем разница между «ldr_post» и «ldr»? Могу ли я изменить 'ldr_post' на комбинацию из нескольких более простых инструкций, чтобы избежать этих ошибок компиляции?

Ответы [ 2 ]

2 голосов
/ 30 января 2012

С 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 голос
/ 30 января 2012

ldr_post не является допустимой инструкцией ARM

Я предполагаю, что это макрос ... поэтому попробуйте найти определение макроса.

...