"Адское" программирование Ada-95 -Компилятор GNAT

         

Изменяемые инструкции



Изменяемые инструкции

Иногда, оптимизатор компилятора может перехитрить самого себя.Например, когда инструкция ассемблера с параметром ввода расположена внутри цикла, он может переместить загрузку параметра ввода за пределы цикла, подразумевая, что это одноразовая инициализация.Если ваш код не допускает такой трактовки (и вы обнаруживаете этот "сюрприз" достаточно быстро, после анализа генерируемого компилятором ассемблерного файла), то вы можете указать компилятору, чтобы он не пытался перехитрить вас путем установки в True параметра Volatile.Рассмотрим следующий пример:

Asm ("movl %0, %%ebx" & "movl %%ebx, %1", Inputs => Unsigned_32'Asm_Input ("=g", Input), Outputs => Unsigned_32'Asm_Output ("g", Output), Clobber => "ebx", Volatile => True");

Примечательно, что по умолчанию параметр Volatile установлен в False пока не существует ни одного параметра вывода.В результате демонстрации такого примера, может показаться, что установку параметра Volatile в True стоит использовать повсеместно.Однако, необходимо заметить, что такая установка будет блокировать оптимизацию кода.Следовательно, ее использование реально необходимо только в тех случаях, когда без этой установки возникают какие-либо проблемы.



Содержание раздела








Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий