в догонкуstatic __inline void cpu_amdcpubug(void) {
__asm __volatile("nop" : : : "memory");
}
данный тип барьера (если операция используется как барьер) применяется только в случае борьбы с излишним кэшированием аргументов в регистрах cpu, ибо отключает оптимизацию и заставляет сохранить операнды на стеке - если после модификации они там не сохранены (ака закэшированы в регистр).
Но как легко заметить по коду функции gcc - у нас нету переменных которые бы потребовали такого обращения, как и нет обращения из еще одного thread внутри процесса gcc (gcc вообще сам по себе один процесс без потоков).
Значит данная операция была введена не с целью создания барьера оптимизирующим возможностям компилятора, а по какой-то другой причине? видимо этой причиной является добавление команды NOP - между телом всей функции и операции с %esp и возвратом из функции.
С уваженем к вам - ваш К. О.