GCC - The Complete Reference (537669), страница 101
Текст из файла (страница 101)
Как правило, такая схема работы требуется только тогда, когда модель малой памяти нарушена за счет изменения регистра ПР. -Иавх-Е1Х Отключает генерацию дополнительного кода, необходимого лля исправления результатов работы инструкции вхх. По умолчанию установлена опция -впо-хаас-х1к. 454 Часть 111. Внутренняя структура н окружение Инструкция ухх реализаций СЗх/С4х, предназначенная для преобразования числа с плавающей точкой вислое число, выбирает ближайшее целое меньшее илн равное числу с плавающей точкой, а не просто ближайшее целое число.
Поэтому прн работе с отрицательными числами с плавающей точкой результат инструкции будет ошибочным. Для обнаружения и устранения этой ошибки необходим дополнительный код, генерируемый при установленной опции -кягавс-г1х. -пз!оор-ыпяяпес! Разрешает использование счетчика итераций без знака.
По умолчанию установлена опция -вшо-1оор-цпв1дцеб. Максимальное значение счетчика итераций при использовании инструкций цргв и цвтв (и рв для реализаций С40) составляет 2" 31+1, поскольку эти инструкции для прекращения выполнения цикла проверяЮт счетчик итераций на значение, меньшее нуля. Если счетчик итераций представляет собой значение без знака, то существует возможность того, что максимальное значение 2"31+1 будет превышено.
Также см. опции -гягрсЬ и -гягрсв. -пппегпраггп Генерирует код, который лля передачи аргументов функциям использует регистры. По умолчанию там, где это возможно, аргументы передаются в регистрах, а не записываются в стек. Также см, опцию -тгедрагю. -гпгпру! Реализации СЗх лля операций целочисленного умножения используют 24-битную инструкцию мвхх и не вызывают используемые по умолчанию библиотечные функции, возвращающие результат длиной 32 бита. Действие опции -ляврух можно отменить с помощью опции -яшо-труе. Если один из операндов операции является константой, умножение будет выполняться с помощью инструкций сдвига и сложения.
Если опция -явврух для реализаций СЗх не установлена, то операции возведения в квадрат выполняются подстановкой кода без вызова функции из библиотеки. -гпрагаПе!-!пипа Разрешает выработку параллельных инструкций. Эта опция устанавливается по умолчанию при установке опции -о2, она может быть отключена другой опцией -юцо-рага11е1-1цвпв. Также ем.опцию -трага11е1-юру. -гпрагаПе!-гпру Разрешает генерацию параллельных инструкций мух ! ! зкрр и мух ! ! Вцв при условии, что также установлена и опция -гярага11е1-завов.
Эти инструкции имеют более жесткие требования к регистрам, вследствие чего они могут негативно сказаться на эффективности кода. Действие опции -гярага11е1-гвру можно отменить применением опции -вшо-рага11е1-вру. Глава 21. Машинно-зависимые опции компилятора 455 -гпрагапоЫ Идентична опции -кахедрахака. -1пгеяраггп Генерирует код, который для передачи функциям всех аргументов использует стек. По умолчанию аргументы по возможности передаются через регистры, вместо их записи в стек.
Также см. опцию -вваешрапв. -гпгр2Ь Разрешает генерацию повторяющихся блоков последовательностей, использующих инструкцию пвтв для организации циклов, в которых переменная цикла изменяется в сторону уменьшения. Эта опция используется по умолчанию при установке опции -О2, ее можно отменить опцией -впо-хрСЬ. Конструкция пРТВ используется толькО Лдя циклОв СамОгО н ИжнегО урОВнЯ, КО- торые не вызывают функций и не выходят за границы кода цикла. Использование вложенных циклов на основе инструкций пвтв неэффективно, поскольку они дополнительно требуют записи и восстановления содержимого регистров дс, пд и па. Также см.
опции -шхрсв и -га1оор-иккв3.дккеб. -гпгр25=питЬег Разрешает использование инструкции повторения одной инструкции дРТП. По умолчанию установлена опция -яцко-хрсв. Если блок повторения содержит одну инструкцию и переменная цикла гарантированно меньше значения параметра пшлЬех; то компилятор ССС будет генерировать инструкцию ПРТЗ, а не ПРТП. Если параметр лцклЬег не указан нли если значение переменной цикла во время компиляции не может быть определено, то будет генерироваться инструкция дРТя.
Повторяемая инструкция, которая следует за инструкцией дРТЯ, может не загружаться при каждой итерации. Это освобождает шины процессора для операндов. Инструкция пРТП не используется по умолчанию, поскольку она блокирует прерывания. Также см. опции -шхрсЬ и -ка1оор-ипв1дпеб. -3п5гпаП Генерирует код для модели малой памяти. Модель малой памяти предполагает, что все данные могут быть помещены на страницу памяти размером 64 Кбайт. Во время выполнения программы содержимое регистра РР должно указывать на страницу памяти размером 64 кбайт„содержащую данные разделов программы . ьвв и . баса.
Также см. опцию -шЬТд. -гп51паП-гпепзогу Идентична опции -швша11. 456 Часть 11!. Внутренняя структура н окргженне -пп! Пытается генерировать синтаксис ассемблера, соответствующий правилам ассемблера Т) (аввз О). Кроме того, эта опция генерирует код, совместимый с интерфейсом прикладного программирования (АР1), используемого компилятором С Т1 лля реализаций С3х. Например, данные типа ).опд боиЬ1е передаются в структуре, а не через регистры с плавающей точкой. Опции для платформы 9850 Ниже перечислены опции, определеннтае для Реализаций Ч850.
-п)Ь!я-Рмйс)т Генерирует код, совместимый с больп)ими таблицами переключений (ктк1(с)т таЫез). Эта опция должна использоваться только при выдаче ассемблером или компоновщиком ошибок, касающихся наличия в таолице переключения ветвления, выходящих за пределы допустимого диапазона. -гпер Оптимизирует базовые элементы, использующие олин и тот же индексный указатель четыре и более раз, за счет копирования Указателя в регистр ер и использования более коротких инструкций в1к) и ввс. Опция -вер устанавливается по умолчанию при оптимизации.
Ее можно отключить опцией -впо-ер. -)и!опя-са))з Считает все вызовы ллинными. Прн длинном вызове компилятор всегда будет загружать адрес функции в регистр и вызывать ее косвенно с помощью указателя. Действие опции -в1опд-са11в можно отменить с помощью опции -впо-1опд-са11в. -гпрго)оя-1ипс1(оп Использует внешние функции для записи и восстановления содержимого регистров в прологе и эпилоге функции. Внешнне функции выполняются медленнее, но используют меньший объем кода, если нескольким функциям необходимо сохранять ОДИН И тст жЕ НабОр рЕГИСтрОВ.
ОПцИя -ВРГО1сд-кППСС1ОП уетаиаВЛИВастоя ПО умолчанию при выполнении оптимизации, но ее можно отключить с помощью опции -впо-рко1од-кипсс1оп. -)пздавпипуЬег Помещает статические или глобальные данные с размером не более пшвбепбайт в область коротких данных, на которую указывает регистр др. Размер области коротких данных может составлять до 64 Кбайт. Также см. опции -век)а и -вайа. -пзВрасе Пытается генерировать код минимально возможного размера за счет установки опций -вер и -врко1од-кипск1оп.
Глава 21. Машинно-зависимые опции компилятора 457 -тИа=питЬег Помещает статические или глобальные данные с размером не более пилйзекбайт п область очень коротких данных, на которую указывает регистр ер. Размер области очень коротких данных может составлять в сумме не более 256 байт (128 байт для ссылок на байты). Также см. опции -тпвйа и -вайа. -тч850 Указывает, что код должен генерироваться дпя реализации У850.
-т~6а=питЬег Помещает статические или глобальные данные размером не более тильек байт в первые 32 Кбайта памяти. Также см. опции -тпвйа и -кпсйа. Опции для платформы ЧАХ Ниже перечислены опции, определенные для процессора Г)ЕС ЧАХ. "тя Генерирует код для формата чисел с плавающей точкой типа д-йохатап, вместо й-кохтпас. -тяпн Генерирует инструкции переходов в соответствии с требованиями ассемблера проекта С)ч (). -т11П!Х Указывает не генерировать определенные инструкции переходов (в частности, аоь1ед), которые не могут обрабатываться ассемблером ()МХ для процессора УАХ при больших дистанциях обращений.
Опции для платформы Х51оппу16 Ниже приведена опция, определенная дпя Хзгоппу1 б. -т$1т Выбирает файлы запуска и сценарии компоновщика, соответствующие имитатору (йщп!а1ог). Приложение А Генеральная Общеашнння Иицвнзня КИ0 к омпилятор бСС лицензирован в соответствии с условиями Генеральной Общественной Лицензии 6УУ (ОЖ1/ Белеса) РиЫ(с 3.кенте), известной под акронимом ОНИОРГ. или просто БРй. Тип лицензионных прав, предоставляемых бр)., называют "копилэфт" ("Сору!ей*'— в противоречие устоявшемуся понятию "Соруплйг"). В двух словах это означает, что каждый может копировать себе и пользоваться таким программным обеспечением, однако если оно включается в состав другого продукта, то и он должен быть лицензирован для свободного распространения, Таким образом, нельзя взять программу, полученную по бР1., и приобрести на нее исключительные права собственности.
Хотя и нет никакого ограничения на использование ОСС для производства программ, лицензируемых, как угодно автору. Объектный код и части программ, вырабатываемые в бСС, не нуждаются для своего применения в использовании программ, лицензированных в соответствии с б Р1 . Кроме бР1. есть еше и Сокращенная Генеральная Общественная Лицензия (1.еззег бепега! РцЫ|с 1зсепзе, ОБРЕ). Раньше она была известна как "(зР1.для библиотек", но это название признано неточным.
Она действительно применима для некоторых библиотек, но не для всех. 1бР). разрешает использовать подпрограммы из библиотек для создания патентованных программ при условии, что библиотеки не компонуются в программу статически. В качестве примера такой библиотеки можно назвать версию ОХИ стандартной библиотеки С. Дальше приводится перевод текста б Р(.. Он дает достаточно ясное и точное представление о правовых положениях лицензии и передает дух этого документа. В конце приложения приводится оригинальный текст лицензии бХ13 бР(. на английском языке.