Генерация высококачественного кода для программ, написанных на СИ - [15]
> else
> k5 = i5 + i2;
>
>
/* ------------------------------------------------ *
¦ Проверка того, как компилятор генерирует адрес ¦
¦ переменной с константным индексом, размножает ¦
¦ копии и регистры ¦
* ------------------------------------------------ */
>
> ivector[ 0 ] = 1;
/* генерация константного адреса */
> ivector[ i2 ] = 2;
/* значение i2 должно быть скопировано*/
> ivector[ i2 ] = 2;
/* копирование регистров */
> ivector[ 2 ] = 3;
/* генарация константного адреса */
>
>
>
/* ----------------------------- *
¦ Удаление общих подвыражений ¦
* ----------------------------- */
> if(( h3 + k3 ) < 0 || ( h3 + k3 ) > 5 )
> printf("Common subexpression elimination
\n>");
> else {
> m3 = ( h3 + k3 ) / i3;
> g3 = i3 + (h3 + k3);
>
>
/* -------------------------------------- *
¦ Вынесение инвариантного кода ¦
¦ (j * k) может быть вынесено из цикла ¦
* -------------------------------------- */
>
> for( i4 = 0; i4 <= max_vector; i4++)
> ivector2[ i4 ] = j * k;
>
>
/* ----------------------------- *
¦ Вызов функции с аргументами ¦
* ----------------------------- */
>
> dead_code( 1, "This line should not be printed" );
>
>
/* ------------------------------ *
¦ Вызов функции без аргументов ¦
* ------------------------------ */
>
> unnecessary_loop();
>
> }
/* Конец функции main */
>
>
/* ------------------------------------------------------ *
¦ Функция: dead_code ¦
¦ Проверка недостижимого кода и лишних ¦
¦ присваиваний. Не должен генерироваться код. ¦
* ------------------------------------------------------ */
>
>void dead_code( a, b )
> int a;
> char *b;
> {
> int idead_store;
>
> idead_store = a;
> if( 0 )
> printf( "%s
\n>", b );
> }
/* Конец dead_code */
>
>
/* ---------------------------------------------------- *
¦ Функция: unnecessary_loop ¦
¦ Цикл в следующей функции ненужен, так как ¦
¦ значение присваивания постоянно. В идеале ¦
¦ цикл должен быть удален. ¦
* ---------------------------------------------------- */
>void unnecessary_loop()
> {
> int x;
>
> x = 0;
> for( i = 0; i < 5; i++ )
/* Цикл не должен генерироваться*/
> k5 = x + j5;
> }
/* Конец unnecessary_loop */
>
/* ---------------------------------------------------- *
¦ Функция: loop_jamming ¦
¦ Два цикла в этой функции имеют одинаковые ¦
¦ заголовки и могут быть слиты в один. ¦
* ---------------------------------------------------- */
>void loop_jamming( x )
> int x;
> {
> for( i = 0; i < 5; i++ )
> k5 = x + j5 * i;
> for( i = 0; i < 5; i++ )
> i5 = x * k5 * i;
> }
/* Конец loop_jamming */
>
/* ------------------------------------------------------ *
¦ Функция: loop_unrolling ¦
¦ Цикл в этой функции должен быть заменен ¦
¦ тремя присваиваниями с использованием ¦
¦ константной индексации массива или машинно- ¦
¦ зависимыми командами для инициализации ¦
¦ блока памяти. ¦
* ------------------------------------------------------ */
>void loop_unrolling( x )
> int x;
> {
> for( i = 0; i < 6; i++ )
> ivector4[ i ] = 0;
> }
/* Конец loop_unrolling */
>
/* ----------------------------------------------------- *
¦ Функция: jump_compression ¦
¦ Эта программа полезна для демонстрации ¦
¦ сжатия цепочки переходов. goto end_1 может ¦
¦ быть заменен на прямой переход на beg_1. ¦
* ----------------------------------------------------- */
>int jump_compression( i, j, k, l, m )
>int i, j, k, l, m;
> {
>beg_1:
> if( i < j )
> if( j < k )
> if( k < l )
> if( l < m )
> l += m;
> else
> goto end_1;
> else
> k += l;
> else {
> j += k;
>end_1:
> goto beg_1;
> }
> else
> i += j;
> return( i + j + k + l + m );
> }
/* Конец jump_compression */
![Изучаем Java EE 7](/storage/book-covers/e0/e0ee9b7e3e4f168a93df98d7e47d66089eac3652.jpg)
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
![Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше](/storage/book-covers/d0/d0fc13172d4310c9da7b10ba57a3fcb2e3d9f10d.jpg)
Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.
![Обработка событий в С++](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![MFC и OpenGL](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Симуляция частичной специализации](/storage/book-covers/7e/7e33d937f206a76edb7f45006e896cc191605df5.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Питон — модули, пакеты, классы, экземпляры](/build/oblozhka.dc6e36b8.jpg)
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.