Недавно мы обновили код до gcc4.3.3
от gcc4.2.4
.Ошибка сборки сборки (gcc4.2.4 = win, gcc4.3.3 = fail)
void testAndSet( volatile int* s, int* val)
{
__asm__ __volatile__ ("btsl $0, %0\n "
"jc bitSet\n "
"movl $0, %1\n "
"jmp returnVector\n"
"bitSet:\n "
"movl $1, %1\n"
"returnVector: " : "=m"(*s), "=m"(*val));
}
Наш код в настоящее время не удается со следующими ошибками,
lock.cxx: Assembler messages:
lock.cxx:59: Error: symbol `bitSet' is already defined
lock.cxx:61: Error: symbol `returnVector' is already defined
lock.cxx:59: Error: symbol `bitSet' is already defined
lock.cxx:61: Error: symbol `returnVector' is already defined
Эти символы не были нигде. (Переименование их вызывает ту же ошибку с новым именем).
Что случилось с этим? почему я получаю ошибки дважды?
Отлично. Вот и все. Интересно, что неудача с опцией gcc -02, но не с -O – user48956
Чем выше значение параметра -O, тем выше вероятность того, что он будет встроен в строки; по существу, -O2 и -O3 будут использовать оптимизацию, основанную на все более агрессивной инкрустации и разворачивании циклов и т. д. Возможно, стоит попробовать «-O» (оптимизировать без увеличения размера кода), что часто обеспечивает хорошую оптимизацию на средних площадках. –