GCC - The Complete Reference (537669), страница 89
Текст из файла (страница 89)
-пэйсюе-епйап По этой опции компилятор генерирует код для архитектуры, работающей с прямым порядком представления байтов. Эта опция используется для систем А(Х5 и Ыпцх по умолчанию. Также см. опцию -вЬ1д-епМап. -тппо-р1с Генерирует код, который для адресации не использует регистр глобального укавтеля (81оЬа! рошгег ге8!зтег). В результате этого вырабатывается код, который является зависимым от положения загрузки и не соответствует требованиям машинного интерфейса прикладных программ (АВ1) для архитектуры 1А-64. -тпге9!йег-патпе8 Генерирует имена 1п, 1оо и опс для стековых регистров.
Это позволяет сделать ассемблерный код более читаемым. Действие опции можно обратить применением опции -впо-гедьвеег-павев, -ыс(а~а Разрешает выполнение оптимизаций, которые используют раздел данных малой длины. Эта опция применяется по умолчанию. Ее действие можно отменить опцией -впо-вйаса. Опция -ввттаеа может быть удобной для обхода возможных ошибок оптимизатора. -пттго!аМ! е-а8(п-йор Генерирует стоповый бит непосредственно перед и сразу после изменяемых (то!агйе) операторов ассемблера. Действие этой опции можно отменить применением опции -впо-зго1ас11е-авв-асор.
Опции для платформ! псе! 386 и АМО х86-64 Ниже перечислены опции, определенные для семейства компьютеров т386 и х86-64. -пт128Ь(Мопя-с)он Ые Устанавливает размер данных типа 1опд ктоиЬ1е равным 128 бит (16 байт). Машинный интерфейс прикладных программ (егпьегыег( Арр1тсатюпз Втагу 1птег(асе, ЕАВ!) для архитектур !386 устанавливает размер данных типа 1опд боиЬ1е равным 12 байт, в то время как для новых архитектур (Реп!!шп и выше) данные типа 1опд доиЬ1е выравниваются по границе 8 или 16 байт. Очевидно, что соблюдение такою выравнивания невозможно при осуществлении доступа к 12-байтным данным, которые находятся в массиве.
400 Часть тп. Внутренняя структура н окружение Применение опции -в128Ь1е-1оид-доиь1е изменяет размер структур и массивов, содержащих данные типа 1оид туоиЬ1е. Кроме того, будет изменено соглашение о вызове функций для тех функций, которые используют тип 1оид йоиь1е. Также см. опцию -в96Ь1с-1опд-боир1е.
Для процессоров АМР х86-64 в 64-битной среде окружения эта опция устанавливает длину данных типа 1пе, 1опд и укаэателей равной 32 битам и генерирует код, совместимый с любой платформой )386. -(у!386 Идентична опции -вери=1386. Эта форма опции считается устаревшей, она может не поддерживаться следующими версиями компилятора. Разрешает использование встроенных функций, позволяющих осуществлять прямой доступ к расширениям ЗРпочк Действие этой опции можно отключить применением опции -япо-Зетпоьт. -гп486 Идентична опции -вери=1486. Этот йюрмат опции считается устаревшим. -!!364 Для процессоров АМР х86-64 в 64-битной среде эта опция устанавливает длину данных типа 1ис равной 32 битам, а даниых типа 1оид и указателей — 64 битам.
По этой опции вырабатывается код специально для процессора АМР х86-64. -тут96Ы-!ооя-с!оиЫе Указывает, что длина данных типа 1оид туоиь1е должна составлять 96 бит (! 2 байт), как того требует машинный интерфейс прикладных программ (ЕгпьетЫа! Аррйсатюпз В(лагу )птегГасе, ЕАВ!) процессоров семейства (386. Опция -в96Ь1е-1оид-боиь1е применятся по умолчанию. Также см, опцию -в128ь1е-1оид-туоиь1е. -озассцгои! ВСе-оо19о(п9-аг96 Указывает, что максимальный объем, занимаемый выходными аргументами, будет вычисляться в прологе функции.
Такая схема работает быстрее на современных процессорах благодаря меньшей зависимости, улучшенному планированию и менее интенсивному использованию стека в случае, когда предпочтительное выравнивание границы стека не равно 2. Недостатком схемы является увеличение объема кода. Опция -вассиви1аее-оиедо1ид-ахде автоматически устанавливает опцию -вво-риеь-ахде. Глава 21. Машинно-зависимые опции компилятора 401 -та! !9п-с!ооЫе Указывает компилятору, что переменные типов боиЬ1е, 1опд боиЬ1е и 1опд 1опд должны иметь выравнивание к границе двух машинных слов.
А вот опция -апо-а11дп-боиЬ1е применяет выравнивание переменных к границе одного машинного слова. Выравнивание переменных типа боиЬ1е к границе двух машинных слов позволяет за счет увеличения размера программы получить код, выполняемый на процессорах Реп!)игп несколько быстрее. Опция -вта11дп-йоиЬ1е приводит к тому, что структуры с данными типов боиЬ1е, 1опд боиЬ1е и 1опд 1опд выравниваются иначе, чем это предусмотрено машинным интерфейсом прикладных программ (ЕшЬетЫед Аррйсайопв В)лагу )втегуасе, ЕАВ!) процессоров семейства )386. -тагсЬ=агсЬИес~иге Генерирует инструкции для указанной архитектуры.
Допустимые значения для параметра агсь1еесеиге идентичны значениям, используемым дня параметра суре опции -вюрц. Установка опции -квагсЬ аналогична применению опции -глори с указанием соответствующего типа процессора. -табт=е!а!ест Генерирует инструкции ассемблера, используя указанный диалект. Параметр 61а1есс может принимать следующие знаЧениЯ: 1пве1 и агв. По умолчанию используется значение аее.
-тсрц=Фуре Настраивает все параметры генерируемого кода, кроме машинного интерфейса прикладных программ (ЕАВ!), на полное соответствие указанному типу процессора и выбирает соответствующий набор инструкций. Параметр суре может принимать следующие значения: 1386, 1486, 1586, 1686, репе1шв, репе1шв-лапе, репв1итврго, репв1шв2, репг1итвз, репг1шв4, хб, !кб-2, !кб-з, аЕЬ1оп, аЕЬ1оп-ГЬ1гб,аГЬ1оп-б,аЕЬ1оп-хр иагЬ1оп-твр. Тип 1586 является синонимом типа репе1шв, а тип 1686 — типа репе1шврго.
Типы Хб и аеЬ1оп соответствуют процессорам АМ!). Выбор типа процессора позволяет применять особенности планирования, соответствующие указанному процессору. Тем не менее, компилятор будет генерировать код, совместимый со всеми процессорами семейства )386, если не указана опция -аагсЬ.
-тЧрта2Ь=ииИ Генерирует инструкции для выполнения операций над числами с плавающей точкой для указанного типа аппаратного математического обеспечения. Задание в качестве параметра ип1Е значения 387 приведет к тому что для выполнения операций с плавающей точкой будет использоваться стандартный математический сопроцессор 387, интегрированный с большинством чипов или эмули- 402 Часть ГЙ Внутренняя структура н окружение руемый. Код, откомпилированный с этой опцией, будет выполняться практически на всех процессорах семейства, Промежуточные временные результаты вычисляются с точностью до 80 бит.
Также см. опцию -йй1оас-всоге, описанную в приложении Е Эта опция для архитектуры 1386 аримеииетси по умолчанию. Задание значеиня вяе в качестве значения параметра цпдс приведе~ к использованию скалярных инструкций для операций над числами с плавающей точкой. Такие инструкции имеются в наборе инструкций 88Е (Бггеаш)пй 81М)3 Ехгепз)оп). Набор 88Е поддерживается процессорамн Репйшп 3 и более новыми чипами, а также процессорами АМР АЙ1оп-4, АЙ!оп-хр и Ай!оп-тр.
Более ранние версии набора инструкций 88Е подлерживают только операции обычной точности, поэтому операции двойной и повышенной точности выполняются математическим сопроцессором 387. Новые версии 88Е, имеющиеся только в процессорах Репгшгп4 и АМР х86- 64, поддерживают также и операции двойной точности. При задании значения 1387 в качестве значения параметра ппде необходимо также установить опцию -юаксук н одну из опций -клаве нли -кявве2, разрешающих использование расширений 88Е, а, следовательно, и опцию -кяйргяаеь. Для архитектуры х86-64 использование расширений 88Е разрешено по умолчанию, Геенерируемый код будет выполняться гораздо быстрее (в большинстве случаев) и не имеет проблем с нестабильностью числовой точности, характерной для сопроцессора 387.
Тем не менее, использование набора инструкций 88Е может негативно сказаться на выполнении уже существующего ранее скомпилированного кода, который предполагает, что длина временных значений составляет 80 бит. При указании в качестве параметра ипу Е значения вве, ЗВ7 комПиЛятср будет пытаться одновременно использовать два набора инструкций. Фактически это эквивалентно увеличению количества используемых регистров чипа в два раза, пря этом инструкции набора 387 и ЯКЕ выполняются на различном аппаратном обеспечении. В настоящее время опция -вккгяваеЬ считается экспериментальной, поскольку выделяющий регистры процесс компилятора ОСС не всегда может достаточно точно моделировать отдельные функциональные узлы. -1п!еее-1р Указывает, что компилятор должен использовать соответствующие стандартам 1ЕЕЕ операции сравнения чисел с плавающей точкой.
Это позволяет корректно обрабатывать случаи, когда операции сравнения дают неупорядоченный результат. Использование операций сравнения чисел с плавающей точкой в соответствии со стандартами 1ЕЕЕ можно отключить опцией -впо-1еее-йр. -пз!и!!пе-а!)-51п!пяор5 При установке этой опции для всех операций со строками будет применяться подстановка кода ()п! 1пе).
По умолчанию подстановка кода применяется для операций со строками в тех случаях, когда известно, что результат операции выровнен по границе 4 байт. Опция -акдп11пе-а11-век1пдорв делает все операции со строкамн подстанавливаемыми. Это увеличивает размер, но уменьшает время взяполнения Глава 21. Машинно-зависимые опции компилятора 403 кода, использующето функции тветсру(), вег1еп () и тяетавег () для строк небольшой длины. Разрешает использование встроенных функций, обеспечивающих прямой доступ к расширениям ММХ.