GCC - The Complete Reference (537669), страница 93
Текст из файла (страница 93)
Тем не менее, по умолчанию компилятор ОСС всегда генерирует инструкции согласования обращений к памяти даже при использовании опции -пт88100. Это обеспечивает совместимость полученного кода с процессорами МС88110. Если же генерируемый код должен выполняться Фолько на процессорах МС88100, то для отключения генерирования лишних инструкций можно применить опцию -пшо-вегйа11хе-чо1ае11е. Дополнительный код, обеспечивающий последовательную согласованность обращений к памяти, может оказывать влияние на производительность приложения.
Поэтому, если заранее известно, что код предназначается для процессоров, обеспечивающих правильно согласованную последовательность ссылок, то выработку дополнительного кода лучше отключить. -%5ЧГЗ Отключает расширения компилятора, соответствующие системе Бузтет Ч Ке(саке 4 (ЯЧг4) (см. опцию -птвтгг4). -ГГ15ЧГ4 Подключает расширения компилятора, соответствующие системе Куятещ Ч Ке1еж 4 (ЯЧг4). Эта опция выбирает вариант синтаксиса генерируемого ассемблерного кода, она позволяет препроцессору С распознавать директиву йргацтяа меа1к и принуждает компилятор ОСС генерировать дополнительные декларативные директивы, которые используются в системе ВЧг4.
Опция -тявчг4 используется по умолчаниЮ длЯ коНфигураций в88(к-тяогого1а-вувуч4 и в88)е-ттд-бдих аппаратуры в88)к. Для этих конфигураций умолчание можно отключить назначением опции -ввттгЗ. Для других конфигураций по умолчанию действует опция -ввттгЗ. Глава 21. Машинно-завнснмые опции вомпилятора 4 1 7 -пзггар-1агде-ЙЙ Идентична опции -вззапгт1о-1акде-вЬ1ГС. -птц8е-Йч-1п81гис11оп Генерирует код, использующий инструкцию ст1ч на процессоре МС88100 для выполнения целочисленного деления со знаком. По умолчанию инструкция рветг не используется.
Для процессора МС88100 при выполнении инструкции Ытг с отрицательными операндами вызывается прерывание операционной системы. Затем операционная система выполняет операцию деления, но это требует значительных расходов времени. По умолчанию при компиляции кода, который может выполняться на процессоре МС88100, компилятор ОСС эмулирует операцию целочисленного деления со знаком с помощью инструкции целочисленного деления без знака бетто.
Зто позволяет уменьшить время выполнения операции. Тем не менее, такая эмуляция всетаки требует некоторого дополнительного времени и памяти, хотя и не такого значительного, как при использовании инструкции ств г. Если известно, что основные операции целочисленного деления выполняются нвд неотрицательными операндами, то может оказаться эффективным использовать инструкцию Ыч. Для процессора МС88110 инструкция о1ч (также известная как Жчв) обрабатывает случай отрицательных операндов без помощи операционной системы. ПоЭтому при указании опции -в88110 опция -виве-61тг-впвекисесоп игнорируется, и для выполнения операций целочисленного деления со знаком используется ИНСтруКцИя ттстт. Результат деления значения хит мхи на -1 не определен.
В частности, результаты этого деления при установленной и не установленной опции -тиве-т1 зч-спвсхиссеоп могут отличаться. -ппгегяоп-03.00 Зта опция устарела и игнорируется последними выпусками компилятора. -пплгагп-равяед-81гис$8 Выдает предупреждение в случае, когда функция в качестве аргумента или возвращаемого значения передает структуру (зтгцст). Соглашения о передаче структур менялись с развитием языка С. Как результат, во многих случаях это может вызывать проблемы с переносимостью программного обеспечения. По умолчанию компилятор СрСС не выдает предупреждений при передаче структур. Опции для платформы МСоге Ниже перечислены опции, определенные для процессоров Мотого1а МСоге. -пт210 Генерирует код лля процессора 210.
14 к гррвфи~с 4 1 8 Часть 1П. Внутренняя структура и окружение -гп34 0 Генерирует код для процессора 340. -в4Ьу1е-1ипс1!опт Приводит к тому, что все функции выравниваются по границе 4 байт. Действие опции -ш4ьуее-гцпсейопв отключается применением опции -шпо-4ьусе-гцпсе1опв. -вЫЯ-епс!!ап Генерирует код для процессора, использующего обратный порядок представления байтов. Также см. опцию -ш11ее1е-епттйап. -вса!!Ягар!т-с!а1а Вырабатывает информацию о вызовах в виде графа (са1!агарЬ). Действие этой опции отключается применением опции -шпо-са11дгарп-сага.
-пн!!ч Использует аппаратную инструкцию целочисленного деления. Эта опция используется по умолчанию. Ее можно отключить применением опции -втпо-беч. -пирагс!!К Применяет подстановку констант в коде, если ее можно выполнить не более чем двумя инструкциями. Действие этой опции можно отменить опцией -впс-пагбШ. -в!!тите-епс!!ап Генерирует код для архитектуры, использующей прямой порядок следования байтов. Также см. опцию -шЬйд-епМап.
-вге!ах-!ввес!!а~е Допускает испольювание в битовых операциях промежуточных значений произвольного размера. Действие опции -шге1ах-авяветтйасе отменяется установкой опции -шпо-ге1ах-йшшес1асе. -вд!очи-Ьу1ез Использует доступ к машинному слову при считывании отдельных байтов. Действие опции -шв1отт-Ьусев отменяется установкОй ОпцИи -вшо-в1отт-Ьусев.
-пнп1!с!е-ЬИЙе!с!я ьитовые поля (ь11Г1е!дз) хранятся в виде данных типа 1пе. Действие этой опции отменяется установкой опции -шпо-ьт1ете-Ьесг1е1бв. Опции для платформы М!Р5 Ниже перечислены опции, определенные для семейства компьютеров М1РБ.
Глава 21. Машинно-зависимые опции компилятора 419 -Н)4650 Устанавливает опции -вв1лд1е-й1оас, -шваб и -всри=г4650. -Н)аЬ(=ПатЕ Генерирует код для указанного машинного интерфейса прикладных программ (АВ1). Параметр лаве может принимать следующие значения: 32, об4, л32, 64, еатз1 н веаЬ1. Значение еаЬ1 выбирает встроенный машинный интерфейс прикладных программ (ЕАВ!), определенный для Суйппз. Значение воат приводит к выбору встроенного машинного интерфейса прикладных программ (АВ1) процессоров М1РЬ.
Машинные интерфейсы прикладных программ имеют 32- и 64-битные версии. По умолчанию при выборе 64-битной архитектуры компилятор будет генерировать 64- битный код. Тем не менее, с помощью опции -вдр32 можно добиться получения 32-битного кода и в этом режиме. -нзаЬ)саП5 Генерирует псевдооперации .аЫса11в, .
ср1оает и .сргевеоге, которые используется отдельными портами Зузгегп У4 для перемещаемого кода (Р1С). Действие опции -ваЫса11в можно отключить применением опции -впо-аЬРса11в. -Н)а ГСГ) вЗГСЫФЕСЛиГЕ Генерирует код, который будет работать на указанной архитектуре. При этом в качестве параметра агсЬР Сессцге можЕт задаватьСя как имя базовой архитектуры М(Р$1ЯА, так и имя конкретного процессора.
Имена базовых архитектур выбираются из следующего перечня: в1рв1, в1рв3, а3рв3, в1рв4, в1рв3 2 и в1рв 64, а имена процессоров из перечня: г200 0, гЗ 0 0 0, г3900,г4000,чг4100,тгг4300,г4400,г4600,тгг5000, гбооо,г8000, 4)ес, 4)ер, 5)кс, 20)ес и ог1оп. В именах процессоров заключающие нули 000 могут быть сокращены до )е, таким образом, имя г2000 может быть представлено в виде г2)к. Кроме того, префиксные символы являются необязательными, так, имя чг5000 можно записать как г5000, г5)к или тгг51к.
Специальное имя архитектуры 6гов-аЬР приводит к выбору наиболее совместимой архитектуры лля указанного машинного интерфейса прикладных программ, АВ1. (Те. в1рв1 для 32-битных интерфейсов и в4рвЗ для 64-битных интерфейсов.) макрос м1РН лнсн содержит имя предназначаемой архитектуры (для которой выполняется компиляция) в виде строки буквенных символов. Кроме того, определен макрос мхрн лнсн агсл1сессиге, который использует имя архитектуры, указанной в НХРЯ лпсн (все буквенные символы должны быть в верхнем регистре). Например, опция -вагой=г2000 создаетопределение макроса мхрв дпсн, содержащего строку "г2000", и макроса м1Рн лнсн н2000. Макрос мхря лнсн содержит полное имя архитектуры с префикснтями символами, те. нули 000 никогда не сокращаются до )е.
Указание имени архитектуры бгов-азт1 приводит к формированию макросов "в1рв1" или "в1рв 3". Если опция -ваго)т не указана, используется имя архитектуры по умолчанию. 4 2 О Часть Ш. Внутренняя структура и окружение -тдоиЫе-Иоа1 Разрешает процессору выполнять операции двойной точности над числами с плавающей точкой. Также см. опцию -ввйпд1е-й1оае. -тетЬе(Ыед-да1а Приводит к тому, что сначала, когда это возможно, предпринимается попытка выделения памяти лод переменные в разделе данных только для чтения, а затем — в разделе коротких данных. Когда и это невозможно, память под переменные вьшеляется в разделе данных. Эта опция приводит к генерации более медленного кода, но при этом уменьшается объем требуемой оперативной кАМ-памяти.
Это может быть предпочтительным для некоторых встраиваемых систем (ешЬет)т)ед зузтешз), ДЕйСтВИЕ Опцнн -ВЕШЬЕйеЕтт-баса МОЖНО ОтМЕНИтЬ С ПОМОЩЬЮ друГОЙ ОПЦИИ -вше-ептЬеопеа-баса. -тетЬе(Ыед-р1с Генерируется код с перемещаемой адресацией (Р)С-код), предназначенный для использования в некоторых встраиваемых системах (егл)тетЫед зузтешз). При вызове всех функций используется относительная адресация с помощью счетчика команд (РС-ге1атп е ат)гезз)пя), а доступ ко всем данным осуществляется с помощью регистра Фдр. Адресное пространство такого доступа составляет 65536 байт глобальных данных.
Опция -втепЬетЫес-рдс требует использования ассемблера ОХО ав и компоновщика О)ЧБ 1б, которые выполняют основную часть работы. Опция -жешьеабеб-р1с в настоящее время доступна только для операционных платформ, использующих формат ЕСОРР, и не работает с форматом Е(.Р. -теплу Использует лсевдооперации епегу и ех1е. Опция -жепкеу может использоваться только вместе с опцией -шХрв16. -тйх 7000 Опция передается ассемблеру дав. Это приводит к толту, что между следующими подряд инструкциями считывания регистров тяйЬ| и жй1о вставляются опкоды пустых операций поор.
-тии5Ыипс=Фипсбоп Устанавливает имя функции, которая будет вызываться для сброса содержимого кэшей 1 и а в память. Опция -пшо-й1пвЬ-йшс указывает компилятору не вызывать функцию сброса кэш-памяти. При вызове функция сброса должна принимать те же аргументы, что и стандартная функция -й1пвЬ йлпс () . Те. адрес той области памяти, куда будет записываться содержимое кэшей, размер области памяти и параметр "3" ("сбрасывать содержимое обоих кашей"). Поведение по умолчанию зависит от системы, для которой сконфигурирован компилятор ОСС, но в большинстве случаев используются функции б1пвЬ бппс() или срп й1пвЬ().
Глава 21. Машинно-зависимые опции компилятора 421 -гпФр32 Указывает, что все регистры для чисел с плавающей точкой имеют длину 32 бита. -пИрб4 Эта опция указывает компилятору, что все регистры для чисел с плавающей точкой имеют длину 64 бита. -гп$ыед-гпасЫ Генерирует код, который использует аппаратные инструкции умножения и сложения, если такие инструкции имеются. Аппаратные инструкции умножения и суммирования лри их наличии генерируются по умолчанию. Тем не менее, зто может быть нежелательно в случае, когда использование повышенной точности вызывает проблемы.
Это также может быть нежелательно ши отдельных чипов в режимах, когда деиормализованные значения округляются до нуля и когда денормализованные значения при выполнении операций умножения и суммирования могут вызывать исключения. Использование аппаратных операций над числами с плавающей точкой можно отключить с помощью опции -пцзо-хцвеб-гвабб. -гп дав Генерирует код для ассемблера О1Ч13. Эта опция установлена по умолчанию для базовой платформы ОзЕ/1, использующей формат ОбР/газе. Кроме того, опция -вгдав применяется по умолчанию, когда установлена опция конфигурации --мгспс-длц-ае.
Также см. опцию -вппйрв-ав. -гпдр32 Предполагает, что регистры общего назначения имеют ллину 32 бита. -гпдрб4 Предполагает, что регистры общего назначения имеют длину б4 бита. -гпдрорт Указывает компилятору записывать все объявления данных в текстовом разделе перед инструкциями, что позволяет ассемблеру М1РЬ генерировать обращения к памяти длиной в одно машинное слово вместо использования двух слов лля коротких глобальных и статических данных.