Собственно Сабж.
До этого программа писалась на Си, потом часть оптимизировалась на ASM под ARM. Асм-вые функции писались в отдельном листинге и тупо линковались.
Сейчас хочеться сделать по человечески в секции asm(), но вскрылась проблема с метками, код перенесенный из листинга в asm() не воспринимает метки.
просто в лоб (копипаст из листинга асм-а):
Не работает:
Говорит, метка уже определена, подумал, может и правда дал замудренное имя, таже песня :(
Прочитал, мол метки, должны быть вне asm(), тоже не работает. говорит метка (идентификатор) не определен.
Не работает:
Подскажите как правильно работать с метками в блоке asm() для ARM-а под GCC.
А что за точка перед Y ? в конце строки нужно ставить \n\t, в джампах нужно указывать f|b (forwards or backwards), в качестве локальных меток используйте циферки
asm volatile (
"1: ldr r0, [r3], #4 \n\t"
"mov r7, r0 \n\t"
"subs r1, r1, #1 \n\t"
" bne 1b \n\t" //переход на метку
);