Цитата(klen @ Oct 26 2009, 14:09)

я всегда думал что инлайн асм вставки для того и придуманы чтоб компиллер их ни прикаких обстоятельствах не трогал
Компилер волен выбирать регистры из указанных в параметрах асм-вставки. И выбрасывать ненужные по его мнению команды. То есть, на самом деле поле деятельности для оптимизации имеется, и немалое.
Цитата
эффект о котором Вы говорите скорее всего никак с оптимизацией не связан, я думаю что тут или при линковке чето прилезло или атрибуты у функции __builtin_clz какието такие что заставляют компиллер или линкер делать доп теложвижения, ну например распологать ее в адресном пространстве с хитрым выравниванием или стек для нее както хитро выделить.
Нет, ничего такого. Это инлайн-функция, и код самой функции получается одинаковый с точностью до регистров. То есть, полностью идентичный. Но обрамляющая функция (та, в которую вставляется наша инлайн-функция) - компилится чуть оптимальнее.
------
Посмотрел повнимательнее. Я был не прав

Вся экономия произошла от того, что при употреблении __builtin_clz() компилер постеснялся заинлайнить одну функцию, содержащую вызов моей инлайн-функции. А при использовании встроенного ассемблера - заинлайнил.
То есть, похоже, вся разница в том, что __builtin_clz() добавляет к уровню вложенности вызовов ещё один уровень.
Если бы я знал, что такое электричество...