Заменил на пробу
Код
INLINE inline byte GetHighPriority(TProcessMap pm)
{
dword clzero;
asm ("clz\t%0, %1": "=r" (clzero): "r" (pm));
return (31 - clzero);
}
{
dword clzero;
asm ("clz\t%0, %1": "=r" (clzero): "r" (pm));
return (31 - clzero);
}
на
Код
INLINE inline byte GetHighPriority(TProcessMap pm)
{
return (31 - __builtin_clz(pm));
}
{
return (31 - __builtin_clz(pm));
}
Собственно код, генерируемый компилятором для этой функции - не поменялся. Но. Размер проекта уменьшился на 40 байт. Это для пяти вызовов данной функции. Это конечно мелочи для проекта на 16 Кб, но тем не менее. Насколько я понял по листингу, при использовании __builtin_clz() компилятор несколько более оптимально перетасовывает окружающие куски кода.
Собственно, вывод мой таков - несмотря на отличную оптимизацию встроенного ассемблера, компилятор не может (или не хочет) применять к нему все возможные методы оптимизации. Возможно, этот вывод поспешен, потому прошу тех, кто придумает куда можно применить вышеуказанные встроенные функции применить их, и рассказать о результатах
