GCC - The Complete Reference (537669), страница 90
Текст из файла (страница 90)
Отменить действие опции -вппск можно с помощью опции -втпо-вовк. -Гппо-а)(9пе-32г! пяорв Отменяет выравнивание результатов расширяемых подстановкой кода ((л!ше) операций со строками. Опция -впо-а11дпе-вег1пдорв уменьшает размер кода и увеличивает его производительность в случае, если переменная результата операции уже имеет выравнивание. -гппо-1апсу-Гоаб!1-387 Некоторые эмуляторы математического сопроцессора 387 не поддерживают следующие инструкции вхп, сов и вггге, имеющиеся в аппаратном сопроцессоре. Опция -пшо-хапсу-шаЕЪ-387 гарантирует, что эти инструкции генерироваться не будут. Опция будет работать только при указании опции -хппвайе-ваеЪ-орейяк1гае1опв. Опция -втпо-хапсу-тяаеь-387 устанавливается по умолчанию для систем РгееВ8Р, ОрелВВР и )к(е1В8Р.
Она игнорируется, если опция -втагсЪ указывает процессоры предназначаемой платформы, которые содержат устройство для выполнения операций с плавающей точкой. При этом эмуляция аппаратных инструкций ле требуется. -Гппо-!р-геМп-387 Указывает, что для возвращаемых результатов функций не должны использоваться регистры устройства для выполнения операций с плавающей точкой. Стандартное соглашение о вызовах функций предполагает хранение возвращаемых значений функций типов х1оае и «(опЪ1е в регистре устройства для выполнения операций с плавающей точкой.
Если такое устройство отсутствует, то система должна эмулировать устройство для выполнения операций с плавающей точкой. Применение опции -вше-хр-гее-1п-387 приводит к тому что возвращаемые результаты функций записываются в обычные регистры центрального процессора. -П)ПО-ГЕ(!-2ОПЕ Для процессоров АМР х86-64 в 64-битной среде эта опция подавляет использование так называемой "красной зоны" (ге() лопе) кода х86-64.
"Красная зона" предусмотрена машинным интерфейсом прикладных программ (ЕшЬег(г(ед Арр!)са((опз В1пату )птегГасе, ЕАВ!) процессора х86-64 и представляет собой 128-битную область за пределами указателя стека, содержимое которой не изменяется обработчиками сигналов и прерываний и благодаря этому может использоваться для хранения временных данных без изменения указателя стека. Опция -впо-хек)-гопе запрещает использование "красной зоны" процессоров АМР х86-64. 404 Часть 111. Внутренняя структура и окружение -топй-1еаИгате-ро! п1ег Не сохраняет в регистре указатель на кадр стека (Ггагпе з1ас)т) для функций, имеющих вложенные вызовы (!еат )ппст!опз).
Это запрещает использование инструкций записи, установки и восстановления указателя кадра стека и позволяет освободить один регистр для использования во вложенных функциях. Для запрещения использования регистра указателя на кадр стека для всех функций может использоваться опция -йстаее-1еай-йгазве-роепеег. Учтите, что это может создавать сложности при отладке программы. -треп11от Идентична опции -шсри=репе1ста. Этот формат опции считается устаревшим. -треп11отрго Идентична опции -жсри=репе1шарго.
Этот формат опции считается устаревшим. -трге$енед-йас!г-Ьоипг!агу=питЬе)' Пытается поддерживать выравнивание стека к границе 2 в степени питьегбайт По умолчанию используется значение 4 (т.е. выравнивание производится по границе 16 байт или 128 бит). При оптимизации размера кода с помощью опции -ов выравнивание устанавливается по минимально возможному размеру (четыре байта для процессора х86, восемь байт для х86-64). Для процессоров Репйщп и Репйшп Рго значения типа боиЬ1е и 1опс куоиЬ1е во избежание снижения скорости выполнения кода должны выравниваться по границе 8 байт.
Для процессоров Рептшгп П! использование типа ш128 из набора расширения 88е (81геагп!п8 Ям!) ехтепейоп) также снижает скорость выполнения кода, если данные этого типа не выравнивать ло границе 16 байт. Для обеспечения правильного выравнивания данных в стеке граница самого стека также должна иметь выравнивание, соответствующее хранящимся в стеке значениям. Кроме того, все генерируемые функции должны сохранять стек с применением выравнивания.
Это означает, что вызов функции, откомпилированной с большим пределом выравнивания, из функции с меньшим пределом выравнивания, скорее всего, приведет к нарушению выравнивания данных в стеке. Поэтому при компиляции библиотек, использующих обратные вызовы, рекомендуется применять установки по умолчанию.
Дополнительное выравнивание, устанавливаемое опцией -жргейеггеб-яеаск-ьоттпбагу увеличивает размер стека и, как правило, также увеличивает размер кода. Для кода, чувствительного к объему стека, например, кода встраиваемых систем (егпбег!г)ед зузтешз) и ядра, границу выравнивания можно понизить до -ятргейеггеб-аеас!к-Ьсипбагу=2. Также см. опцию -тва13.дп-бсиЬ1е. -тР051У-ВГ95 Использует операции ривЬ для записи выходных параметров.
Такой метод короче, и по характеристикам производительности, как правило, он не хуже, чем исполь- Глава 21. Машинно-зависимые опции компилятора 405 зованне для этого операций виЬ/квот . Для семейства процессоров 1пте! 386 и АМ 1! х86-64 используется по умолчанию. Его можно отменить опцией -втпо-ривЬ-агдв. В некоторых случаях это позволяет несколько увеличить производительность благодаря улучшенному планированию и ослаблению зависимостей. -тгедрагт=питЬег Устанавливает количество регистров, используемых для передачи целочисленных аргументов. По умолчанию для передачи аргументов регистры не используются. Максимальное значение, допустимое для параметра пизвЬег, равно 3.
Количество используемых регистров можно устанавливать отдельно для каждой функции с помощью атрибута гепрагтв. При использовании опции -твгедрагтв с ненулевым значением параметра пизвЬег все модули программы, включая используемые библиотеки, должны компилироваться с одним и тем же значением этого параыетра, -тг2г! Использует другое соглашение о вызове функций„в соответствии с которым возврат из функций с фиксированным количеством аргументов осуществляется с помощью инструкции гес пшв. Инструкция гее псзв при возврате из функции выталкивает аргументы из стека. Это позволяет сэкономить одну инструкцию в вызывающем модуле. Такой тип соглашения о вызовах можно задать для отдельной функции, объявив ее с атрибутом вгбса11.
Действие опции -звгед можно отменить с помощью атрибута сбес1. Такое соглашение о вызовах функций несовместимо с системой !3!к!1Х, поэтому его нельзя применять при использовании библиотек, откомпилированных с помощью компиляторов О! !1Х. Кроме того, необходимо объявление прототипов всех функций с переменным количеством аргументов.
Если этого не сделать, то для вызова таких функций будет сгенерирован неверный код, Учтите, что каждый раз при вызове функции с лишними аргументами будет возникать ошибка. При стандартном соглашении о вызовах лишние аргументы игнорируются. -т50Й-г!Оа2 Генерирует код, содержащий вызовы функций из библиотек для выполнения операций над числами с плавающей точкой, Виблиотеки функций не входят в состав компилятора ССС. Как правило, используются библиотеки компилятора С предназначаемой целевой платформы, но их невозможно непосредственно подключить в кросс-компиляции. Поэтому при выполнении кросс-компиляции необходимо точно указывать соответствующие функции библиотек. При компиляции программ для компьютеров, на которых функции возвращают числовые результаты с плавающей точкой через стек регистров математического сопроцессора 80387, могут генерироваться отдельные машинные коды операций, несмотря на использование опции -юпвогс-г1оаг.
406 Часть )П. Внутренняя структура и окружение -П)$5с Разрец>ает использование встроенных функций, предоставляющих прямой доступ к инструкциям расширенного набора инструкций 88Е (8)геагл)лй 8)М)3 Ехтелз)ол). Действие опции -швее отключается применением опции -впо-вве. -п)ззе2 Разрешает использование встроенных функций прямого доступа к инструкциям расширенного набора инструкций 88Е2 (8)геагп)л8 $)МЭ Ехтелз)ол версии 2).
Действие этой опции можно отключить указанием опции -впо-вве2. -п)ФГедсЬ Включает поддержку системы обшей обработки исключений при использовании потоков, имеющейся в компиляторе М1лйи32. Весь код, который использует обработку исключений в многопоточном режиме, должен компилироваться и компоноваться с установленной опцией -втсьхеатзв. Применение опции -квеькеатзв также автоматически устанавливает опцию -и мт. Во время компоновки с опцией -зшзлптнеЬхтз подключается особая вспомогательная библиотека для обработки исключений в многопоточной среде. При этом также из программы убирается код раздельной обработки исключений для отдельных потоков.
-пзьчГЗ-зЫИз Указывает, что компилятор должен помешать неинициализированные локальные переменные в сегмент данных Ьвв. Чтобы компилятор размеШал переменные в сегменте данных «зава, необходимо указать опцию -впо-вчкз-вЬ1з.ь. Эти две опции доступны только для системы Бузтегл Ч Ке)еазе 3. Опции для платформы!псе! 960 Ниже перечислены опции, определенные для реализаций 1лте) 960. -ГП ФУРЕ Устанавливает значения по умолчанию для указанного типа машины. Сюда входят параметры планирования инструкций, поддержка операций над числами с плавающей точкой и режимы адресации. Параметр суре может принимать следующие значения: )ка, )кЬ, вкс, са, сй, ва и вЬ. По умолчанию используется значение )кЬ.
-ГПд5ПЗ-СОГПРдк Включает режим совместимости с ассемблером )С960. -Гпсотзе-д!) 9п Для обеспечения быстрого выполнения применяет выравнивание кода ло границе 8 байт. В настоящее время эта опция установлена по умолчанию только для реализаций серии "С", для других серий по умолчанию используется опция -аюо-сеете-а1здв. Глава 21. Машинно-зависимые опции компилятора 407 -всовр1ех-агЫГ Указывает компилятору, что для этой реализации 1960 желательно использовать режим комплексной адресации (сотр1ех аг)гезз)п8 тоде). Для серии "К" режимы комплексной адресации могут быть неэффективны, но для серии "С" их эффективность ощутима.
По умолчанию для всех процессоров, кроме сЬ и сс, те. тех процессоров, для которых используется опция -юсоюр1ех-акЫг, установлена опция -юпо-союр1ех-агЫг. -вк-совра2 Включает режим совместимости с 1С960. -в1с2.0-совра2 Включает режим совместимости с 1С960 версии 2. -вкЗ.О-совра2 Включает режим совместимости с )С960 версии 3. -в1пте!-адв Идентична опции -юаню-союрас. -в1еа1-ргоседи ген Эта опция указывает, что компилятор должен пытаться изменять процедуры, имеющие вложенные вызовы (1еагргоседцгез), таким образом, чтобы они могли быть вызваны не только с помощью инструкции са11, но и с пОмощью инструкцИИ Ьа1. Действие опции -ю1еаг-ргосебигев можно отменить применением другой опции -юпо-1еаг-ргосе<Ыгев.