Метка должна быть локальной, т.е. начинаться с заглавной буквы L
. Обратите внимание, что это отличается от целей ELF, где локальные метки начинаются с .L
.
. Этот код прекрасно скомпилирован для меня:
void func()
{
__asm__ volatile
(
"eor r0, 0 \n\t"
"cmp r0, 0 \n\t"
"beq Ldone \n\t" /*!!!*/
"eor r0, 0 \n\t"
"Ldone: \n\t"
"bx lr \n\t"
);
}
В качестве примечания, возможно, вы захотитенапишите свою функцию полностью в сборке следующим образом, потому что, насколько мне известно, нет никакой гарантии, что компилятор не вставит код до или после вашей сборки, которая нарушает ваши предположения. Поэтому я бы предложил что-то вроде этого:
__asm__
(
"_func: \n"
"eor r0, 0 \n"
"cmp r0, 0 \n"
"beq Ldone \n"
"eor r0, 0 \n"
"Ldone: \n"
"bx lr \n"
);