Комплект инструкций и сборка ARM/Thumb-2

Во-первых, я новичок в сборке ARM. На самом деле у меня есть несколько фрагментов кода, написанных для набора инструкций ARM, но моя цель — архитектура Cortex-M4, использующая набор инструкций Thumb-2. Должен ли я переписывать весь код, изменять некоторые из них или оставить его таким, какой он есть?

На самом деле у меня есть несколько файлов примерно по 250 строк в каждом. Вот образец

msr cpsr_c, #(CPSR_IRQ_LOCKED | CPSR_SVC_MODE)
stmfd sp!, {r0-r2,lr}
mrs r1, spsr
stmfd sp!, {r1}
ldr r1, =nested_kernel_entrance_counter
ldr r2, [r1]
add r2, r2, #1
str r2, [r1]
cmp r2, #1
bhi skip_kernel_enter

#if WITH_MEMORY_PROTECTION == YES
stmfd sp!, {r3}
bl tpl_mp_kernel_enter
ldmfd sp!, {r3}
#endif
ldr r1, =tpl_kern
mov r2, #NO_NEED_SWITCH
strb r2, [r1, #TPL_KERN_OFFSET_NEED_SWITCH]

person Zohra-tl    schedule 05.05.2014    source источник
comment
я надеюсь, что ваш старый код не является массовым. wiki.ubuntu.com/ARM/Thumb2PortingHowto   -  person Jacky Cheng    schedule 05.05.2014
comment
Большую часть вашего кода придется переписать. Два набора инструкций работают с одним и тем же набором регистров, но используют совершенно другой подход. Единственные инструкции, которые можно оставить в покое, это NEON.   -  person BitBank    schedule 05.05.2014
comment
просто попробуйте, соберите для cortex-m4 и залатайте жалобы на ассемблер, это самый быстрый способ... Если бы у вас был или использовался унифицированный синтаксис, то он перешел бы без нареканий.   -  person old_timer    schedule 05.05.2014
comment
Я думаю, что одной из особенностей thumb2 является возвращение большей части синтаксиса/функций руки, но с использованием набора инструкций переменной длины, чтобы немного сэкономить место для кода без особого ущерба для производительности. ранний большой палец был примерно на 10% медленнее, чем рука для той же задачи   -  person old_timer    schedule 05.05.2014


Ответы (1)


Возможно, вам не потребуется слишком много переписывать, в зависимости от того, какие функции набора инструкций ARM и варианта ARM вы использовали. Также возможно, что ваш код ARM уже совместим с Thumb-2.

ARM создала унифицированный язык ассемблера после того, как был представлен Thumb-2, чтобы повысить переносимость кода. Информацию об этом можно найти здесь: АРМ УАЛ. Я обнаружил, что это незначительное отклонение от сборки ARM старых времен, причем самым большим изменением является введение директивы IT(E) для условного выполнения. В Википедии есть пример здесь.

Есть некоторые другие конструкции, которые не будут переноситься напрямую, и если вы используете функции более продвинутого или сложного ядра ARM, которого нет у Cortex-M4, тогда потребуется переписать эту часть.

Я думаю, что если код еще не написан в ARM UAL, то, хотя это и займет время, было бы относительно просто запустить сценарий над кодом, который может помечать использование функций, которые неправильно написаны для UAL. Простое регулярное выражение может проверять наличие условных выражений в конце инструкций, и может быть даже относительно легко преобразовать эти конструкции для использования IT(E) <cond>.

person rjp    schedule 05.05.2014