АнглийскийФранцузскийИспанский

Ad


Значок OnWorks

g ++ - 4.7 - Онлайн в облаке

Запустите g ++ - 4.7 в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

Это команда g ++ - 4.7, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


gcc - компилятор C и C ++ проекта GNU

СИНТАКСИС


gcc [-c|-S|-E] [-std =стандарт]
[-g] [-пг] [-Oуровень]
[-Wпредупреждать...] [-педантический]
[-Iдиректория...] [-Lдиректория...]
[-Dмакрос[=определение] ...] [-Uмакрос]
[-fвариант...] [-mмашина-опция...]
[-o Outfile] [@файл] вводить...

Здесь перечислены только самые полезные опции; остаток см. ниже. г ++ принимает
в основном те же варианты, что и GCC.

ОПИСАНИЕ


Когда вы вызываете GCC, он обычно выполняет предварительную обработку, компиляцию, сборку и компоновку.
«Общие параметры» позволяют остановить этот процесс на промежуточном этапе. Для
Например, -c опция говорит не запускать компоновщик. Тогда вывод состоит из объекта
файлы, выводимые ассемблером.

Остальные варианты передаются на одну стадию обработки. Некоторые параметры управляют
препроцессор и др. сам компилятор. Еще другие параметры управляют ассемблером и
компоновщик; большинство из них здесь не задокументировано, так как вам редко приходится использовать какие-либо из них.

Большинство параметров командной строки, которые вы можете использовать с GCC, полезны для программ на языке C; когда
опция полезна только с другим языком (обычно C ++), так говорится в объяснении
явно. Если в описании конкретной опции не упоминается источник
язык, вы можете использовать эту опцию со всеми поддерживаемыми языками.

Ассоциация GCC программа принимает в качестве операндов параметры и имена файлов. Многие варианты имеют многоцелевой
названия букв; поэтому несколько однобуквенных вариантов могут не быть сгруппированы: -дв очень
отличается от -d -v.

Вы можете смешивать варианты и другие аргументы. По большей части порядок, который вы используете, не
иметь значение. Порядок имеет значение, когда вы используете несколько вариантов одного и того же типа; например, если
вы указываете -L более одного раза поиск в каталогах выполняется в указанном порядке. Также,
размещение -l вариант значительный.

Многие варианты имеют длинные названия, начинающиеся с -f или с -W---Например,
-fmove-loop-инварианты, -Wформат и так далее. Большинство из них имеют как положительные, так и отрицательные
формы; отрицательная форма -ффу был бы -фно-фу. В этом руководстве задокументирован только один из
эти две формы, в зависимости от того, какая из них не используется по умолчанию.

ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ


Опция Обзор
Вот сводка всех опций, сгруппированных по типу. Пояснения в следующих
раздел.

В общем Опции
-c -S -E -o файл -не-канонические-префиксы -трубка -pass-exit-коды -x язык -v
- ### --Помогите[=класс[, ...]] --target-помощь --версия -обертка @файл -fplugin =файл
-fplugin-аргумент-имя=аргумент -fdump-ада-спецификация[-тонкий] -fdump-go-spec =файл

C Язык Опции
-анси -std =стандарт -fgnu89-встроенный -aux-информация имя файла
-fallow-параметры-вариативные-функции -фно-асм -fno-встроенный -fno-встроенный-функция
-fhosted -Отдельные -fopenmp -fms-extension -fplan9-extension -триграфы
-но-интегрированный-cpp -традиционный -традиционный-cpp -fallow-single-precision (одинарная точность)
-fcond-несоответствие -lax-vector-conversions -fsigned-битовые поля -fsigned-char
-funsigned-битовые поля -funsigned-char

C + + Язык Опции
-fabi-version =n -fno-контроль доступа -fcheck-новый -fconserve-space
-fconstexpr-depth =n -друг-инъекция -fno-elide-конструкторы -fno-enforce-eh-specs
-for-scope -fno-для-области -fno-gnu-ключевые слова -fno-неявные-шаблоны
-fno-неявные-встроенные шаблоны -fno-реализация-inlines -fms-extension
-fno-nonansi-встроенные -fnothrow-opt -fno-имена-операторов -fno-необязательный-diags
-f разрешающий -fno-красивые-шаблоны -фрепо -фно-ртти -fstats -ftemplate-depth =n
-fno-threadsafe-статика -предохранитель-cxa-atexit -fno-слабый -nostdinc ++ -fno-default-встроенный
-fvisibility-встроенные-скрытые -fvisibility-ms-совместимость -Ваби -Wconversion-нуль
-Wctor-dtor-конфиденциальность -Wdelete-не виртуальный-dtor -Украшивание -Без исключения
-Wnon-виртуальный-dtor -Замена -Weffc ++ -Wstrict-null-дозорный
-Wno-друг-нешаблон - Актерский состав в стиле Уолда -Woverloaded-виртуальный -Wno-pmf-преобразования
-Wsign-Promo

Objective-C и Objective-C ++ Язык Опции
-fconstant-строка-класс =имя класса -fgnu-время выполнения -fnext-время выполнения -fno-nil-приемники
-fobjc-abi-version =n -fobjc-call-cxx-cdtors -fobjc-прямая отправка -fobjc-исключения
-fobjc-gc -fobjc-nilcheck -fobjc-std = objc1 -freplace-objc-классы -fzero-ссылка
-gen-decls -Передача-перехват -Wno-протокол -Wселектор -Wstrict-селектор-соответствие
-Wundeclared-селектор

Язык Независимый Опции
-fmessage-length =n -fdiagnostics-show-location =[консолидировать|повсюду]
-fno-Diagnostics-show-option

Предупреждение Опции
-fsyntax-только -fmax-errors =n -педантический -педантические-ошибки -w -Векстра -Стена
-адрес -Ваггрегат-возврат -Боевые границы -Wno-атрибуты
-Wno-build-macro-redefined -Wc ++ - совместимость -Wc ++ 11-compat -Wcast-выравнивание -Wcast-качество
-Wchar-индексы -Wразбит -Wкомментарий -Wконверсия -Wcoverage-несоответствие -Wno-cpp
-Wno-не рекомендуется -Wno-устаревшие-декларации -Wdisabled-оптимизация -Wno-деление на ноль
-Wдвойное продвижение -Пустое тело -Wenum-сравнить -Wno-endif-label -Ошибка -Werror = *
-Wfatal-ошибки -Wfloat-равно -Wформат -Wformat = 2 -Wno-format-содержит-nul
-Wno-format-extra-args -Wformat-небуквенный -Wformat-безопасность -Wformat-y2k
-Wframe-больше-чем =только -Wno-free-nonheap-объект -Wjump-промахи-init
-Проигранные квалификаторы -Неявный -Wimplicit-function-декларация -Wimplicit-int
-Выиграть сам -Винлайн -Wmaybe-неинициализированный -Wno-int-to-указатель-приведение
-Wno-invalid-offsetof -Winvalid-pch -Больше-чем =только -Wunsafe-loop-оптимизации
-Wлогическая операция -Длинно-длинный -Wосновной -Wmaybe-неинициализированный -Wmissing-подтяжки
-Wmissing-поля-инициализаторы -Wmissing-формат-атрибут -Wmissing-include-dirs
-Wno-брызговик -Wno-многосимвольный -Wnonnull -Wno-переполнение -Woverlength-струны -Упакованный
-Wpacked-битовое-совместимость -Wмягкий -W скобки -Wpedantic-ms-формат
-Wno-pedantic-ms-формат -Wpointer-ариф -Wno-указатель-на-int-cast -Wredundant-декларации
-Обратный тип -W точка-последовательности -Wтень -Wsign-сравнить -Wsign-конверсия
-Wstack-протектор -Wstack-usage =только -Wstrict-псевдоним -Wstrict-aliasing = n
-Wstrict-переполнение -Wstrict-overflow =n -Wsuggest-attribute =[чистый|Const|без возврата]
-Wпереключатель -Wswitch-по умолчанию -Wswitch-перечисление -Wsync-нанд -Wsystem-заголовки -W батуты
-Писания -Wtype-ограничения -Вундеф -Wнеинициализированный -Wunknown-прагмы -Wno-прагмы
-Wunsuffix-float-константы -Wunused -Wunused-функция -Wunused-метка
-Wunused-local-typedefs -Wunused-параметр -Wno-неиспользованный-результат -Wunused-значение
-Wunused-переменная -Wunused-but-set-параметр -Wunused-но-set-переменная
-Wvariadic-макросы -Wvector-операция-производительность -Ввла -Wvolatile-регистр-вар
-Wwrite-строки -Wzero-as-null-указатель-константа

C и Только для цели C Предупреждение Опции
-Wbad-функция-приведение -Wmissing-декларации -Wmissing-параметр-тип
-Wmissing-прототипы -Wnested-экстерны -Wold-style-декларация -Декоративный стиль
-Wstrict-прототипы -Wтрадиционный -W традиционное преобразование
-Wобъявление-после-заявления -Wpointer-знак

Отладка Опции
-dписьмена -dumpspecs -самосвал -дампверсия -fdbg-cnt-список -fdbg-cnt =контр-
список значений -fdisable-ipa-пароль_имя -fdisable-rtl-пароль_имя -fdisable-rtl-проходить-
имя=список диапазонов -fdisable-дерево-пароль_имя -fdisable-дерево-пароль=список диапазонов
-fdump-ноаддр -fdump-без номера -fdump-ненумерованные-ссылки -fdump-перевод-единица[-n]
-fdump-иерархия классов[-n] -fdump-ipa-все -fdump-ipa-cgraph -fdump-ipa-встроенный
-fdump-проходит -fdump-статистика -fdump-tree-все -fdump-tree-оригинал[-n]
-fdump-дерево-оптимизировано[-n] -fdump-дерево-cfg -fdump-дерево-vcg -fdump-tree-псевдоним
-fdump-дерево-ch -fdump-дерево-ssa[-n] -fdump-дерево-предварительно[-n] -fdump-дерево-ccp[-n]
-fdump-дерево-dce[-n] -fdump-дерево-gimple[-сырой] -fdump-tree-брызговик[-n]
-fdump-дерево-дом[-n] -fdump-дерево-dse[-n] -fdump-дерево-phiprop[-n] -fdump-дерево-phiopt[-n]
-fdump-дерево-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-дерево-nrv -fdump-дерево-вектор
-fdump-дерево-раковина -fdump-дерево-сра[-n] -fdump-дерево-forwprop[-n] -fdump-дерево-свободно[-n]
-fdump-дерево-vrp[-n] -ftree-vectorizer-verbose =n -fdump-tree-storeccp[-n]
-fdump-final-insns =файл -fcompare-отладка[=выбирает] -fcompare-debug-секунда
-felimminate-dwarf2-dups -feliminate-неиспользуемые-типы-отладки
-feliminate-неиспользуемые-символы-отладки -femit-класс-отладка-всегда -обоснованный-вид-pass
-обоснованный-вид-pass=список диапазонов -fdebug-типы-секция -fmem-отчет -fpre-ipa-mem-отчет
-fpost-ipa-mem-отчет -fprofile-дуги -frandom-seed =string -fsched-verbose =n
-fsel-sched-подробный -fsel-sched-dump-cfg -fsel-sched-pipelining-подробный -fstack-использование
-ftest-охват -ftime-отчет -fvar-отслеживание -fvar-отслеживания-присваивания
-fvar-отслеживания-назначения-переключение -g -gуровень -переключить -gcoff -гном-версия -ggdb
-grecord-gcc-переключатели -gno-record-gcc-переключатели -gstabs -gstabs + -gstrict-карлик
-gno-строгий-карлик -gvms -gxcoff -gxcoff + -fno-merge-debug-строки
-fno-dwarf2-cfi-asm -fdebug-prefix-map =старый=new -femit-struct-debug-только на базе
-femit-struct-debug-уменьшено -femit-struct-debug-подробный[=список спецификаций] -p -пг
-print-file-name =библиотека -print-libgcc-имя-файла -print-мульти-каталог
-print-мультибиблиотека -print-multi-os-каталог -print-prog-name =программа
-print-поиск-директоров -Q -print-sysroot -print-sysroot-заголовки-суффикс -сохранение темпов
-save-temps = cwd -save-temps = obj -время[=файл]

Оптимизация Опции
-falign-functions [=n] -falign-jumps [=n] -falign-labels [=n] -falign-loops [=n]
-фассоциативная-математика -fauto-inc-dec -fbranch-вероятности -fbranch-target-load-оптимизировать
-fbranch-target-load-optimize2 -fbtr-bb-эксклюзивный -fcaller-сохраняет -fcheck-data-deps
-fcombine-stack-Adjustments -fconserve-стек -fcompare-элим -fcprop-регистры
-fcrossjumping -fcse-следовать-прыжки -fcse-skip-блоки -fcx-фортран-правила
-fcx-ограниченный диапазон -fdata-разделы -fdce -fdelayed-ветка -fdelete-проверка нулевого указателя
-fдевиртуализовать -fdse опасно встраивание -фипа-сра -файловые-оптимизации
-ffat-lto-объекты -ffast-математика -ffinite-math-only - только математика -флот-магазин
-fexcess-precision =стиль -всегда-распространять -ffp-contract =стиль -функции-разделы
-fgcse -fgcse-после перезагрузки -fgcse-las -fgcse-lm -fgraphite-идентичность -fgcse-см
-fif-преобразование -fif-преобразование2 -findirect-встраивание -finline-функции
-finline-функции-вызываемые-один раз -finline-limit =n -finline-small-функции -fipa-cp
-fipa-cp-клон -fipa-матрица-реорг -фипа-пта -fipa-профиль -fipa-чистый-const
-fipa-ссылка -fira-algorithm =алгоритм -fira-region =область -фира-петля-давление
-fno-ira-share-save-слоты -fno-ira-share-spill-слоты -fira-verbose =n -фивопты
-fkeep-встроенные функции -fkeep-статические-константы -floop-блок -флуп-сгладить
-флоп-развязка -фуп-стрип-мина -floop-parallelize-все -флто
-flto-сжатие-уровень -flto-partition =ALG -flto-отчет -fmerge-все-константы
-fmerge-константы -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-инварианты
брызговики -фмудфлапир -fmudflapth -fno-Branch-count-reg -fno-default-встроенный
-fno-дефер-поп -fno-функция-cse -fno-guess-branch-вероятность -fno-встроенный
-fno-math-errno -фно-глазок -фно-глазок2 -fno-sched-межблок -fno-sched-spec
-fno-знак-нули -fno-верхний уровень-переупорядочить -fno-ловушка-математика
-fno-ноль-инициализирован-в-bss -fomit-frame-pointer -foptimize-регистр-перемещение
-foptimize-sibling-вызовы -fpartial-встраивание -fpeel-петли -fpredictive-обобщение
-fprefetch-loop-массивы -fprofile-Correction -fprofile-dir =путь -fprofile-генерировать
-fprofile-generate =путь -fprofile-использование -fprofile-use =путь -fprofile-значения
-freciprocal-математика -свободно -fregmove -frename-регистры -freorder-блоки
-freorder-блоки-и-раздел -freorder-функции -frerun-cse-после-петля
-freschedule-по модулю-расписанию-циклов -frounding-математический -fsched2-использовать-суперблоки
-fsched-давление -fsched-спецификация-нагрузка -fsched-spec-load-опасно
-fsched-stalled-insns-dep [=n] -fsched-stalled-insns [=n] -fsched-group-эвристика
-fsched-критический-эвристический путь -fsched-spec-insn-эвристика -fsched-rank-эвристика
-fsched-last-insn-эвристика -fsched-деп-счет-эвристика -fschedule-insns
-fschedule-insns2 -секция-анкеры -fselective-планирование -fвыборочное-планирование2
-fsel-sched-конвейерная обработка -fsel-sched-pipelining-external-петли -fshrink-обертка
-fsignaling-Nans -fsingle-точность-константа -fsplit-ivs-in-unroller
-fsplit-широкие-типы -fstack-протектор -fstack-протектор-все -fstrict-псевдоним
-fstrict-переполнение -fthread-прыжки -фтрейсер -ftree-bit-ccp -ftree-встроенный-вызов-dce
-ftree-ccp -футри-ч -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -ftree-доминатор-opts -ftree-dse -ftree-forwprop
-free-fre -ftree-loop-если-преобразовать -ftree-loop-если-конвертировать-хранит -ftree-loop-им
-ftree-phiprop Распределение без петель -ftree-loop-распространять шаблоны
-ftree-loop-ivcanon -бв-петля-линейный -ftree-loop-оптимизировать -ftree-parallelize-loops =n
-free-pre -ftree-частичный-pre -ftree-pta -ftree-reassoc -дерево-раковина -ftree-сра
-бесплатное переключение-преобразование -ftree-tail слияние -дерево-тер -ftree-vect-loop-версия
-ftree-векторизация -ftree-vrp -Функция за раз -фунролл-все-петли -фунролл-петли
-funsafe-loop-оптимизации -funsafe-математическая-оптимизация -funswitch-петли
-fvariable-extension-in-unroller -fvect-стоимость-модель -fvpt -fвеб -fwhole-программа -fwpa
-fuse-ld =оставил -fuse-linker-плагин --парам имя=ценностное -O -O0 -O1 -O2 -O3 -Операционные системы
-Быстро

препроцессор Опции
-Aвопрос=ответ -А-вопрос[=ответ] -C -дД -дИ -дМ -дН -Dмакрос[=определение] -E -H
-идирафтер директория -включают файл -имакрос файл -iпрефикс файл -iс префиксом директория
-iwithprefixbefore директория -система директория -имультилиб директория -isysroot директория -M -MM -МГ
-МП -MQ -MT -ностдинк -P -fdebug-cpp -ftrack-macro-extension -рабочий-каталог
-переназначить -триграфы -undef -Uмакрос -Вп,вариант -Xпрепроцессор вариант

Ассемблер Опция
-Ва,вариант -Xассемблер вариант

связи Опции
имя-файла-объекта -lбиблиотека -nostartfiles -nodefaultlibs -nostdlib -пирог -рдинамический -s
-статический -статический-libgcc -статическая-libstdc ++ -общий -shared-libgcc -символический -T скрипт
-Вл,вариант -Xlinker вариант -u символ

Каталог Опции
-Bпрефикс -Iдиректория -iplugindir =директория -я цитируюдиректория -Lдиректория -specs =файл -Я- --sysroot =директория

Машина Зависимый Опции
AAArch64 Опции -mbig-endian -с младшим порядком байтов -mgeneral-regs-only -mcmodel = крошечный
-mcmodel = маленький -mcmodel = большой -mstrict-выравнивание -Momit-Leaf-Frame-указатель
-mno-опустить-лист-указатель-кадра -mtls-dialect = desc -mtls-dialect = традиционный -март =имя
-mcpu =имя -mtune =имя

Адаптева Богоявление Опции -mhalf-reg-файл -mprefer-короткие-insn-regs -mbranch-cost =Num
-mcmove -mnops =Num -msoft-cmpsf -msplit-лохи -mpost-inc -mpost-изменить
-mstack-offset =Num -круг-ближайший -mlong-вызовы -mshort-звонки -msmall16 -mfp-mode =Режим
-mvect-двойной -max-vect-align =Num -msplit-vecmove-рано -m1reg-Редж

ARM Опции -mapcs-рамка -мно-БТР-рама -mabi =имя -mapcs-проверка стека
-mno-apcs-stack-check -mapcs-поплавок -mno-apcs-поплавок -mapcs-реентерабельный
-mno-apcs-реентерабельный -msched-пролог -mno-sched-пролог -с младшим порядком байтов -mbig-endian
-mwords-little-endian -mfloat-abi =имя -мфпе -mfp16-format =имя -mthumb-интерворк
-mno-thumb-взаимодействие -mcpu =имя -март =имя -mfpu =имя -m структура-размер-граница =n
-маборт-на-невозврате -mlong-вызовы -мно-долгие звонки -msingle-pic-база
-mno-single-pic-base -mpic-register =Редж -mnop-весело-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-имя-функции -мпалец -мам -мтпкс-рама
-мтпкс-створка-рамка -mcaller-супер-взаимодействие -mcallee-супер-взаимодействие -mtp =имя
-mtls-dialect =диалект -mword-перемещений -mfix-cortex-m3-ldrd -мунифицированный-доступ
-mneon-для-64 бит

AVR Опции -mmcu =БУМ -маккумулировать-аргументы -mbranch-cost =стоят -mcall-прологи -мята8
-мно-прерывания -мелакс -mshort-звонки -mstrict-X -mtiny-стек

Blackfin Опции -mcpu =процессор[-видение] -мсим -Momit-Leaf-Frame-указатель
-mno-опустить-лист-указатель-кадра -mspecld-аномалия -mno-specld-аномалия -mcsync-аномалия
-mno-csync-аномалия -mlow-64k -mno-low64k -mstack-check-l1 -средняя-разделяемая-библиотека
-mno-id-общая-библиотека -mshared-library-id =n -mleaf-id-общая-библиотека
-mno-лист-идентификатор-общая-библиотека -msep-данные -mno-sep-данные -mlong-вызовы -мно-долгие звонки
-mfast-fp -minline-plt многоядерный -мкорея -мкореб -мсдрам -micplb

C6X Опции -mbig-endian -с младшим порядком байтов -март =процессор -мсим -msdata =sdata-тип

КРИС Опции -mcpu =процессор -март =процессор -mtune =процессор -mmax-stack-frame =n
-melinux-stacksize =n -метракс4 -метракс100 -mpdebug -mcc-инициализация -мно-побочные эффекты
-mstack-выравнивание -mdata-align -mconst-выравнивание -m32-бит -m16-бит -m8-бит
-мно-пролог-эпилог -мно-готплт -мелф -маут -мелинукс -млинукс -сим -sim2
-mmul-ошибка-обходной путь -mno-mul-bug-обходной путь

CR16 Опции -ммак -mcr16cplus -mcr16c -мсим -мята32 -мбит-операции -mdata-model =модель

Дарвин Опции -all_load -allowable_client -арх -arch_errors_fatal -arch_only
-bind_at_load -расслоении -bundle_loader -имя клиента -версия_совместимости
-текущая версия -dead_strip -dependency-файл -dylib_file -dylinker_install_name
-динамический -динамическая библиотека -exported_symbols_list -список файлов - Flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -рамка
-image_base -в этом -имя_установки -keep_private_externs -multi_module
-multiply_define -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixпредварительная привязка -nomultidefs -без предварительной привязки
-noseglinkedit -pagezero_size -предварительно связать -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -сектральный -сектобъектысимволы -почему -seg1адрес -sectcreate
-сектобъектысимволы -сектор -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -сегпрот -segs_read_only_addr
-segs_read_write_addr -single_module -статический -под_библиотека -sub_umbrella
-twolevel_namespace -зонтик -неопределенный -unexported_symbols_list
-weak_reference_mismatches -загружено -F угаданный -gполный -mmacosx-version-min =версия
-мядро -моне-байт-бул

Декабрь Альфа Опции -mno-fp-regs -msoft-поплавок -мальфа-ас -мгаз -миее
-mieee-с-неточным -mieee-совместимый -mfp-trap-mode =Режим -mfp-режим округления =Режим
-mtrap-precision =Режим -mbuild-константы -mcpu =тип процессора -mtune =тип процессора -mbwx -ммакс
-мфикс -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-данные -mlarge-данные
-msmall-текст -mlarge-текст -mmemory-latency =время

Декабрь Альфа / VMS Опции -mvms-коды-возврата -mdebug-main =префикс -mmalloc64

FR30 Опции -msmall-модель -мно-льсим

FRV Опции -мгпр-32 -мгпр-64 -мфпр-32 -мфпр-64 -mhard-поплавок -msoft-поплавок
-malloc-cc -mfixed-cc -mdword -мно-слово -mдвойной -мно-дабл -Медиа -мно-медиа
-ммуладд -мно-муладд -мфдпик -minline-plt -mgprel-ро -multilib-библиотека-ПИК
-mlinked-fp -mlong-вызовы -злокачественные ярлыки -mlibrary-pic -макк-4 -макк-8 -мпак
-мно-упаковка -мно-флаги -второй ход -mno-cond-переместить -moptimize -mbar
-mno-optimize -mbar -мскк -mno-scc -mcond-exec -mno-cond-exec -mvliw-филиал
-mno-vliw-филиал -mmmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-вложенный-cond-exec -mtomcat-статистика -мТЛС -мтлс -mcpu =процессор

GNU / Linux Опции -mglibc -муклибк -мбионный -мандроид -tno-android-cc -tno-android-ld

H8 / 300 Опции -мелакс -мч -Миз -мн -мята32 -злокачественный-300

HPPA Опции -март =архитектурный тип -mbig-переключатель -mdisable-фпреги
-mdisable-индексирование -mfast-непрямые звонки -мгаз -mgnu-ld -mhp-ld
-mfixed-range =регистр-диапазон -mjump-in-задержка -mlinker-opt -mlong-вызовы
-mlong-загрузить-магазин -мно-большой-переключатель -mno-отключить-fpregs -mno-отключить-индексирование
-мно-быстрые-непрямые-звонки -мно-газ -мно-прыжок-в-задержке -mno-long-load-store
-mno-Portable-runtime -мно-мягкий-поплавок -mno-space-regs -msoft-поплавок -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-время выполнения -mschedule =тип процессора -mspace-regs
-мсио -мвсио -munix =unix-std -нолибдлд -статический -потоки

i386 и x86-64 Опции -mtune =тип процессора -март =тип процессора -mfpmath =Ед. изм -masm =диалект
-мно-фантазия-математика-387 -mno-fp-рет-в-387 -msoft-поплавок -мно-широкий-умножить -мртд
-злокачественный-двойной -mpreferred-stack-boundary =Num -mincoming-stack-boundary =Num -мклд
-mcx16 -мсахф -ммовбе -mcrc32 -mrecip -mrecip =выбирать -mvzerupper -mprefer-avx128 -мммх
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -мавкс -mavx2 -мэйс -mpclmul
-mfsgsbase -мрдрнд -mf16c -мфма -msse4a -m3dnow -mpopcnt -мабм -мбми -мтбм -мфма4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -mno-align-stringops -минлайн-все-струнные
-minline-stringops-динамически -mstringop-strategy =ALG -mpush-аргументы
-maccumulate-исходящие-аргументы -m128bit-длинный-двойной -m96bit-длинный-двойной -mregparm =Num
-msseregparm -mveclibabi =напишите -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-Momit-Leaf-Frame-указатель -мно-красная-зона -mno-tls-direct-seg-refs -mcmodel =код-модель
-mabi =имя -maddress-mode =Режим -м32 -м64 -мх32 -mlarge-data-threshold =Num -msse2avx
-mfentry -m8bit-идив -mavx256-split-unaligned-load -mavx256-split-unaligned-store

i386 и x86-64 Windows Опции -mconsole -мсигвин -mno-cygwin -mdll
-mnop-весело-dllimport -mthread -коммуникод -mwin32 -мокна -fno-set-stack-исполняемый файл

IA-64 Опции -mbig-endian -с младшим порядком байтов -мгну-ас -mgnu-ld -мно-пик
-msolver-asm-stop -mрегистр-имена -мсданные -mno-sdata -mconstant-gp -мауто-пик
-растерянный-безумный -минлайн-поплавок-деление-мин-задержка -minline-float-div-max-пропускная способность
-mno-inline-float-div -минлайн-интервал-разделить-мин-задержка
-minline-int-div-max-пропускная способность -mno-inline-int-div -minline-sqrt-min-задержка
-minline-sqrt-max-пропускная способность -mno-inline-sqrt -mdwarf2-asm -Marly-Stop-биты
-mfixed-range =регистр-диапазон -mtls-size =tls-размер -mtune =тип процессора -milp32 -mlp64
-msched-br-данные-спецификации -msched-ar-данные-спецификации -msched-control-спецификация -msched-br-в-данных-спецификации
-msched-ar-в-спецификации данных -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-предпочитают-не-данные-спецификации-insns
-msched-предпочитают-неконтролируемые-спецификации-insns -msched-стоповые биты после каждого цикла
-msched-count-spec-в-критическом пути -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-нулевой стоимости -msched-max-memory-insns-жесткий-ограничение
-msched-max-memory-insns =макс-инснс

IA-64 / VMS Опции -mvms-коды-возврата -mdebug-main =префикс -mmalloc64

LM32 Опции -mbarrel-shift-включен -mdivide-включен -mmultiply-включен
-msign-extension-включен -muser-включено

M32R / D Опции -м32р2 -m32rx -м32р -mdebug -злокачественные петли -mno-align-loops
-missue-rate =номер -mbranch-cost =номер -mmodel =размер кода модель тип -msdata =сдата-
напишите -mno-flush-func -mflush-func =имя -мно-смыв-ловушка -mflush-trap =номер -G Num

M32C Опции -mcpu =процессор -мсим -memregs =номер

M680x0 Опции -март =арка -mcpu =процессор -mtune =мелодия -м68000 -м68020 -м68020-40
-м68020-60 -м68030 -м68040 -м68060 -mcpu32 -м5200 -m5206e -m528x -м5307 -м5407
-mcfv4e -Мбитфилд -mno-битовое поле -mc68000 -mc68020 -мнобитфилд -мртд -мно-ртд
-мдив -мно-див -msshort -мно-короткий -mhard-поплавок -м68881 -msoft-поплавок -мкрел
-malign-int -mstrict-выравнивание -msep-данные -mno-sep-данные -mshared-library-id = п
-средняя-разделяемая-библиотека -mno-id-общая-библиотека -mxgot -мно-хгот

MCore Опции -мхардлит -мно-жесткий свет -мдив -мно-див -mrelax-немедленно
-мно-расслабиться-немедленно -mwide-битовые поля -mno-wide-битовые поля -m4byte-функции
-mno-4byte-функции -mcallgraph-данные -mno-callgraph-данные -mslow-байты
-мно-медленные байты -мно-льсим -с младшим порядком байтов -mbig-endian -м210 -м340
-mstack-инкремент

член парламента Опции -мабдифф -малл-оптс -среднее -mbased =n -мбитопс -mc =n -мклип
-mconfig =имя -мкоп -mcop32 -mcop64 -мивк2 -мдк -мдив -меб -мель -мио-летучие -ML
-mleadz -mm -ммминмакс -мульт -mno-opts -повторять -Миз -мсатур -мсдрам -мсим -мсимновец
-мтф -mtiny =n

МикроБлейз Опции -msoft-поплавок -mhard-поплавок -msmall-делит -mcpu =процессор -mmemcpy
-mxl-мягкий-мул -mxl-мягкий-дел -mxl-баррель-сдвиг -mxl-шаблон-сравнить -mxl-проверка стека
-mxl-gp-opt -mno-clearbss -mxl-умножить-высокий -mxl-поплавок-конвертировать -mxl-поплавок-sqrt
-mxl-режим-модель приложения

MIPS Опции -EL -ЭБ -март =арка -mtune =арка -мипс1 -мипс2 -мипс3 -мипс4
-мипс32 -mips32r2 -мипс64 -mips64r2 -мипс16 -мно-мипс16 -mflip-mips16
-minterlink-mips16 -mno-интерлинк-mips16 -mabi =аби -мэбиколлс -мно-абикалы
-msshared -мно-общий -мплт -мно-плт -mxgot -мно-хгот -мгп32 -мгп64 -мфп32
-мфп64 -mhard-поплавок -msoft-поплавок -мн-поплавок -mdouble-поплавок -мдсп -мно-дсп
-mdspr2 -mno-dspr2 -mfpu =тип fpu -msmartmips -mno-smartmips -поврежденный-одиночный
-мно-парный-одиночный -mdmx -mno-mdmx -мипс3д -mno-mips3d -ммт -мно-мт -мллск
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNum -mlocal-sdata
-mno-local-sdata -mextern-sdata -mno-extern-sdata -мгпопт -мно-гопт -встроенные-данные
-mno-встроенные-данные -muninit-const-in-rodata -mno-uninit-const-in-rodata
-mcode-читаемый =установка -msplit-адреса -мно-разделенные-адреса -mexplicit-relocs
-mno-explicit-relocs -mcheck-нулевое деление -mno-check-нулевое деление -mdivide-ловушки
-mdivide-перерывы -mmemcpy -mno-memcpy -mlong-вызовы -мно-долгие звонки -ммад -мно-безумный
-растерянный-безумный -mno-плавленный-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func =FUNC -mno-flush-func -mbranch-cost =Num -мембранно-вероятно
-мно-ветвь-вероятно -mfp-исключения -mno-fp-исключения -mvr4130-выровнять -mno-vr4130-выровнять
-мсинци -мно-синки -мелакс-пик-звонки -мно-релакс-пик-звонки -mmcount-ra-адрес

MMIX Опции -млибфункс -mno-libfuncs -мепсилон -mno-эпсилон -mabi = GNU
-mabi = mmixware -mzero-продлить -мкнутдив -mtoplevel-символы -мелф -мбранч-предсказать
-mno-ветвь-предсказать -базовые-адреса -mno-базовые-адреса -msingle-выход
-мно-одиночный выход

MN10300 Опции -mmult-ошибка -мно-мульт-баг -мно-ам33 -мам33 -мам33-2 -мам34 -mtune =Процессор-
напишите -mreturn-указатель-на-d0 -mno-crt0 -мелакс -млив -msetlb

PDP-11 Опции -мфпу -msoft-поплавок -mac0 -mno-ac0 -м40 -м45 -м10 -mbcopy
-mbcopy-встроенный -мята32 -mno-int16 -мята16 -mno-int32 -mfloat32 -mno-поплавок64
-mfloat64 -mno-поплавок32 -мабши -мно-абсши -мембранно-дорого -мембранно-дешево
-munix-asm -mdec-asm

пикочип Опции -mae =ae_type -mvliw-lookahead =N -msymbol-как-адрес
-mno-неэффективные-предупреждения

PowerPC Опции См. «Опции RS / 6000 и PowerPC».

RL78 Опции -мсим -mmul = нет -mmul = g13 -mmul = rl78

RS / 6000 и PowerPC Опции -mcpu =тип процессора -mtune =тип процессора -mcmodel =код-модель -мощность
-мно-мощность -мсила2 -мно-сила2 -mpowerpc -mpowerpc64 -mno-powerpc -малтивек
-мно-алтивек -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-ммфкрф -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd
-mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-жесткий-dfp
-mnew-мнемоника -mold-мнемоника -mfull-toc -mminimal-toc -mno-fp-в-ток
-мно-сумма в сумме -м64 -м32 -mxl-совместимость -mno-xl-совместимость -мпе -злокачественная сила
-злокачественно-натуральный -msoft-поплавок -mhard-поплавок -множественный -мно-кратный -мн-поплавок
-mdouble-поплавок -mssimple-fpu -msstring -mno-строка -обновить -mno-обновление
-mavoid-индексированные-адреса -mno-избегайте-индексированных-адресов -растерянный-безумный -mno-плавленный-madd
-mbit-выровнять -mno-битовое выравнивание -mstrict-выравнивание -mno-строгое выравнивание -мперемещаемый
-мно-перемещаемый -mrelocatable-lib -mno-перемещаемый-lib -mtoc -мно-ток -маленький
-с младшим порядком байтов -мБиг -mbig-endian -mdynamic-без изображения -малтивек -mswdiv
-msingle-pic-база -mprioritize-limited-insns =приоритет
-msched-costly-dep =зависимость_тип -minsert-sched-nops =схема -mcall-sysv
-mcall-netbsd -maix-структура-возврат -msvr4-структура-возврат -mabi =abi-тип -msecure-plt
-mbss-plt -mblock-move-inline-limit =Num -мизель -мно-исель -misel = да -misel = нет -мспе
-мно-спе -mspe = да -mspe = нет -нарушение -mgen-cell-микрокод -mwarn-cell-микрокод
-mvrsave -mno-vrsave -ммулхв -мно-мулхв -мдлмзб -мно-длмзб -mfloat-gprs = да
-mfloat-gprs = нет -mfloat-gprs = одиночный -mfloat-gprs = двойной -mпрототип -мно-прототип
-мсим -ммвме -безумцы -молотный нож член -мсданные -msdata =выбирать -mvxworks -G Num
-pthread -mrecip -mrecip =выбирать -мно-рецип -mrecip-точность -mno-recip-точность
-mveclibabi =напишите -мфриз -мно-фриз -mуказатели-на-вложенные-функции
-mno-указатели-на-вложенные-функции -msave-toc-косвенный -mno-save-toc-косвенный

RX Опции -m64bit-удваивается -m32bit-удваивается -фпу -нофпу -mcpu = -mbig-endian-данные
-mlittle-endian-данные -msmall-данные -мсим -мно-сим -mas100-синтаксис -mno-as100-синтаксис
-мелакс -mmax-constant-size = -mint-register = -mpid -msave-acc-в-прерываниях

S / 390 и zСерия Опции -mtune =тип процессора -март =тип процессора -mhard-поплавок -msoft-поплавок
-mhard-dfp -mno-жесткий-dfp -млонг-двойной-64 -млонг-двойной-128 -mbackchain
-мно-бэкчейн -mpacked-стек -мно-упакованный-стек -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -м64 -м31 -mdebug -мно-отладка -меса -мзарх -mtpf-трассировка
-mno-tpf-трассировка -растерянный-безумный -mno-плавленный-madd -mwarn-framesize -mwarn-динамический стек
-mstack-размер -mstack-охранник

Счет Опции -меб -мель -мнхвлуп -мульс -ммак -mscore5 -mscore5u -mscore7 -mscore7d

SH Опции -м1 -м2 -m2e -m2a-нофпу -m2a-только для одного -m2a-сингл -м2а -м3 -m3e
-m4-нофпу -m4-только для одного -m4-одноместный -м4 -m4a-нофпу -m4a-только для одного -m4a-сингл
-м4а -m4al -m5-64медиа -m5-64media-нофпу -m5-32медиа -m5-32media-нофпу -m5-компактный
-m5-компактный-нофпу -мб -ML -mdalign -мелакс -mbigtable -мфмовд -мхитачи -мренеса
-мно-ренеса -mnomacsave -миее -мно-иеее -мбитопс -неправильный размер -minline-ic_invalidate
-mpadstruct -мспейс -мпрефергот -musermode -multcost =номер -mdiv =стратегия
-mdivsi3_libfunc =имя -mfixed-range =регистр-диапазон -madjust-развернуть
-mindexed-адресация -mgettrcost =номер -mpt-фиксированный -maccumulate-исходящие-аргументы
-minvalid-символы -msoft-атомный -mbranch-cost =Num -макбранчди -mcmpeqdi -растерянный-безумный
-mpretend-cmove

Solaris 2 Опции -mimpure-текст -mno-нечистый-текст -pthreads -pthread

SPARC Опции -mcpu =тип процессора -mtune =тип процессора -mcmodel =код-модель -mmemory-model =мем-
модель -м32 -м64 -карта-regs -mno-приложение-regs -mfaster-Structs -mno-более быстрые структуры
-квартира -мно-квартира -мфпу -мно-ФПУ -mhard-поплавок -msoft-поплавок -mhard-quad-поплавок
-msoft-quad-поплавок -mstack-предвзятость -mno-стек-предвзятость -муналиннед-дублеры
-mno-unaligned-doubles -mv8plus -mno-v8plus -мвис -мно-вис -мвис2 -мно-вис2
-мвис3 -мно-вис3 -мфмаф -мно-фмаф -mpopc -мно-попс -mfix-at697f

SPU Опции -mwarn-reloc -merror-reloc -msafe-DMA -мунсафе-дма -mbranch-подсказки
-msmall-мем -mlarge-мем -mstdmain -mfixed-range =регистр-диапазон -mea32 -mea64
-пространство-адрес-преобразование -mno-адрес-пространство-преобразование -mcache-size =размер кэша
-matomic-обновления -mno-атомарные-обновления

Система V Опции -Ку -Qn -ЮП,пути -Ым,директория

ПЛИТКА-Gx Опции -mcpu =процессор -м32 -м64

ПЛИТКАПро Опции -mcpu =процессор -м32

V850 Опции -mlong-вызовы -мно-долгие звонки -меп -мно-эп -mprolog-функция
-mno-пролог-функция -мспейс -mtda =n -msda =n -mzda =n -карта-regs -mno-приложение-regs
-mdisable-вызов -mno-отключить-вызов -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-мв850 -mbig-переключатель

VAX Опции -мг -мгну -муникс

VxWorks Опции -мртп -нестатический -Бстатический -Bдинамический -Xbind-ленивый -Xbind-сейчас

x86-64 Опции См. Параметры i386 и x86-64.

Xstormy16 Опции -мсим

Экстенса Опции -mconst16 -mno-const16 -растерянный-безумный -mno-плавленный-madd -mforce-без изображения
-mserialize-изменчивый -mno-сериализовать-изменчивый -mtext-section-литералы
-mno-текст-раздел-литералы -mtarget-align -mno-target-align -млонгкаллы
-мно-длинные звонки

zСерия Опции См. Параметры S / 390 и zSeries.

Code Поколение Опции
-fcall-сохранено-Редж -fcall-используется-Редж -фиксированный-Редж -fисключения -fnon-call-исключения
-funwind-столы -фасинхронные-раскрутки-столы -finhibit-size-директива
-finstrument-функции -finstrument-functions-exclude-function-list =сим,сим, ...
-finstrument-functions-exclude-file-list =файл,файл, ... -fno-общий -fno-идент
-fpcc-структура-возврат -fpic -fPIC -fpie -fPIE -fno-jump-столы -frecord-gcc-переключатели
-freg-структура-возврат -fshort-перечисления -fshort-двойной -fshort-wchar -fverbose-асм
-fpack-struct [=n] -fstack-проверить -fstack-limit-register =Редж -fstack-limit-символ =сим
-fno-лимит стека -fsplit-стек -fleading-подчеркивание -ftls-model =модель -ftrapv
-fwrapv -fbounds-проверить -видимость -fstrict-volatile-битовые поля

Опции Управление домен Вид of Результат
Компиляция может включать до четырех этапов: предварительная обработка, собственно компиляция, сборка и
связывание всегда в таком порядке. GCC может предварительно обрабатывать и компилировать несколько
файлы либо в несколько входных файлов ассемблера, либо в один входной файл ассемблера; тогда
каждый входной файл ассемблера создает объектный файл, а связывание объединяет все объекты
файлы (недавно скомпилированные и указанные в качестве входных) в исполняемый файл.

Для любого заданного входного файла суффикс имени файла определяет, какой тип компиляции
сделанный:

файл.c
Исходный код C, который необходимо предварительно обработать.

файл.i
Исходный код C, который не должен подвергаться предварительной обработке.

файл.ii
Исходный код C ++, который не должен подвергаться предварительной обработке.

файл.m
Исходный код Objective-C. Обратите внимание, что вы должны указать libobjc библиотека, чтобы сделать
Программа Objective-C работает.

файл.mi
Исходный код Objective-C, который не должен подвергаться предварительной обработке.

файл.mm
файл.M
Исходный код Objective-C ++. Обратите внимание, что вы должны указать libobjc библиотека сделать
Программа Objective-C ++ работает. Обратите внимание, что .M обозначает буквальную заглавную букву М.

файл.мии
Исходный код Objective-C ++, который не должен подвергаться предварительной обработке.

файл.h
Заголовочный файл C, C ++, Objective-C или Objective-C ++ для преобразования в предварительно скомпилированный
заголовок (по умолчанию) или файл заголовка C, C ++, который будет преобразован в спецификацию Ada (через
-fdump-ада-спецификация выключатель).

файл.cc
файл.cp
файл.cxx
файл.cpp
файл.CPP
файл.c ++
файл.C
Исходный код C ++, который необходимо предварительно обработать. Обратите внимание, что в .cxx, последние две буквы
оба должны быть буквально x, Точно так же, .C обозначает буквальную заглавную букву C.

файл.mm
файл.M
Исходный код Objective-C ++, который необходимо предварительно обработать.

файл.мии
Исходный код Objective-C ++, который не должен подвергаться предварительной обработке.

файл.хх
файл.H
файл.л.с.
файл.ххх
файл.hpp
файл.ГЭС
файл.h ++
файл.tcc
Заголовочный файл C ++ для преобразования в предварительно скомпилированный заголовок или спецификацию Ada.

файл.f
файл.для
файл.ftn
Фиксированный исходный код Fortran, который не должен подвергаться предварительной обработке.

файл.F
файл.ДЛЯ
файл.fpp
файл.ФПП
файл.FTN
Исходный код Fortran фиксированной формы, который необходимо предварительно обработать (с традиционным
препроцессор).

файл.f90
файл.f95
файл.f03
файл.f08
Исходный код Fortran в свободной форме, не требующий предварительной обработки.

файл.F90
файл.F95
файл.F03
файл.F08
Исходный код Fortran в свободной форме, который необходимо предварительно обработать (с традиционным
препроцессор).

файл.идти
Исходный код Go.

файл.Объявления
Файл исходного кода Ada, содержащий объявление модуля библиотеки (объявление
пакет, подпрограмма, универсальный или универсальный экземпляр) или библиотечный модуль
объявление переименования (объявление переименования пакета, общего или подпрограммы). Такой
файлы также называются функции.

файл.adb
Файл исходного кода Ada, содержащий тело модуля библиотеки (подпрограмму или тело пакета).
Такие файлы еще называют органов.

файл.s
Код ассемблера.

файл.S
файл.sx
Код ассемблера, который необходимо предварительно обработать.

другие
Объектный файл, который будет загружен прямо в ссылку. Любое имя файла без распознанного
суффикс обрабатывается таким образом.

Вы можете явно указать язык ввода с помощью -x опции:

-x язык
Укажите явно язык для следующих входных файлов (вместо того, чтобы
компилятор выбирает значение по умолчанию на основе суффикса имени файла). Эта опция применима ко всем
следующие входные файлы до следующего -x вариант. Возможные значения для язык составляют:

c c-заголовок cpp-вывод
c ++ c ++ - заголовок c ++ - cpp-output
цель-с, цель-с-заголовок, цель-с-cpp-выход
объектный-c ++ объектный-c ++ - заголовок объектный-c ++ - cpp-output
ассемблер-ассемблер-с-cpp
Ada
f77 f77-cpp-ввод f95 f95-cpp-ввод
go
Ява

-x никто
Отключите любую спецификацию языка, чтобы обрабатывать последующие файлы
в соответствии с суффиксами имени файла (как если бы -x вообще не использовался).

-pass-exit-коды
Обычно GCC программа выйдет с кодом 1, если какой-либо этап компилятора
возвращает неуспешный код возврата. Если вы укажете -pass-exit-коды, GCC программа
вместо этого вернется с численно наивысшей ошибкой, произведенной любой фазой, которая вернула
индикация ошибки. Интерфейсы C, C ++ и Fortran возвращают 4, если внутренний
обнаружена ошибка компилятора.

Если вам нужны только некоторые этапы компиляции, вы можете использовать -x (или суффиксы имени файла)
сказать GCC с чего начать, и один из вариантов -c, -Sили -E сказать где GCC является
останавливаться. Обратите внимание, что некоторые комбинации (например, -x cpp-выход -E) инструктировать GCC делать
ничего.

-c Скомпилируйте или соберите исходные файлы, но не связывайте их. Стадия связывания просто
не сделано. Конечный результат - в виде объектного файла для каждого исходного файла.

По умолчанию имя объектного файла для исходного файла создается путем замены суффикса .c,
.i, .sи т. д., с .o.

Нераспознанные входные файлы, не требующие компиляции или сборки, игнорируются.

-S Остановитесь после этапа собственно компиляции; не собирать. Вывод находится в
форма файла кода ассемблера для каждого указанного входного файла, не являющегося ассемблером.

По умолчанию имя файла ассемблера для исходного файла создается путем замены суффикса
.c, .iи т. д., с .s.

Входные файлы, не требующие компиляции, игнорируются.

-E Остановить после этапа предварительной обработки; не запускайте компилятор должным образом. Вывод находится в
форма предварительно обработанного исходного кода, который отправляется на стандартный вывод.

Входные файлы, не требующие предварительной обработки, игнорируются.

-o файл
Поместить вывод в файл файл. Это применимо независимо от того, какой тип вывода
создается, будь то исполняемый файл, объектный файл, файл ассемблера или
предварительно обработанный код C.

If -o не указан, по умолчанию исполняемый файл помещается в а. выход, объект
файл для источник.суффикс in источник.o, его файл ассемблера в источник.s, предварительно скомпилированный
заголовочный файл в источник.суффикс.gch, и весь предварительно обработанный исходный код C на стандартный вывод.

-v Вывести (в стандартный вывод ошибок) команды, выполняемые для запуска этапов
компиляция. Также выведите номер версии программы драйвера компилятора и
препроцессор и собственно компилятор.

- ###
Подобно -v за исключением того, что команды не выполняются, а аргументы цитируются, если они не
содержат только буквенно-цифровые символы или "./-_". Это полезно для сценариев оболочки, чтобы
захватить командные строки, созданные драйвером.

-трубка
Используйте каналы, а не временные файлы для связи между различными этапами
компиляция. Это не работает в некоторых системах, где ассемблер не может читать
из трубы; но с ассемблером GNU проблем нет.

--Помогите
Распечатайте (на стандартный вывод) описание параметров командной строки, понятных для
GCC, Если -v опция также указывается тогда --Помогите также будет передан
различные процессы, вызываемые GCC, чтобы они могли отображать параметры командной строки
они принимают. Если -Векстра опция также была указана (до --Помогите
option), затем параметры командной строки, с которыми не связана документация
также будет отображаться.

--target-помощь
Распечатать (в стандартном выводе) описание параметров командной строки для конкретной цели.
для каждого инструмента. Для некоторых целей также может быть
распечатаны.

--help = {класс|[^]спецификатор}[, ...]
Распечатайте (на стандартный вывод) описание параметров командной строки, понятных для
компилятор, который подходит для всех указанных классов и квалификаторов. Эти
поддерживаемые классы:

оптимизаторы
Это отобразит все параметры оптимизации, поддерживаемые компилятором.

предупреждение
Это отобразит все параметры, управляющие предупреждающими сообщениями, создаваемыми
компилятор.

цель
Это отобразит параметры, специфичные для цели. в отличие от --target-помощь вариант
однако специфичные для цели параметры компоновщика и ассемблера не будут
отображается. Это потому, что эти инструменты в настоящее время не поддерживают расширенный
--help = синтаксис.

PARAMS
Это отобразит значения, распознаваемые --парам опцию.

язык
Это отобразит параметры, поддерживаемые для язык, Где язык это имя
одного из языков, поддерживаемых в этой версии GCC.

общий
Это отобразит параметры, общие для всех языков.

Это поддерживаемые квалификаторы:

незадокументированный
Отображать только те параметры, которые не задокументированы.

присоединился
Параметры отображения, принимающие аргумент, который появляется после знака равенства в том же
непрерывный фрагмент текста, например: --help = цель.

отдельный
Параметры отображения, принимающие аргумент, который отображается в виде отдельного слова после
оригинальный вариант, например: -o выходной файл.

Таким образом, например, чтобы отобразить все недокументированные переключатели для конкретных целей, поддерживаемые
компилятор может использоваться:

--help = цель, недокументировано

Смысл квалификатора можно инвертировать, поставив перед ним префикс ^ характер, так что для
пример для отображения всех двоичных параметров предупреждений (т. е. тех, которые включены или выключены
и которые не принимают аргумент), у которых есть описание, используйте:

--help = предупреждения, ^ присоединено, ^ недокументировано

Аргумент в пользу --help = не должны состоять исключительно из перевернутых квалификаторов.

Возможно объединение нескольких классов, хотя обычно это ограничивает вывод на
так много, что отображать нечего. Однако один из случаев, когда это действительно работает, - это когда
один из классов цель. Так, например, чтобы отобразить все специфичные для цели
Возможны следующие варианты оптимизации:

--help = target, оптимизаторы

Ассоциация --help = параметр можно повторить в командной строке. Каждое последующее использование будет
отобразить запрошенный класс опций, пропуская те, которые уже были
отображается.

Если же линия индикатора -Q опция появляется в командной строке перед --help = вариант, затем
описательный текст отображается --help = изменено. Вместо описания отображаемого
options, указывается, включен ли параметр, отключен или установлен
к определенному значению (при условии, что компилятор знает это в точке, где
--help = вариант).

Вот усеченный пример из порта ARM для GCC:

% gcc -Q -mabi = 2 --help = цель -c
Следующие параметры зависят от цели:
-mabi = 2
-mabort-on-noreturn [отключено]
-mapcs [отключено]

Вывод чувствителен к эффектам предыдущих параметров командной строки, поэтому для
пример можно узнать, какие оптимизации включены в -O2 используя:

-Q -O2 --help = оптимизаторы

В качестве альтернативы вы можете узнать, какие бинарные оптимизации включены -O3 используя:

gcc -c -Q -O3 --help = optimizers> / tmp / O3-opts
gcc -c -Q -O2 --help = optimizers> / tmp / O2-opts
diff / tmp / O2-opts / tmp / O3-opts | grep включен

-не-канонические-префиксы
Не разворачивайте символьные ссылки, разрешите ссылки на /../ or /./, или проложи путь
абсолютный при генерации относительного префикса.

--версия
Показать номер версии и авторские права запущенного GCC.

-обертка
Вызов всех подкоманд в программе-оболочке. Имя программы-оболочки и
его параметры передаются в виде списка, разделенного запятыми.

gcc -c tc -wrapper gdb, - аргументы

Это вызовет все подпрограммы GCC под GDB --args, таким образом, призыв cc1
будет GDB --args cc1 ....

-fplugin =имя.так
Загрузите код плагина в файл имя.so, предполагается, что это общий объект, который должен быть открыт
компилятор. Базовое имя файла общих объектов используется для идентификации плагина.
для анализа аргументов (см. -fplugin-аргумент-имя-ключ=ценностное ниже). Каждый
плагин должен определять функции обратного вызова, указанные в API плагинов.

-fplugin-аргумент-имя-ключ=ценностное
Определите аргумент под названием ключ со стоимостью ценностное для плагина под названием имя.

-fdump-ада-спецификация[-тонкий]
Для исходных и включаемых файлов C и C ++ сгенерируйте соответствующие спецификации Ada.

-fdump-go-spec =файл
Для входных файлов на любом языке сгенерируйте соответствующие объявления Go в файл. Это
генерирует объявления Go "const", "type", "var" и "func", которые могут быть полезны
чтобы начать писать интерфейс Go для кода, написанного на каком-то другом языке.

@файл
Прочтите параметры командной строки из файл. Прочитанные параметры вставляются вместо
оригинал @файл вариант. Если файл не существует или не может быть прочитан, то опция
будут трактоваться буквально, а не удаляться.

Варианты в файл разделены пробелом. Может быть включен пробельный символ
в опции, заключив весь вариант в одинарные или двойные кавычки. Любой
символ (включая обратную косую черту) может быть включен путем добавления префикса к символу, который будет
включены с обратной косой чертой. В файл сам может содержать дополнительные @файл параметры; любой
такие параметры будут обрабатываться рекурсивно.

составление C + + Программы
Исходные файлы C ++ обычно используют один из суффиксов .C, .cc, .cpp, .CPP, .c ++, .cpили
.cxx; Заголовочные файлы C ++ часто используют .хх, .hpp, .H, или (для общего кода шаблона) .tccи
предварительно обработанные файлы C ++ используют суффикс .ii. GCC распознает файлы с этими именами и
компилирует их как программы C ++, даже если вы вызываете компилятор так же, как для компиляции
Программы на C (обычно с названием GCC).

Тем не менее, использование GCC не добавляет библиотеку C ++. г ++ это программа, которая вызывает GCC и
относится к .c, .h и .i файлы как исходные файлы C ++ вместо исходных файлов C, если -x is
используется и автоматически указывает ссылку на библиотеку C ++. Эта программа также
полезно при предварительной компиляции файла заголовка C с .h расширение для использования в компиляциях C ++.
Во многих системах г ++ также устанавливается с именем C ++.

При компиляции программ на C ++ можно указать многие из тех же параметров командной строки, что и
вы используете для компиляции программ на любом языке; или параметры командной строки, значимые для C
и родственные языки; или параметры, имеющие значение только для программ на C ++.

Опции Управление C говор
Следующие параметры управляют диалектом C (или языков, производных от C, например C ++,
Objective-C и Objective-C ++), которые компилятор принимает:

-анси
В режиме C это эквивалентно -std = C90. В режиме C ++ это эквивалентно
-std = c ++ 98.

Это отключает некоторые функции GCC, несовместимые с ISO C90 (когда
компиляция кода C) или стандартного C ++ (при компиляции кода C ++), например, "asm" и
ключевые слова typeof и предопределенные макросы, такие как unix и vax, которые определяют
тип используемой системы. Это также позволяет нежелательные и редко используемые ISO
функция триграфа. Для компилятора C отключает распознавание стиля C ++ //
комментарии, а также ключевое слово inline.

Альтернативные ключевые слова «__asm__», «__extension__», «__inline__» и «__typeof__»
продолжать работать несмотря на -анси. Вы бы не хотели использовать их в программе ISO C,
конечно, но полезно поместить их в файлы заголовков, которые могут быть включены в
компиляции сделаны с -анси. Альтернативные предопределенные макросы, такие как «__unix__» и
«__vax__» также доступны, с или без -анси.

Ассоциация -анси опция не приводит к бесплатному отклонению программ, не относящихся к ISO. Для
что, -педантический требуется в дополнение к -анси.

Макрос «__STRICT_ANSI__» предопределен, когда -анси опция используется. Какой-то заголовок
файлы могут заметить этот макрос и воздерживаться от объявления определенных функций или определения
определенные макросы, которые стандарт ISO не требует; это чтобы не мешать
с любыми программами, которые могут использовать эти имена для других целей.

Функции, которые обычно встраиваются, но не имеют семантики, определенной ISO C
(например, "alloca" и "ffs") не являются встроенными функциями, когда -анси используется.

-std =
Определите языковой стандарт. Эта опция в настоящее время поддерживается только тогда, когда
компиляция C или C ++.

Компилятор может принимать несколько базовых стандартов, например c90 or c ++ 98, и диалекты GNU
этих стандартов, таких как GNU90 or гну ++ 98. Указав базовый стандарт,
компилятор будет принимать все программы, следующие этому стандарту и использующие GNU
расширения, которые ему не противоречат. Например, -std = C90 отключает определенные
функции GCC, несовместимые с ISO C90, такие как "asm" и "typeof"
ключевые слова, но не другие расширения GNU, не имеющие значения в ISO C90, например
опускание среднего члена в выражении "?:". С другой стороны, указав GNU
диалекте стандарта, все функции, поддерживаемые компилятором, включены, даже если они
функции меняют смысл базового стандарта и некоторых строго соответствующих программ
могут быть отклонены. Конкретный стандарт используется -педантический определить, какие
функции являются расширениями GNU для данной версии стандарта. Например -std = gnu90
-педантический предупредит о стиле C ++ // комментарии, а -std = gnu99 -педантический бы
не.

Необходимо указать значение для этой опции; возможные значения

c90
c89
iso9899: 1990
Поддержка всех программ ISO C90 (некоторые расширения GNU, конфликтующие с ISO C90
отключены). Такой же как -анси для кода C.

iso9899: 199409
ISO C90 с изменениями, внесенными в поправку 1.

c99
c9x
iso9899: 1999
iso9899: 199x
ISO C99. Обратите внимание, что этот стандарт еще не полностью поддерживается; видеть
<http://gcc.gnu.org/gcc-4.7/c99status.html> для получения дополнительной информации. Имена c9x
и iso9899: 199x устарели.

c11
c1x
iso9899: 2011
ISO C11, редакция 2011 года стандарта ISO C. Поддержка неполная и
экспериментальный. Имя c1x устарел.

GNU90
GNU89
GNU-диалект ISO C90 (включая некоторые функции C99). Это значение по умолчанию для C
код.

GNU99
gnu9x
GNU-диалект ISO C99. Когда ISO C99 будет полностью внедрен в GCC, это будет
стать по умолчанию. Имя gnu9x устарел.

GNU11
gnu1x
GNU-диалект ISO C11. Поддержка неполная и экспериментальная. Имя gnu1x
устарел.

c ++ 98
Стандарт ISO C ++ 1998 года с поправками. Такой же как -анси для кода C ++.

гну ++ 98
Диалект GNU -std = c ++ 98. Это значение по умолчанию для кода C ++.

c ++ 11
Стандарт ISO C ++ 2011 года плюс поправки. Поддержка C ++ 11 по-прежнему
экспериментальный и может измениться несовместимым образом в будущих выпусках.

гну ++ 11
Диалект GNU -std = c ++ 11. Поддержка C ++ 11 все еще экспериментальная и может измениться.
несовместимыми способами в будущих выпусках.

-fgnu89-встроенный
Опция -fgnu89-встроенный сообщает GCC использовать традиционную семантику GNU для "inline"
работает в режиме C99.
Эта опция принимается и игнорируется версиями GCC 4.1.3 до, но не включая
4.3. В версиях GCC 4.3 и более поздних он изменяет поведение GCC в режиме C99. С использованием
эта опция примерно эквивалентна добавлению атрибута функции "gnu_inline" ко всем
встроенные функции.

Опция -fno-gnu89-встроенный явно указывает GCC использовать семантику C99 для
"встроенный" в режиме C99 или gnu99 (т. е. определяет поведение по умолчанию). Этот
опция впервые была поддержана в GCC 4.3. Эта опция не поддерживается в -std = C90 or
-std = gnu90 Режим.

Можно использовать макросы препроцессора «__GNUC_GNU_INLINE__» и «__GNUC_STDC_INLINE__»
чтобы проверить, какая семантика действует для «встроенных» функций.

-aux-информация имя файла
Вывод в заданное имя файла прототипов деклараций для всех объявленных функций и / или
определены в единицах перевода, в том числе в файлах заголовков. Этот вариант
молча игнорируется на любом языке, кроме C.

Помимо объявлений, файл в комментариях указывает происхождение каждого объявления.
(исходный файл и строка), было ли объявление неявным, прототипом или
незапрототипированный (I, N для новых или O для старых, соответственно, в первом символе после
номер строки и двоеточие), и было ли оно получено из объявления или определения
(C or Fсоответственно в следующем персонаже). В случае функции
определений, список аргументов в стиле K&R, за которым следуют их объявления, также
при условии, внутри комментариев, после объявления.

-fallow-параметры-вариативные-функции
Принимайте вариативные функции без именованных параметров.

Хотя можно определить такую ​​функцию, это не очень полезно, поскольку
невозможно прочитать аргументы. Это поддерживается только для C, так как эта конструкция
разрешено C ++.

-фно-асм
Не распознавайте "asm", "inline" или "typeof" как ключевые слова, чтобы код мог их использовать
слова как идентификаторы. Вы можете использовать ключевые слова «__asm__», «__inline__» и
Вместо этого "__typeof__". -анси подразумевает -фно-асм.

В C ++ этот переключатель влияет только на ключевое слово typeof, поскольку asm и inline являются
стандартные ключевые слова. Вы можете использовать -fno-gnu-ключевые слова вместо этого флаг, который имеет
тот же эффект. В режиме C99 (-std = C99 or -std = gnu99), этот переключатель влияет только на
Ключевые слова asm и typeof, поскольку inline является стандартным ключевым словом в ISO C99.

-fno-встроенный
-fno-встроенный-функция
Не распознавайте встроенные функции, которые начинаются не с __встроенный_ как префикс.

GCC обычно генерирует специальный код для обработки определенных встроенных функций.
эффективно; например, вызовы "alloca" могут стать отдельными инструкциями, которые
настроить стек напрямую, и вызовы «memcpy» могут стать встроенными циклами копирования. В
результирующий код часто меньше и быстрее, но поскольку функция не вызывает
больше не отображаются как таковые, вы не можете установить точку останова для этих вызовов или изменить
поведение функций при связывании с другой библиотекой. Кроме того, когда
функция распознается как встроенная функция, GCC может использовать информацию об этом
функция для предупреждения о проблемах с вызовами этой функции или для генерации дополнительных
эффективный код, даже если полученный код все еще содержит вызовы этой функции. Для
например, предупреждения даются с -Wформат для плохих вызовов "printf", когда "printf"
встроенный, а strlen, как известно, не изменяет глобальную память.

Для -fno-встроенный-функция опция только встроенная функция функция выключен.
функция не должно начинаться с __встроенный_. Если названа функция, которая не является встроенной
в этой версии GCC этот параметр игнорируется. Нет соответствующего
-fbuiltin-функция вариант; если вы хотите включить встроенные функции выборочно, когда
через -fno-встроенный or -Отдельные, вы можете определять такие макросы, как:

#define abs (n) __builtin_abs ((n))
# определить strcpy (d, s) __builtin_strcpy ((d), (s))

-fhosted
Утверждают, что компиляция происходит в размещенной среде. Из этого следует -fbuiltin.
Размещенная среда - это среда, в которой доступна вся стандартная библиотека, а в
который "main" имеет тип возвращаемого значения "int". Примеры почти все, кроме
ядро. Это эквивалентно -fno-отдельно стоящий.

-Отдельные
Утверждают, что компиляция происходит в автономной среде. Из этого следует
-fno-встроенный. Автономная среда - это среда, в которой стандартная библиотека не может
существуют, и запуск программы не обязательно должен быть в «главном». Самый очевидный пример
это ядро ​​ОС. Это эквивалентно -fno-хостинг.

-fopenmp
Включите обработку директив OpenMP "#pragma omp" в C / C ++ и "! $ Omp" в Fortran.
После появления -fopenmp указан, компилятор генерирует параллельный код в соответствии с
Интерфейс прикладных программ OpenMP v3.0http://www.openmp.org/>. Этот вариант
подразумевает -pthread, и поэтому поддерживается только для целей, которые поддерживают
-pthread.

-fgnu-тм
Когда вариант -fgnu-тм указан, компилятор сгенерирует код для Linux
вариант текущей спецификации Intel Transactional Memory ABI (Revision
1.1, 6 мая 2009 г.). Это экспериментальная функция, интерфейс которой может измениться в
будущие версии GCC по мере изменения официальной спецификации. Обратите внимание, что не
для этой функции поддерживаются все архитектуры.

Для получения дополнительной информации о поддержке GCC транзакционной памяти,

Обратите внимание, что функция транзакционной памяти не поддерживается с исключениями, не связанными с вызовом.
(-fnon-call-исключения).

-fms-extension
Примите некоторые нестандартные конструкции, используемые в файлах заголовков Microsoft.

В коде C ++ это позволяет именам членов в структурах быть похожими на предыдущие типы.
деклараций.

определение типа int UOW;
структура ABC {
УОВ УОВ;
};

Некоторые случаи безымянных полей в структурах и объединениях принимаются только с этим
опцию.

-fplan9-extension
Примите некоторые нестандартные конструкции, используемые в коде Plan 9.

Это позволяет -fms-extension, позволяет передавать указатели на структуры с анонимным
поля к функциям, которые ожидают указатели на элементы типа поля, и
позволяет ссылаться на анонимные поля, объявленные с использованием typedef. Это только
поддерживается для C, а не C ++.

-триграфы
Поддержка триграфов ISO C. В -анси вариант (и -стандарт варианты строгого ISO C
соответствие) подразумевает -триграфы.

-но-интегрированный-cpp
Выполняет компиляцию в два этапа: предварительная обработка и компиляция. Эта опция позволяет
пользователь предоставил "cc1", "cc1plus" или "cc1obj" через -B вариант. Пользователь предоставил
этап компиляции может затем добавить дополнительный этап предварительной обработки после обычного
предварительная обработка, но перед компиляцией. По умолчанию используется встроенный cpp.
(внутренний cpp)

Семантика этой опции изменится, если объединить «cc1», «cc1plus» и «cc1obj».

-традиционный
-традиционный-cpp
Раньше эти параметры заставляли GCC пытаться эмулировать предстандартный компилятор C.
Теперь они поддерживаются только -E выключатель. Препроцессор продолжает поддерживать
предстандартный режим. См. Подробности в руководстве GNU CPP.

-fcond-несоответствие
Разрешить условные выражения с несовпадающими типами во втором и третьем аргументах.
Значение такого выражения недействительно. Этот параметр не поддерживается для C ++.

-lax-vector-conversions
Разрешить неявное преобразование между векторами с разным количеством элементов и / или
несовместимые типы элементов. Этот параметр не следует использовать для нового кода.

-funsigned-char
Пусть тип «char» будет беззнаковым, как «unsigned char».

Каждый тип машины имеет значение по умолчанию для char. Это либо похоже на
"unsigned char" по умолчанию или как "signed char" по умолчанию.

В идеале переносимая программа всегда должна использовать "signed char" или "unsigned char", когда она
зависит от подписи объекта. Но многие программы написаны для использования
обычный "char" и ожидайте, что он будет подписан, или ожидайте, что он будет без подписи, в зависимости от
машины, для которых они были написаны. Этот вариант и его обратный позволяют сделать такой
программа работает с обратным по умолчанию.

Тип "char" всегда отличается от типа "signed char" или "unsigned".
char ", хотя его поведение всегда такое же, как у одного из этих двух.

-fsigned-char
Пусть тип "char" будет подписан, как "signed char".

Обратите внимание, что это эквивалентно -fno-без знака-char, что является отрицательной формой
-funsigned-char. Точно так же вариант -fno-подписанный-символ эквивалентна
-funsigned-char.

-fsigned-битовые поля
-funsigned-битовые поля
-fno-знаковые-битовые поля
-fno-беззнаковые битовые поля
Эти параметры определяют, является ли битовое поле подписанным или беззнаковым, когда объявление
не использует ни «подписанный», ни «беззнаковый». По умолчанию такое битовое поле подписано,
потому что это согласовано: основные целочисленные типы, такие как int, являются типами со знаком.

Опции Управление C + + говор
В этом разделе описаны параметры командной строки, имеющие значение только для программ на C ++;
но вы также можете использовать большинство параметров компилятора GNU независимо от того, на каком языке вы
программа находится в. Например, вы можете скомпилировать файл "firstClass.C" следующим образом:

g ++ -g -frepo -O -c firstClass.C

В этом примере только -фрепо опция, предназначенная только для программ на C ++; вы можете использовать
другие варианты на любом языке, поддерживаемом GCC.

Вот список опций, которые только для компиляции программ на C ++:

-fabi-version =n
Использовать версию n C ++ ABI. Версия 2 - это версия C ++ ABI, которая первой
появился в G ++ 3.4. Версия 1 - это версия C ++ ABI, которая впервые появилась в
G ++ 3.2. Версия 0 всегда будет версией, наиболее близкой к C ++.
Спецификация ABI. Следовательно, ABI, полученный с использованием версии 0, изменится как ABI
исправлены ошибки.

По умолчанию - версия 2.

Версия 3 исправляет ошибку при обработке постоянного адреса как аргумента шаблона.

Версия 4, впервые появившаяся в G ++ 4.5, реализует стандартную обработку векторных изображений.
типы.

Версия 5, которая впервые появилась в G ++ 4.6, исправляет искажение атрибутов.
const / volatile для типов указателей на функции, decltype простого декларации и использование
параметр функции в объявлении другого параметра.

Версия 6, впервые появившаяся в G ++ 4.7, исправляет продвижение C ++ 11.
перечисления с областью видимости и изменение пакетов аргументов шаблона, const / static_cast, prefix ++
и -, и функция области видимости класса, используемая в качестве аргумента шаблона.

Смотрите также -Ваби.

-fno-контроль доступа
Отключите все проверки доступа. Этот переключатель в основном полезен для работы с ошибками в
код контроля доступа.

-fcheck-новый
Убедитесь, что указатель, возвращаемый оператором new, не равен нулю, прежде чем пытаться
изменить выделенное хранилище. В этой проверке обычно нет необходимости, поскольку C ++
стандарт указывает, что "новый оператор" вернет 0 только в том случае, если он объявлен. бросать(),
в этом случае компилятор всегда будет проверять возвращаемое значение даже без этого
вариант. Во всех остальных случаях, когда "новый оператор" имеет непустое исключение.
спецификации, об исчерпании памяти сигнализирует бросок "std :: bad_alloc". Смотрите также
new (не стрелка).

-fconserve-space
Поместите неинициализированные или инициализированные во время выполнения глобальные переменные в общий сегмент, как
C делает. Это экономит место в исполняемом файле за счет отсутствия диагностики дубликатов.
определения. Если вы компилируете с этим флагом, и ваша программа загадочным образом вылетает
после завершения "main ()" у вас может быть объект, который уничтожается дважды
потому что два определения были объединены.

Эта опция больше не используется для большинства целей, теперь, когда была добавлена ​​поддержка для
помещать переменные в BSS, не делая их общими.

-fconstexpr-depth =n
Установите максимальную глубину вложенной оценки для функций constexpr C ++ 11 на n. Предел
необходим для обнаружения бесконечной рекурсии во время вычисления константного выражения. В
минимум, установленный стандартом, - 512.

-fdeduce-init-список
Включить вывод параметра типа шаблона как std :: initializer_list из фигурной скобки-
вложенный список инициализаторов, т.е.

шаблон автоматическая пересылка (T t) -> decltype (realfn (t))
{
вернуть realfn (t);
}

пусто f ()
{
вперед ({1,2}); // переадресация вызова >
}

Этот вычет был реализован как возможное расширение первоначально предложенного
семантика для стандарта C ++ 11, но не была частью окончательного стандарта, поэтому
по умолчанию отключено. Эта опция устарела и может быть удалена в будущем.
версия G ++.

-друг-инъекция
Внедрить дружественные функции во внутреннее пространство имен, чтобы они были видны снаружи.
область действия класса, в котором они объявлены. Были задокументированы дружественные функции
чтобы работать таким образом в старом Справочном руководстве по C ++ с аннотациями и более ранних версиях G ++
4.1 всегда так работала. Однако в ISO C ++ дружественная функция, которая не
объявленные во включающей области видимости можно найти только с помощью поиска, зависящего от аргументов.
Эта опция заставляет друзей вводиться так же, как и в более ранних версиях.

Этот параметр предназначен для обеспечения совместимости и может быть удален в будущем выпуске G ++.

-fno-elide-конструкторы
Стандарт C ++ позволяет реализации опускать создание временного файла, который только
используется для инициализации другого объекта того же типа. Указание этого параметра отключает
эта оптимизация и заставляет G ++ вызывать конструктор копирования во всех случаях.

-fno-enforce-eh-specs
Не создавайте код для проверки нарушения спецификаций исключений во время выполнения.
Этот параметр нарушает стандарт C ++, но может быть полезен для уменьшения размера кода в
производственные сборки, что очень похоже на определение ОТЛАДКА. Это не дает права доступа к пользовательскому коду
генерировать исключения в нарушение спецификаций исключений; компилятор будет
по-прежнему оптимизировать на основе спецификаций, поэтому выдача неожиданного исключения приведет к
привести к неопределенному поведению.

-for-scope
-fno-для-области
If -for-scope указан, объем переменных, объявленных в for-init-оператор
ограничивается для сам цикл, как указано в стандарте C ++. Если
-fno-для-области указан, объем переменных, объявленных в for-init-оператор
распространяется до конца охватывающей области, как это было в старых версиях G ++, и
другие (традиционные) реализации C ++.

По умолчанию, если ни один из флагов не установлен, чтобы соответствовать стандарту, но разрешить и дать
предупреждение для кода старого стиля, который в противном случае был бы недействительным или имел другой
поведение.

-fno-gnu-ключевые слова
Не распознавайте "typeof" как ключевое слово, чтобы код мог использовать это слово как
идентификатор. Вместо этого вы можете использовать ключевое слово «__typeof__». -анси подразумевает
-fno-gnu-ключевые слова.

-fno-неявные-шаблоны
Никогда не создавайте код для не встроенных шаблонов, экземпляры которых создаются неявно (т. Е.
использовать); испускать код только для явных экземпляров.

-fno-неявные-встроенные шаблоны
Также не создавайте код для неявных экземпляров встроенных шаблонов. По умолчанию
по-разному обрабатывать встроенные строки, так что компиляция с оптимизацией и без нее будет
нужен тот же набор явных экземпляров.

-fno-реализация-inlines
Чтобы сэкономить место, не выделяйте автономные копии встроенных функций, управляемых
#прагма реализация. Это вызовет ошибки компоновщика, если эти функции не
встроены везде, где они называются.

-fms-extension
Отключите педантичные предупреждения о конструкциях, используемых в MFC, таких как неявные int и
получение указателя на функцию-член с помощью нестандартного синтаксиса.

-fno-nonansi-встроенные
Отключите встроенные объявления функций, которые не требуются ANSI / ISO C.
включать "ffs", "alloca", "_exit", "index", "bzero", "conf" и другие связанные
функции.

-fnothrow-opt
Относитесь к спецификации исключения "throw ()" как к спецификации "noexcept".
для уменьшения или устранения накладных расходов на размер текста относительно функции без исключения
Технические характеристики. Если функция имеет локальные переменные типов с нетривиальными
деструкторы, спецификация исключения фактически сделает функцию меньше
потому что очистку EH для этих переменных можно оптимизировать. Смысловой
эффект заключается в том, что исключение, выброшенное из функции с таким исключением
спецификация приведет к вызову «завершить», а не «неожиданно».

-fno-имена-операторов
Не обрабатывать ключевые слова имени оператора "и", "битанд", "битор", "компл", "не", "или"
и «xor» как синонимы как ключевые слова.

-fno-необязательный-diags
Отключите диагностику, которая, по стандарту, компилятору не требуется.
В настоящее время G ++ выдаёт только такую ​​диагностику для имени, имеющего
несколько значений внутри класса.

-f разрешающий
Понизьте диагностику несоответствующего кода с ошибок до предупреждений. Таким образом,
через -f разрешающий позволит скомпилировать несоответствующий код.

-fno-красивые-шаблоны
Когда сообщение об ошибке относится к специализации шаблона функции, компилятор
обычно печатает подпись шаблона, за которой следуют аргументы шаблона
и любые определения типов или имена типов в сигнатуре (например, "void f (T) [with T = int]" скорее
чем "void f (int)"), чтобы было ясно, какой шаблон задействован. Когда ошибка
сообщение относится к специализации шаблона класса, компилятор опускает любые
аргументы шаблона, которые соответствуют аргументам шаблона по умолчанию для этого шаблона. Если
любое из этих действий затрудняет понимание сообщения об ошибке, а не
проще, используя -fno-красивые-шаблоны отключит их.

-фрепо
Включите автоматическое создание шаблона во время связывания. Этот вариант также подразумевает
-fno-неявные-шаблоны.

-фно-ртти
Отключить генерацию информации о каждом классе с виртуальными функциями для использования
функции идентификации типа времени выполнения C ++ (динамический_cast и TypeId). Если вы этого не сделаете
используйте эти части языка, вы можете сэкономить место, используя этот флаг. Примечание
эта обработка исключений использует ту же информацию, но генерирует ее по мере необходимости.
Ассоциация динамический_cast оператор по-прежнему может использоваться для приведения типов, которые не требуют времени выполнения
информация о типе, т. е. преобразуется в "void *" или в однозначные базовые классы.

-fstats
Выдача статистики о внешней обработке в конце компиляции. Этот
информация обычно полезна только для команды разработчиков G ++.

-fstrict-перечисления
Разрешить компилятору оптимизировать, используя предположение, что значение перечислимого типа
может быть только одно из значений перечисления (как определено в стандарте C ++;
в основном, значение, которое может быть представлено в минимальном количестве битов, необходимых для
представляют все счетчики). Это предположение может быть неверным, если программа использует
приведение для преобразования произвольного целочисленного значения в перечислимый тип.

-ftemplate-depth =n
Установите максимальную глубину создания экземпляров для классов шаблонов на n. Ограничение на
глубина создания экземпляра шаблона необходима для обнаружения бесконечных рекурсий во время шаблона
создание экземпляра класса. Программы, соответствующие ANSI / ISO C ++, не должны полагаться на максимум
глубина больше 17 (изменена на 1024 в C ++ 11). Значение по умолчанию - 900, так как
В некоторых ситуациях компилятору может не хватить места в стеке, прежде чем он достигнет значения 1024.

-fno-threadsafe-статика
Не используйте дополнительный код для использования подпрограмм, указанных в C ++ ABI для потоковой передачи.
безопасная инициализация локальной статики. Вы можете использовать эту опцию, чтобы уменьшить размер кода
немного в коде, который не обязательно должен быть потокобезопасным.

-предохранитель-cxa-atexit
Зарегистрируйте деструкторы для объектов со статической продолжительностью хранения с помощью «__cxa_atexit»
вместо функции "atexit". Эта опция необходима для полного
совместимая со стандартами обработка статических деструкторов, но будет работать, только если ваш C
библиотека поддерживает «__cxa_atexit».

-fno-use-cxa-получить-исключение-указатель
Не используйте подпрограмму времени выполнения «__cxa_get_exception_ptr». Это вызовет
"std :: uncaught_exception" неверно, но необходимо, если подпрограмма времени выполнения
не доступны.

-fvisibility-встроенные-скрытые
Этот переключатель заявляет, что пользователь не пытается сравнивать указатели со встроенными
функции или методы, в которых адреса двух функций были взяты в разных
общие объекты.

В результате GCC может помечать встроенные методы с помощью
"__attribute__ ((visibility (" hidden ")))", чтобы они не отображались в экспорте
таблицы DSO и не требуют косвенного обращения к PLT при использовании в DSO.
Включение этой опции может существенно повлиять на время загрузки и соединения DSO, поскольку
значительно уменьшает размер таблицы динамического экспорта, когда библиотека делает тяжелые
использование шаблонов.

Поведение этого переключателя не совсем то же, что и отметка методов как скрытых.
напрямую, потому что он не влияет на статические переменные, локальные для функции или причины
компилятор, чтобы сделать вывод, что функция определена только в одном общем объекте.

Вы можете явно пометить метод как имеющий видимость, чтобы свести на нет эффект
переключатель для этого метода. Например, если вы хотите сравнить указатели с
конкретный встроенный метод, вы можете пометить его как имеющий видимость по умолчанию. Маркировка
включающий класс с явной видимостью не будет иметь никакого эффекта.

Явно созданные экземпляры встроенных методов не затрагиваются этой опцией, поскольку их связь
в противном случае может пересечь границу разделяемой библиотеки.

-fvisibility-ms-совместимость
Этот флаг пытается использовать настройки видимости для создания модели связывания GCC C ++.
совместим с Microsoft Visual Studio.

Флаг вносит следующие изменения в модель связывания GCC:

1. По умолчанию устанавливается видимость "скрытая", например -fvisibility = скрытый.

2. Типы, но не их члены, по умолчанию не скрываются.

3. Правило одного определения ослаблено для типов без явной видимости.
спецификации, которые определены в нескольких разных общих объектах: те
объявления разрешены, если они были разрешены, когда эта опция была
не используется.

В новом коде лучше использовать -fvisibility = скрытый и экспортировать те классы, которые
предназначен для внешнего вида. К сожалению, код может полагаться,
возможно, случайно, из-за поведения Visual Studio.

Среди последствий этих изменений - статические элементы данных одного типа.
с тем же именем, но определенные в разных общих объектах, будут разными, поэтому
изменение одного не изменит другого; и что указатели на функции-члены определены
в разных общих объектах могут не сравниваться равными. Когда установлен этот флаг, это
нарушение ODR по разному определению типов с одним и тем же именем.

-fno-слабый
Не используйте слабую поддержку символов, даже если она предоставляется компоновщиком. По умолчанию G ++
будет использовать слабые символы, если они доступны. Эта опция существует только для тестирования, и
не должны использоваться конечными пользователями; это приведет к неполноценному коду и не принесет никаких преимуществ.
Эта опция может быть удалена в будущем выпуске G ++.

-nostdinc ++
Не ищите файлы заголовков в стандартных каталогах, характерных для C ++, но выполняйте
по-прежнему ищите в других стандартных каталогах. (Эта опция используется при построении
Библиотека C ++.)

Кроме того, эти параметры оптимизации, предупреждения и генерации кода имеют только значение.
для программ на C ++:

-fno-default-встроенный
Не думайте встроенный для функций, определенных внутри области класса.
Обратите внимание, что эти функции будут связаны, как встроенные функции; они просто не будут
быть встроенным по умолчанию.

-Ваби (Только C, Objective-C, C ++ и Objective-C ++)
Предупреждать, когда G ++ генерирует код, который, вероятно, несовместим с независимым от производителя
C ++ ABI. Хотя были предприняты усилия, чтобы предупредить обо всех таких случаях, есть
возможно, в некоторых случаях, о которых не было предупреждений, даже если G ++ генерирует
несовместимый код. Также могут быть случаи, когда предупреждения выдаются, даже если
сгенерированный код будет совместимым.

Вам следует переписать свой код, чтобы избежать этих предупреждений, если вас беспокоит
тот факт, что код, сгенерированный G ++, может быть двоично несовместим с кодом, сгенерированным
другие компиляторы.

Известные несовместимости в -fabi-version = 2 (по умолчанию) включают:

· Шаблон с параметром шаблона, не являющимся типом, ссылочного типа искажен
неправильно:

внешний интервал N;
шаблон struct S {};
void n (S ) {2}

Это исправлено в -fabi-version = 3.

· Типы векторов SIMD, объявленные с использованием "__attribute ((vector_size))", искажаются в
нестандартный способ, не допускающий перегрузки функций, принимающих векторы
разных размеров.

Изменено искажение в -fabi-version = 4.

Известные несовместимости в -fabi-version = 1 следующие:

· Некорректная обработка хвостового заполнения для битовых полей. G ++ может попытаться упаковать данные
в тот же байт, что и базовый класс. Например:

struct A {виртуальная пустота f (); int f1: 1; };
структура B: общедоступная A {int f2: 1; };

В этом случае G ++ поместит «B :: f2» в тот же байт, что и «A :: f1»; другие компиляторы
не буду. Вы можете избежать этой проблемы, явно добавив букву "A", чтобы ее размер
кратно размеру байта на вашей платформе; что вызовет G ++ и другие
компиляторы к раскладке "B" идентично.

· Неправильная обработка хвостовой обивки для виртуальных баз. G ++ не использует хвост
отступы при раскладке виртуальных баз. Например:

struct A {виртуальная пустота f (); char c1; };
структура B {B (); char c2; };
структура C: общедоступный A, общедоступный виртуальный B {};

В этом случае G ++ не будет помещать «B» в хвостовой отступ для «A»; Другие
компиляторы будут. Вы можете избежать этой проблемы, явно добавив букву "A", чтобы ее
размер кратен его выравниванию (без учета виртуальных базовых классов); что будет
заставляют G ++ и другие компиляторы использовать макет "C" идентично.

· Некорректная обработка битовых полей с заявленной шириной больше, чем их
базовые типы, когда битовые поля появляются в объединении. Например:

объединение U {int i: 4096; };

Предполагая, что int не имеет 4096 бит, G ++ сделает объединение слишком маленьким.
по количеству бит в "int".

· Пустые классы могут быть размещены в неправильных смещениях. Например:

структура А {};

структура Б {
А а;
виртуальная пустота f ();
};

структура C: общедоступная B, общедоступная A {};

G ++ разместит базовый класс «A» для «C» с ненулевым смещением; это должно быть размещено
при нулевом смещении. G ++ ошибочно полагает, что член данных "A" в "B" является
уже при нулевом смещении.

· Имена шаблонных функций, типы которых включают "typename" или шаблон шаблона.
параметры могут быть изменены неправильно.

шаблон
void f (typename Q :: X) {}

шаблон класс Q>
void f (имя типа Q ::ИКС) {}

Экземпляры этих шаблонов могут быть искажены некорректно.

Он также предупреждает об изменениях, связанных с psABI. К известным изменениям psABI на данный момент относятся:

· Для SYSV / x86-64 при передаче union с помощью long double он изменяется на передачу
память, как указано в psABI. Например:

союз U {
длинный двойной ld;
инт я;
};

"union U" всегда будет передаваться в памяти.

-Wctor-dtor-конфиденциальность (Только C ++ и Objective-C ++)
Предупреждать, когда класс кажется непригодным для использования, потому что все конструкторы или деструкторы в этом
class являются частными, и у него нет ни друзей, ни общедоступных статических функций-членов.

-Wdelete-не виртуальный-dtor (Только C ++ и Objective-C ++)
Предупредить, когда удалять используется для уничтожения экземпляра класса, который имеет виртуальные функции
и не виртуальный деструктор. Удалять экземпляр производного класса небезопасно.
через указатель на базовый класс, если базовый класс не имеет виртуального
деструктор. Это предупреждение включено -Стена.

-Украшивание (Только C ++ и Objective-C ++)
Предупреждать, когда сужающее преобразование, запрещенное C ++ 11, происходит внутри { }, например

int i = {2.2}; // ошибка: сужение с double до int

Этот флаг включен в -Стена и -Wc ++ 11-compat.

С -std = c ++ 11, -Без сужения подавляет диагностику, требуемую стандартом.
Обратите внимание, что это не влияет на смысл правильно сформированного кода; сужение конверсий
все еще считаются плохо сформированными в контексте SFINAE.

-Без исключения (Только C ++ и Objective-C ++)
Предупреждать, когда выражение noexcept оценивается как ложное из-за вызова функции
который не имеет спецификации исключения, не вызывающего выброса (т. е. бросать() or нет кроме)
но компилятор знает, что никогда не генерирует исключение.

-Wnon-виртуальный-dtor (Только C ++ и Objective-C ++)
Предупреждать, когда у класса есть виртуальные функции и доступный не виртуальный деструктор, в
в этом случае было бы возможно, но небезопасно удалить экземпляр производного класса
через указатель на базовый класс. Это предупреждение также включается, если -Weffc ++ is
указано.

-Замена (Только C ++ и Objective-C ++)
Предупреждать, когда порядок инициализаторов членов, указанный в коде, не соответствует порядку
в котором они должны быть выполнены. Например:

структура А {
инт я;
интервал j;
A (): j (0), i (1) {}
};

Компилятор изменит порядок инициализаторов членов для i и j чтобы соответствовать
порядок объявления членов с предупреждением об этом. Это предупреждение
включен -Стена.

Следующие -W ... параметры не зависят от -Стена.

-Weffc ++ (Только C ++ и Objective-C ++)
Предупреждать о нарушениях следующих рекомендаций по стилю от Скотта Мейерса: Эффективный
C ++, Во-вторых Тираж книги:

· Правило 11. Определите конструктор копирования и оператор присваивания для классов с
динамически выделяемая память.

· Правило 12: Предпочитайте инициализацию присваиванию в конструкторах.

· Правило 14: Сделайте деструкторы виртуальными в базовых классах.

· Правило 15: Сделайте так, чтобы оператор "operator =" возвращал ссылку на * this.

· Правило 23: Не пытайтесь вернуть ссылку, если вы должны вернуть объект.

Также предупредите о нарушениях следующих правил стиля Скотта Мейерса. Больше
Эффективный C + + книги:

· Правило 6: Различайте префиксную и постфиксную формы увеличения и уменьшения
операторы.

· Правило 7: Никогда не перегружайте "&&", "||" или ",".

Выбирая эту опцию, имейте в виду, что заголовки стандартной библиотеки не подчиняются всем
этих руководящих принципов; использовать GREP -v чтобы отфильтровать эти предупреждения.

-Wstrict-null-дозорный (Только C ++ и Objective-C ++)
Предупредите также об использовании необработанного "NULL" в качестве дозорного. При компиляции только с
GCC это действительный дозорный, поскольку "NULL" определяется как "__null". Хотя это нуль
константа указателя не является нулевым указателем, она гарантированно будет того же размера, что и
указатель. Но это использование не переносимо между разными компиляторами.

-Wno-друг-нешаблон (Только C ++ и Objective-C ++)
Отключите предупреждения, когда в шаблоне объявляются нешаблонные дружественные функции.
С появлением явной поддержки спецификации шаблонов в G ++, если имя
друг - это неквалифицированный идентификатор (т. е. друг foo (число)), спецификация языка C ++
требует, чтобы друг объявил или определил обычную, не шаблонную функцию. (Раздел
14.5.3). До того, как G ++ реализовал явную спецификацию, неквалифицированные идентификаторы могли быть
интерпретируется как конкретная специализация шаблонной функции. Потому что это
несоответствующее поведение больше не является поведением по умолчанию для G ++,
-Без-шаблон-друг позволяет компилятору проверять существующий код на предмет потенциальных проблем
пятна и по умолчанию включен. Это новое поведение компилятора можно отключить с помощью
-Wno-друг-нешаблон, который сохраняет соответствующий код компилятора, но отключает
полезное предупреждение.

- Актерский состав в стиле Уолда (Только C ++ и Objective-C ++)
Предупреждать, если в программе на C ++ используется приведение старого стиля (стиля C) к непустому типу.
Приведения нового стиля (динамический_cast, static_cast, переинтерпретировать_castкачества const_cast) находятся
менее уязвимы для непреднамеренных эффектов и их намного проще искать.

-Woverloaded-виртуальный (Только C ++ и Objective-C ++)
Предупреждать, когда объявление функции скрывает виртуальные функции от базового класса. Для
например, в:

структура А {
виртуальная пустота f ();
};

структура B: общественность A {
void f (int);
};

версия "f" класса "A" скрыта в "B", и код вроде:

B * b;
b-> f ();

не скомпилируется.

-Wno-pmf-преобразования (Только C ++ и Objective-C ++)
Отключите диагностику для преобразования привязанного указателя на функцию-член в простой
указатель.

-Wsign-Promo (Только C ++ и Objective-C ++)
Предупреждать, когда при разрешении перегрузки выбирается повышение с беззнакового или перечислимого типа на
знаковый тип по сравнению с преобразованием в беззнаковый тип того же размера. Предыдущий
версии G ++ попытаются сохранить неподписанность, но стандарт требует
текущее поведение.

структура А {
оператор int ();
& Оператор = (число);
};

основной ()
{
А а, б;
а = б;
}

В этом примере G ++ синтезирует значение по умолчанию A& оператор = (константа A &);, а cfront
будет использовать определяемый пользователем оператор =.

Опции Управление Objective-C и Objective-C ++ Диалекты
(ПРИМЕЧАНИЕ: это руководство не описывает языки Objective-C и Objective-C ++.
самих себя.

В этом разделе описаны параметры командной строки, которые имеют значение только для Objective-C.
и программы Objective-C ++, но вы также можете использовать большинство независимых от языка программ GNU
параметры компилятора. Например, вы можете скомпилировать файл some_class.m следующим образом:

gcc -g -fgnu-runtime -O -c some_class.m

В этом примере -fgnu-время выполнения это опция, предназначенная только для Objective-C и Objective-C ++
программы; вы можете использовать другие параметры с любым языком, поддерживаемым GCC.

Обратите внимание, что поскольку Objective-C является расширением языка C, компиляции Objective-C
может также использовать параметры, специфичные для интерфейса C (например, -Wтрадиционный). Точно так же,
Компиляции Objective-C ++ могут использовать специфические для C ++ параметры (например, -Ваби).

Вот список опций, которые только для компиляции Objective-C и Objective-C ++
программы:

-fconstant-строка-класс =имя класса
Используйте имя класса как имя класса для создания экземпляра для каждой литеральной строки
указано с синтаксисом "@" ... "". Имя класса по умолчанию - "NXConstantString", если
используется среда выполнения GNU и "NSConstantString", если среда выполнения NeXT
используется (см. ниже). В -fconstant-cfstrings опция, если она также присутствует, переопределит
-fconstant-string-класс устанавливает и заставляет литералы "@" ... "" располагаться как константы
Строки CoreFoundation.

-fgnu-время выполнения
Сгенерируйте объектный код, совместимый со стандартной средой выполнения GNU Objective-C. Это
значение по умолчанию для большинства типов систем.

-fnext-время выполнения
Сгенерируйте вывод, совместимый со средой выполнения NeXT. Это значение по умолчанию для NeXT-based.
систем, включая Darwin и Mac OS X. Макрос «__NEXT_RUNTIME__» предопределен, если
(и только если) эта опция используется.

-fno-nil-приемники
Предположим, что все отправления сообщений Objective-C ("[сообщение получателя: arg]") в этом
единица перевода гарантирует, что получатель не равен нулю. Это позволяет больше
эффективные точки входа в среду выполнения. Эта опция доступна только в
в сочетании со средой выполнения NeXT и ABI версии 0 или 1.

-fobjc-abi-version =n
Использовать версию n ABI Objective-C для выбранной среды выполнения. Этот вариант
в настоящее время поддерживается только для среды выполнения NeXT. В этом случае версия 0 является
традиционный (32-битный) ABI без поддержки свойств и прочего Objective-C 2.0
дополнения. Версия 1 - это традиционный (32-битный) ABI с поддержкой свойств и
другие дополнения Objective-C 2.0. Версия 2 - это современный (64-битный) ABI. Если ничего нет
указано, по умолчанию используется версия 0 на 32-разрядных целевых машинах и версия 2 на 64-разрядных
целевые машины.

-fobjc-call-cxx-cdtors
Для каждого класса Objective-C проверьте, является ли какая-либо из его переменных экземпляра объектом C ++.
с нетривиальным конструктором по умолчанию. Если да, синтезируйте специальный "- (id)
.cxx_construct "метод экземпляра, который будет запускать нетривиальные конструкторы по умолчанию на любом
такие переменные экземпляра по порядку, а затем возвращают "self". Точно так же проверьте, есть ли
переменная экземпляра - это объект C ++ с нетривиальным деструктором, и если это так, синтезируйте
специальный метод "- (void) .cxx_destruct", который будет запускать все такие деструкторы по умолчанию,
в обратном порядке.

Созданные таким образом методы "- (id) .cxx_construct" и "- (void) .cxx_destruct" будут
работают только с переменными экземпляра, объявленными в текущем классе Objective-C, а не
унаследованные от суперклассов. Это ответственность Objective-C
среда выполнения для вызова всех таких методов в иерархии наследования объекта. Значок "- (id)"
.cxx_construct "методы будут вызываться средой выполнения сразу после нового объекта.
экземпляр выделен; будут вызваны методы "- (void) .cxx_destruct"
непосредственно перед тем, как среда выполнения освободит экземпляр объекта.

На момент написания этой статьи только среда выполнения NeXT в Mac OS X 10.4 и более поздних версиях поддерживает
вызов методов "- (id) .cxx_construct" и "- (void) .cxx_destruct".

-fobjc-прямая отправка
Разрешить быстрый переход к диспетчеру сообщений. На Дарвине это достигается через
Комм. страница.

-fobjc-исключения
Включите синтаксическую поддержку для структурированной обработки исключений в Objective-C, аналогично
что предлагают C ++ и Java. Эта опция необходима для использования Objective-C
ключевые слова @try, @throw, @catch, @finally и @synchronized. Эта опция доступна
как со средой выполнения GNU, так и со средой выполнения NeXT (но недоступно в сочетании с
среда выполнения NeXT в Mac OS X 10.2 и ранее).

-fobjc-gc
Включите сборку мусора (GC) в программах Objective-C и Objective-C ++. Этот вариант
доступно только в среде исполнения NeXT; среда выполнения GNU имеет другой мусор
реализация коллекции, не требующая специальных флагов компилятора.

-fobjc-nilcheck
Для среды выполнения NeXT с версией 2 ABI проверьте наличие нулевого получателя в методе
вызовы перед выполнением фактического вызова метода. Это значение по умолчанию и может быть
отключен с помощью -fno-objc-nilcheck. Методы класса и супервызовы никогда не проверяются
для nil таким образом, независимо от того, что этот флаг установлен. В настоящее время этот флаг
ничего, когда используется среда выполнения GNU или более старая версия ABI среды выполнения NeXT.

-fobjc-std = objc1
Соответствует синтаксису языка Objective-C 1.0, языка, признанного GCC 4.0.
Это влияет только на дополнения Objective-C к языку C / C ++; это не влияет
соответствие стандартам C / C ++, что контролируется отдельным диалектом C / C ++
флаги опций. Когда этот параметр используется с Objective-C или Objective-C ++
компилятор, любой синтаксис Objective-C, который не распознается GCC 4.0, отклоняется. Этот
полезно, если вам нужно убедиться, что ваш код Objective-C может быть скомпилирован с помощью
старые версии GCC.

-freplace-objc-классы
Выделите специальный маркер, инструктирующий ld(1) не связывать статически полученный объект
файл и разрешить дильд(1) вместо этого загрузить его во время выполнения. Это используется в
в сочетании с режимом отладки Fix-and-Continue, где объектный файл в
вопрос может быть перекомпилирован и динамически перезагружен в процессе работы программы
выполнение, без необходимости перезапускать саму программу. В настоящее время Fix-and-
Функция продолжения доступна только в сочетании со средой выполнения NeXT на Mac.
OS X 10.3 и новее.

-fzero-ссылка
При компиляции для среды выполнения NeXT компилятор обычно заменяет вызовы
"objc_getClass (" ... ")" (когда имя класса известно во время компиляции) с
ссылки на статические классы, которые инициализируются во время загрузки, что улучшает время выполнения
представление. Указание -fzero-ссылка флаг подавляет это поведение и вызывает
вызовы "objc_getClass (" ... ")" для сохранения. Это полезно в Zero-Link
режим отладки, поскольку он позволяет изменять реализации отдельных классов
во время выполнения программы. В настоящее время среда выполнения GNU всегда сохраняет вызовы
"objc_get_class (" ... ")" независимо от параметров командной строки.

-gen-decls
Дамп деклараций интерфейса для всех классов, отображаемых в исходном файле, в файл с именем
имя источника.decl.

-Передача-перехват (Только Objective-C и Objective-C ++)
Предупреждать всякий раз, когда назначение Objective-C перехватывается сборщиком мусора.

-Wno-протокол (Только Objective-C и Objective-C ++)
Если объявлен класс для реализации протокола, для каждого метода выдается предупреждение.
в протоколе, который не реализован классом. По умолчанию
выдает предупреждение для каждого метода, явно не реализованного в классе, даже если
реализация метода наследуется от суперкласса. Если вы используете -Wno-протокол
вариант, то методы, унаследованные от суперкласса, считаются реализованными,
и им не выносится никаких предупреждений.

-Wселектор (Только Objective-C и Objective-C ++)
Предупреждать, если во время
компиляция. Проверка выполняется по списку методов на завершающем этапе
компиляция. Кроме того, проверка выполняется для каждого селектора, появляющегося в
Выражение "@selector (...)", и соответствующий метод для этого селектора был
найдено во время компиляции. Потому что эти проверки сканируют таблицу методов только в конце
компиляции, эти предупреждения не выдаются, если последняя стадия компиляции
не достигнут, например, из-за того, что во время компиляции обнаружена ошибка, или из-за того, что
-fsyntax-только вариант уже используется.

-Wstrict-селектор-соответствие (Только Objective-C и Objective-C ++)
Предупреждать, если обнаружено несколько методов с разными аргументами и / или возвращаемыми типами
данный селектор при попытке отправить сообщение с использованием этого селектора получателю
введите «идентификатор» или «класс». Когда этот флаг выключен (что является поведением по умолчанию),
компилятор пропустит такие предупреждения, если какие-либо обнаруженные различия относятся к типам, которые
имеют одинаковый размер и выравнивание.

-Wundeclared-селектор (Только Objective-C и Objective-C ++)
Предупреждать, если найдено выражение «@selector (...)», относящееся к необъявленному селектору. А
селектор считается необъявленным, если до этого не было объявлено ни одного метода с таким именем
выражение «@selector (...)» либо явно в @interface, либо в @protocol
объявление или неявно в разделе @implementation. Эта опция всегда работает
он проверяет, как только будет найдено выражение "@selector (...)", а -Wселектор только
выполняет свои проверки на заключительном этапе компиляции. Это также приводит к тому, что кодирование
соглашение о стилях, согласно которому методы и селекторы должны быть объявлены перед использованием.

-print-objc-runtime-информация
Сгенерируйте заголовок C, описывающий самую большую структуру, которая передается по значению, если таковая имеется.

Опции в Control диагностический Сообщения форматирование
Традиционно диагностические сообщения форматируются независимо от устройства вывода.
аспект (например, его ширина, ...). Описанные ниже параметры можно использовать для управления
алгоритм форматирования диагностических сообщений, например, сколько символов в строке, как часто
следует сообщить информацию о местонахождении источника. Прямо сейчас только интерфейс C ++ может
уважайте эти варианты. Однако в ближайшем будущем ожидается, что оставшийся фронт
концы смогли бы их правильно переварить.

-fmessage-length =n
Постарайтесь отформатировать сообщения об ошибках так, чтобы они умещались в строках примерно n символы. В
по умолчанию 72 символа для г ++ и 0 для остальных интерфейсов, поддерживаемых
GCC. Если n равно нулю, перенос строки выполняться не будет; появится каждое сообщение об ошибке
в одной строке.

-fdiagnostics-show-location = один раз
Имеет смысл только в режиме переноса строк. Поручает репортеру диагностических сообщений:
испускают консолидировать информация о местонахождении источника; то есть в случае, если сообщение слишком длинное и не помещается
на одной физической строке и должен быть обернут, исходное местоположение не будет отправлено
(как префикс) снова и снова, в последующих строках продолжения. Это
поведение по умолчанию.

-fdiagnostics-show-location = каждая строка
Имеет смысл только в режиме переноса строк. Поручает репортеру диагностических сообщений:
выдавать ту же информацию о местоположении источника (в виде префикса) для физических линий, которые приводят к
от процесса разбиения сообщения, которое слишком длинное, чтобы поместиться в одной строке.

-fno-Diagnostics-show-option
По умолчанию каждая отправляемая диагностика включает текст, указывающий параметр командной строки.
который непосредственно управляет диагностикой (если такая опция известна диагностическому
машины). Указание -fno-Diagnostics-show-option флаг подавляет это
поведение.

Опции в Запрос or Подавить Предупреждения
Предупреждения - это диагностические сообщения, которые сообщают о конструкциях, которые не являются
ошибочные, но опасные или предполагающие, что могла быть ошибка.

Следующие не зависящие от языка параметры не включают конкретные предупреждения, но управляют
виды диагностики, производимые GCC.

-fsyntax-только
Проверьте код на наличие синтаксических ошибок, но не делайте ничего, кроме этого.

-fmax-errors =n
Ограничивает максимальное количество сообщений об ошибках до n, в этот момент GCC выручает скорее
чем пытаться продолжить обработку исходного кода. Если n равно 0 (по умолчанию),
количество создаваемых сообщений об ошибках не ограничено. Если -Wfatal-ошибки Также
указано, тогда -Wfatal-ошибки имеет приоритет перед этой опцией.

-w Запретить все предупреждающие сообщения.

-Ошибка
Превратите все предупреждения в ошибки.

-Werror =
Превратить указанное предупреждение в ошибку. Добавляется спецификатор предупреждения,
например -Werror = переключатель поворачивает предупреждения, контролируемые -Wпереключатель на ошибки.
Этот переключатель принимает отрицательную форму и используется для отрицания -Ошибка для конкретных предупреждений,
например -Wno-error = переключатель создает -Wпереключатель предупреждения не являются ошибками, даже если -Ошибка
действует.

Предупреждающее сообщение для каждого управляемого предупреждения включает параметр, который управляет
предупреждение. Затем эту опцию можно использовать с -Werror = и -Wno-error = как описано
выше. (Печать опции в предупреждающем сообщении можно отключить с помощью
-fno-Diagnostics-show-option флаг.)

Обратите внимание, что указание -Werror =Foo автоматически подразумевает -WFoo. Тем не менее, -Wno-error =Foo
ничего не подразумевает.

-Wfatal-ошибки
Эта опция заставляет компилятор прерывать компиляцию при первой возникшей ошибке.
вместо того, чтобы пытаться продолжать и печатать дальнейшие сообщения об ошибках.

Вы можете запросить множество конкретных предупреждений с опциями, начинающимися с -W, например -Неявный
для запроса предупреждений о неявных объявлениях. Каждый из этих конкретных вариантов предупреждения также
имеет начало отрицательной формы -Нет- отключить предупреждения; Например, -Wno-неявный.
В этом руководстве приведена только одна из двух форм, которая не используется по умолчанию. Для дальнейшего,
параметры, зависящие от языка, также относятся к C + + говор Опции и Objective-C и
Objective-C ++ говор Опции.

Когда запрашивается опция нераспознанного предупреждения (например, -Wunknown-предупреждение), GCC выдаст
диагностическое сообщение о том, что опция не распознана. Однако если -Нет- форма
используется, поведение немного отличается: для
-Wno-неизвестно-предупреждение если не производится другая диагностика. Это позволяет использовать
new -Нет- варианты со старыми компиляторами, но если что-то пойдет не так, компилятор предупредит
что был использован нераспознанный вариант.

-педантический
Выдавать все предупреждения, требуемые строгими стандартами ISO C и ISO C ++; отклонить все программы, которые
использовать запрещенные расширения и некоторые другие программы, не соответствующие ISO C и ISO
C ++. Для ISO C следует версии стандарта ISO C, установленной любым -стандарт
вариант использованный.

Допустимые программы ISO C и ISO C ++ должны правильно компилироваться с этой опцией или без нее.
(хотя для некоторых из них потребуется -анси или -стандарт опция с указанием необходимой версии
ISO C). Однако без этой опции некоторые расширения GNU и традиционные C и
Также поддерживаются функции C ++. При таком варианте они отклоняются.

-педантический не вызывает предупреждающих сообщений об использовании альтернативных ключевых слов, чьи
имена начинаются и заканчиваются на __. Педантические предупреждения также отключены в выражении
следующее за «__extension__». Однако только системные файлы заголовков должны использовать эти
пути эвакуации; прикладные программы должны избегать их.

Некоторые пользователи пытаются использовать -педантический проверять программы на строгое соответствие ISO C. Они
вскоре обнаруживают, что он не делает то, что они хотят: он находит некоторые методы, отличные от ISO,
но не все --- только те, для которых ISO C требуется диагностика и некоторые другие для
какие диагностики добавлены.

В некоторых случаях может быть полезна функция сообщения о любом несоответствии ISO C,
но потребует значительной дополнительной работы и будет сильно отличаться от
-педантический. У нас нет планов поддерживать такую ​​функцию в ближайшем будущем.

Если стандарт указан с -стандарт представляет собой расширенный диалект языка C GNU, например
GNU90 or GNU99, есть соответствующий Использование темпера с изогнутым основанием стандарт, версия ISO C, на которой
основан расширенный диалект GNU. Предупреждения от -педантический даны, где они
требуется базовым стандартом. (Было бы бессмысленно давать такие предупреждения
только для функций, не относящихся к указанному диалекту GNU C, поскольку по определению GNU
диалекты C включают все функции, которые компилятор поддерживает с данной опцией, и
было бы не о чем предупреждать.)

-педантические-ошибки
Подобно -педантический, за исключением того, что генерируются ошибки, а не предупреждения.

-Стена
Это включает все предупреждения о конструкциях, которые некоторые пользователи считают
сомнительны, и их легко избежать (или изменить, чтобы предотвратить предупреждение), даже в
в сочетании с макросами. Это также включает некоторые описанные предупреждения для конкретного языка
in C + + говор Опции и Objective-C и Objective-C ++ говор Опции.

-Стена включает следующие предупреждающие флаги:

-адрес -Боевые границы (только с -O2) -Wc ++ 11-compat -Wchar-индексы
-Wenum-сравнить (в C / Objc; в C ++ это по умолчанию включено) -Wimplicit-int (C и
Только Objective-C) -Wimplicit-function-декларация (Только C и Objective-C) -Wкомментарий
-Wформат -Wосновной (только для C / ObjC и если -Отдельные) -Wmaybe-неинициализированный
-Wmissing-подтяжки -Wnonnull -W скобки -Wpointer-знак -Замена -Обратный тип
-W точка-последовательности -Wsign-сравнить (только в C ++) -Wstrict-псевдоним -Wstrict-overflow = 1
-Wпереключатель -Писания -Wнеинициализированный -Wunknown-прагмы -Wunused-функция
-Wunused-метка -Wunused-значение -Wunused-переменная -Wvolatile-регистр-вар

Обратите внимание, что некоторые предупреждающие флаги не подразумеваются -Стена. Некоторые из них предупреждают о
конструкции, которые пользователи обычно не считают сомнительными, но которые
иногда вы можете захотеть проверить; другие предупреждают о конструкциях, которые
необходимо или трудно избежать в некоторых случаях, и нет простого способа изменить
код для подавления предупреждения. Некоторые из них включены -Векстра но многие из них
должны быть включены индивидуально.

-Векстра
Это включает некоторые дополнительные предупреждающие флаги, которые не включены -Стена. (Эта опция использовалась
быть позванным -W. Старое имя по-прежнему поддерживается, но новое имя более
описательный.)

-Wразбит -Пустое тело -Проигранные квалификаторы -Wmissing-поля-инициализаторы
-Wmissing-параметр-тип (Только C) -Wold-style-декларация (Только C) -Woverride-инициализация
-Wsign-сравнить -Wtype-ограничения -Wнеинициализированный -Wunused-параметр (только с -Wunused or
-Стена) -Wunused-but-set-параметр (только с -Wunused or -Стена)

Опция -Векстра также печатает предупреждающие сообщения для следующих случаев:

· Указатель сравнивается с целым нулем с <, <=, >или >=.

· (Только C ++) И перечислитель, и не перечислитель появляются в условном
выражение.

· (Только C ++) Неоднозначные виртуальные базы.

· (Только C ++) Индексирование объявленного массива зарегистрироваться.

· (Только C ++) Получение адреса объявленной переменной зарегистрироваться.

· (Только C ++) Базовый класс не инициализируется в конструкторе копирования производного класса.

-Wchar-индексы
Предупреждать, если индекс массива имеет тип "char". Это частая причина ошибок, так как
программисты часто забывают, что этот тип подписан на некоторых машинах. Это предупреждение
включен -Стена.

-Wкомментарий
Предупреждать всякий раз, когда начинается последовательность комментариев /* появляется в /* комментарий, или всякий раз, когда
Обратная косая черта-новая строка появляется в // комментарий. Это предупреждение включено -Стена.

-Wno-охват-несоответствие
Предупреждать, если профили обратной связи не совпадают при использовании -fprofile-использование вариант. Если
исходный файл был изменен между -fprofile-gen и -fprofile-использование, файлы с
отзыв профиля может не соответствовать исходному файлу, и GCC не может использовать профиль
информация обратной связи. По умолчанию это предупреждение включено и рассматривается как ошибка.
-Wno-охват-несоответствие может использоваться для отключения предупреждения или
-Wno-error = несоответствие покрытия может использоваться для отключения ошибки. Отключение ошибки
это предупреждение может привести к плохо оптимизированному коду и полезно только в случае
очень незначительные изменения, такие как исправления ошибок в существующей кодовой базе. Полное отключение
предупреждение не рекомендуется.

-Wno-cpp
(Только C, Objective-C, C ++, Objective-C ++ и Fortran)

Подавить предупреждающие сообщения, отправленные директивами "#warning".

-Wдвойное продвижение (Только C, C ++, Objective-C и Objective-C ++)
Выдает предупреждение, когда значение типа "float" неявно повышается до "double". Процессоры
с 32-битным модулем с плавающей запятой "одинарной точности" аппаратно реализует "float",
но имитируйте "двойник" в программном обеспечении. На такой машине выполнение вычислений с использованием
"двойные" значения намного дороже из-за накладных расходов, необходимых для программного обеспечения.
эмуляция.

Легко случайно выполнить вычисления с "double", потому что числа с плавающей запятой
литералы неявно имеют тип double. Например, в:

площадь плавания (радиус поплавка)
{
вернуть 3.14159 * радиус * радиус;
}

компилятор выполнит все вычисления с "двойным", потому что с плавающей точкой
точечный литерал - это "двойник".

-Wформат
Проверьте вызовы printf и scanf и т. Д., Чтобы убедиться, что предоставленные аргументы
имеют типы, соответствующие указанной строке формата, и что преобразования
указанные в строке формата имеют смысл. Сюда входят стандартные функции и
другие, указанные в атрибутах формата, в "printf", "scanf", "strftime" и
"strfmon" (расширение X / Open, не входит в стандарт C) семейства (или другие целевые-
конкретные семейства). Какие функции проверяются без атрибутов формата
указанное зависит от выбранной стандартной версии, и такие проверки функций
без указанного атрибута отключены -Отдельные or -fno-встроенный.

Форматы проверяются на соответствие функциям формата, поддерживаемым GNU libc версии 2.2.
К ним относятся все функции ISO C90 и C99, а также функции Single Unix.
Спецификация и некоторые расширения BSD и GNU. Другие реализации библиотеки не могут
поддерживать все эти функции; GCC не поддерживает предупреждения о функциях, выходящих за рамки
ограничения конкретной библиотеки. Однако если -педантический используется с -Wформат,
будут выдаваться предупреждения об особенностях формата не в выбранной стандартной версии (но
не для форматов "strfmon", поскольку их нет ни в одной версии стандарта C).

С -Wформат также проверяет аргументы нулевого формата для нескольких функций, -Wформат
также подразумевает -Wnonnull.

-Wформат входит в -Стена. Для большего контроля над некоторыми аспектами проверки формата,
варианты -Wformat-y2k, -Wno-format-extra-args, -Wno-format-нулевой длины,
-Wformat-небуквенный, -Wformat-безопасностькачества -Wformat = 2 доступны, но не
включены в -Стена.

ПРИМЕЧАНИЕ. В Ubuntu 8.10 и более поздних версиях этот параметр включен по умолчанию для C, C ++,
ObjC, ObjC ++. Чтобы отключить, используйте -Wformat = 0.

-Wformat-y2k
If -Wформат указан, также предупредить о форматах "strftime", которые могут давать только
двузначный год.

-Wno-format-содержит-nul
If -Wформат указано, не предупреждать о строках формата, содержащих байты NUL.

-Wno-format-extra-args
If -Wформат указано, не предупреждать о лишних аргументах для "printf" или "scanf"
функция форматирования. Стандарт C указывает, что такие аргументы игнорируются.

Если неиспользуемые аргументы находятся между использованными аргументами, которые указаны с помощью $
спецификации номера операнда, обычно предупреждения по-прежнему выдаются, так как
реализация не могла знать, какой тип передать в "va_arg", чтобы пропустить неиспользуемые
аргументы. Однако в случае форматов "scanf" этот параметр подавляет
предупреждение, если все неиспользуемые аргументы являются указателями, поскольку спецификация Single Unix
говорит, что такие неиспользуемые аргументы допустимы.

-Wno-format-нулевой длины
If -Wформат указано, не предупреждать о форматах нулевой длины. Стандарт C
указывает, что разрешены форматы нулевой длины.

-Wformat-небуквенный
If -Wформат указано, также предупредить, если строка формата не является строковым литералом и
поэтому не может быть проверено, если функция форматирования не принимает аргументы формата как
"va_list".

-Wformat-безопасность
If -Wформат указан, также предупреждать об использовании функций форматирования, которые представляют
возможные проблемы с безопасностью. В настоящее время это предупреждает о вызовах "printf" и
функции "scanf", в которых строка формата не является строковым литералом и нет
аргументы формата, как в "printf (foo);". Это может быть дыра в безопасности, если формат
строка пришла из ненадежного ввода и содержит %n. (В настоящее время это подмножество того, что
-Wformat-небуквенный предупреждает, но в будущем предупреждения могут быть добавлены к
-Wformat-безопасность которые не включены в -Wformat-небуквенный.)

ПРИМЕЧАНИЕ. В Ubuntu 8.10 и более поздних версиях этот параметр включен по умолчанию для C, C ++,
ObjC, ObjC ++. Чтобы отключить, используйте -Wno-формат-безопасность, или отключите все предупреждения формата
-Wformat = 0. Чтобы сделать предупреждения безопасности формата фатальными, укажите
-Werror = безопасность формата.

-Wformat = 2
Включите -Wформат плюс проверки формата, не включенные в -Wформат. В настоящее время эквивалентно
-Wформат -Wformat-небуквенный -Wformat-безопасность -Wformat-y2k.

-Wnonnull
Предупреждать о передаче нулевого указателя для аргументов, помеченных как требующие ненулевого значения
атрибутом функции "ненулевой".

-Wnonnull входит в -Стена и -Wформат. Его можно отключить с помощью -Wno-nonnull
опцию.

-Выиграть сам (Только C, C ++, Objective-C и Objective-C ++)
Предупреждать о неинициализированных переменных, которые инициализируются сами собой. Обратите внимание на это
опция может использоваться только с -Wнеинициализированный опцию.

Например, GCC будет предупреждать о неинициализации "i" только в следующем фрагменте.
когда -Выиграть сам было указано:

int f ()
{
int я = я;
вернуть я;
}

-Wimplicit-int (Только C и Objective-C)
Предупреждать, если в объявлении не указан тип. Это предупреждение включено -Стена.

-Wimplicit-function-декларация (Только C и Objective-C)
Предупреждать всякий раз, когда функция используется перед объявлением. В режиме C99
(-std = C99 or -std = gnu99), это предупреждение включено по умолчанию и преобразовано в
ошибка -педантические-ошибки. Это предупреждение также активируется -Стена.

-Неявный (Только C и Objective-C)
Такой же как -Wimplicit-int и -Wimplicit-function-декларация. Это предупреждение включено
by -Стена.

-Проигранные квалификаторы (Только C и C ++)
Предупреждать, если тип возвращаемого значения функции имеет квалификатор типа, такой как «const». Для ISO C
такой квалификатор типа не имеет никакого эффекта, поскольку значение, возвращаемое функцией, не является
lvalue. Для C ++ предупреждение выдается только для скалярных типов или «void». ISO C
запрещает квалифицированные возвращаемые типы "void" в определениях функций, поэтому такие возвращаемые типы
всегда получать предупреждение, даже без этой опции.

Это предупреждение также активируется -Векстра.

-Wосновной
Предупредить, если тип main подозрительно. main должна быть функцией с внешним
linkage, возвращая int, принимая либо нулевые аргументы, либо два, либо три аргумента
соответствующие типы. Это предупреждение включено по умолчанию в C ++ и включается либо
-Стена or -педантический.

-Wmissing-подтяжки
Предупреждать, если инициализатор агрегата или объединения не полностью заключен в квадратные скобки. В следующих
например, инициализатор для a не заключен в квадратные скобки, но это для b полностью
заключены в скобки.

int a [2] [2] = {0, 1, 2, 3};
int b [2] [2] = {{0, 1}, {2, 3}};

Это предупреждение включено -Стена.

-Wmissing-include-dirs (Только C, C ++, Objective-C и Objective-C ++)
Предупреждать, если указанный пользователем каталог include не существует.

-W скобки
Предупреждать, если скобки опущены в определенных контекстах, например, когда есть
присваивание в контексте, где ожидается значение истинности, или когда операторы вложены
чей приоритет люди часто путают.

Также предупредите, если сравнение вроде х <= у <= г появляется; это эквивалентно (х <= у ? 1 : 0)
<= z, что отличается от интерпретации обычных математических обозначений.

Также предупредите о конструкциях, в которых может возникнуть путаница, для которой выражение «если»
принадлежит ветка "else". Вот пример такого случая:

{
если)
если (б)
Фу ();
еще
бар ();
}

В C / C ++ каждая ветвь else принадлежит самому внутреннему возможному выражению if, которое
в этом примере - «если (б)». Часто это не то, чего ожидал программист, поскольку
проиллюстрировано в приведенном выше примере отступом, выбранным программистом. Когда есть
возможна эта путаница, GCC выдаст предупреждение, когда этот флаг
указано. Чтобы исключить предупреждение, добавьте явные фигурные скобки вокруг самого внутреннего «если».
утверждение, поэтому "else" никак не может принадлежать включающему "if". В
в результате код будет выглядеть так:

{
если)
{
если (б)
Фу ();
еще
бар ();
}
}

Также предупредите об опасном использовании?: С опущенным расширением GNU среднего операнда. Когда
условие в операторе?: является логическим выражением, пропущенное значение будет
всегда 1. Часто пользователь ожидает, что это будет значение, вычисленное внутри условного
выражение вместо этого.

Это предупреждение включено -Стена.

-W точка-последовательности
Предупреждать о коде, который может иметь неопределенную семантику из-за нарушения последовательности
точечные правила в стандартах C и C ++.

Стандарты C и C ++ определяют порядок, в котором выражения в программе C / C ++
оценивается с точки зрения последовательность пунктов, которые представляют собой частичное упорядочение между
выполнение частей программы: те, которые выполняются до точки последовательности, и те,
исполняется после него. Это происходит после вычисления полного выражения (которое
не является частью большего выражения), после вычисления первого операнда
«&&», «||», «?:» или «,» (запятая) оператор перед вызовом функции (но после
оценка его аргументов и выражения, обозначающего вызываемую функцию), а в
некоторые другие места. За исключением случаев, указанных в правилах точки последовательности, порядок
вычисления подвыражений выражения не указано. Все эти правила
описывать только частичный порядок, а не полный, поскольку, например, если два
функции вызываются в одном выражении без точки последовательности между ними,
порядок вызова функций не указан. Однако стандарты
комитет постановил, что вызовы функций не перекрываются.

Не указано, когда между точками последовательности изменения значений
объекты вступают в силу. Программы, поведение которых зависит от этого, имеют неопределенное поведение;
стандарты C и C ++ определяют, что «Между предыдущей и следующей точкой последовательности
объект должен иметь свое сохраненное значение, измененное не более одного раза при оценке
выражение. Кроме того, предыдущее значение должно читаться только для определения значения для
храниться. ". Если программа нарушает эти правила, результаты на любом конкретном
реализация совершенно непредсказуема.

Примеры кода с неопределенным поведением: «a = a ++;», «a [n] = b [n ++]» и «a [i ++] =
i; ". Этот параметр не позволяет диагностировать более сложные случаи, и это может
случайный ложноположительный результат, но в целом он оказался достаточно эффективным при
обнаружение такого рода проблем в программах.

Стандарт сформулирован запутанно, поэтому ведутся споры о точном
смысл правил точки следования в тонких случаях. Ссылки на обсуждения
проблему, включая предлагаемые формальные определения, можно найти на странице чтения GCC,
вhttp://gcc.gnu.org/readings.html>.

Это предупреждение включено -Стена для C и C ++.

-Обратный тип
Предупреждать всякий раз, когда функция определена с возвращаемым типом, который по умолчанию равен "int". Также
предупреждать о любом операторе "return" без возвращаемого значения в функции, возвращаемый тип которой
не является "пустым" (падение с конца тела функции считается возвращением
без значения), и об операторе "return" с выражением в функции
чей возвращаемый тип - void.

Для C ++ функция без типа возврата всегда выдает диагностическое сообщение, даже
когда -Без возврата типа указан. Единственные исключения: main и функции
определяется в системных заголовках.

Это предупреждение включено -Стена.

-Wпереключатель
Предупреждать всякий раз, когда оператор switch имеет индекс перечислимого типа и не имеет значения case.
для одного или нескольких названных кодов этого перечисления. (Наличие «дефолтного»
метка предотвращает это предупреждение.) метки "case" вне диапазона перечисления также
вызывать предупреждения при использовании этой опции (даже если есть метка "по умолчанию"). Этот
предупреждение включено -Стена.

-Wswitch-по умолчанию
Предупреждать всякий раз, когда в инструкции switch не указан регистр по умолчанию.

-Wswitch-перечисление
Предупреждать всякий раз, когда оператор switch имеет индекс перечислимого типа и не имеет значения case.
для одного или нескольких названных кодов этого перечисления. ярлыки "case" за пределами
диапазон перечисления также вызывает предупреждения при использовании этой опции. Единственная разница
между -Wпереключатель и эта опция заключается в том, что эта опция выдает предупреждение об пропущенном
код перечисления, даже если есть метка "по умолчанию".

-Wsync-нанд (Только C и C ++)
Предупреждать, когда встроенные функции «__sync_fetch_and_nand» и «__sync_nand_and_fetch»
использовал. Эти функции изменили семантику в GCC 4.4.

-Писания
Предупреждать, если встречаются какие-либо триграфы, которые могут изменить смысл программы
(триграфы в комментариях не предупреждаются). Это предупреждение включено -Стена.

-Wunused-but-set-параметр
Предупреждать всякий раз, когда параметр функции назначен, но в остальном не используется (кроме
его декларация).

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

Это предупреждение также активируется -Wunused вместе с -Векстра.

-Wunused-но-set-переменная
Предупреждать всякий раз, когда локальная переменная назначена, но в остальном не используется (кроме
декларация). Это предупреждение включено -Стена.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

Это предупреждение также активируется -Wunused, что обеспечивается -Стена.

-Wunused-функция
Предупреждать всякий раз, когда статическая функция объявлена, но не определена, или не встроенная статическая функция
функция не используется. Это предупреждение включено -Стена.

-Wunused-метка
Предупреждать всякий раз, когда метка объявлена, но не используется. Это предупреждение включено -Стена.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

-Wunused-local-typedefs (Только C, Objective-C, C ++ и Objective-C ++)
Предупреждать, когда определение типа, локально определенное в функции, не используется.

-Wunused-параметр
Предупреждать всякий раз, когда параметр функции не используется, за исключением его объявления.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

-Wno-неиспользованный-результат
Не предупреждать, если вызывающий объект функции, отмеченной атрибутом "warn_unused_result",
не использовать его возвращаемое значение. По умолчанию -Wunused-результат.

-Wunused-переменная
Предупреждать всякий раз, когда локальная переменная или непостоянная статическая переменная не используется, кроме
его декларация. Это предупреждение включено -Стена.

Чтобы подавить это предупреждение, используйте неиспользованный атрибутов.

-Wunused-значение
Предупреждать всякий раз, когда инструкция вычисляет результат, который явно не используется. Подавить
это предупреждение приводит неиспользуемое выражение к аннулировать. Это включает выражение-оператор
или левая часть выражения запятой, которое не содержит побочных эффектов. Для
Например, выражение, такое как х [i, j] вызовет предупреждение, а x [(void) i, j] будете
не.

Это предупреждение включено -Стена.

-Wunused
Все выше -Wunused варианты комбинированные.

Чтобы получить предупреждение о неиспользуемом параметре функции, необходимо либо указать
-Векстра -Wunused (Обратите внимание, что -Стена подразумевает -Wunused), либо отдельно указать
-Wunused-параметр.

-Wнеинициализированный
Предупреждать, если автоматическая переменная используется без предварительной инициализации или если переменная
может быть заблокирован вызовом "setjmp". В C ++ предупреждать о нестатической ссылке или нестатической ссылке.
статический Const член появляется в классе без конструкторов.

Если вы хотите предупредить о коде, который использует неинициализированное значение переменной в
собственный инициализатор, используйте -Выиграть сам опцию.

Эти предупреждения возникают для отдельных неинициализированных или поврежденных элементов конструкции,
объединение или переменные массива, а также для неинициализированных или затертых переменных
в целом. Они не встречаются для переменных или элементов, объявленных «изменчивыми». Потому что
эти предупреждения зависят от оптимизации, точных переменных или элементов, для которых есть
Количество предупреждений будет зависеть от конкретных параметров оптимизации и версии используемого GCC.

Обратите внимание, что может не быть предупреждения о переменной, которая используется только для вычисления
значение, которое само по себе никогда не используется, потому что такие вычисления могут быть удалены потоком данных
анализ перед печатью предупреждений.

-Wmaybe-неинициализированный
Для автоматической переменной, если существует путь от записи функции до использования
переменная, которая инициализирована, но существуют другие пути, к которым переменная не относится
инициализирован, компилятор выдаст предупреждение, если не сможет подтвердить неинициализированный
пути не происходят во время выполнения. Эти предупреждения сделаны необязательными, потому что GCC не
достаточно умен, чтобы увидеть все причины, по которым код может быть правильным, несмотря на то, что
есть ошибка. Вот один из примеров того, как это может произойти:

{
int x;
переключатель (у)
{
случай 1: x = 1;
перерыва;
случай 2: x = 4;
перерыва;
случай 3: x = 5;
}
фу (х);
}

Если значение «y» всегда равно 1, 2 или 3, то «x» всегда инициализируется, но GCC
не знает этого. Чтобы подавить предупреждение, пользователь должен указать случай по умолчанию.
утверждать(0) или аналогичный код.

Эта опция также предупреждает, когда энергонезависимая автоматическая переменная может быть изменена
вызов "longjmp". Эти предупреждения тоже возможны только при оптимизации
сборник.

Компилятор видит только вызовы "setjmp". Он не может знать, где будет "longjmp"
называется; фактически, обработчик сигнала может вызвать его в любой точке кода. Как
в результате вы можете получить предупреждение, даже если на самом деле проблем нет, потому что "longjmp"
фактически не может быть вызван по месту, которое могло бы вызвать проблемы.

Некоторых ложных предупреждений можно избежать, если объявить все функции, которые вы используете,
никогда не возвращайся как "noreturn".

Это предупреждение включено -Стена or -Векстра.

-Wunknown-прагмы
Предупреждать, когда встречается директива "#pragma", которая не понимается GCC. Если это
используется опция командной строки, предупреждения будут выдаваться даже для неизвестных прагм в
системные файлы заголовков. Это не тот случай, если предупреждения были включены только
-Стена параметр командной строки.

-Wno-прагмы
Не предупреждать о неправильном использовании прагм, например о неправильных параметрах, недопустимом синтаксисе или
конфликты между прагмами. Смотрите также -Wunknown-прагмы.

-Wstrict-псевдоним
Эта опция активна только когда -fstrict-псевдоним активен. Предупреждает о коде, который
может нарушить строгие правила псевдонима, которые компилятор использует для оптимизации.
Предупреждение охватывает не все случаи, но пытается выявить наиболее распространенные.
подводные камни. Он включен в -Стена, Это эквивалентно -Wstrict-aliasing = 3

-Wstrict-aliasing = n
Эта опция активна только когда -fstrict-псевдоним активен. Предупреждает о коде, который
может нарушить строгие правила псевдонима, которые компилятор использует для оптимизации.
Чем выше уровень, тем выше точность (меньше ложных срабатываний). Высшие уровни
также соответствуют большему усилию, аналогично тому, как работает -O. -Wstrict-псевдоним is
что эквивалентно -Wstrict-aliasing = n, при n = 3.

Уровень 1: Самый агрессивный, быстрый, наименее точный. Возможно полезно при более высоких уровнях
не предупреждать, но -fstrict-aliasing по-прежнему нарушает код, так как в нем очень мало ложных
негативы. Однако у него много ложных срабатываний. Предупреждает обо всех преобразованиях указателя
между возможно несовместимыми типами, даже если никогда не разыменовывался. Бежит впереди
только конец.

Уровень 2: агрессивный, быстрый, не слишком точный. Может по-прежнему иметь много ложных срабатываний (не
столько же, сколько уровень 1), и несколько ложноотрицательных результатов (но, возможно, больше, чем уровень 1).
В отличие от уровня 1, он только предупреждает, когда адрес занят. Предупреждает о неполных типах.
Работает только в передней части.

Уровень 3 (по умолчанию для -Wstrict-псевдоним): Должно быть очень мало ложных срабатываний и мало
ложные негативы. Немного медленнее, чем на уровнях 1 или 2, когда включена оптимизация.
Позаботится об общем шаблоне каламбура + разыменования во внешнем интерфейсе:
"* (int *) & some_float". Если оптимизация включена, она также выполняется в серверной части, где
он имеет дело с несколькими случаями операторов, используя чувствительную к потоку информацию о точках.
Предупреждает только при разыменовании преобразованного указателя. Не предупреждает о неполном
типы.

-Wstrict-переполнение
-Wstrict-overflow =n
Эта опция активна только когда -fstrict-переполнение активен. Предупреждает о случаях
где компилятор оптимизирует на основе предположения, что подписанное переполнение не
происходить. Обратите внимание, что он не предупреждает обо всех случаях, когда код может быть переполнен: он
предупреждает только о тех случаях, когда компилятор реализует некоторую оптимизацию. Таким образом, это
предупреждение зависит от уровня оптимизации.

Оптимизация, предполагающая, что подписанное переполнение не происходит, совершенно безопасна, если
значения задействованных переменных таковы, что переполнение никогда не приводит к
происходить. Поэтому это предупреждение может легко дать ложное срабатывание: предупреждение о коде.
на самом деле это не проблема. Чтобы помочь сосредоточиться на важных вопросах, несколько предупреждений
уровни определены. Предупреждения об использовании неопределенного подписанного переполнения не выдаются.
при оценке, сколько итераций потребуется для цикла, в частности, когда
определение того, будет ли цикл выполняться вообще.

-Wstrict-overflow = 1
Предупреждайте о случаях, которые одновременно сомнительны и которых легко избежать. Например: «x +
1> x "; с -fstrict-переполнение, компилятор упростит это до 1. Этот уровень
of -Wstrict-переполнение включен -Стена; более высокие уровни не являются и должны быть
явно запрошен.

-Wstrict-overflow = 2
Также предупредите о других случаях, когда сравнение упрощено до константы. Для
пример: «abs (x)> = 0». Это можно упростить, только если -fstrict-переполнение В
эффект, потому что «abs (INT_MIN)» переполняется до «INT_MIN», которое меньше нуля.
-Wstrict-переполнение (без уровня) совпадает с -Wstrict-overflow = 2.

-Wstrict-overflow = 3
Также предупредите о других случаях, когда сравнение упрощено. Например: "x + 1
> 1 будет упрощено до «x> 0».

-Wstrict-overflow = 4
Также предупредите о других упрощениях, не предусмотренных вышеупомянутыми случаями. Для
пример: «(x * 10) / 5» будет упрощено до «x * 2».

-Wstrict-overflow = 5
Также предупреждаем о случаях, когда компилятор уменьшает величину константы.
участвует в сравнении. Например: «x + 2> y» будет упрощено до «x + 1.
> = y ". Об этом сообщается только на самом высоком уровне предупреждения, потому что это
упрощение применяется ко многим сравнениям, поэтому этот уровень предупреждения даст очень
большое количество ложных срабатываний.

-Wsuggest-attribute =[чистый|Const|без возврата]
Предупреждать о случаях, когда добавление атрибута может быть полезным. Атрибуты в настоящее время
поддерживаемые перечислены ниже.

-Wsuggest-attribute = чистый
-Wsuggest-attribute = const
-Wsuggest-attribute = noreturn
Предупреждать о функциях, которые могут быть кандидатами на атрибуты "pure", "const" или
"без возврата". Компилятор предупреждает только о функциях, видимых в другой компиляции.
единиц или (в случае "чистый" и "константный"), если он не может доказать, что функция
возвращается нормально. Функция возвращается нормально, если она не содержит бесконечного
цикл не возвращается ненормально, бросая, вызывая «abort ()» или захватывая. Этот
анализ требует выбора -fipa-чистый-const, который по умолчанию включен в -O и
выше. Более высокие уровни оптимизации повышают точность анализа.

-Боевые границы
Эта опция активна только когда -ftree-vrp активен (по умолчанию для -O2 и выше). Это
предупреждает об индексах массивов, которые всегда выходят за границы. Это предупреждение
включен -Стена.

-Wno-деление на ноль
Не предупреждать о целочисленном делении на ноль во время компиляции. Деление с плавающей запятой на
о нуле не предупреждают, так как это может быть законный способ получения бесконечностей и
NaN.

-Wsystem-заголовки
Распечатать предупреждающие сообщения для конструкций, обнаруженных в файлах системных заголовков. Предупреждения от
системные заголовки обычно подавляются при условии, что они обычно не
указывают на реальные проблемы и только затрудняют чтение вывода компилятора. С использованием
этот параметр командной строки указывает GCC выдавать предупреждения из системных заголовков, как если бы они
произошло в пользовательском коде. Однако обратите внимание, что использование -Стена в сочетании с этой опцией
будете не предупреждать о неизвестных прагмах в системных заголовках --- для этого, -Wunknown-прагмы
также необходимо использовать.

-W батуты
Предупреждать о трамплинах, генерируемых для указателей на вложенные функции.

Батут - это небольшой фрагмент данных или кода, который создается во время бега.
время в стеке, когда берется адрес вложенной функции, и
используется для косвенного вызова вложенной функции. Для некоторых целей это
состоит только из данных и поэтому не требует специальной обработки. Но,
для большинства целей он состоит из кода и, следовательно, требует стека
быть исполняемым для правильной работы программы.

-Wfloat-равно
Предупреждать, если при сравнении равенства используются значения с плавающей запятой.

Идея заключается в том, что иногда (для программиста) удобно
рассматривать значения с плавающей запятой как приближения к бесконечно точным действительным числам.
Если вы это делаете, то вам нужно вычислить (анализируя код или
другой способ) максимальная или вероятная максимальная ошибка, которую вносит вычисление, и
учитывайте это при выполнении сравнений (и при выводе результатов, но это
другая проблема). В частности, вместо проверки на равенство вы должны проверить
чтобы увидеть, имеют ли два значения перекрывающиеся диапазоны; и это делается с
реляционные операторы, поэтому сравнения на равенство, вероятно, ошибочны.

-Wтрадиционный (Только C и Objective-C)
Предупреждать об определенных конструкциях, которые ведут себя по-разному в традиционном и ISO C. Также
предупреждать о конструкциях ISO C, у которых нет традиционного эквивалента C, и / или о проблемных
конструкции, которых следует избегать.

· Параметры макроса, которые появляются в строковых литералах в теле макроса. В
традиционная замена макросов C происходит внутри строковых литералов, но не
в ISO C.

· В традиционном C не существовало некоторых директив препроцессора. Традиционный
препроцессоры будут рассматривать строку как директиву только в том случае, если # появился в
столбец 1 в строке. Следовательно -Wтрадиционный предупреждает о директивах, которые
традиционный C понимает, но проигнорирует, потому что # не появляется как
первый символ в строке. Также предлагается скрыть такие директивы, как #прагма
не понимаются традиционным языком C из-за их отступа. Некоторые традиционные
реализации не распознают #элиф, поэтому предлагается полностью его избегать.

· Функциональный макрос, который появляется без аргументов.

· Оператор унарного плюса.

· The U целочисленный постоянный суффикс или F or L суффиксы констант с плавающей запятой.
(Традиционный C поддерживает L суффикс для целочисленных констант.) Обратите внимание, что эти
суффиксы появляются в макросах, определенных в системных заголовках большинства современных систем,
например _МИН/_МАКСИМУМ макросы в " ". Использование этих макросов в пользовательском коде может
обычно приводят к ложным предупреждениям, однако встроенный препроцессор GCC имеет
достаточно контекста, чтобы избежать предупреждения в этих случаях.

· Функция, объявленная внешней в одном блоке, а затем используется после окончания
блок.

· Оператор switch имеет операнд типа long.

· Объявление нестатической функции следует за "статической" функцией. Эта конструкция не
принят некоторыми традиционными компиляторами C.

· Тип ISO целочисленной константы имеет другую ширину или знак, чем его
традиционный тип. Это предупреждение выдается только в том случае, если основание константы равно десяти.
Т.е. шестнадцатеричные или восьмеричные значения, которые обычно представляют битовые комбинации, не являются
предупреждал о.

· Обнаружено использование конкатенации строк ISO.

· Инициализация автоматических агрегатов.

· Идентификатор конфликтует с ярлыками. В традиционном C отсутствует отдельное пространство имен для
этикетки.

· Инициализация союзов. Если инициализатор равен нулю, предупреждение не выводится.
Это делается в предположении, что в пользовательском коде появляется нулевой инициализатор.
обусловлено, например, "__STDC__", чтобы не пропустить предупреждения инициализатора, и полагается на
инициализация по умолчанию равной нулю в традиционном случае C.

· Преобразования по прототипам между значениями с фиксированной / плавающей запятой и наоборот. В
отсутствие этих прототипов при компиляции с традиционным C вызовет серьезные
проблемы. Это подмножество возможных предупреждений о преобразовании для полного набора
использование -W традиционное преобразование.

· Использование определений функций в стиле ISO C. Это предупреждение намеренно не выпущенный
для объявлений прототипов или функций с переменным числом аргументов, потому что эти функции ISO C будут
появляются в вашем коде при использовании традиционных макросов совместимости C libiberty,
«ПАРАМЕТРЫ» и «ВПАРАМЫ». Это предупреждение также игнорируется для вложенных функций.
потому что эта функция уже является расширением GCC и поэтому не имеет отношения к
традиционная совместимость с C.

-W традиционное преобразование (Только C и Objective-C)
Предупреждать, если прототип вызывает преобразование типа, отличное от того, что произошло бы
к тому же аргументу при отсутствии прототипа. Сюда входят преобразования
фиксированная точка в плавающую и наоборот, а преобразования, изменяющие ширину или
подписанность аргумента с фиксированной запятой, кроме случаев, когда это то же самое, что и продвижение по умолчанию.

-Wобъявление-после-заявления (Только C и Objective-C)
Предупреждать, если объявление находится после оператора в блоке. Эта конструкция, известная
из C ++, был введен в ISO C99 и по умолчанию разрешен в GCC. Нет
поддерживался ISO C90 и не поддерживался версиями GCC до GCC 3.0.

-Вундеф
Предупреждать, если неопределенный идентификатор оценивается в #если Директивы.

-Wno-endif-label
Не предупреждать, когда #еще или #endif следуют текст.

-Wтень
Предупреждать всякий раз, когда локальная переменная или объявление типа затеняет другую переменную,
параметр, тип или член класса (в C ++), или когда встроенная функция
затененный. Обратите внимание, что в C ++ компилятор не будет предупреждать, если локальная переменная затеняет
struct / class / enum, но будет предупреждать, если он затеняет явный typedef.

-Больше-чем =только
Предупреждать всякий раз, когда объект больше, чем только байтов определено.

-Wframe-больше-чем =только
Предупреждать, если размер функционального фрейма больше, чем только байтов. Расчет выполнен
определение размера кадра стека является приблизительным и не консервативным. Настоящий
требования могут быть несколько больше, чем только даже если вы не получите предупреждения. В
кроме того, любое пространство, выделенное с помощью "alloca", массивов переменной длины или связанных
конструкции не включаются компилятором при определении того, следует ли выдавать
предупреждение.

-Wno-free-nonheap-объект
Не предупреждать при попытке освободить объект, который не был размещен в куче.

-Wstack-usage =только
Предупреждать, если использование стека функцией может быть больше, чем только байтов. Расчет
сделано для определения консервативности использования стека. Любое пространство, выделенное через "alloca",
массивы переменной длины или связанные конструкции включаются компилятором, когда
определение того, выдавать ли предупреждение.

Сообщение соответствует выводу -fstack-использование.

· Если использование стека полностью статично, но превышает указанное количество, оно:

предупреждение: использование стека составляет 1120 байт

· Если использование стека (частично) динамическое, но ограниченное, оно:

предупреждение: использование стека может составлять 1648 байт

· Если использование стека (частично) динамическое и неограниченное, оно:

предупреждение: использование стека может быть неограниченным

-Wunsafe-loop-оптимизации
Предупредить, если цикл не может быть оптимизирован, потому что компилятор ничего не может предположить на
границы индексов цикла. С участием -funsafe-loop-оптимизации предупредить, если компилятор
сделал такие предположения.

-Wno-pedantic-ms-формат (Только цели MinGW)
Отключает предупреждения о спецификаторах ширины формата "printf" / "scanf", отличных от ISO, "I32",
«I64» и «I» используются в целях Windows в зависимости от среды выполнения MS, когда вы используете
варианты -Wформат и -педантический без gnu-расширений.

-Wpointer-ариф
Предупреждать обо всем, что зависит от «размера» типа функции или «пустоты». GNU C
присваивает этим типам размер 1 для удобства вычислений с помощью "void *"
указатели и указатели на функции. В C ++ предупреждать также при выполнении арифметической операции
включает "NULL". Это предупреждение также активируется -педантический.

-Wtype-ограничения
Предупреждать, если сравнение всегда верно или всегда неверно из-за ограниченного диапазона
тип данных, но не предупреждать о постоянных выражениях. Например, предупредить, если беззнаковый
переменная сравнивается с нулем с < or >=. Это предупреждение также активируется
-Векстра.

-Wbad-функция-приведение (Только C и Objective-C)
Предупреждать всякий раз, когда вызов функции приводится к несовпадающему типу. Например, предупредить, если
«int malloc ()» приводится к «чему угодно *».

-Wc ++ - совместимость (Только C и Objective-C)
Предупреждать о конструкциях ISO C, которые не входят в общее подмножество ISO C и ISO
C ++, например, запрос на неявное преобразование из «void *» в указатель на не «void»
тип.

-Wc ++ 11-compat (Только C ++ и Objective-C ++)
Предупреждать о конструкциях C ++, значение которых отличается в ISO C ++ 1998 и ISO C ++ 2011,
например, идентификаторы в ISO C ++ 1998, которые являются ключевыми словами в ISO C ++ 2011. Это предупреждение
включается -Украшивание и включен -Стена.

-Wcast-качество
Предупреждать всякий раз при приведении указателя, чтобы удалить квалификатор типа из целевого типа.
Например, предупредить, если "const char *" приведено к обычному "char *".

Также предупреждайте при выполнении приведения, которое небезопасно вводит квалификатор типа. Для
Например, приведение "char **" к "const char **" небезопасно, как в этом примере:

/ * p - значение char **. * /
const char ** q = (const char **) p;
/ * Присвоение const char * строки только для чтения * в порядке. * /
* q = "строка";
/ * Теперь указатель char ** указывает на постоянную память. * /
** p = 'b';

-Wcast-выравнивание
Предупреждать всякий раз, когда указатель приводится так, что требуется выравнивание цели.
повысился. Например, предупреждать, если "char *" приведено к "int *" на машинах, где
Доступ к целым числам возможен только на двух- или четырехбайтовых границах.

-Wwrite-строки
При компиляции C присвойте строковым константам тип «const char [длина]" так что копирование
адрес единицы в указателе, отличном от "const" "char *", получит предупреждение. Эти
предупреждения помогут вам найти во время компиляции код, который может попытаться записать в строку
константа, но только если вы очень осторожно использовали "const" в объявлениях.
и прототипы. Иначе будет просто неприятность. Вот почему мы не сделали
-Стена запросить эти предупреждения.

При компиляции C ++ предупредите об устаревшем преобразовании строковых литералов в "char
* ". Это предупреждение включено по умолчанию для программ на C ++.

-Wразбит
Предупреждать о переменных, которые могут быть изменены лонгджмп or вилка. Это предупреждение также
включен -Векстра.

-Wконверсия
Предупреждать о неявных преобразованиях, которые могут изменить значение. Сюда входят конверсии
между действительным и целым числом, например «abs (x)», когда «x» равно «double»; конверсии между
знаковый и беззнаковый, например «unsigned ui = -1»; и преобразование в более мелкие типы, например
"sqrtf (M_PI)". Не предупреждать о явных приведениях типа «abs ((int) x)» и «ui =
(беззнаковый) -1 », или если значение не изменилось в результате преобразования, как в« abs (2.0) ».
Предупреждения о преобразованиях между целыми числами со знаком и без знака можно отключить с помощью
через -Wno-sign-преобразование.

Для C ++ также предупреждайте о путанице при разрешении перегрузки для пользовательских преобразований; а также
преобразования, которые никогда не будут использовать оператор преобразования типа: преобразования в "void",
того же типа, базового класса или ссылки на них. Предупреждения о конверсиях между
целые числа со знаком и без знака по умолчанию отключены в C ++, если только -Wsign-конверсия
явно включен.

-Wno-преобразование-нуль (Только C ++ и Objective-C ++)
Не предупреждать о преобразованиях между типами "NULL" и типами, не являющимися указателями. -Wconversion-нуль is
по умолчанию включен.

-Wzero-as-null-указатель-константа (Только C ++ и Objective-C ++)
Предупреждать, когда в качестве константы нулевого указателя используется литерал «0». Это может быть полезно
облегчить преобразование в "nullptr" в C ++ 11.

-Пустое тело
Предупредить, если в if, еще or do в то время как утверждение. Это предупреждение
также поддерживается -Векстра.

-Wenum-сравнить
Предупредить о сравнении значений разных перечислимых типов. В C ++ перечисление
несоответствия в условных выражениях также диагностируются, и предупреждение включается
дефолт. В C это предупреждение включено -Стена.

-Wjump-промахи-init (Только C, Objective-C)
Предупреждать, если инструкция "goto" или "switch" перескакивает вперед через
инициализация переменной или переход назад к метке после того, как переменная была
инициализирован. Это только предупреждает о переменных, которые инициализируются, когда они
заявил. Это предупреждение поддерживается только для C и Objective-C; в C ++ такого рода
ветка - это ошибка в любом случае.

-Wjump-промахи-init входит в -Wc ++ - совместимость. Его можно отключить с помощью
-Wno-прыжок-пропускает-инициализацию опцию.

-Wsign-сравнить
Предупреждать, если сравнение значений со знаком и без знака может привести к неверному результату.
результат, когда значение со знаком преобразовано в беззнаковое. Это предупреждение также включено
by -Векстра; чтобы получить другие предупреждения -Векстра без этого предупреждения используйте -Векстра
-Wno-знак-сравнить.

-Wsign-конверсия
Предупреждать о неявных преобразованиях, которые могут изменить знак целочисленного значения, например
присвоение знакового целочисленного выражения беззнаковой целочисленной переменной. Явный
бросок заглушает предупреждение. В C эта опция также включена -Wконверсия.

-адрес
Предупреждать о подозрительном использовании адресов памяти. К ним относятся использование адреса
функция в условном выражении, например "void func (void); if (func)" и
сравнения с адресом памяти строкового литерала, например "if (x ==" abc ")".
Такое использование обычно указывает на ошибку программиста: адрес функции всегда
оценивается как истина, поэтому их использование в условном выражении обычно указывает на то, что программист
забыл круглые скобки в вызове функции; и сравнения со строковыми литералами
приводят к неопределенному поведению и не переносятся в C, поэтому обычно указывают
что программист намеревался использовать "strcmp". Это предупреждение включено -Стена.

-Wлогическая операция
Предупреждать о подозрительном использовании логических операторов в выражениях. Это включает использование
логические операторы в контекстах, где, вероятно, ожидается побитовый оператор.

-Ваггрегат-возврат
Предупреждать, если определены или вызваны какие-либо функции, возвращающие структуры или объединения. (В
языков, где вы можете вернуть массив, это также вызывает предупреждение.)

-Wno-атрибуты
Не предупреждать, если используется неожиданный атрибут «__attribute__», например нераспознанные атрибуты,
атрибуты функций, применяемые к переменным и т. д. Это не остановит ошибки для
некорректное использование поддерживаемых атрибутов.

-Wno-build-macro-redefined
Не предупреждать, если некоторые встроенные макросы переопределяются. Это подавляет предупреждения для
переопределение «__TIMESTAMP__», «__TIME__», «__DATE__», «__FILE__» и
«__BASE_FILE__».

-Wstrict-прототипы (Только C и Objective-C)
Предупреждать, если функция объявлена ​​или определена без указания типов аргументов. (An
определение функции в старом стиле разрешено без предупреждения, если ему предшествует
объявление, указывающее типы аргументов.)

-Wold-style-декларация (Только C и Objective-C)
Предупреждать об устаревшем использовании в соответствии со стандартом C. Для
Например, предупредите, если спецификаторы класса хранилища, такие как "static", не являются первыми в
декларация. Это предупреждение также активируется -Векстра.

-Декоративный стиль (Только C и Objective-C)
Предупредить, если используется определение функции в старом стиле. Предупреждение выдается, даже если есть
предыдущий прототип.

-Wmissing-параметр-тип (Только C и Objective-C)
Параметр функции объявляется без спецификатора типа в функциях стиля K & R:

void foo (bar) {}

Это предупреждение также активируется -Векстра.

-Wmissing-прототипы (Только C и Objective-C)
Предупреждать, если глобальная функция определена без предварительного объявления прототипа. Этот
предупреждение выдается, даже если само определение предоставляет прототип. Цель состоит в том, чтобы
обнаруживать глобальные функции, которые не объявлены в файлах заголовков.

-Wmissing-декларации
Предупреждать, если глобальная функция определена без предварительного объявления. Сделай так, даже если
само определение представляет собой прототип. Используйте эту опцию для определения глобального
функции, которые не объявлены в файлах заголовков. В C ++ для
шаблоны функций, или для встроенных функций, или для функций в анонимных пространствах имен.

-Wmissing-поля-инициализаторы
Предупреждать, если в инициализаторе структуры отсутствуют некоторые поля. Например, следующие
код вызовет такое предупреждение, потому что "xh" неявно равно нулю:

структура s {int f, g, h; };
struct sx = {3, 4};

Эта опция не предупреждает о назначенных инициализаторах, поэтому следующая модификация
не вызовет предупреждения:

структура s {int f, g, h; };
struct sx = {.f = 3, .g = 4};

Это предупреждение включено в -Векстра. Чтобы получить другие -Векстра предупреждения без этого,
использование -Векстра -Wno-отсутствующие-поля-инициализаторы.

-Wmissing-формат-атрибут
Предупреждать об указателях функций, которые могут быть кандидатами на атрибуты «форматирования». Примечание
это только возможные кандидаты, а не абсолютные. GCC угадает эту функцию
указатели с атрибутами формата, которые используются при назначении, инициализации,
операторы передачи параметров или возврата должны иметь соответствующий атрибут "формат".
в получившемся виде. То есть левая часть присваивания или инициализации,
тип переменной параметра или возвращаемый тип содержащей функцию
соответственно, должен также иметь атрибут «формат», чтобы избежать предупреждения.

GCC также будет предупреждать об определениях функций, которые могут быть кандидатами на «формат».
атрибуты. Опять же, это только возможные кандидаты. GCC угадает, что "формат"
атрибуты могут быть подходящими для любой функции, которая вызывает такую ​​функцию, как "vprintf"
или "vscanf", но это может быть не всегда, и некоторые функции, для которых
Соответствующие атрибуты "формат" могут не обнаруживаться.

-Wno-многосимвольный
Не предупреждать, если многозначная константа ('ФУФ') используется. Обычно они указывают
опечатка в коде пользователя, так как они имеют значения, определяемые реализацией, и не должны
используется в переносимом коде.

-Wnormalized =
В ISO C и ISO C ++ два идентификатора различаются, если они представляют собой разные последовательности
символы. Однако иногда, когда символы вне базового набора символов ASCII
используются, у вас могут быть две разные последовательности символов, которые выглядят одинаково. Избегать
путаница, стандарт ISO 10646 устанавливает некоторые нормализация условиями, который при применении
убедитесь, что две одинаковые последовательности превращаются в одну и ту же последовательность. GCC
может предупредить вас, если вы используете идентификаторы, которые не были нормализованы; этот вариант
контролирует это предупреждение.

GCC поддерживает четыре уровня предупреждений. По умолчанию -Wnormalized = nfc,
который предупреждает о любом идентификаторе, который не находится в нормализованной форме ISO 10646 "C",
NFC. NFC - это рекомендуемая форма для большинства случаев использования.

К сожалению, в идентификаторах ISO C и ISO C ++ разрешены некоторые символы.
которые при преобразовании в NFC не допускаются в идентификаторах. То есть пути нет
использовать эти символы в переносимых ISO C или C ++ и иметь все ваши идентификаторы в NFC.
-Wnormalized = id подавляет предупреждение для этих символов. Есть надежда, что будущее
версии соответствующих стандартов исправят это, поэтому этот вариант не
по умолчанию.

Вы можете отключить предупреждение для всех символов, написав -Wnormalized = нет. Вы
хотел бы сделать это только в том случае, если бы вы использовали другую схему нормализации (например,
"D"), потому что в противном случае вы можете легко создать ошибки, которые буквально невозможно исправить.
видеть.

Некоторые символы в ISO 10646 имеют разные значения, но выглядят одинаково в некоторых шрифтах.
или методы отображения, особенно после применения форматирования. Например
"\ u207F", "СТРОЧНАЯ ЛАТИНСКАЯ БУКВА N" будет отображаться как обычное "n".
который был помещен в верхний индекс. ISO 10646 определяет НФКК нормализация
схему, чтобы преобразовать все это в стандартную форму, и GCC предупредит, если ваш
код отсутствует в NFKC, если вы используете -Wnormalized = nfkc. Это предупреждение сравнимо с
предупреждение о каждом идентификаторе, содержащем букву O, потому что его можно спутать
с цифрой 0, поэтому не используется по умолчанию, но может быть полезен в качестве локального кодирования
соглашение, если среда программирования не может быть исправлена ​​для отображения этих
характеры отчетливо.

-Wno-не рекомендуется
Не предупреждать об использовании устаревших функций.

-Wno-устаревшие-декларации
Не предупреждать об использовании функций, переменных и типов, отмеченных как устаревшие
с использованием атрибута "устаревший".

-Wno-переполнение
Не предупреждать о переполнении во время компиляции в постоянных выражениях.

-Woverride-инициализация (Только C и Objective-C)
Предупреждать, если инициализированное поле без побочных эффектов отменяется при использовании назначенного
инициализаторы.

Это предупреждение включено в -Векстра. Чтобы получить другие -Векстра предупреждения без этого,
использование -Векстра -Wno-override-init.

-Упакованный
Предупреждать, если структуре задан упакованный атрибут, но упакованный атрибут не имеет
влияние на планировку или размер конструкции. Такие структуры могут быть неправильно выровнены для
мало пользы. Например, в этом коде переменная "fx" в "struct bar" будет
быть смещенным, даже если "struct bar" сама по себе не имеет упакованного атрибута:

структура фу {
int x;
символы а, б, в, г;
} __attribute __ ((упаковано));
структурная полоса {
символ г;
структура foo f;
};

-Wpacked-битовое-совместимость
GCC серии 4.1, 4.2 и 4.3 игнорируют атрибут "упакованный" в битовых полях типа
«чар». Это было исправлено в GCC 4.4, но изменение может привести к различиям в
макет структуры. GCC сообщает вам, когда смещение такого поля изменилось в GCC.
4.4. Например, в этом поле больше нет 4-битного заполнения между полями «a» и «b».
состав:

структура foo
{
char a: 4;
char b: 8;
} __attribute__ ((упаковано));

Это предупреждение включено по умолчанию. Использовать -Wno-pack-bitfield-compat отключить это
предупреждение.

-Wмягкий
Предупреждать, если в структуру включено заполнение, либо для выравнивания элемента
конструкции или выровнять всю конструкцию. Иногда, когда это происходит, это возможно
чтобы переставить поля структуры, чтобы уменьшить отступы и, таким образом, сделать
структура меньше.

-Wredundant-декларации
Предупреждать, если что-либо объявлено более одного раза в одной и той же области, даже в тех случаях, когда
множественное объявление действительно и ничего не меняет.

-Wnested-экстерны (Только C и Objective-C)
Предупреждать, если в функции встречается объявление "extern".

-Винлайн
Предупреждать, если функция не может быть встроена и была объявлена ​​встроенной. Даже с этим
вариант, компилятор не будет предупреждать о сбоях встроенных функций, объявленных в
системные заголовки.

Компилятор использует различные эвристики, чтобы определить, нужно ли встраивать
функция. Например, компилятор учитывает размер выполняемой функции.
inline и количество встраиваемых файлов, которые уже были выполнены в текущей функции.
Поэтому, казалось бы, незначительные изменения в исходной программе могут вызвать
предупреждения, сделанные -Винлайн появиться или исчезнуть.

-Wno-invalid-offsetof (Только C ++ и Objective-C ++)
Подавить предупреждения от применения смещение макрос к типу, не относящемуся к POD. В соответствии с
стандарт ISO C ++ 1998 г., применяющий смещение к типу, не относящемуся к POD, не определено. В
существующие реализации C ++, однако, смещение обычно дает значимые результаты
даже когда применяется к определенным типам, не относящимся к POD. (Например, простой структура который
не может быть типом POD только в силу наличия конструктора.) Этот флаг предназначен для
пользователи, которые знают, что они пишут непереносимый код, и которые намеренно
выбрал игнорировать предупреждение об этом.

Ограничения на смещение может быть ослаблен в будущей версии стандарта C ++.

-Wno-int-to-указатель-приведение
Подавить предупреждения от приведений к типу указателя целого числа другого размера. В
В C ++ приведение к типу указателя меньшего размера является ошибкой. Wint-to-указатель-приведение is
по умолчанию включен.

-Wno-указатель-на-int-cast (Только C и Objective-C)
Подавить предупреждения от приведения указателя к целочисленному типу другого размера.

-Winvalid-pch
Предупреждать, если предварительно скомпилированный заголовок найден в пути поиска, но не может быть использован.

-Длинно-длинный
Предупредить, если длинной длинной тип используется. Это обеспечивается либо -педантический or -Wтрадиционный
в режимах ISO C90 и C ++ 98. Чтобы подавить предупреждающие сообщения, используйте -Wno-длинный-длинный.

-Wvariadic-макросы
Предупреждать, если вариативные макросы используются в педантичном режиме ISO C90 или альтернативном синтаксисе GNU
в педантичном режиме ISO C99. Это по умолчанию. Чтобы подавить предупреждающие сообщения, используйте
-Wno-вариационные-макросы.

-Wvector-операция-производительность
Предупреждать, если векторные операции не реализованы через SIMD-возможности архитектуры.
В основном полезно для настройки производительности. Возможна реализация векторной операции
"кусочно", что означает, что скалярная операция выполняется для каждого вектора
элемент; "параллельно", что означает, что векторная операция реализована с использованием
скаляры более широкого типа, которые обычно более эффективны по производительности; и "как сингл
скаляр », что означает, что вектор соответствует скалярному типу.

-Ввла
Предупреждать, если в коде используется массив переменной длины. -Вно-вла предотвратит
-педантический предупреждение о массиве переменной длины.

-Wvolatile-регистр-вар
Предупреждать, если регистровая переменная объявлена ​​изменчивой. Модификатор volatile не
запретить все оптимизации, которые могут исключить чтение и / или запись для регистрации
переменные. Это предупреждение включено -Стена.

-Wdisabled-оптимизация
Предупреждать, если запрошенный проход оптимизации отключен. Это предупреждение обычно не
указать, что с вашим кодом что-то не так; это просто указывает на то, что GCC
оптимизаторы не смогли эффективно обработать код. Часто проблема в том, что
ваш код слишком большой или слишком сложный; GCC откажется от оптимизации программ, когда
сама оптимизация, вероятно, потребует чрезмерного количества времени.

-Wpointer-знак (Только C и Objective-C)
Предупреждать о передаче или присвоении аргументов указателя с другой подписью. Этот
опция поддерживается только для C и Objective-C. Это подразумевается -Стена и
-педантический, который можно отключить с помощью -Wno-указатель-знак.

-Wstack-протектор
Эта опция активна только когда -fstack-протектор активен. Предупреждает о функциях
которые не будут защищены от разрушения стека.

-Wno-брызговик
Подавить предупреждения о конструкциях, которые не могут быть инструментированы с помощью Брызговики.

-Woverlength-струны
Предупреждать о строковых константах, длина которых превышает "минимальную максимальную" длину.
указано в стандарте C. Современные компиляторы обычно допускают строковые константы, которые
намного длиннее стандартного минимального лимита, но очень переносимые программы должны
избегайте использования более длинных струн.

Лимит применяется после конкатенация строковых констант и не учитывает конечные
NUL. В C90 ограничение составляло 509 символов; в C99 он был увеличен до 4095. C ++ 98 делает
не указывать нормативный минимальный максимум, поэтому мы не диагностируем слишком длинные строки в
C ++.

Этот вариант подразумевается -педантический, и может быть отключен с помощью -Wno-длинные строки.

-Wunsuffix-float-константы (Только C и Objective-C)
GCC выдаст предупреждение для любой плавающей константы, не имеющей суффикса. Когда
используется вместе с -Wsystem-заголовки он предупредит о таких константах в системном заголовке
файлы. Это может быть полезно при подготовке кода для использования с "FLOAT_CONST_DECIMAL64"
прагма из десятичного расширения с плавающей запятой в C99.

Опции для Отладка ВАШЕ FitPartner™ or НКУ
GCC имеет различные специальные параметры, которые используются для отладки вашей программы или GCC:

-g Создавать отладочную информацию в собственном формате операционной системы (stabs, COFF,
XCOFF или DWARF 2). GDB может работать с этой отладочной информацией.

В большинстве систем, использующих формат stabs, -g позволяет использовать дополнительную отладочную информацию
что может использовать только GDB; эта дополнительная информация улучшает работу отладки в GDB, но
вероятно, вызовет сбой других отладчиков или откажется читать программу. Если хочешь
чтобы точно определить, нужно ли генерировать дополнительную информацию, используйте -gstabs +,
-gstabs, -gxcoff +, -gxcoffили -gvms (Смотри ниже).

GCC позволяет использовать -g -O. Ярлыки, используемые оптимизированным кодом, могут
иногда дают удивительные результаты: некоторые объявленные вами переменные могут не существовать в
все; поток управления может ненадолго переместиться туда, где вы этого не ожидали; некоторые заявления могут
не выполняться, потому что они вычисляют постоянные результаты или их значения уже были на
рука; некоторые операторы могут выполняться в разных местах, потому что они были перемещены из
петли.

Тем не менее, отладка оптимизированного вывода оказывается возможной. Это делает разумным
использовать оптимизатор для программ, в которых могут быть ошибки.

Следующие параметры полезны, когда GCC создается с возможностью дополнительных
чем один формат отладки.

-ggdb
Создавать отладочную информацию для использования GDB. Это значит использовать наиболее выразительные
доступный формат (DWARF 2, stabs или собственный формат, если ни один из них не
поддерживается), включая расширения GDB, если это возможно.

-gstabs
Создавать отладочную информацию в формате stabs (если он поддерживается), без GDB
расширения. Это формат, используемый DBX в большинстве систем BSD. На MIPS, Alpha и
В системах System V Release 4 этот параметр создает выходные данные отладки stabs, которые не
понимается DBX или SDB. В системах System V Release 4 для этой опции требуется GNU
ассемблер.

-feliminate-неиспользуемые-символы-отладки
Создавать отладочную информацию в формате stabs (если он поддерживается) только для символов
которые действительно используются.

-femit-класс-отладка-всегда
Вместо того, чтобы выдавать отладочную информацию для класса C ++ только в одном объектном файле,
испустить его во всех объектных файлах с помощью класса. Эту опцию следует использовать только с
отладчики, которые не могут обработать способ, которым GCC обычно передает отладочную информацию
для классов, потому что использование этой опции увеличит размер отладочной информации
в два раза.

-fno-debug-types-раздел
По умолчанию при использовании DWARF v4 или более поздних моделей матричные кристаллы будут помещены в свои собственные
.debug_types вместо того, чтобы делать их частью .debug_info. это
более эффективно помещать их в отдельные разделы comdat, поскольку в этом случае компоновщик будет
возможность удалить дубликаты. Но не все потребители DWARF поддерживают разделы .debug_types.
пока нет.

-gstabs +
Создавать отладочную информацию в формате stabs (если он поддерживается), используя GNU
расширения понимаются только отладчиком GNU (GDB). Использование этих расширений
может привести к сбою других отладчиков или отказу от чтения программы.

-gcoff
Создавайте отладочную информацию в формате COFF (если он поддерживается). Это
формат, используемый SDB в большинстве систем System V до System V Release 4.

-gxcoff
Создавать отладочную информацию в формате XCOFF (если он поддерживается). Это
формат, используемый отладчиком DBX в системах IBM RS / 6000.

-gxcoff +
Создавать отладочную информацию в формате XCOFF (если он поддерживается), используя GNU
расширения понимаются только отладчиком GNU (GDB). Использование этих расширений
может привести к сбою других отладчиков или отказу от чтения программы, а также может вызвать
ассемблеры, отличные от ассемблера GNU (GAS), вывести из строя ошибку.

-гном-версия
Создавайте отладочную информацию в формате DWARF (если он поддерживается). Это
формат, используемый DBX на IRIX 6. Значение версия может быть 2, 3 или 4; в
версия по умолчанию - 2.

Обратите внимание, что в DWARF версии 2 для некоторых портов требуются и всегда будут использоваться некоторые не-
конфликтующие расширения DWARF 3 в таблицах очистки.

Версия 4 может потребовать GDB 7.0 и -fvar-отслеживания-присваивания для максимальной пользы.

-grecord-gcc-переключатели
Этот переключатель вызывает параметры командной строки, используемые для вызова компилятора, который может
влияет на генерацию кода, добавляемого к атрибуту DW_AT_producer в DWARF
отладочная информация. Параметры объединены пробелами, отделяющими их от
друг друга и из версии компилятора. Смотрите также -frecord-gcc-переключатели для другого
способ сохранения параметров компилятора в объектном файле.

-gno-record-gcc-переключатели
Запретить добавление параметров командной строки к атрибуту DW_AT_producer в DWARF
отладочная информация. Это значение по умолчанию.

-gstrict-карлик
Запретить использование расширений более поздней стандартной версии DWARF, чем выбрано с помощью
-гном-версия. На большинстве целей, использующих неконфликтующие расширения DWARF из более поздних версий
стандартные версии разрешены.

-gno-строгий-карлик
Разрешить использование расширений более поздней стандартной версии DWARF, чем выбрано с помощью
-гном-версия.

-gvms
Создавать отладочную информацию в формате отладки VMS (если он поддерживается). Это
формат, используемый DEBUG в системах VMS.

-gуровень
-ggdbуровень
-gstabsуровень
-gcoffуровень
-gxcoffуровень
-gvmsуровень
Запросите отладочную информацию, а также используйте уровень указать сколько информации. В
уровень по умолчанию - 2.

Уровень 0 не дает никакой отладочной информации. Таким образом, -g0 отрицает -g.

Уровень 1 дает минимальную информацию, достаточную для прослеживания некоторых частей
программа, которую вы не планируете отлаживать. Сюда входят описания функций и
внешние переменные, но нет информации о локальных переменных и номеров строк.

Уровень 3 включает дополнительную информацию, такую ​​как все определения макросов, присутствующие в
программа. Некоторые отладчики поддерживают расширение макроса при использовании -g3.

-гдварф-2 не принимает конкатенированный уровень отладки, потому что GCC использовался для поддержки
вариант -гном это означало генерировать отладочную информацию в версии 1 DWARF
формат (который сильно отличается от версии 2), и это было бы слишком запутанно.
Этот формат отладки давно устарел, но сейчас его нельзя изменить. Вместо этого используйте
Вдобавок -gуровень возможность изменить уровень отладки для DWARF.

-переключить
Отключите генерацию отладочной информации, если при отключении этой опции она была бы сгенерирована,
или включите его на уровне 2 в противном случае. Положение этого аргумента в командной строке
не имеет значения, он вступает в силу после обработки всех остальных параметров, и это происходит
только один раз, сколько бы раз он ни давался. Это в основном предназначено для использования
-fcompare-отладка.

-fdump-final-insns[=файл]
Выгрузите окончательное внутреннее представление (RTL) в файл. Если необязательный аргумент
опущено (или если файл равно "."), имя файла дампа будет определено путем добавления
".gkd" к имени выходного файла компиляции.

-fcompare-отладка[=выбирает]
Если во время компиляции ошибок не возникает, запустите компилятор второй раз, добавив выбирает и
-fcompare-debug-секунда аргументам, переданным во вторую компиляцию. Сбросьте
окончательное внутреннее представление в обеих компиляциях и вывести ошибку, если они различаются.

Если знак равенства опущен, по умолчанию -переключить используется.

Переменная окружения GCC_COMPARE_DEBUG, если определено, непусто и ненулевое,
неявно позволяет -fcompare-отладка. Если GCC_COMPARE_DEBUG определяется как строка
начиная с тире, затем используется для выбирает, иначе по умолчанию -переключить is
используемый.

-fcompare-debug =, со знаком равенства, но без выбирает, эквивалентно
-fno-сравнить-отладить, что отключает сброс окончательного представления и
вторая компиляция, предотвращающая даже GCC_COMPARE_DEBUG от вступления в силу.

Чтобы проверить полное покрытие во время -fcompare-отладка тестирование, набор GCC_COMPARE_DEBUG сказать
-fcompare-debug-not-overriden, который GCC отклонит как недопустимый вариант в любом
фактическая компиляция (а не предварительная обработка, сборка или компоновка). Чтобы получить просто
предупреждение, настройка GCC_COMPARE_DEBUG в -w% n-fcompare-debug не переопределяется Сделаю.

-fcompare-debug-секунда
Эта опция неявно передается компилятору для второй запрошенной компиляции.
by -fcompare-отладка, а также варианты отключения предупреждений и исключения других параметров
это вызовет побочные эффекты компилятора вывода в файлы или стандартный вывод.
Файлы дампа и сохраненные временные файлы переименовываются таким образом, чтобы они содержали расширение ".gk".
дополнительное расширение во время второй компиляции, чтобы избежать перезаписи тех
генерируется первым.

Когда этот параметр передается драйверу компилятора, он вызывает первый компиляция для
быть пропущенным, что делает его полезным для чего-то другого, кроме собственно отладки компилятора.

-felimminate-dwarf2-dups
Сжимайте отладочную информацию DWARF2, удаляя дублирующуюся информацию о каждом
условное обозначение. Этот параметр имеет смысл только при создании отладочной информации DWARF2.
-гдварф-2.

-femit-struct-debug-только на базе
Выдавать отладочную информацию для структуроподобных типов только тогда, когда базовое имя
исходный файл компиляции соответствует базовому имени файла, в котором была определена структура.

Эта опция существенно уменьшает размер отладочной информации, но при
значительная потенциальная потеря информации о типе для отладчика. Видеть
-femit-struct-debug-уменьшено для менее агрессивного варианта. Видеть
-femit-struct-debug-подробный для более детального контроля.

Эта опция работает только с DWARF 2.

-femit-struct-debug-уменьшено
Выдавать отладочную информацию для структуроподобных типов только тогда, когда базовое имя
исходный файл компиляции соответствует базовому имени файла, в котором был определен тип,
если структура не является шаблоном или определена в системном заголовке.

Эта опция значительно уменьшает размер отладочной информации, с некоторыми
потенциальная потеря информации о типе для отладчика. Видеть -femit-struct-debug-только на базе
для более агрессивного варианта. Видеть -femit-struct-debug-подробный для более подробного
контролировать.

Эта опция работает только с DWARF 2.

-femit-struct-debug-подробный[=список спецификаций]
Укажите структуроподобные типы, для которых компилятор будет генерировать отладочную информацию.
Цель состоит в том, чтобы уменьшить дублирующуюся информацию об отладке структуры между разными объектами.
файлы в одной программе.

Этот вариант представляет собой подробную версию -femit-struct-debug-уменьшено и
-femit-struct-debug-только на базе, который будет служить для большинства нужд.

Спецификация имеет синтаксис [реж:|инд:][заказ:|жанр:](любой|системы|Использование темпера с изогнутым основанием|никто)

Необязательное первое слово ограничивает спецификацию структурами, которые используются напрямую
(реж:) или использовались косвенно (инд:). Тип структуры используется напрямую, когда это тип
переменной, член. Косвенное использование возникает через указатели на структуры. То есть,
когда использование неполной структуры было бы законным, использование является косвенным. Примером является
структура one непосредственный; структура два * косвенный;.

Необязательное второе слово ограничивает спецификацию обычными структурами (заказ:) Или
общие структуры (жанр:). Общие структуры немного сложно объяснить. Для C ++
это неявные специализации шаблонных классов или не шаблонные классы
в пределах вышеуказанного. У других языков программирования есть дженерики, но
-femit-struct-debug-подробный пока не реализует их.

Третье слово определяет исходные файлы для тех структур, для которых компилятор
выдаст отладочную информацию. Ценности никто и любой имеют нормальный смысл. В
ценностное Использование темпера с изогнутым основанием означает, что база имени файла, в котором объявлен тип
Появляется должно совпадать основание с названием основного файла компиляции. На практике,
это означает, что типы, объявленные в foo.c и фу.ч будет иметь отладочную информацию, но
типы, объявленные в другом заголовке, не будут. Значение системы означает те типы удовлетворяющие
Использование темпера с изогнутым основанием или объявлены в заголовках системы или компилятора.

Возможно, вам придется поэкспериментировать, чтобы определить наилучшие настройки для вашего приложения.

По умолчанию используется -femit-struct-debug-detail = все.

Эта опция работает только с DWARF 2.

-fno-merge-debug-строки
Укажите компоновщику, чтобы он не объединял строки в отладочной информации, которые
идентичны в разных объектных файлах. Слияние поддерживается не всеми ассемблерами или
линкеры. Слияние уменьшает размер отладочной информации в выходном файле на
стоимость увеличения времени обработки ссылок. По умолчанию слияние включено.

-fdebug-prefix-map =старый=new
При компиляции файлов в каталог старый, запишите отладочную информацию, описав их как
in new .

-fno-dwarf2-cfi-asm
Выпустить информацию о раскручивании DWARF 2 как сгенерированный компилятором раздел ".eh_frame" вместо использования
Директивы GAS ".cfi_ *".

-p Сгенерируйте дополнительный код для записи информации профиля, подходящей для программы анализа.
профессор. Вы должны использовать эту опцию при компиляции исходных файлов, о которых вы хотите получить данные,
и вы также должны использовать его при связывании.

-пг Сгенерируйте дополнительный код для записи информации профиля, подходящей для программы анализа.
гпроф. Вы должны использовать эту опцию при компиляции исходных файлов, о которых вы хотите получить данные,
и вы также должны использовать его при связывании.

-Q Заставляет компилятор распечатать каждое имя функции по мере ее компиляции и распечатать некоторые
статистика каждого прохода, когда он финиширует.

-ftime-отчет
Заставляет компилятор печатать некоторую статистику о времени, затраченном на каждый проход, когда он
отделки.

-fmem-отчет
Заставляет компилятор печатать некоторую статистику о постоянном выделении памяти, когда он
отделки.

-fpre-ipa-mem-отчет
-fpost-ipa-mem-отчет
Заставляет компилятор распечатать некоторую статистику о постоянном выделении памяти до или
после межпроцедурной оптимизации.

-fstack-использование
Делает информацию об использовании стека вывода компилятора для программы для каждой функции
основание. Имя файла для дампа создается добавлением .su до имя. имя is
генерируется из имени выходного файла, если это явно указано и не является
исполняемый файл, иначе это базовое имя исходного файла. Запись состоит из
три поля:

· Название функции.

· Количество байтов.

· Один или несколько квалификаторов: «статический», «динамический», «ограниченный».

Квалификатор static означает, что функция управляет стеком статически: a
фиксированное количество байтов выделяется для кадра при входе в функцию и освобождается при
выход из функции; никакие другие настройки стека в функции не производятся. Секунда
поле - это фиксированное количество байтов.

Квалификатор «динамический» означает, что функция динамически манипулирует стеком: в
В дополнение к статическому распределению, описанному выше, настройки стека производятся в
тело функции, например, чтобы выдвигать аргументы вокруг вызовов функций. Если
также присутствует квалификатор "bounded", количество этих корректировок ограничено на
время компиляции, а второе поле - это верхняя граница общего количества используемого стека
функцией. Если его нет, то количество этих корректировок не ограничено.
во время компиляции, а второе поле представляет только ограниченную часть.

-fprofile-дуги
Добавьте код, чтобы программа выполнялась дуги оснащены инструментами. Во время выполнения программа
записывает, сколько раз выполнялось каждое ответвление и вызов и сколько раз выполнялось
или возвращается. Когда скомпилированная программа завершает работу, она сохраняет эти данные в файл с именем
auxname.gcda для каждого исходного файла. Данные могут быть использованы для профильных
оптимизации (-fbranch-вероятности) или для анализа тестового покрытия
(-ftest-охват). Каждый объектный файл имя генерируется из названия
выходной файл, если он явно указан и не является окончательным исполняемым файлом, в противном случае он
это базовое имя исходного файла. В обоих случаях любой суффикс удаляется (например,
foo.gcda для входного файла dir / foo.cили dir / foo.gcda для выходного файла, указанного как -o
dir / foo.o).

- охват
Эта опция используется для компиляции и компоновки кода, предназначенного для анализа покрытия. В
вариант является синонимом -fprofile-дуги -ftest-охват (при компиляции) и -lgcov
(при линковке). См. Документацию по этим параметрам для получения более подробной информации.

· Скомпилировать исходные файлы с -fprofile-дуги плюс оптимизация и генерация кода
параметры. Для анализа тестового покрытия используйте дополнительный -ftest-охват опцию.
Вам не нужно профилировать каждый исходный файл в программе.

· Свяжите ваши объектные файлы с -lgcov or -fprofile-дуги (последнее подразумевает
бывший).

· Запустите программу на типичной рабочей нагрузке, чтобы создать профиль дуги
Информация. Это можно повторять любое количество раз. Вы можете запускать одновременно
экземпляров вашей программы и при условии, что файловая система поддерживает блокировку,
файлы данных будут правильно обновлены. Также обнаруживаются "форковые" звонки и
правильно обработаны (двойного счета не будет).

· Для профильной оптимизации снова скомпилируйте исходные файлы с тем же
возможности оптимизации и генерации кода плюс -fbranch-вероятности.

· Для анализа тестового покрытия используйте gcov производить удобочитаемую информацию из
домен .gcno и .gcda файлы. Обратитесь к gcov документация для дальнейшего
Информация.

Доступно -fprofile-дуги, для каждой функции вашей программы GCC создает поток программы
graph, затем находит остовное дерево для графа. Только дуги, которых нет на
связующее дерево должно быть оснащено инструментами: компилятор добавляет код для подсчета количества
раз, что эти дуги выполняются. Когда дуга является единственным выходом или единственным входом в
блок, код инструментария может быть добавлен в блок; в противном случае новый базовый
должен быть создан блок для хранения кода инструментария.

-ftest-охват
Создайте файл заметок, который gcov Утилита покрытия кода может использовать, чтобы показать программу
покрытие. Файл заметки каждого исходного файла называется auxname.gcno, Обратитесь к
-fprofile-дуги вариант выше для описания имя и инструкции о том, как
генерировать данные о тестовом покрытии. Данные покрытия будут более точно соответствовать исходным файлам,
если не оптимизируете.

-fdbg-cnt-список
Выведите имя и верхнюю границу счетчика для всех счетчиков отладки.

-fdbg-cnt =список значений счетчика
Установите верхнюю границу внутреннего счетчика отладки. список значений счетчика через запятую
Список имя:ценностное пары, которые устанавливают верхнюю границу каждого счетчика отладки имя в
ценностное . Все счетчики отладки имеют начальную верхнюю границу UINT_MAX, При этом dbg_cnt ()
всегда возвращает истину, если этой опцией не установлена ​​верхняя граница. например, с
-fdbg-cnt = dce: 10, tail_call: 0 dbg_cnt (dce) вернет истину только для первых 10
вызовы

-обоснованный-вид-pass
-fdisable-вид-pass=список диапазонов
Это набор параметров отладки, которые используются для явного отключения / включения
оптимизация проходит. Для пользователей компилятора обычные параметры включения / отключения проходов
следует использовать вместо

* <- fdisable-ipa-pass>
Отключить ipa pass pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1.

* <- fdisable-rtl-pass>
* <- fdisable-rtl-pass=список диапазонов>
Отключить проход RTL pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1. список диапазонов это список разделенных запятыми
диапазоны функций или имена ассемблера. Каждый диапазон представляет собой пару чисел, разделенных знаком
двоеточие. Диапазон включает оба конца. Если диапазон тривиален, число
пару можно упростить как одно число. Если узел cgraph функции UID is
попадая в один из указанных диапазонов, pass отключен для этого
функция. UID отображается в заголовке функции файла дампа, а проход
имена могут быть сброшены с помощью опции -fdump-проходит.

* <- fdisable-tree-pass>
* <- fdisable-tree-pass=список диапазонов>
Отключить проход дерева pass. Посмотреть -fdisable-rtl для описания опции
аргументы.

* <- fenable-ipa-pass>
Включить пропуск ipa pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1.

* <- fenable-rtl-pass>
* <- fenable-rtl-pass=список диапазонов>
Включить проход RTL pass. Посмотреть -fdisable-rtl для описания аргумента опции и
примеры.

* <- fenable-tree-pass>
* <- fenable-tree-pass=список диапазонов>
Включить проход дерева pass. Посмотреть -fdisable-rtl для описания аргументов опции.

# отключить ccp1 для всех функций
-fdisable-дерево-ccp1
# отключаем полную развертку для функции, чей uid узла cgraph равен 1
-fenable-tree-cunroll = 1
# отключить gcse2 для функций в следующих диапазонах [1,1],
# [300,400] и [400,1000]
# отключить gcse2 для функций foo и foo2
-fdisable-rtl-gcse2 = foo, foo2
# отключить раннее встраивание
-fdisable-tree-einline
# отключить встраивание ipa
-fdisable-ipa-inline
# включить полное разворачивание дерева
-fenable-дерево-развернуть

-dписьмена
-fdump-rtl-pass
Говорит о создании отладочных дампов во время компиляции в моменты времени, указанные в письмена. Это
используется для отладки проходов компилятора на основе RTL. Имена файлов для большинства
дампов создаются путем добавления номера прохода и слова к имя дампа, и
файлы создаются в каталоге выходного файла. Обратите внимание, что номер прохода
вычисляется статически по мере того, как проходы регистрируются в диспетчере проходов. Таким образом
нумерация не связана с динамическим порядком выполнения проходов. Особенно,
проход, установленный плагином, может иметь номер более 200, даже если он выполняется достаточно
рано. имя дампа генерируется из имени выходного файла, если явно
указан, и это не исполняемый файл, в противном случае это базовое имя источника
файл. Эти переключатели могут иметь разные эффекты, когда -E используется для предварительной обработки.

Отладочные дампы можно включить с помощью -fdump-rtl переключатель или некоторые -d вариант письмена, Вот
возможные буквы для использования в pass и письмена, и их значения:

-fdump-rtl-выравнивания
Дамп после вычисления выравнивания ветвей.

-fdump-rtl-asmcons
Дамп после исправления операторов rtl с неудовлетворенными ограничениями входа / выхода.

-fdump-rtl-auto_inc_dec
Дамп после обнаружения auto-inc-dec. Этот проход работает только на архитектурах, которые
есть инструкции auto inc или auto dec.

-fdump-RTL-барьеры
Сбросить после очистки инструкции по ограждению.

-fdump-rtl-bbpart
Дамп после разделения горячего и холодного базовых блоков.

-fdump-RTL-BBRO
Дамп после переупорядочивания блоков.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 и -fdump-rtl-btl2 включить сброс после двух целевых веток
оптимизация нагрузки проходит.

-fdump-RTL-обход
Дамп после обхода перехода и оптимизации потока управления.

-fdump-RTL-комбайн
Дамп после прохождения комбинации команд RTL.

-fdump-RTL-compgotos
Дамп после дублирования вычисленных gotos.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2качества -fdump-rtl-ce3 включить сброс после трех
если конвертация проходит.

-fdump-rtl-cprop_hardreg
Дамп после распространения копии на бумажном носителе.

-fdump-rtl-CSA
Дамп после совмещения настроек стека.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 и -fdump-rtl-cse2 включить сброс после двух общих под-
исключение выражения проходит.

-fdump-rtl-dce
Дамп после того, как пройдет удаление автономного мертвого кода.

-fdump-rtl-dbr
Дамп после отложенного планирования ветвлений.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 и -fdump-rtl-dce2 включить сброс после двух мертвых магазинов
исключение проходит.

-fdump-RTL-а
Дамп после доработки кода обработки EH.

-fdump-rtl-eh_ranges
Дамп после преобразования областей диапазона обработки EH.

-fdump-RTL-расширять
Дамп после генерации RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 и -fdump-rtl-fwprop2 включить сброс после двух форвардов
распространение проходит.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 и -fdump-rtl-gcse2 включить сброс после глобального общего
исключение подвыражения.

-fdump-rtl-init-regs
Дамп после инициализации регистров.

-fdump-rtl-инициалы
Дамп после вычисления наборов начальных значений.

-fdump-rtl-into_cfglayout
Дамп после перехода в режим cfglayout.

-fdump-rtl-ира
Дамп после повторного выделения регистров.

-fdump-rtl-прыжок
Дамп после оптимизации второго прыжка.

-fdump-rtl-loop2
-fdump-rtl-loop2 включает дамп после прохождения оптимизации цикла RTL.

-fdump-rtl-mach
Дамп после выполнения машинно-зависимого прохода реорганизации, если этот проход
существует.

-fdump-rtl-mode_sw
Дамп после удаления резервных переключателей режима.

-fdump-rtl-rnreg
Дамп после перенумерации регистров.

-fdump-rtl-outof_cfglayout
Дамп после конвертации из режима cfglayout.

-fdump-RTL-peephole2
Свалка после прохождения глазка.

-fdump-rtl-после перезагрузки
Дамп после оптимизации после перезагрузки.

-fdump-rtl-pro_and_epilogue
Дамп после создания прологов и эпилогов функций.

-fdump-rtl-regmove
Дамп после прохода хода регистра.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 и -fdump-rtl-sched2 включить сброс после базового блока
планирование проходов.

-fdump-RTL-см.
Дамп после устранения расширения признака.

-fdump-rtl-seqabstr
Дамп после обнаружения общей последовательности.

-fdump-RTL-сокращение
Свалка после укорачивания веток.

-fdump-RTL-брат
Дамп после оптимизации звонков сиблинга.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 и
-fdump-rtl-split5 включить сброс после пяти раундов разделения инструкции.

-fdump-RTL-sms
Дамп после планирования по модулю. Этот проход работает только на некоторых архитектурах.

-fdump-RTL-стек
Дамп после преобразования из регистров "плоского регистрового файла" GCC в регистры x87
стековые регистры. Этот проход работает только на вариантах x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 и -fdump-rtl-subreg2 включить дамп после двух субрегионов
расширение проходит.

-fdump-RTL-unshare
Дамп после отмены общего доступа к rtl.

-fdump-RTL-vartrack
Дамп после отслеживания переменных.

-fdump-rtl-vregs
Дамп после преобразования виртуальных регистров в жесткие.

-fdump-rtl-веб
Дамп после разделения живого диапазона.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Эти дампы определены, но всегда производят пустые файлы.

-in
-fdump-RTL-все
Произведите все вышеперечисленные дампы.

-дА Аннотируйте вывод ассемблера различной отладочной информацией.

-дД Выгрузить все определения макросов в конце предварительной обработки в дополнение к обычным
вывод.

-dH Создавать дамп ядра всякий раз, когда возникает ошибка.

-дп Аннотируйте вывод ассемблера комментарием, указывающим, какой шаблон и
была использована альтернатива. Также печатается длина каждой инструкции.

-дП Выведите RTL в вывод ассемблера в качестве комментария перед каждой инструкцией. Также
включается -дп аннотаций.

-дв Для каждого из остальных указанных файлов дампа (-fdump-rtl-pass), дамп
представление графа потока управления, подходящего для просмотра с помощью VCG, чтобы
файл.pass.vcg.

-дх Просто сгенерируйте RTL для функции вместо ее компиляции. Обычно используется с
-fdump-RTL-расширять.

-fdump-ноаддр
При выполнении отладочных дампов подавляйте вывод адреса. Это делает более возможным
использовать diff для отладочных дампов для вызовов компилятора с разными двоичными файлами компилятора
и / или разные начальные местоположения text / bss / data / heap / stack / dso.

-fdump-без номера
При выполнении отладочных дампов подавляйте номера инструкций и адресный вывод. Этот
делает более возможным использование diff для отладочных дампов для вызовов компилятора с
разные варианты, в частности с и без -g.

-fdump-ненумерованные-ссылки
При выполнении отладочных дампов (см. -d вариант выше), подавить номера инструкций для
ссылки на предыдущую и следующую инструкции в последовательности.

-fdump-перевод-единица (Только C ++)
-fdump-перевод-блок-кредита (Только C ++)
Выгрузите представление древовидной структуры для всей единицы перевода в файл.
Имя файла создается путем добавления .ту к имени исходного файла, и файл
создается в том же каталоге, что и выходной файл. Если -кредита форма используется,
кредита контролирует детали дампа, как описано для -fdump-дерево настройки.

-fdump-иерархия классов (Только C ++)
-fdump-иерархия-классов-кредита (Только C ++)
Выгрузить представление иерархии каждого класса и макета таблицы виртуальных функций в
файл. Имя файла создается путем добавления .учебный класс к имени исходного файла, а файл
создается в том же каталоге, что и выходной файл. Если -кредита форма используется,
кредита контролирует детали дампа, как описано для -fdump-дерево настройки.

-fdump-ипа-переключатель
Управляйте выгрузкой на различных этапах дерева языка межпроцедурного анализа в
файл. Имя файла генерируется путем добавления суффикса переключателя к источнику.
имя файла, и файл создается в том же каталоге, что и выходной файл. В
Возможны следующие дампы:

Найти Включает все дампы межпроцедурного анализа.

cграфик
Выводит информацию об оптимизации графа вызовов, удалении неиспользуемых функций и
встраивание решений.

встроенный
Дамп после встраивания функции.

-fdump-проходит
Вывести список проходов оптимизации, которые включаются и выключаются текущим
параметры командной строки.

-fdump-статистика-вариант
Включение и управление выгрузкой статистики проходов в отдельный файл. Имя файла
создается добавлением суффикса, оканчивающегося на .статистика к имени исходного файла, а
файл создается в том же каталоге, что и выходной файл. Если -вариант форма
используемый, -статистика вызовет суммирование счетчиков по всей единице компиляции, в то время как
-подробности будет сбрасывать каждое событие по мере их создания проходами. По умолчанию без
вариант - суммировать счетчики для каждой скомпилированной функции.

-fdump-дерево-переключатель
-fdump-дерево-переключатель-кредита
Управляйте выгрузкой на различных этапах обработки дерева промежуточных языков, чтобы
файл. Имя файла создается путем добавления суффикса переключателя к
имя исходного файла, и файл создается в том же каталоге, что и выходной файл.
Если же линия индикатора -кредита форма используется, кредита это список - отдельные параметры, которые контролируют
детали свалки. Не все параметры применимы ко всем дампам; те, которые
не имеет смысла, будет проигнорирован. Доступны следующие варианты

адрес
Выведите адрес каждого узла. Обычно это не имеет смысла, так как он меняется
в соответствии с окружающей средой и исходным файлом. Его основное назначение - привязать
файл дампа со средой отладки.

asmname
Если для данного объявления установлено "DECL_ASSEMBLER_NAME", используйте это в дампе.
вместо "DECL_NAME". Его основное использование - простота использования, работая в обратном направлении от
искореженные имена в сборочном файле.

стройное
Запретить сброс элементов области видимости или тела функции только потому, что это
объем достигнут. Выбрасывайте такие предметы только тогда, когда они напрямую доступны для
какой-то другой путь. При выгрузке красиво оформленных деревьев этот параметр запрещает сброс.
органы управляющих структур.

сырье Распечатайте необработанное представление дерева. По умолчанию деревья красиво распечатываются в
C-подобное представление.

подробнее
Включите более подробные дампы (не соблюдаются всеми опциями дампа).

Статистика
Разрешить выгрузку различной статистики про проход (не соблюдается каждым дампом
опция).

Блоки
Включить отображение основных границ блоков (отключено в необработанных дампах).

голос
Включите отображение виртуальных операндов для каждого оператора.

Ленено
Включите отображение номеров строк для операторов.

UID Включите отображение уникального идентификатора («DECL_UID») для каждой переменной.

подробный
Включите отображение дампа дерева для каждого оператора.

eh Включите отображение номера региона EH, в котором находится каждый оператор.

Scev
Включите отображение деталей анализа скалярной эволюции.

Найти Включите все параметры, кроме сырье, стройное, подробный и Ленено.

Возможны следующие дампы деревьев:

оригинал
Дамп перед любой оптимизацией на основе дерева, чтобы файл.оригинал.

оптимизированный
Дамп после оптимизации на основе дерева, чтобы файл.оптимизированный.

щупальца
Дамп каждой функции до и после перехода упрощения в файл. Файл
имя создается путем добавления .гимпл к имени исходного файла.

CFG Выгрузите график потока управления каждой функции в файл. Имя файла сделано
добавление .cfg к имени исходного файла.

ВЦГ Выгрузите график потока управления каждой функции в файл в формате VCG. Файл
имя создается путем добавления .vcg к имени исходного файла. Обратите внимание, что если файл
содержит более одной функции, сгенерированный файл не может использоваться напрямую
VCG. Вам нужно будет вырезать и вставить график каждой функции в отдельный отдельный
файл первым.

ch Выгрузите каждую функцию после копирования заголовков цикла. Имя файла создается путем добавления
.ch к имени исходного файла.

SSA Выгрузить информацию, связанную с SSA, в файл. Имя файла создается путем добавления .ssa
к имени исходного файла.

псевдоним
Дамп информации о псевдонимах для каждой функции. Имя файла создается путем добавления
.псевдоним к имени исходного файла.

CCP Сбросьте каждую функцию после КПК. Имя файла создается путем добавления .ccp до
имя исходного файла.

хранитьccp
Сбросьте каждую функцию после STORE-CCP. Имя файла создается путем добавления .storeccp
к имени исходного файла.

заранее Дамп деревьев после устранения частичной избыточности. Имя файла сделано
добавление .пре к имени исходного файла.

частоты Выгружать деревья после полного устранения избыточности. Имя файла создается путем добавления
.свободно к имени исходного файла.

копипроп
Дамп деревьев после распространения копии. Имя файла создается путем добавления .copyprop
к имени исходного файла.

store_copyprop
Дамповые деревья после копирования-размножения хранилища. Имя файла создается путем добавления
.store_copyprop к имени исходного файла.

АКД Сбросьте каждую функцию после устранения мертвого кода. Имя файла сделано
добавление .dce к имени исходного файла.

брызговик
Сбросьте каждую функцию после добавления приборов для защиты от брызг. Имя файла сделано
добавление .брызговик к имени исходного файла.

SRA Выгрузите каждую функцию после выполнения скалярной замены агрегатов. Файл
имя создается путем добавления .сра к имени исходного файла.

раковина
Сбросьте каждую функцию после выполнения погружения кода. Имя файла сделано
добавление .раковина к имени исходного файла.

дом Выгрузите каждую функцию после применения оптимизаций дерева доминаторов. Имя файла
сделано путем добавления .дом к имени исходного файла.

дсэ Сбросьте каждую функцию после применения устранения мертвого магазина. Имя файла сделано
добавив .dse к имени исходного файла.

фиопт
Выгрузите каждую функцию после оптимизации узлов PHI в прямой код. Файл
имя создается путем добавления .фиопт к имени исходного файла.

передний винт
Выгрузите каждую функцию после прямого распространения одноразовых переменных. Имя файла
производится путем добавления .форвпроп к имени исходного файла.

копирование и переименование
Выгрузите каждую функцию после применения оптимизации переименования копии. Имя файла
сделано путем добавления .copyrename к имени исходного файла.

NRV Выгрузите каждую функцию после применения оптимизации именованного возвращаемого значения к универсальному
деревья. Имя файла создается путем добавления .nrv к имени исходного файла.

Vect
Дамп каждой функции после применения векторизации циклов. Имя файла сделано
добавив .вектор к имени исходного файла.

SLP Дамп каждой функции после применения векторизации базовых блоков. Имя файла
сделано путем добавления .slp к имени исходного файла.

VRP Сбросьте каждую функцию после распространения диапазона значений (VRP). Имя файла сделано
добавление .врп к имени исходного файла.

Найти Включите все доступные дампы дерева с помощью флагов, указанных в этой опции.

-ftree-vectorizer-verbose =n
Эта опция контролирует объем отладочного вывода, который распечатывает векторизатор. Этот
информация записывается со стандартной ошибкой, если только -fdump-tree-все or -fdump-дерево-вектор
указывается, и в этом случае он выводится в обычный файл списка дампа, .вектор. Для
n= 0 диагностическая информация не передается. Если n= 1 векторизатор сообщает о каждом цикле
которые были векторизованы, и общее количество векторизованных циклов. Если n= 2
векторизатор также сообщает о невекторизованных циклах, прошедших первую фазу анализа.
(vect_analyze_loop_form) - т.е. счетный, самый внутренний, с одним bb, с одним входом / выходом
петли. Это тот же уровень детализации, что и -fdump-tree-vect-stats использует. Выше
Уровни детализации означают, что для каждого цикла, о котором сообщается, сбрасывается больше информации, или то же самое.
количество информации, сообщаемой для большего количества петель: если n= 3, модель стоимости векторизатора
информация не сообщается. Если n= 4, информация, связанная с выравниванием, добавляется в
отчеты. Если n= 5, информация, связанная со ссылками на данные (например, зависимости памяти, память
шаблоны доступа) добавлены в отчеты. Если n= 6, векторизатор также сообщает, что
векторизованные самые внутренние циклы, которые не прошли первую фазу анализа (т. е. могут не
быть счетным или может иметь сложный поток управления). Если n= 7, векторизатор сообщает
также не векторизованные вложенные циклы. Если n= 8, информация, связанная с SLP, добавляется в
отчеты. Для n= 9, вся информация, которую векторизатор генерирует в процессе анализа
сообщается о трансформации. Это тот же уровень детализации, что и
-fdump-tree-vect-детали использует.

-frandom-seed =string
Этот параметр предоставляет начальное значение, которое GCC использует, когда в противном случае он использовал бы случайные числа.
Он используется для генерации определенных имен символов, которые должны быть разными в каждом
скомпилированный файл. Он также используется для размещения уникальных штампов в файлах данных покрытия и
объектные файлы, которые их создают. Вы можете использовать -frandom-seed возможность производить
воспроизводимые идентичные объектные файлы.

Ассоциация string должны быть разными для каждого компилируемого файла.

-fsched-verbose =n
На целевых объектах, использующих планирование инструкций, этот параметр контролирует количество
отладочный вывод распечатывает планировщик. Эта информация записывается в стандартную ошибку,
если не -fdump-rtl-sched1 or -fdump-rtl-sched2 указан, и в этом случае он выводится
в обычный файл распечатки дампа, .sched1 or .sched2 соответственно. Однако для n
больше девяти, вывод всегда печатается со стандартной ошибкой.

Что касается n больше нуля, -fsched-подробный выводит ту же информацию, что и
-fdump-rtl-sched1 и -fdump-rtl-sched2. Для n больше единицы, он также выводит базовый
вероятности блокировки, подробная информация о готовом списке и информация о блоке / инсн. Для n
больше двух, он включает RTL в точке прерывания, поток управления и информацию о регионах. А также
для n более четырех, -fsched-подробный также включает информацию о зависимости.

-сохранение темпов
-save-temps = cwd
Постоянно храните обычные «временные» промежуточные файлы; поместите их в текущую
каталог и назовите их на основе исходного файла. Таким образом, составив foo.c -c
-сохранение темпов будет создавать файлы фу.я и фу.с, так же как фу.о, Это создает
предварительно обработанный фу.я выходной файл, хотя теперь компилятор обычно использует
интегрированный препроцессор.

При использовании в сочетании с -x параметр командной строки, -сохранение темпов разумно
достаточно, чтобы избежать перезаписи входного исходного файла с тем же расширением, что и
промежуточный файл. Соответствующий промежуточный файл можно получить, переименовав
исходный файл перед использованием -сохранение темпов.

Если вы вызываете GCC параллельно, скомпилируйте несколько разных исходных файлов с общим
общее базовое имя в разных подкаталогах или один и тот же исходный файл, скомпилированный для
несколько мест назначения вывода, вероятно, что разные параллельные компиляторы будут
мешают друг другу и перезаписывают временные файлы. Например:

gcc -save-temps -o outdir1 / foo.o indir1 / foo.c &
gcc -save-temps -o outdir2 / foo.o indir2 / foo.c &

может привести к фу.я и фу.о записываются одновременно обоими компиляторами.

-save-temps = obj
Постоянно храните обычные «временные» промежуточные файлы. Если -o опция используется,
временные файлы основаны на объектном файле. Если -o опция не используется,
-save-temps = obj переключатель ведет себя как -сохранение темпов.

Например:

gcc -save-temps = obj -c foo.c
gcc -save-temps = obj -c bar.c -o каталог / xbar.o
gcc -save-temps = obj foobar.c -o dir2 / yfoobar

создаст фу.я, фу.с, dir / xbar.i, dir / xbar.s, dir2 / yfoobar.i, dir2 / yfoobar.sкачества
dir2 / yfoobar.o.

-время[=файл]
Сообщите время ЦП, затраченное каждым подпроцессом в последовательности компиляции. Для C
исходные файлы, это собственно компилятор и ассемблер (плюс компоновщик, если компоновка
сделано).

Без спецификации выходного файла результат выглядит следующим образом:

# cc1 0.12 0.01
# как 0.00 0.01

Первое число в каждой строке - это «время пользователя», то есть время, потраченное на выполнение
сама программа. Второе число - «системное время», время, затраченное на выполнение операций.
системные процедуры от имени программы. Оба числа указаны в секундах.

С указанием выходного файла выходные данные добавляются к названному файлу,
и выглядит это так:

0.12 0.01 куб.
0.00 0.01 как

«Пользовательское время» и «системное время» перемещаются перед названием программы, а
параметры, переданные программе, отображаются, чтобы можно было позже определить, какой файл был
компилируется и с какими опциями.

-fvar-отслеживание
Выполнить проход отслеживания переменных. Он вычисляет, где переменные хранятся в каждой позиции
в коде. Затем создается лучшая отладочная информация (если отладочная информация
формат поддерживает эту информацию).

Включено по умолчанию при компиляции с оптимизацией (-Операционные системы, -O, -O2, ...),
отладочная информация (-g), и формат отладочной информации поддерживает его.

-fvar-отслеживания-присваивания
Аннотируйте присвоения пользовательским переменным на ранней стадии компиляции и попытайтесь перенести
аннотации на протяжении всей компиляции до конца, в попытке
для улучшения отладочной информации при оптимизации. Использование -гдварф-4 рекомендуется вместе
в конечном итоге.

Его можно включить, даже если отслеживание переменных отключено, и в этом случае аннотации будут
созданы и поддерживаются, но в конце отбрасываются.

-fvar-отслеживания-назначения-переключение
Переключать -fvar-отслеживания-присваиваниятак же, как -переключить переключение -g.

-print-file-name =библиотека
Вывести полное абсолютное имя файла библиотеки библиотека это будет использоваться, когда
связывание --- и больше ничего не делайте. С этой опцией GCC не компилирует и не связывает
что-нибудь; он просто печатает имя файла.

-print-мульти-каталог
Вывести имя каталога, соответствующее мультибиблиотеке, выбранной любыми другими переключателями.
присутствует в командной строке. Этот каталог должен существовать в GCC_EXEC_PREFIX.

-print-мультибиблиотека
Распечатайте сопоставление имен мультибиблиотечного каталога с переключателями компилятора, которые их включают.
Имя каталога отделяется от переключателей знаком ;, и каждый переключатель начинается с
@ вместо -, без пробелов между несколькими переключателями. Это должно
облегчить обработку скорлупы.

-print-multi-os-каталог
Вывести путь к библиотекам ОС для выбранной мультибиблиотеки относительно некоторых Lib
подкаталог. Если библиотеки ОС присутствуют в Lib подкаталог и без мультилибов
используются, обычно это просто ., если библиотеки ОС присутствуют в libсуффикс родной брат
каталоги, которые это печатает, например ../ lib64, ../ Lib or ../ lib32, или если библиотеки ОС
присутствует в lib / subdir подкаталоги, которые он печатает, например amd64, спаркв9 or ev6.

-print-мультиархив
Вывести путь к библиотекам ОС для выбранного мультиархива относительно некоторых Lib
подкаталог.

-print-prog-name =программа
Подобно -print-имя-файла, но ищет такую ​​программу, как CPP.

-print-libgcc-имя-файла
Такой же как -print-file-name = libgcc.a.

Это полезно, когда вы используете -nostdlib or -nodefaultlibs но вы хотите установить связь с
libgcc.a. Ты можешь сделать

gcc -nostdlib ... `gcc -print-libgcc-имя-файла`

-print-поиск-директоров
Распечатайте имя настроенного каталога установки и список программ и
каталоги библиотеки GCC будет искать --- и больше ничего не делать.

Это полезно, когда GCC печатает сообщение об ошибке установка проблема, не могу Exec
cpp0: Нет такие файл or каталог. Чтобы решить эту проблему, вам нужно либо поставить cpp0 и
другие компоненты компилятора, где GCC ожидает найти их, или вы можете установить
переменная среды GCC_EXEC_PREFIX в каталог, в который вы их установили. Не надо
забудь конечный /.

-print-sysroot
Распечатайте целевой каталог sysroot, который будет использоваться во время компиляции. Это
целевой системный корень, указанный либо во время настройки, либо с помощью --sroot вариант,
возможно, с дополнительным суффиксом, который зависит от параметров компиляции. Если нет цели
указан sysroot, опция ничего не печатает.

-print-sysroot-заголовки-суффикс
Распечатайте суффикс, добавленный к целевому системному корню при поиске заголовков, или дайте
ошибка, если компилятор не настроен с таким суффиксом --- и ничего не делать
остальное.

-самосвал
Выведите целевую машину компилятора (например, i686-ПК-Linux-GNU) --- и не делай
что-нибудь еще.

-дампверсия
Выведите версию компилятора (например, 3.0) --- и больше ничего не делайте.

-dumpspecs
Распечатайте встроенные спецификации компилятора --- и больше ничего не делайте. (Это используется, когда
Сам GCC строится.)

-feliminate-неиспользуемые-типы-отладки
Обычно при выводе DWARF2 GCC выдает отладочную информацию для всех
типы, объявленные в модуле компиляции, независимо от того, действительно ли они
используется в этом блоке компиляции. Иногда это полезно, например, если в отладчике
вы хотите привести значение к типу, который на самом деле не используется в вашей программе (но
заявлено). Однако чаще это приводит к потере значительного количества места.
С этой опцией GCC будет избегать вывода символов отладки для типов, которые
нигде не используется в компилируемом исходном файле.

Опции То, что Control Оптимизация
Эти параметры управляют различными видами оптимизации.

Без какой-либо опции оптимизации цель компилятора - снизить стоимость компиляции.
и чтобы отладка дала ожидаемые результаты. Заявления независимы: если вы
остановите программу с помощью точки останова между операторами, затем вы можете присвоить новое значение
любую переменную или измените счетчик программы на любой другой оператор в функции и получите
именно те результаты, которые вы ожидаете от исходного кода.

Включение флагов оптимизации заставляет компилятор попытаться улучшить производительность и / или
размер кода за счет времени компиляции и, возможно, возможности отладки
программу.

Компилятор выполняет оптимизацию на основе имеющихся у него знаний о программе.
Компиляция нескольких файлов одновременно в один режим выходного файла позволяет компилятору использовать
информация, полученная из всех файлов при компиляции каждого из них.

Не все оптимизации напрямую контролируются флагом. Только оптимизации, у которых есть
flag перечислены в этом разделе.

Большинство оптимизаций возможно только в том случае, если -O уровень устанавливается в командной строке. Иначе
они отключены, даже если указаны отдельные флаги оптимизации.

В зависимости от цели и того, как был настроен GCC, несколько другой набор
оптимизации могут быть включены на каждом -O уровень, чем перечисленные здесь. Вы можете вызвать GCC
-Q --help = оптимизаторы чтобы узнать точный набор оптимизаций, включенных на
каждый уровень.

-O
-O1 Оптимизировать. Оптимизация компиляции занимает немного больше времени и намного больше памяти для
большая функция.

Доступно -O, компилятор пытается уменьшить размер кода и время выполнения, не выполняя
любые оптимизации, требующие много времени на компиляцию.

-O включает следующие флаги оптимизации:

-fauto-inc-dec -fcompare-элим -fcprop-регистры -fdce -fdefer-поп -fdelayed-ветка
-fdse -fguess-ветвь-вероятность -fif-преобразование2 -fif-преобразование -fipa-чистый-const
-fipa-профиль -fipa-ссылка -fmerge-константы -fsplit-широкие-типы -ftree-bit-ccp
-ftree-встроенный-вызов-dce -ftree-ccp -футри-ч -ftree-copyrename -ftree-dce
-ftree-доминатор-opts -ftree-dse -ftree-forwprop -free-fre -ftree-phiprop -ftree-сра
-ftree-pta -дерево-тер -Функция за раз

-O также включается -fomit-frame-pointer на машинах, где это не мешает
с отладкой.

-O2 Оптимизируйте еще больше. GCC выполняет почти все поддерживаемые оптимизации, которые не
предполагают компромисс космической скорости. По сравнению с -O, этот параметр увеличивает как
время компиляции и производительность сгенерированного кода.

-O2 включает все флаги оптимизации, указанные -O. Также включаются следующие
флаги оптимизации: -fthread-прыжки -falign-функции -falign-прыжки -falign-петли
-falign-label -fcaller-сохраняет -fcrossjumping -fcse-следовать-прыжки -fcse-skip-блоки
-fdelete-проверка нулевого указателя -fдевиртуализовать -файловые-оптимизации -fgcse
-fgcse-lm -finline-small-функции -findirect-встраивание -фипа-сра
-foptimize-sibling-вызовы -fpartial-встраивание -fглазок2 -fregmove -freorder-блоки
-freorder-функции -frerun-cse-после-петля -fsched-межблок -fsched-спецификация
-fschedule-insns -fschedule-insns2 -fstrict-псевдоним -fstrict-переполнение
-бесплатное переключение-преобразование -ftree-tail слияние -free-pre -ftree-vrp

Обратите внимание на предупреждение под -fgcse о вызове -O2 в программах, использующих вычисленные
перейти к S.

ПРИМЕЧАНИЕ. В Ubuntu 8.10 и более поздних версиях -D_FORTIFY_SOURCE = 2 устанавливается по умолчанию и является
активируется, когда -O установлено значение 2 или выше. Это обеспечивает дополнительное время компиляции и
во время выполнения проверяет наличие нескольких функций libc. Чтобы отключить, укажите либо
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE = 0.

-O3 Оптимизируйте еще больше. -O3 включает все оптимизации, указанные -O2 а также включает
домен -finline-функции, -funswitch-петли, -fpredictive-обобщение, -fgcse-после перезагрузки,
-ftree-векторизация, -ftree-частичный-pre и -fipa-cp-клон настройки.

-O0 Сократите время компиляции и сделайте отладку ожидаемой. Это
по умолчанию.

-Операционные системы Оптимизируйте по размеру. -Операционные системы позволяет всем -O2 оптимизации, которые обычно не увеличиваются
размер кода. Он также выполняет дальнейшую оптимизацию, предназначенную для уменьшения размера кода.

-Операционные системы отключает следующие флаги оптимизации: -falign-функции -falign-прыжки
-falign-петли -falign-label -freorder-блоки -freorder-блоки-и-раздел
-fprefetch-loop-массивы -ftree-vect-loop-версия

-Быстро
Не соблюдайте строгие стандарты. -Быстро позволяет всем -O3 оптимизации. Это также
позволяет оптимизации, которые не подходят для всех программ, совместимых со стандартами. Это
включается -ffast-математика и специфичный для Fortran -fno-защита паренс и -fstack-массивы.

Если вы используете несколько -O варианты, с номерами уровней или без них, последняя такая опция
тот, который эффективен.

Опции формы -fфлажок указать машинно-независимые флаги. Большинство флагов имеют оба
положительные и отрицательные формы; отрицательная форма -ффу был бы -фно-фу. В таблице
ниже указана только одна из форм - та, которую вы обычно будете использовать. Вы можете понять
из другой формы, удалив нет- или добавив его.

Следующие параметры управляют определенными оптимизациями. Они либо активируются -O
варианты или связаны с уже имеющимися. Вы можете использовать следующие флаги в редких случаях
случаи, когда желательна «тонкая настройка» оптимизаций.

-fno-default-встроенный
Не делайте функции-члены встроенными по умолчанию только потому, что они определены внутри
область видимости класса (только C ++). В противном случае, когда вы укажете -O, функции-члены определены
внутренняя область видимости класса по умолчанию компилируется inline; т.е. вам не нужно добавлять встроенный
перед именем функции-члена.

-fno-дефер-поп
Всегда вставляйте аргументы для каждого вызова функции, как только эта функция возвращается. Для
машины, которые должны выдавать аргументы после вызова функции, компилятор обычно позволяет
аргументы накапливаются в стеке для нескольких вызовов функций и выталкивают их все в
один раз.

Отключено на уровнях -O, -O2, -O3, -Операционные системы.

-всегда-распространять
Выполните проход прямого распространения по RTL. Пас пытается объединить две инструкции
и проверяет, можно ли упростить результат. Если развертка цикла активна, два прохода
выполняются, а второй планируется после разворачивания цикла.

Эта опция включена по умолчанию на уровнях оптимизации. -O, -O2, -O3, -Операционные системы.

-ffp-contract =стиль
-ffp-contract = выключено отключает сжатие выражений с плавающей запятой. -ffp-contract = быстро
разрешает сжатие выражений с плавающей запятой, такое как формирование объединенного умножения-сложения
операции, если у цели есть встроенная поддержка для них. -ffp-contract = on позволяет
сокращение выражений с плавающей запятой, если это разрешено стандартом языка. Это
в настоящее время не реализовано и рассматривается как -ffp-contract = выключено.

По умолчанию используется -ffp-contract = быстро.

-fomit-frame-pointer
Не храните указатель фрейма в регистре для функций, которым он не нужен. Этот
избегает инструкций по сохранению, настройке и восстановлению указателей кадров; это также делает
дополнительный регистр доступен во многих функциях. It Также создает отладка что она on
некоторые машины.

На некоторых машинах, таких как VAX, этот флаг не действует, потому что стандартный
вызывающая последовательность автоматически обрабатывает указатель кадра, и ничего не сохраняется
делая вид, что его не существует. Макрос описания машины "FRAME_POINTER_REQUIRED"
контролирует, поддерживает ли целевая машина этот флаг.

Начиная с GCC версии 4.6, настройка по умолчанию (без оптимизации по размеру) для
Цели 32-битной Linux x86 и 32-битной Darwin x86 были изменены на
-fomit-frame-pointer. Значение по умолчанию можно вернуть на -fno-опустить-указатель-кадра by
настройка GCC с - включить-указатель-кадра вариант настройки.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-foptimize-sibling-вызовы
Оптимизируйте одноуровневые и хвостовые рекурсивные вызовы.

Включено на уровнях -O2, -O3, -Операционные системы.

-fno-встроенный
Не расширяйте какие-либо встроенные функции, кроме отмеченных "always_inline"
атрибут. Это значение по умолчанию, когда не выполняется оптимизация.

Отдельные функции можно исключить из встраивания, пометив их знаком «noinline».
атрибутов.

-finline-small-функции
Интегрируйте функции в своих абонентов, когда их тело меньше, чем ожидалось
код вызова функции (поэтому общий размер программы становится меньше). Компилятор
эвристически решает, какие функции достаточно просты, чтобы их можно было интегрировать в
Сюда. Это встраивание применяется ко всем функциям, даже к тем, которые не объявлены встроенными.

Включено на уровне -O2.

-findirect-встраивание
Встроенные также косвенные вызовы, которые обнаруживаются во время компиляции благодаря
предыдущее встраивание. Этот параметр имеет какой-либо эффект только тогда, когда включена сама встраивание.
не провела обыск -finline-функции or -finline-small-функции настройки.

Включено на уровне -O2.

-finline-функции
Рассмотрите все функции для встраивания, даже если они не объявлены встроенными. В
компилятор эвристически решает, какие функции стоит интегрировать таким образом.

Если все вызовы данной функции интегрированы, и функция объявлена
"static", то функция обычно не выводится как собственный код ассемблера.

Включено на уровне -O3.

-finline-функции-вызываемые-один раз
Рассмотрим все "статические" функции, вызываемые один раз для встраивания в их вызывающий объект, даже если
они не помечены как «встроенные». Если вызов данной функции интегрирован, то
функция не выводится как код ассемблера сама по себе.

Включено на уровнях -O1, -O2, -O3 и -Операционные системы.

опасно встраивание
Встроенные функции, отмеченные "always_inline", и функции, тело которых кажется меньше, чем
накладные расходы на вызов функции раньше, чем делать -fprofile-генерировать приборы и
реальный проход встраивания. Это значительно удешевляет профилирование и, как правило,
встраивание быстрее в программы, имеющие большие цепочки вложенных функций-оболочек.

Включено по умолчанию.

-фипа-сра
Выполнить межпроцедурную скалярную замену агрегатов, удаление неиспользуемых параметров
и замена параметров, переданных по ссылке, параметрами, переданными по значению.

Включено на уровнях -O2, -O3 и -Операционные системы.

-finline-limit =n
По умолчанию GCC ограничивает размер функций, которые могут быть встроены. Этот флаг позволяет
грубый контроль этого предела. n размер функций, которые могут быть встроены в
количество псевдоинструкций.

Встраивание фактически контролируется рядом параметров, которые могут быть указаны
индивидуально, используя --парам имя=ценностное , -finline-limit =n опция устанавливает некоторые из
эти параметры следующие:

макс-встроенный-insns-одиночный
на n/ 2.

макс-встроенный-insns-авто
на n/ 2.

См. Ниже документацию по отдельным параметрам, управляющим встраиванием и
для значений этих параметров по умолчанию.

Примечание: может быть бесполезно -finline-лимит что приводит к поведению по умолчанию.

Примечание: псевдо-инструкция представляет в данном конкретном контексте абстрактную
измерение размера функции. Это никоим образом не представляет собой количество сборок
инструкции и, как таковые, его точное значение может измениться от одного выпуска к другому.
другой.

-fno-keep-inline-dllexport
Это более детальная версия -fkeep-встроенные функции, что относится только к
функции, объявленные с использованием атрибута dllexport или declspec

-fkeep-встроенные функции
В C испускайте "статические" функции, которые объявлены "встроенными" в объектный файл, даже если
функция встроена во все вызывающие объекты. Этот переключатель не влияет
функции, использующие расширение "extern inline" в GNU C90. В C ++ испускайте все и вся
встроенные функции в объектный файл.

-fkeep-статические-константы
Создавать переменные, объявленные "static const", когда оптимизация не включена, даже если
переменные не упоминаются.

GCC включает эту опцию по умолчанию. Если вы хотите заставить компилятор проверять,
на переменную, независимо от того, включена ли оптимизация или нет, используйте
домен -fno-keep-static-consts опцию.

-fmerge-константы
Попытка объединить идентичные константы (строковые константы и константы с плавающей запятой)
через единицы компиляции.

Этот параметр используется по умолчанию для оптимизированной компиляции, если ассемблер и компоновщик
поддержите это. Использовать -fno-merge-константы чтобы воспрепятствовать такому поведению.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fmerge-все-константы
Попытка объединить идентичные константы и идентичные переменные.

Этот вариант подразумевает -fmerge-константы, В дополнение к -fmerge-константы этой
рассматривает, например, даже постоянные инициализированные массивы или инициализированные постоянные переменные с
целочисленные типы или типы с плавающей запятой. Такие языки, как C или C ++, требуют каждой переменной,
включение нескольких экземпляров одной и той же переменной в рекурсивные вызовы, чтобы иметь разные
местоположений, поэтому использование этого параметра приведет к несоответствующему поведению.

-fmodulo-sched
Выполните планирование по модулю качания непосредственно перед первым проходом планирования. Этот
pass смотрит на самые внутренние циклы и меняет порядок их инструкций, перекрывая разные
итераций.

-fmodulo-sched-allow-regmoves
Выполняйте более агрессивное планирование на основе SMS по модулю с разрешенными перемещениями регистров. К
при установке этого флага определенные грани антизависимостей будут удалены, что вызовет срабатывание
генерация рег-ходов на основе анализа жизненного цикла. Этот вариант
эффективен только с -fmodulo-sched включен.

-fno-Branch-count-reg
Не используйте инструкции «декремента и ветвления» для счетного регистра, а вместо этого
генерировать последовательность инструкций, которые уменьшают регистр, сравнивать его с
ноль, затем переходите в зависимости от результата. Эта опция имеет смысл только на
архитектуры, поддерживающие такие инструкции, включая x86, PowerPC, IA-64 и
S / 390.

По умолчанию используется -fbranch-count-reg.

-fno-функция-cse
Не помещайте адреса функций в регистры; сделать каждую инструкцию, которая вызывает
Константа функция явно содержит адрес функции.

Эта опция приводит к менее эффективному коду, но к некоторым странным хакам, которые изменяют
вывод ассемблера может быть запутан оптимизацией, выполненной, когда эта опция
не используется.

По умолчанию используется -функция-cse

-fno-ноль-инициализирован-в-bss
Если цель поддерживает раздел BSS, GCC по умолчанию помещает переменные, которые
инициализируется нулем в BSS. Это может сэкономить место в результирующем коде.

Этот параметр отключает такое поведение, поскольку некоторые программы явно полагаются на переменные.
переходим в раздел данных. Например, чтобы получившийся исполняемый файл мог найти
начало этого раздела и / или делать предположения на его основе.

По умолчанию используется -fzero-инициализирован-в-bss.

Брызговики -fmudflapth -фмудфлапир
Для интерфейсов, которые его поддерживают (C и C ++), используйте все рискованные указатели / массивы.
операции разыменования, некоторые стандартные библиотечные строковые функции / функции кучи и некоторые другие
связанные конструкции с тестами на диапазон / валидность. Модули, оснащенные таким образом, должны быть
невосприимчив к переполнению буфера, недопустимому использованию кучи и некоторым другим классам C / C ++
ошибки программирования. Инструментарий полагается на отдельную библиотеку времени выполнения
(libmudflap), который будет связан с программой, если Брызговики дается во время ссылки.
Поведение инструментальной программы во время выполнения контролируется БРЫЗГОВИКИ_OPTIONS
переменная окружения. См. Параметры "env MUDFLAP_OPTIONS = -help a.out".

Используйте -fmudflapth вместо Брызговики скомпилировать и связать, если ваша программа много-
резьбовой. Использовать -фмудфлапир, В дополнение к Брызговики or -fmudflapth, Если
инструментирование должно игнорировать чтение указателя. Это дает меньше инструментов (и
следовательно, более быстрое выполнение) и по-прежнему обеспечивает некоторую защиту от прямой памяти
разрушает запись, но позволяет ошибочно считанным данным распространяться внутри программы.

-fthread-прыжки
Выполните оптимизацию, при которой мы проверяем, разветвляется ли прыжок в место, где
найдено другое сравнение, относящееся к первому. Если да, то первая ветвь
перенаправляется либо в пункт назначения второй ветви, либо сразу в точку
после него, в зависимости от того, истинно или ложно условие.

Включено на уровнях -O2, -O3, -Операционные системы.

-fsplit-широкие-типы
При использовании типа, который занимает несколько регистров, например "long long" на 32-битном
системы, разделите регистры и распределите их независимо. Это обычно
генерирует лучший код для этих типов, но может затруднить отладку.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fcse-следовать-прыжки
В общем исключении подвыражения (CSE) сканирование инструкций перехода, когда
цель прыжка не достигнута никаким другим путем. Например, когда CSE обнаруживает
оператор «if» с предложением «else», CSE будет следовать за переходом, когда условие
проверено ложно.

Включено на уровнях -O2, -O3, -Операционные системы.

-fcse-skip-блоки
Это похоже на -fcse-следовать-прыжки, но заставляет CSE следовать прыжкам, которые
условно пропускать блоки. Когда CSE встречает простой оператор «если» без
еще пункт, -fcse-skip-блоки заставляет CSE следовать за прыжком вокруг тела
"если".

Включено на уровнях -O2, -O3, -Операционные системы.

-frerun-cse-после-петля
Повторно запустите исключение общих подвыражений после того, как была выполнена оптимизация цикла.

Включено на уровнях -O2, -O3, -Операционные системы.

-fgcse
Выполните глобальный проход исключения общих подвыражений. Этот проход также выполняет
глобальная константа и распространение копий.

Примечание: При компиляции программы с использованием вычисляемых gotos, расширения GCC, вы можете получить
лучшая производительность во время выполнения, если вы отключите глобальное исключение общих подвыражений
пройти, добавив -fno-gcse в командную строку.

Включено на уровнях -O2, -O3, -Операционные системы.

-fgcse-lm
После появления -fgcse-lm включен, глобальное удаление общих подвыражений будет пытаться
переместить в себя грузы, убитые только магазинами. Это позволяет петлю
содержащий последовательность загрузки / сохранения, которая должна быть изменена на загрузку вне цикла, и
копировать / хранить в цикле.

Включено по умолчанию, когда включен gcse.

-fgcse-см
После появления -fgcse-см включен, проход движения магазина запускается после глобального общего
исключение подвыражения. Этот проход попытается вывести магазины из петель. Когда
используется вместе с -fgcse-lm, циклы, содержащие последовательность загрузки / сохранения, могут быть
изменено на загрузку перед циклом и сохранение после цикла.

Не включен ни на одном уровне оптимизации.

-fgcse-las
После появления -fgcse-las включен, глобальный общий проход исключения подвыражения
устраняет избыточные нагрузки, которые приходят после сохранения в одну и ту же ячейку памяти (обе
частичное и полное резервирование).

Не включен ни на одном уровне оптимизации.

-fgcse-после перезагрузки
После появления -fgcse-после перезагрузки включен, выполняется этап устранения избыточной нагрузки
после перезагрузки. Цель этого прохода - очистить избыточные разливы.

-funsafe-loop-оптимизации
Если задано, оптимизатор цикла будет предполагать, что индексы цикла не переполняются, и что
циклы с нетривиальным условием выхода не бесконечны. Это позволяет расширить диапазон
оптимизаций цикла, даже если сам оптимизатор цикла не может доказать, что эти
предположения верны. С использованием -Wunsafe-loop-оптимизации, компилятор предупредит вас
если он обнаружит такую ​​петлю.

-fcrossjumping
Выполните перекрестное преобразование. Это преобразование объединяет эквивалентный код и
сохранить размер кода. Результирующий код может работать или не работать лучше, чем без перекрестного
прыжки.

Включено на уровнях -O2, -O3, -Операционные системы.

-fauto-inc-dec
Комбинируйте увеличение или уменьшение адресов с обращениями к памяти. Этот пропуск
всегда пропускается на архитектурах, для которых нет инструкций по поддержке этого.
Включено по умолчанию в -O и выше на архитектурах, которые это поддерживают.

-fdce
Выполните устранение мертвого кода (DCE) на RTL. Включено по умолчанию в -O и выше.

-fdse
Выполните устранение мертвого хранилища (DSE) на RTL. Включено по умолчанию в -O и выше.

-fif-преобразование
Попытка преобразовать условные переходы в эквиваленты без ветвей. Это включает использование
условных ходов, минимума, максимума, флагов установки и инструкций abs, а также некоторых выполнимых трюков
по стандартной арифметике. Использование условного исполнения на чипах, где оно есть
доступность контролируется "if-конверсией2".

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fif-преобразование2
Используйте условное выполнение (если возможно) для преобразования условных переходов в
безветвленные эквиваленты.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fdelete-проверка нулевого указателя
Предположим, что программы не могут безопасно разыменовать нулевые указатели и что никакой код или данные
элемент находится там. Это позволяет выполнить простую оптимизацию сворачивания констант вообще.
уровни оптимизации. Кроме того, другие проходы оптимизации в GCC используют этот флаг для
управлять глобальным анализом потока данных, исключающим бесполезные проверки на нулевые указатели;
они предполагают, что если указатель проверяется после того, как он уже был разыменован, он
не может быть нулевым.

Однако обратите внимание, что в некоторых средах это предположение неверно. Использовать
-fno-delete-null-указатель-проверяет чтобы отключить эту оптимизацию для программ, зависящих от
на такое поведение.

Некоторые цели, особенно встроенные, отключают эту опцию на всех уровнях. Иначе
он включен на всех уровнях: -O0, -O1, -O2, -O3, -Операционные системы. Пропуска, использующие информацию
включаются независимо на разных уровнях оптимизации.

-fдевиртуализовать
Попытка преобразовать вызовы виртуальных функций в прямые вызовы. Это сделано как
внутри процедуры и межпроцедурно как часть непрямого встраивания
("-findirect-inlining") и межпроцедурное распространение констант (-fipa-cp). Включено
на уровнях -O2, -O3, -Операционные системы.

-файловые-оптимизации
Выполните ряд незначительных оптимизаций, которые относительно дороги.

Включено на уровнях -O2, -O3, -Операционные системы.

-свободно
Попытайтесь удалить повторяющиеся инструкции расширения. Это особенно полезно для
архитектура x86-64, которая неявно расширяется нулями в 64-битных регистрах после
запись в их нижнюю 32-битную половину.

Включено для x86 на уровнях -O2, -O3.

-foptimize-регистр-перемещение
-fregmove
Попытка переназначить номера регистров в командах перемещения и в качестве операндов других
простые инструкции, чтобы максимально увеличить объем привязки регистров. Это
особенно полезно на машинах с инструкциями с двумя операндами.

Внимание -fregmove и -foptimize-регистр-перемещение такая же оптимизация.

Включено на уровнях -O2, -O3, -Операционные системы.

-fira-algorithm =алгоритм
Используйте указанный алгоритм окраски для встроенного распределителя регистров. В
алгоритм аргумент может быть приоритет, который определяет приоритетную окраску Чоу, или CB,
задающий раскраску Чайтина-Бриггса. Раскраска Чайтина-Бриггса не реализована.
для всех архитектур, но для тех целей, которые его поддерживают, это значение по умолчанию
потому что он генерирует лучший код.

-fira-region =область
Используйте указанные регионы для интегрированного распределителя регистров. В область аргумент
должно быть одним из следующих:

Найти Используйте все шлейфы как регионы размещения регистров. Это может дать наилучшие результаты для
машины с малым и / или нерегулярным набором регистров.

смешанный
В качестве областей используйте все петли, за исключением петель с небольшим давлением регистра. Этот
value обычно дает наилучшие результаты в большинстве случаев и для большинства архитектур, и
включен по умолчанию при компиляции с оптимизацией по скорости (-O, -O2...).

one Используйте все функции как единый регион. Обычно это приводит к наименьшему размеру кода.
размер и включен по умолчанию для -Операционные системы or -O0.

-фира-петля-давление
Используйте IRA для оценки давления в контурах для принятия решений о перемещении инвариантов контура.
Эта опция обычно приводит к генерации более быстрого и меньшего кода на машинах с
большие файлы регистров (> = 32 регистров), но это может замедлить работу компилятора.

Эта опция включена на уровне -O3 для некоторых целей.

-fno-ira-share-save-слоты
Отключить совместное использование слотов стека, используемых для сохранения используемых жестких регистров вызовов
вызов. Каждый жесткий регистр получает отдельный слот стека, и в результате стек функций
кадры больше.

-fno-ira-share-spill-слоты
Отключить совместное использование слотов стека, выделенных для псевдорегистров. Каждый псевдорегистратор
который не получает жесткий регистр, получает отдельный слот стека, и в результате функция
кадры стека больше.

-fira-verbose =n
Управляйте уровнем детализации файла дампа для встроенного распределителя регистров. В
значение по умолчанию - 5. Если значение n больше или равно 10, вывод дампа отправляется
в stderr, используя тот же формат, что и n минус 10.

-fdelayed-ветка
Если поддерживается для целевой машины, попробуйте изменить порядок инструкций для использования
слоты инструкций доступны после инструкций отложенного перехода.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fschedule-insns
Если поддерживается для целевой машины, попробуйте изменить порядок инструкций, чтобы исключить
выполнение останавливается из-за недоступности необходимых данных. Это помогает машинам, которые
иметь медленные инструкции загрузки с плавающей запятой или памяти, позволяя другим инструкциям
выдается до тех пор, пока не потребуется результат загрузки или инструкции с плавающей запятой.

Включено на уровнях -O2, -O3.

-fschedule-insns2
Похожий на что -fschedule-insns, но запрашивает дополнительный проход планирования инструкций
после того, как было выполнено распределение регистров. Это особенно полезно на машинах с
относительно небольшое количество регистров и где инструкции загрузки памяти занимают больше, чем
один цикл.

Включено на уровнях -O2, -O3, -Операционные системы.

-fno-sched-межблок
Не распределяйте инструкции по базовым блокам. Обычно это включено по умолчанию.
при планировании перед распределением регистров, т. е. с -fschedule-insns или, по крайней -O2 or
выше.

-fno-sched-spec
Не допускайте спекулятивного движения ненагруженных инструкций. Обычно это включается
по умолчанию при планировании перед распределением регистров, т. е. с -fschedule-insns или, по крайней
-O2 или выше.

-fsched-давление
Включите планирование insn с учетом давления регистров перед распределением регистров.
Это имеет смысл только при планировании до включения распределения регистров, т. Е. С
-fschedule-insns или, по крайней -O2 или выше. Использование этой опции может улучшить генерируемые
код и уменьшите его размер, не допуская увеличения давления в регистре выше числа
доступных жестких регистров и, как следствие, разливы регистров в регистре
распределение.

-fsched-спецификация-нагрузка
Разрешить спекулятивное движение некоторых инструкций по загрузке. Это имеет смысл только тогда, когда
планирование перед распределением регистров, т. е. с -fschedule-insns или, по крайней -O2 или выше.

-fsched-spec-load-опасно
Разрешить спекулятивное движение большего количества инструкций по загрузке. Это имеет смысл только тогда, когда
планирование перед распределением регистров, т. е. с -fschedule-insns или, по крайней -O2 или выше.

-fsched-заглохли-insns
-fsched-stalled-insns =n
Определите, сколько insns (если есть) можно преждевременно переместить из очереди остановленных
insns в список готовности во время второго прохода планирования.
-fno-sched-stated-insns означает, что ни один insns не будет перемещен преждевременно,
-fsched-stalled-insns = 0 означает, что нет ограничений на то, сколько INN в очереди может быть перемещено
преждевременно. -fsched-заглохли-insns без значения эквивалентно
-fsched-stalled-insns = 1.

-fsched-заглохло-insns-dep
-fsched-stalled-insns-dep =n
Определите, сколько insn-групп (циклов) будет проверяться на зависимость от застопорившейся
insn, который является кандидатом на досрочное удаление из очереди заблокированных insn. Этот
действует только во время второго прохода планирования и только в том случае, если
-fsched-заглохли-insns используется. -fno-sched-стоп-insns-деп эквивалентна
-fsched-stalled-insns-dep = 0. -fsched-заглохло-insns-dep без значения эквивалентно
в -fsched-stalled-insns-dep = 1.

-fsched2-использовать-суперблоки
При планировании после распределения регистров используйте алгоритм планирования суперблока.
Планирование суперблока позволяет перемещаться через границы базового блока, что приводит к более быстрому
расписания. Этот вариант является экспериментальным, поскольку не все описания компьютеров используются GCC.
достаточно тщательно смоделировать ЦП, чтобы избежать ненадежных результатов алгоритма.

Это имеет смысл только при планировании после распределения регистров, т.е.
-fschedule-insns2 или, по крайней -O2 или выше.

-fsched-group-эвристика
Включите групповую эвристику в планировщике. Эта эвристика благоприятствует инструкции
который принадлежит к группе расписания. Это включено по умолчанию, когда расписание
включен, то есть с -fschedule-insns or -fschedule-insns2 или, по крайней -O2 или выше.

-fsched-критический-эвристический путь
Включите эвристику критического пути в планировщике. Эта эвристическая благосклонность
инструкции по критическому пути. Это включено по умолчанию, когда расписание
включен, то есть с -fschedule-insns or -fschedule-insns2 или, по крайней -O2 или выше.

-fsched-spec-insn-эвристика
Включите эвристику спекулятивных инструкций в планировщике. Эта эвристическая благосклонность
спекулятивные инструкции с большей слабостью зависимости. По умолчанию это включено
когда планирование включено, т.е. -fschedule-insns or -fschedule-insns2 или, по крайней -O2
или выше.

-fsched-rank-эвристика
Включите эвристику ранжирования в планировщике. Эта эвристика благоприятствует инструкции
принадлежащий базовому блоку с большим размером или частотой. По умолчанию это включено
когда планирование включено, т.е. -fschedule-insns or -fschedule-insns2 или, по крайней -O2
или выше.

-fsched-last-insn-эвристика
Включите эвристику последней инструкции в планировщике. Эта эвристика благоприятствует
инструкция, которая меньше зависит от последней запланированной инструкции. Это включено
по умолчанию, когда включено планирование, т.е. -fschedule-insns or -fschedule-insns2
или, по крайней -O2 или выше.

-fsched-деп-счет-эвристика
Включите эвристику зависимого подсчета в планировщике. Эта эвристика благоприятствует
инструкция, в которой есть больше инструкций в зависимости от нее. По умолчанию это включено
когда планирование включено, т.е. -fschedule-insns or -fschedule-insns2 или, по крайней -O2
или выше.

-freschedule-по модулю-расписанию-циклов
Планирование по модулю предшествует традиционному планированию, если цикл был по модулю
запланировано, мы можем захотеть, чтобы более поздние этапы планирования не меняли его
расписание, мы используем эту опцию, чтобы контролировать это.

-fselective-планирование
Составьте инструкции с использованием алгоритма выборочного планирования. Выборочное планирование запусков
вместо первого прохода планировщика.

-fвыборочное-планирование2
Составьте инструкции с использованием алгоритма выборочного планирования. Выборочное планирование запусков
вместо второго прохода планировщика.

-fsel-sched-конвейерная обработка
Включите программную конвейерную обработку самых внутренних циклов во время выборочного планирования. Этот
опция не действует, пока один из -fselective-планирование or -fвыборочное-планирование2 is
включенный.

-fsel-sched-pipelining-external-петли
При конвейерной обработке петель во время выборочного планирования также конвейерные внешние петли. Этот
опция не действует до тех пор, пока -fsel-sched-конвейерная обработка .

-fshrink-обертка
Выделяйте прологи функции только перед теми частями функции, которые в этом нуждаются, а не в
верх функции. Этот флаг установлен по умолчанию на -O и выше.

-fcaller-сохраняет
Разрешить размещение значений в регистрах, которые будут затираться вызовами функций,
путем выдачи дополнительных инструкций по сохранению и восстановлению регистров для таких вызовов.
Такое распределение выполняется только тогда, когда кажется, что он дает лучший код, чем если бы
иначе производиться.

Эта опция всегда включена по умолчанию на определенных машинах, обычно на тех, на которых
вместо них нет регистров с сохранением вызовов.

Включено на уровнях -O2, -O3, -Операционные системы.

-fcombine-stack-Adjustments
Отслеживает корректировки стека (нажатия и выталкивания) и ссылки на память стека, а затем пытается
найти способы их комбинировать.

Включено по умолчанию в -O1 и выше.

-fconserve-стек
Попытка минимизировать использование стека. Компилятор попытается использовать меньше места в стеке,
даже если это замедлит работу программы. Этот вариант подразумевает установку большой стек
рама параметр на 100 и рост кадра большого стека параметр до 400.

-ftree-reassoc
Выполните повторную ассоциацию на деревьях. Этот флаг установлен по умолчанию на -O и выше.

-free-pre
Выполните частичное устранение избыточности (PRE) на деревьях. Этот флаг включен
по умолчанию в -O2 и -O3.

-ftree-частичный-pre
Сделайте частичное устранение избыточности (PRE) более агрессивным. Этот флаг включен
по умолчанию в -O3.

-ftree-forwprop
Выполните прямое распространение на деревьях. Этот флаг установлен по умолчанию на -O и
выше.

-free-fre
Выполните полное устранение избыточности (FRE) на деревьях. Разница между FRE и
PRE заключается в том, что FRE рассматривает только выражения, которые вычисляются на всех путях, ведущих к
избыточное вычисление. Этот анализ выполняется быстрее, чем PRE, но выявляет меньше
дублирование. Этот флаг установлен по умолчанию на -O и выше.

-ftree-phiprop
Выполнять подъем грузов по условным указателям на деревья. Этот проход включен
по умолчанию в -O и выше.

-ftree-copy-prop
Выполните копирование на деревьях. Этот проход исключает ненужные операции копирования.
Этот флаг установлен по умолчанию на -O и выше.

-fipa-чистый-const
Узнайте, какие функции являются чистыми или постоянными. Включено по умолчанию в -O и выше.

-fipa-ссылка
Обнаружение, какие статические переменные не экранируются, невозможно избежать из модуля компиляции.
Включено по умолчанию в -O и выше.

-фипа-пта
Выполните межпроцедурный анализ указателя и межпроцедурную модификацию, а также
справочный анализ. Этот параметр может привести к чрезмерному использованию памяти и времени компиляции на
большие единицы компиляции. По умолчанию он не включен ни на одном уровне оптимизации.

-fipa-профиль
Выполните межпроцедурное распространение профиля. Функции, вызываемые только с холода
функции отмечены как холодные. Также однократно выполняемые функции (например, «холодный»,
"noreturn", статические конструкторы или деструкторы). Холодные функции и
После этого выполняемые один раз части функций без цикла оптимизируются по размеру. Включено
по умолчанию в -O и выше.

-fipa-cp
Выполните межпроцедурное постоянное распространение. Эта оптимизация анализирует программу
чтобы определить, когда значения, передаваемые функциям, являются константами, а затем оптимизирует
соответственно. Эта оптимизация может существенно повысить производительность, если
приложение имеет константы, переданные функциям. Этот флаг установлен по умолчанию на
-O2, -Операционные системы и -O3.

-fipa-cp-клон
Выполните клонирование функций, чтобы усилить межпроцедурное распространение констант. Когда
включено, межпроцедурное распространение констант будет выполнять клонирование функции, когда
внешне видимая функция может быть вызвана с постоянными аргументами. Потому что это
оптимизация может создавать несколько копий функций, это может значительно увеличить
размер кода (см. --парам ipcp-unit-рост =ценностное ). Этот флаг установлен по умолчанию на
-O3.

-fipa-матрица-реорг
Выполните выравнивание и транспонирование матрицы. Сглаживание матрицы пытается заменить
m-мерная матрица с эквивалентной ей n-мерной матрицей, где n <m. Этот
снижает уровень косвенного обращения, необходимый для доступа к элементам матрицы. В
вторая оптимизация - это транспонирование матрицы, при котором делается попытка изменить порядок
размеры матрицы для улучшения локальности кеша. Обе оптимизации нуждаются в
-fwhole-программа флаг. Транспонирование возможно только в том случае, если
доступен.

-дерево-раковина
Выполните движение магазина вперед по деревьям. Этот флаг установлен по умолчанию на -O и
выше.

-ftree-bit-ccp
Выполнение разреженного условного распространения битовой константы на деревьях и распространение указателя
информация о выравнивании. Этот проход работает только с локальными скалярными переменными и
включен по умолчанию в -O и выше. Это требует, чтобы -ftree-ccp включен.

-ftree-ccp
Выполнение разреженного распространения условных констант (CCP) на деревьях. Только этот проход
работает с локальными скалярными переменными и по умолчанию включен в -O и выше.

-бесплатное переключение-преобразование
Выполните преобразование простых инициализаций в переключателе в инициализации из
скалярный массив. Этот флаг установлен по умолчанию на -O2 и выше.

-ftree-tail слияние
Ищите идентичные кодовые последовательности. Когда найдете, замените один прыжком на другой.
Эта оптимизация известна как слияние хвостов или перекрестный прыжок. Этот флаг включен
по умолчанию в -O2 и выше. Время компиляции на этом проходе можно ограничить с помощью
макс-хвост-слияние-сравнения параметр и макс-хвост-слияние-итераций Параметр.

-ftree-dce
Выполните устранение мертвого кода (DCE) на деревьях. Этот флаг установлен по умолчанию на -O
и выше.

-ftree-встроенный-вызов-dce
Выполните условное исключение мертвого кода (DCE) для вызовов встроенных функций, которые
может установить "errno", но в остальном не имеет побочных эффектов. Этот флаг включен по умолчанию
at -O2 и выше, если -Операционные системы тоже не указано.

-ftree-доминатор-opts
Выполнение множества простых скалярных чисток (распространение констант / копий, избыточность
исключение, распространение диапазона и упрощение выражения) на основе доминатора
обход дерева. Это также выполняет резку скачков (чтобы свести переходы к переходам). Этот
флаг включен по умолчанию в -O и выше.

-ftree-dse
Выполните ликвидацию мертвого магазина (DSE) на деревьях. Мертвый магазин - это магазин в памяти
местоположение, которое позже будет перезаписано другим магазином без каких-либо промежуточных загрузок. В
в этом случае предыдущее хранилище может быть удалено. Этот флаг установлен по умолчанию на -O и
выше.

-футри-ч
Выполните копирование заголовка цикла на деревьях. Это полезно, так как увеличивает
эффективность оптимизации движения кода. Также это экономит один прыжок. Этот флаг
включен по умолчанию в -O и выше. Он не включен для -Операционные системы, так как обычно
увеличивает размер кода.

-ftree-loop-оптимизировать
Оптимизируйте цикл для деревьев. Этот флаг установлен по умолчанию на -O и
выше.

-бв-петля-линейный
Выполните преобразования обмена циклами на дереве. Такой же как -флоп-развязка. Использовать
это преобразование кода, GCC должен быть настроен с --with-ppl и --with-cloog в
включить инфраструктуру преобразования контура Graphite.

-флоп-развязка
Выполняйте преобразования обмена циклами в циклах. Замена двух вложенных циклов
переключает внутренний и внешний контуры. Например, для такого цикла:

ДО J = 1, M
ДО I = 1, Н
A (J, I) = A (J, I) * C
КОНЕЦ
КОНЕЦ

Обмен циклами преобразует цикл, как если бы пользователь написал:

ДО I = 1, Н
ДО J = 1, M
A (J, I) = A (J, I) * C
КОНЕЦ
КОНЕЦ

что может быть полезно, когда "N" больше, чем кеш, потому что в Фортране
элементы массива хранятся в памяти последовательно по столбцам, а исходные
цикл перебирает строки, потенциально создавая при каждом доступе промах в кэше. Этот
оптимизация применяется ко всем языкам, поддерживаемым GCC, и не ограничивается
Фортран. Чтобы использовать это преобразование кода, GCC должен быть настроен с --with-ppl
и --with-cloog для включения инфраструктуры преобразования графитового цикла.

-фуп-стрип-мина
Выполнение преобразований извлечения данных по полосе петель на петлях. Полоса добычи разделяет петлю на
две вложенные петли. На внешней петле есть шаги, равные размеру полосы, а на внутренней
Петля имеет шаги исходной петли внутри полосы. Длину полосы можно изменить
используя петля-блок-размер плитки параметр. Например, для такого цикла:

ДО I = 1, Н
А (I) = А (I) + С
КОНЕЦ

Анализ полосы цикла преобразует цикл, как если бы пользователь написал:

ДО II = 1, N, 51
DO I = II, мин (II + 50, N)
А (I) = А (I) + С
КОНЕЦ
КОНЕЦ

Эта оптимизация применяется ко всем языкам, поддерживаемым GCC, и не ограничивается
Фортран. Чтобы использовать это преобразование кода, GCC должен быть настроен с --with-ppl
и --with-cloog для включения инфраструктуры преобразования графитового цикла.

-floop-блок
Выполнение преобразований блокировки цикла в циклах. Блокирующая полоса минует каждую петлю в
гнездо циклов таким образом, чтобы обращения к памяти для циклов элементов помещались внутри кешей. В
длину полосы можно изменить с помощью петля-блок-размер плитки параметр. Например,
учитывая цикл вроде:

ДО I = 1, Н
ДО J = 1, M
A (J, I) = B (I) + C (J)
КОНЕЦ
КОНЕЦ

блокировка цикла преобразует цикл, как если бы пользователь написал:

ДО II = 1, N, 51
ДО JJ = 1, M, 51
DO I = II, мин (II + 50, N)
DO J = JJ, мин (JJ + 50, M)
A (J, I) = B (I) + C (J)
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ

что может быть полезно, когда "M" больше, чем кеши, потому что самый внутренний цикл
будет перебирать меньший объем данных, которые могут храниться в кешах. Этот
оптимизация применяется ко всем языкам, поддерживаемым GCC, и не ограничивается
Фортран. Чтобы использовать это преобразование кода, GCC должен быть настроен с --with-ppl
и --with-cloog для включения инфраструктуры преобразования графитового цикла.

-fgraphite-идентичность
Включите преобразование идентичности для графита. Для каждого SCoP мы генерируем
полиэдральное представление и преобразовать его обратно в простое. С использованием -fgraphite-идентичность
мы можем проверить затраты или преимущества преобразования GIMPLE -> GRAPHITE -> GIMPLE.
Некоторые минимальные оптимизации также выполняются генератором кода CLooG, например index
расщепление и устранение мертвого кода в циклах.

-флуп-сгладить
Удаляет структуру вложенности циклов: преобразует гнездо циклов в одиночный цикл. Этот
преобразование может быть полезно в качестве преобразования преобразования для векторизации и
распараллеливание. Это экспериментальная функция. Чтобы использовать это преобразование кода, GCC
должен быть настроен с --with-ppl и --with-cloog для включения графитовой петли
инфраструктура трансформации.

-floop-parallelize-все
Используйте анализ зависимости данных Graphite, чтобы определить циклы, которые можно распараллелить.
Распараллелить все циклы, которые могут быть проанализированы, чтобы не содержать зависимостей, переносимых циклами.
не проверяя, выгодно ли распараллеливать циклы.

-fcheck-data-deps
Сравните результаты нескольких анализаторов зависимости данных. Эта опция используется для
отладка анализаторов зависимостей данных.

-ftree-loop-если-преобразовать
Попытка преобразовать условные переходы в самых внутренних циклах в безветвленные
эквиваленты. Цель состоит в том, чтобы удалить поток управления из самых внутренних циклов, чтобы
чтобы улучшить способность прохода векторизации обрабатывать эти циклы. Это
включен по умолчанию, если включена векторизация.

-ftree-loop-если-конвертировать-хранит
Попытка также выполнить if-convert условных переходов, содержащих записи в память. Этот
преобразование может быть небезопасным для многопоточных программ, поскольку оно преобразует условные
память записывает в безусловную запись в память. Например,

для (я = 0; я <N; я ++)
если (усл.)
A [i] = expr;

будет преобразован в

для (я = 0; я <N; я ++)
A [i] = cond? expr: A [i];

потенциально производящие гонки данных.

Распределение без петель
Выполните распределение петель. Этот флаг может улучшить производительность кеширования на больших телах цикла.
и разрешить дальнейшую оптимизацию цикла, такую ​​как распараллеливание или векторизация,
место. Например, петля

ДО I = 1, Н
А (I) = В (I) + С
D (I) = E (I) * F
КОНЕЦ

превращается в

ДО I = 1, Н
А (I) = В (I) + С
КОНЕЦ
ДО I = 1, Н
D (I) = E (I) * F
КОНЕЦ

-ftree-loop-распространять шаблоны
Выполнение циклического распределения шаблонов, которые могут быть сгенерированы кодом с вызовами
библиотека. Этот флаг установлен по умолчанию на -O3.

Этот проход распределяет циклы инициализации и генерирует вызов memset zero.
Например, петля

ДО I = 1, Н
A (I) = 0
B (I) = A (I) + I
КОНЕЦ

превращается в

ДО I = 1, Н
A (I) = 0
КОНЕЦ
ДО I = 1, Н
B (I) = A (I) + I
КОНЕЦ

и цикл инициализации преобразуется в вызов memset zero.

-ftree-loop-им
Выполните инвариантное движение петли на деревьях. Этот проход перемещает только инварианты, которые были бы
трудно обрабатывать на уровне RTL (вызовы функций, операции, которые расширяются до нетривиальных
последовательности insns). С участием -funswitch-петли он также перемещает операнды условий, которые
инвариантны вне цикла, так что мы можем использовать только тривиальный анализ инвариантности
при отключении петли. Пропуск также включает движение магазина.

-ftree-loop-ivcanon
Создайте канонический счетчик количества итераций в циклах, для которых определяется
количество итераций требует сложного анализа. Дальнейшие оптимизации могут
легко определить номер. Особенно полезно при развертывании.

-фивопты
Выполните оптимизацию индукционных переменных (снижение прочности, индукционные переменные).
слияние и индукционное исключение переменных) на деревьях.

-ftree-parallelize-loops = п
Распараллеливайте циклы, т. Е. Разделяйте их итерационное пространство для выполнения в n потоках. Это
возможно только для циклов, чьи итерации независимы и могут быть произвольно
переупорядочен. Оптимизация выгодна только на многопроцессорных машинах, для циклов
которые интенсивно загружают процессор, а не ограничиваются, например, пропускной способностью памяти. Этот вариант
подразумевает -pthread, и поэтому поддерживается только для целей, которые поддерживают
-pthread.

-ftree-pta
Выполните анализ локальных функций на деревьях. Этот флаг включен по умолчанию
at -O и выше.

-ftree-сра
Выполните скалярную замену агрегатов. Этот проход заменяет ссылки на структуру
со скалярами, чтобы предотвратить слишком раннюю фиксацию структур в памяти. Этот флаг
включен по умолчанию в -O и выше.

-ftree-copyrename
Выполните переименование копий на деревьях. Этот проход пытается переименовать временные библиотеки компилятора в
другие переменные в местах копирования, что обычно приводит к именам переменных, которые более
очень похожи на исходные переменные. Этот флаг установлен по умолчанию на -O и
выше.

-ftree-coalesce-inline-vars
Сообщите пропуску copyrename (см. -ftree-copyrename), чтобы попытаться объединить маленьких пользователей-
определенные переменные тоже, но только если они были встроены из других функций. Это
более ограниченная форма -ftree-coalesce-vars. Это может повредить отладочную информацию таких
встроенные переменные, но он сохранит переменные встроенной функции отдельно от
друг друга, так что они с большей вероятностью будут содержать ожидаемые значения в
сеанс отладки. Это было по умолчанию в версиях GCC старше 4.7.

-ftree-coalesce-vars
Сообщите пропуску copyrename (см. -ftree-copyrename), чтобы попытаться объединить маленьких пользователей-
также определены переменные, а не только временные файлы компилятора. Это может серьезно ограничить
возможность отладки оптимизированной программы, скомпилированной с -fno-var-отслеживание-присваивания.
В инвертированной форме этот флаг предотвращает объединение пользовательских переменных SSA, включая
встроенные. Эта опция включена по умолчанию.

-дерево-тер
Выполните временную замену выражения во время фазы SSA-> normal. Одинокий
временные конструкции use / single заменяются в месте их использования с их определяющими
выражение. Это приводит к не-GIMPLE-коду, но дает экспандерам гораздо больше
сложные деревья, над которыми нужно работать, в результате улучшается генерация RTL. Это обеспечивается
по умолчанию в -O и выше.

-ftree-векторизация
Выполните векторизацию цикла на деревьях. Этот флаг установлен по умолчанию на -O3.

-ftree-slp-векторизация
Выполните базовую блочную векторизацию на деревьях. Этот флаг установлен по умолчанию на -O3 и
когда -ftree-векторизация включен.

-ftree-vect-loop-версия
Выполняйте управление версиями цикла при векторизации цикла на деревьях. Когда появляется петля
быть векторизуемым, за исключением того, что выравнивание данных или зависимость данных не могут быть определены
во время компиляции генерируются векторизованные и невекторизованные версии цикла.
наряду с проверками во время выполнения на соответствие или зависимость, чтобы контролировать, какая версия
выполнен. Эта опция включена по умолчанию, кроме уровня -Операционные системы где он отключен.

-fvect-стоимость-модель
Включить модель затрат для векторизации.

-ftree-vrp
Выполните распространение диапазона значений на деревьях. Это похоже на постоянное распространение
проходят, но вместо значений распространяются диапазоны значений. Это позволяет
оптимизаторы для удаления ненужных проверок диапазона, таких как проверки границ массива и нулевой указатель
чеки. По умолчанию это включено в -O2 и выше. Устранение проверки нулевого указателя
делается только если -fdelete-проверка нулевого указателя включен.

-фтрейсер
Выполните дублирование хвоста, чтобы увеличить размер суперблока. Это преобразование упрощает
поток управления функции, позволяющий другим оптимизациям работать лучше.

-фунролл-петли
Циклы развертывания, количество итераций которых может быть определено во время компиляции или после
вход в цикл. -фунролл-петли подразумевает -frerun-cse-после-петля. Эта опция делает
код больше, и может или не может заставить его работать быстрее.

-фунролл-все-петли
Разверните все циклы, даже если их количество итераций неизвестно, когда цикл
вошел. Обычно это заставляет программы работать медленнее. -фунролл-все-петли подразумевает
те же варианты, что и -фунролл-петли,

-fsplit-ivs-in-unroller
Позволяет выражать значения индукционных переменных в более поздних итерациях
развернутый цикл с использованием значения в первой итерации. Это ломает долгую зависимость
цепочки, тем самым повышая эффективность проходов планирования.

Сочетание -fвеб и CSE часто бывает достаточно для получения того же эффекта. тем не мение
в случаях, когда тело цикла более сложное, чем отдельный базовый блок, это не
надежный. Он также не работает на некоторых архитектурах из-за
ограничения в прохождении CSE.

Эта оптимизация включена по умолчанию.

-fvariable-extension-in-unroller
С этой опцией компилятор создаст несколько копий некоторых локальных переменных.
при развертывании цикла, что может привести к получению превосходного кода.

-fpartial-встраивание
Встроенные части функций. Эта опция имеет какой-либо эффект только в том случае, если сама встраивание
включен -finline-функции or -finline-small-функции настройки.

Включено на уровне -O2.

-fpredictive-обобщение
Выполните прогнозирующую оптимизацию объединения, т. Е. Повторное использование вычислений (особенно
загрузка и сохранение памяти), выполненные в предыдущих итерациях циклов.

Эта опция включена на уровне -O3.

-fprefetch-loop-массивы
Если поддерживается целевой машиной, сгенерируйте инструкции для предварительной выборки памяти в
повысить производительность циклов, обращающихся к большим массивам.

Эта опция может генерировать лучший или худший код; результаты сильно зависят от
структура циклов в исходном коде.

Отключено на уровне -Операционные системы.

-фно-глазок
-фно-глазок2
Отключите любую оптимизацию глазка для конкретной машины. Разница между
-фно-глазок и -фно-глазок2 в том, как они реализованы в компиляторе; некоторые
цели используют один, некоторые используют другой, некоторые используют оба.

-глазок по умолчанию включен. -fглазок2 включен на уровнях -O2, -O3, -Операционные системы.

-fno-guess-branch-вероятность
Не пытайтесь угадывать вероятности перехода с помощью эвристики.

GCC будет использовать эвристику, чтобы угадать вероятности ветвления, если они не предоставлены
обратная связь по профилированию (-fprofile-дуги). Эти эвристики основаны на потоке управления
график. Если некоторые вероятности ветвления заданы __builtin_expect, то
эвристика будет использоваться, чтобы угадать вероятности ветвления для остальной части потока управления
график, взяв __builtin_expect информация во внимание. Взаимодействие между
эвристика и __builtin_expect может быть сложным, и в некоторых случаях может быть полезно
отключите эвристику, чтобы эффекты __builtin_expect легче
Понимаю.

По умолчанию используется -fguess-ветвь-вероятность на уровнях -O, -O2, -O3, -Операционные системы.

-freorder-блоки
Переупорядочить базовые блоки в скомпилированной функции, чтобы уменьшить количество взятых
ветки и улучшить локальность кода.

Включено на уровнях -O2, -O3.

-freorder-блоки-и-раздел
В дополнение к переупорядочиванию базовых блоков в скомпилированной функции, чтобы уменьшить
количество взятых ответвлений, перегородок горячих и холодных опорных блоков на отдельные секции
сборки и файлов .o, чтобы повысить производительность подкачки и локализации кэша.

Эта оптимизация автоматически отключается при наличии обработки исключений,
для разделов linkonce, для функций с определенным пользователем атрибутом раздела и для любых
архитектура, не поддерживающая именованные разделы.

-freorder-функции
Измените порядок функций в объектном файле, чтобы улучшить локальность кода. Это
реализовано с помощью специальных подразделов ".text.hot" для наиболее часто выполняемых
functions и ".text.unlikely" для маловероятно выполняемых функций. Изменение порядка осуществляется
компоновщик, поэтому формат объектного файла должен поддерживать именованные разделы, а компоновщик должен размещать
их разумным образом.

Также, чтобы эта опция была эффективной, должна быть доступна обратная связь с профилем. Видеть
-fprofile-дуги для получения информации.

Включено на уровнях -O2, -O3, -Операционные системы.

-fstrict-псевдоним
Разрешить компилятору принять самые строгие правила псевдонима, применимые к языку.
компилируется. Для C (и C ++) это активирует оптимизацию в зависимости от типа
выражения. В частности, предполагается, что объект одного типа никогда не находится в
тот же адрес, что и у объекта другого типа, если только типы почти не совпадают.
Например, «unsigned int» может быть псевдонимом «int», но не «void *» или «double». А
Тип символа может быть псевдонимом любого другого типа.

Обратите особое внимание на такой код:

союз a_union {
инт я;
двойной d;
};

int f () {
союз a_union т;
td = 3.0;
return ti;
}

Практика чтения от другого члена профсоюза, чем тот, который был последним
написано (так называемое "набирание текста") является обычным явлением. Даже с -fstrict-псевдоним, тип-
каламбур разрешен при условии, что доступ к памяти осуществляется через тип объединения. Так что
приведенный выше код будет работать должным образом. Однако этот код не может:

int f () {
союз a_union т;
int * ip;
td = 3.0;
ip = & t.i;
return * ip;
}

Точно так же доступ, взяв адрес, приведя результирующий указатель и
разыменование результата имеет неопределенное поведение, даже если приведение использует тип объединения,
например:

int f () {
двойной d = 3.0;
return ((объединение a_union *) & d) -> i;
}

Ассоциация -fstrict-псевдоним опция включена на уровнях -O2, -O3, -Операционные системы.

-fstrict-переполнение
Разрешить компилятору принять строгие подписанные правила переполнения в зависимости от языка
компилируется. Для C (и C ++) это означает переполнение при выполнении арифметических операций с
числа со знаком не определены, что означает, что компилятор может предположить, что он не
случаться. Это позволяет проводить различные оптимизации. Например, компилятор примет
что выражение типа «i + 10> i» всегда будет истинным для подписанного «i». Этот
предположение действительно только в том случае, если подписанное переполнение не определено, так как выражение ложно
если "i + 10" переполняется при использовании арифметики с дополнением до двух. Когда эта опция находится в
выполнить любую попытку определить, будет ли операция над числами со знаком переполнения
должны быть написаны осторожно, чтобы не допустить переполнения.

Этот параметр также позволяет компилятору использовать строгую семантику указателя: при заданном
указатель на объект, если добавление смещения к этому указателю не создает указатель
к тому же объекту добавление не определено. Это позволяет компилятору сделать вывод
что «p + u> p» всегда верно для указателя «p» и беззнакового целого «u». Этот
допущение действительно только потому, что перенос указателя не определен, так как выражение
false, если "p + u" переполняется с использованием арифметики с дополнением до двух.

См. Также -fwrapv вариант. С использованием -fwrapv означает, что целочисленное подписанное переполнение
полностью определен: он оборачивается. Когда -fwrapv используется, нет никакой разницы между
-fstrict-переполнение и -fno-строго-переполнение для целых чисел. С участием -fwrapv определенные типы
переполнения допускаются. Например, если компилятор получает переполнение при выполнении
арифметика с константами, переполненное значение все еще можно использовать с -fwrapv, Но не
в противном случае.

Ассоциация -fstrict-переполнение опция включена на уровнях -O2, -O3, -Операционные системы.

-falign-функции
-falign-functions =n
Совместите начало функций со следующей степенью двойки больше, чем n, переходя до n
байтов. Например, -falign-functions = 32 выравнивает функции по следующим 32 байтам
граница, но -falign-functions = 24 выравнивается по следующей 32-байтовой границе, только если
это можно сделать, пропустив 23 байта или меньше.

-fno-align-функции и -falign-functions = 1 эквивалентны и означают, что функции
не будет выровнен.

Некоторые ассемблеры поддерживают этот флаг только тогда, когда n это степень двойки; в этом случае это
округлен.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию.

Включено на уровнях -O2, -O3.

-falign-label
-falign-labels =n
Выровняйте все целевые объекты ветвления по границе, равной степени двойки, пропуская до n байты вроде
-falign-функции. Этот параметр может легко замедлить код, потому что он должен вставлять
фиктивные операции, когда цель перехода достигается в обычном потоке кода.

-fno-align-label и -falign-labels = 1 эквивалентны и означают, что ярлыки не будут
выровнен.

If -falign-петли or -falign-прыжки применимы и больше этого значения, то
вместо них используются их значения.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию, которое очень вероятно
быть 1, что означает отсутствие выравнивания.

Включено на уровнях -O2, -O3.

-falign-петли
-falign-loops =n
Выровняйте петли по границе степени двойки, пропуская до n байты вроде -falign-функции.
Есть надежда, что цикл будет выполняться много раз, что компенсирует любые
выполнение фиктивных операций.

-fno-align-лупы и -falign-loops = 1 эквивалентны и означают, что петли не будут
выровнен.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию.

Включено на уровнях -O2, -O3.

-falign-прыжки
-falign-jumps =n
Выровняйте цели ветвления по границе, равной степени двойки, для целей ветвления, где цели
можно добраться только прыгнув, пропустив до n байты вроде -falign-функции. В
В этом случае фиктивные операции выполнять не нужно.

-fno-выравнивание-прыжки и -falign-jumps = 1 эквивалентны и означают, что петли не будут
выровнен.

If n не указан или равен нулю, используйте машинно-зависимое значение по умолчанию.

Включено на уровнях -O2, -O3.

-Функция за раз
Этот вариант оставлен по соображениям совместимости. -Функция за раз не имеет никакого эффекта, в то время как
-fno-unit-a-time подразумевает -fno-верхний уровень-переупорядочить и -fno-section-анкеры.

Включено по умолчанию.

-fno-верхний уровень-переупорядочить
Не меняйте порядок функций верхнего уровня, переменных и операторов asm. Выведите их в
в том же порядке, в котором они появляются во входном файле. Когда используется эта опция,
статические переменные, на которые нет ссылок, не удаляются. Эта опция предназначена для поддержки
существующий код, основанный на определенном порядке. Для нового кода лучше использовать
атрибутов.

Включено на уровне -O0. При явном отключении это также подразумевает -fno-section-анкеры,
который в противном случае включен в -O0 по некоторым целям.

-fвеб
Создает сети, которые обычно используются для целей распределения регистров, и назначает каждую сеть
индивидуальный псевдорегистратор. Это позволяет проходу выделения регистров работать с
псевдо напрямую, но также усиливает несколько других проходов оптимизации, таких как CSE,
оптимизатор цикла и тривиальный инструмент для удаления мертвого кода. Однако он может выполнять отладку
невозможно, поскольку переменные больше не будут оставаться в «домашнем регистре».

Включено по умолчанию с помощью -фунролл-петли.

-fwhole-программа
Предположим, что текущая единица компиляции представляет собой всю компилируемую программу.
Все общедоступные функции и переменные, за исключением "основных" и тех, которые объединены
атрибут "external_visible" становится статической функцией и, по сути, оптимизируется
более агрессивно межпроцедурными оптимизаторами. Если золото используется как подключаемый модуль компоновщика,
Атрибуты "external_visible" автоматически добавляются к функциям (пока не переменные
из-за тока золото выпуск), доступ к которым осуществляется за пределами объектов LTO в соответствии с
файл разрешения, созданный золото. Для других линкеров, которые не могут генерировать разрешение
файла, явные атрибуты external_visible по-прежнему необходимы. Пока этот вариант
эквивалентно правильному использованию ключевого слова static для программ, состоящих из
один файл, в сочетании с опцией -флто этот флаг можно использовать для компиляции многих
программы меньшего масштаба, поскольку функции и переменные становятся локальными для всего
комбинированная единица компиляции, а не для самого единственного исходного файла.

Этот вариант подразумевает -fцелый-файл для программ на Фортране.

-flto [=n]
Эта опция запускает стандартный оптимизатор времени компоновки. При вызове с исходным кодом он
генерирует GIMPLE (одно из внутренних представлений GCC) и записывает его в специальный ELF
разделы в объектном файле. Когда объектные файлы связаны вместе, все
тела функций считываются из этих разделов ELF и создаются, как если бы они были
часть той же единицы перевода.

Чтобы использовать оптимизатор времени компоновки, -флто необходимо указать во время компиляции и во время
последняя ссылка. Например:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

Первые два вызова GCC сохраняют представление GIMPLE в виде байт-кода в специальном
Разделы ELF внутри фу.о и бар.о. Последний вызов читает байт-код GIMPLE.
от фу.о и бар.о, объединяет два файла в единый внутренний образ и компилирует
результат как обычно. Поскольку оба фу.о и бар.о объединены в одно изображение, это
заставляет весь межпроцедурный анализ и оптимизацию в GCC работать через
два файла, как если бы они были одним. Это означает, например, что вкладыш
возможность встраивать функции в бар.о в функции в фу.о и наоборот.

Другой (более простой) способ включить оптимизацию времени компоновки:

gcc -o myprog -flto -O2 foo.c bar.c

Вышеупомянутый генерирует байт-код для foo.c и бар.с, объединяет их в один
GIMPLE и оптимизирует их, как обычно, для производства моя прога.

Единственное, что следует иметь в виду, это то, что для включения оптимизации времени компоновки
-флто Флаг необходимо передать как команде компиляции, так и команде связывания.

Чтобы оптимизация всей программы была эффективной, необходимо
программные предположения. Компилятору необходимо знать, какие функции и переменные могут быть
доступ к ним осуществляется библиотеками и средой выполнения за пределами модуля, оптимизированного во время компоновки. Когда
поддерживается компоновщиком, подключаемым модулем компоновщика (см. -fuse-linker-плагин) проходит
информация компилятору об используемых и видимых извне символах. Когда
плагин компоновщика недоступен, -fwhole-программа следует использовать, чтобы компилятор
делать эти предположения, что приводит к более агрессивным оптимизационным решениям.

Обратите внимание, что когда файл компилируется с -флто, сгенерированный объектный файл больше, чем
обычный объектный файл, потому что он содержит байт-коды GIMPLE и обычный финальный код.
Это означает, что объектные файлы с информацией LTO могут быть связаны как обычные объекты.
файлы; если -флто не передается компоновщику, межпроцедурные оптимизации не выполняются.
применяется.

Кроме того, флаги оптимизации, используемые для компиляции отдельных файлов, не
обязательно связаны с теми, которые использовались во время ссылки. Например,

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

Это создает отдельные объектные файлы с неоптимизированным кодом ассемблера, но
результирующий двоичный моя прога оптимизирован на -O3. Если вместо этого последний двоичный файл будет
генерируется без -флто, то моя прога не оптимизирован.

При создании финального двоичного файла с -флто, GCC применяет только оптимизацию времени компоновки
к тем файлам, которые содержат байт-код. Следовательно, вы можете смешивать и сопоставлять объектные файлы
и библиотеки с байт-кодами GIMPLE и конечным объектным кодом. GCC автоматически выбирает
какие файлы оптимизировать в режиме LTO и какие файлы связывать без дальнейшего
обработка.

GCC сохраняет некоторые флаги генерации кода при генерации байт-кодов, например
их нужно использовать на заключительном этапе связывания. В настоящее время доступны следующие варианты
сохраняются в файлы байт-кода GIMPLE: -fPIC, -fобщий и все -m целевые флаги.

Во время связывания эти параметры считываются и применяются повторно. Обратите внимание, что текущий
реализация не пытается распознать конфликтующие значения этих параметров. Если
разные файлы имеют конфликтующие значения параметров (например, один файл скомпилирован с -fPIC
а другой нет), компилятор просто использует последнее значение, прочитанное из байт-кода
файлы. Поэтому рекомендуется скомпилировать все файлы, участвующие в
та же ссылка с теми же опциями.

Если LTO встречает объекты со связью C, объявленные с несовместимыми типами в отдельных
единицы перевода, которые необходимо связать вместе (неопределенное поведение в соответствии с ISO C99
6.2.7) может быть выдано нефатальное диагностическое сообщение. Поведение все еще не определено при запуске
времени.

Еще одна особенность LTO - возможность применять межпроцедурную оптимизацию.
на файлах, написанных на разных языках. Это требует поддержки на языковом фронте
конец. В настоящее время интерфейсы C, C ++ и Fortran могут выдавать GIMPLE.
байт-коды, поэтому должно работать что-то вроде этого:

gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g ++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

Обратите внимание, что последняя ссылка выполняется с помощью г ++ чтобы получить библиотеки времени выполнения C ++ и
-лгфортран добавлен для получения библиотек времени выполнения Fortran. В общем, при смешивании
языков в режиме LTO следует использовать те же параметры команды ссылки, что и при смешивании
языки в обычной (не LTO) компиляции; все, что вам нужно добавить, это -флто для всех
компилировать и связывать команды.

Если объектные файлы, содержащие байт-код GIMPLE, хранятся в архиве библиотеки, скажем,
libfoo.a, их можно извлечь и использовать в ссылке LTO, если вы используете
компоновщик с поддержкой плагинов. Чтобы включить эту функцию, используйте флаг -fuse-linker-плагин
во время ссылки:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Когда подключаемый модуль компоновщика включен, компоновщик извлекает необходимые файлы GIMPLE из
libfoo.a и передает их работающему GCC, чтобы сделать их частью агрегированного
Изображение GIMPLE необходимо оптимизировать.

Если вы не используете компоновщик с поддержкой плагинов и / или не включаете компоновщик
плагин, затем объекты внутри libfoo.a извлекаются и связываются как обычно, но они
не участвуйте в процессе оптимизации LTO.

Оптимизация времени компоновки не требует присутствия всей программы для работы.
Если программа не требует экспорта каких-либо символов, можно комбинировать
-флто и -fwhole-программа чтобы позволить межпроцедурным оптимизаторам использовать больше
агрессивные предположения, которые могут привести к улучшению возможностей оптимизации. Использование
-fwhole-программа не требуется, когда подключаемый модуль компоновщика активен (см. -fuse-linker-плагин).

Текущая реализация LTO не пытается сгенерировать байт-код, который
переносится между разными типами хостов. Файлы байт-кода версируются и там
является строгой проверкой версии, поэтому файлы байт-кода, созданные в одной версии GCC, не будут
работать со старой / новой версией GCC.

Оптимизация времени компоновки не работает с генерацией отладочной информации.
Объединяя -флто -g в настоящее время является экспериментальным и, как ожидается, приведет к неправильному
результаты.

Если вы укажете необязательный n, оптимизация и генерация кода выполняются во время компоновки
выполняется параллельно с использованием n параллельные работы с использованием установленного сделать программу.
Переменная окружения ДЕЛАТЬ может использоваться для отмены используемой программы. По умолчанию
значение для n это 1.

Вы также можете указать -flto = сервер вакансий использовать режим сервера заданий GNU make для определения
количество параллельных работ. Это полезно, когда Makefile, вызывающий GCC, уже
выполняются параллельно. Вы должны добавить + к рецепту команды в родительском
Makefile, чтобы это работало. Этот вариант, вероятно, работает только в том случае, если ДЕЛАТЬ это GNU make.

По умолчанию эта опция отключена.

-flto-partition =ALG
Укажите алгоритм разделения, используемый оптимизатором времени компоновки. Ценность
либо "1to1", чтобы указать разделение, отражающее исходные исходные файлы, либо
"сбалансированный", чтобы указать разделение на куски одинакового размера (когда это возможно).
Указание «none» в качестве алгоритма полностью отключает разделение и потоковую передачу. В
значение по умолчанию - «сбалансировано».

-flto-сжатие-уровень =n
Эта опция определяет уровень сжатия, используемый для написания на промежуточном языке.
в объектные файлы LTO и имеет смысл только в сочетании с режимом LTO (-флто).
Допустимые значения: от 0 (без сжатия) до 9 (максимальное сжатие). Ценности за пределами этого
диапазон ограничен либо 0, либо 9. Если опция не указана, по умолчанию используется сбалансированный
используется настройка сжатия.

-flto-отчет
Печатает отчет с внутренними подробностями о работе оптимизатора времени компоновки. В
содержание этого отчета варьируется от версии к версии. Он предназначен для использования в GCC.
разработчиков при обработке объектных файлов в режиме LTO (через -флто).

Отключено по умолчанию.

-fuse-linker-плагин
Позволяет использовать подключаемый модуль компоновщика во время оптимизации времени компоновки. Этот вариант полагается
о поддержке плагинов в компоновщике, который доступен в золоте или в GNU ld 2.21 или
новее.

Эта опция позволяет извлекать объектные файлы с байт-кодом GIMPLE из библиотеки.
архивы. Это улучшает качество оптимизации, открывая больше кода для ссылки -
оптимизатор времени. Эта информация определяет, к каким символам можно получить доступ извне.
(не-LTO объектом или во время динамического связывания). В результате улучшений качества кода на
двоичные файлы (и разделяемые библиотеки, использующие скрытую видимость) похожи на
"-fwhole-программа". Видеть -флто для описания эффекта этого флага и того, как
используй это.

Этот параметр включен по умолчанию, если включена поддержка LTO в GCC и GCC был
настроен для использования с подключаемыми модулями, поддерживающими компоновщик (GNU ld 2.21 или новее или золото).

-ffat-lto-объекты
Объекты Fat LTO - это объектные файлы, содержащие как промежуточный язык, так и
объектный код. Это делает их пригодными как для связывания LTO, так и для обычного связывания. Этот
опция эффективна только при компиляции с -флто и игнорируется во время ссылки.

-fno-fat-lto-объекты улучшает время компиляции по сравнению с обычным LTO, но требует
полный набор инструментов, чтобы быть в курсе LTO. Требуется компоновщик с поддержкой подключаемого модуля компоновщика.
для базовой функциональности. Кроме того, nm, ar и ranlib должны поддерживать компоновщик.
плагины для создания полнофункциональной среды сборки (способной создавать статические
библиотеки и т. д.).

По умолчанию используется -ffat-lto-объекты но это значение по умолчанию предполагается изменить в будущем
выпускает, когда среды, поддерживающие подключаемый модуль компоновщика, становятся более распространенными.

-fcompare-элим
После распределения регистров и разделения инструкций пострегистрового распределения, определите
арифметические инструкции, которые вычисляют флаги процессора, аналогично операции сравнения
на основе этой арифметики. Если возможно, исключите операцию явного сравнения.

Этот проход применяется только к определенным целям, которые не могут явно представлять
операция сравнения до завершения распределения регистров.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fuse-ld = золото
Использовать золото компоновщик вместо компоновщика по умолчанию.

-fuse-ld = bfd
Использовать ld.bfd компоновщик вместо компоновщика по умолчанию.

-fcprop-регистры
После выделения регистров и разделения инструкций пострегистрового выделения мы
выполнить проход копирования-распространения, чтобы попытаться уменьшить зависимости планирования и
иногда удаляйте копию.

Включено на уровнях -O, -O2, -O3, -Операционные системы.

-fprofile-Correction
Профили, собранные с использованием инструментального двоичного кода для многопоточных программ, могут быть
непоследовательны из-за пропущенных обновлений счетчика. Когда этот параметр указан, GCC будет
используйте эвристику, чтобы исправить или сгладить такие несоответствия. По умолчанию GCC будет
выдает сообщение об ошибке при обнаружении несогласованного профиля.

-fprofile-dir =путь
Задайте каталог для поиска файлов данных профиля в путь. Этот вариант
влияет только на данные профиля, созданные -fprofile-генерировать, -ftest-охват,
-fprofile-дуги и используется -fprofile-использование и -fbranch-вероятности и связанные с ним
параметры. Могут использоваться как абсолютные, так и относительные пути. По умолчанию GCC будет использовать
текущий каталог как путь, таким образом файл данных профиля появится в том же
каталог как объектный файл.

-fprofile-генерировать
-fprofile-generate =путь
Включите параметры, обычно используемые для измерительного приложения, чтобы получить полезный профиль
для последующей перекомпиляции с оптимизацией на основе отзывов профилей. Вы должны использовать
-fprofile-генерировать как при компиляции, так и при компоновке вашей программы.

Доступны следующие параметры: «-fprofile-arcs», «-fprofile-values», «-fvpt».

If путь указано, GCC будет смотреть на путь найти данные обратной связи профиля
файлы. Видеть -fprofile-каталог.

-fprofile-использование
-fprofile-use =путь
Включите оптимизацию, направленную на обратную связь, и оптимизацию, как правило, прибыльную
только при наличии обратной связи с профилем.

Включены следующие параметры: "-fbranch-вероятности", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

По умолчанию GCC выдает сообщение об ошибке, если профили обратной связи не соответствуют
исходный код. Эту ошибку можно превратить в предупреждение, используя -Wcoverage-несоответствие.
Обратите внимание, что это может привести к плохо оптимизированному коду.

If путь указано, GCC будет смотреть на путь найти данные обратной связи профиля
файлы. Видеть -fprofile-каталог.

Следующие параметры управляют поведением компилятора в отношении арифметики с плавающей запятой.
Эти параметры предлагают компромисс между скоростью и правильностью. Все должно быть специально включено.

-флот-магазин
Не храните переменные с плавающей запятой в регистрах и запрещайте другие параметры, которые
может изменить, берется ли значение с плавающей запятой из регистра или памяти.

Эта опция предотвращает нежелательную избыточную точность на таких станках, как 68000, где
регистры с плавающей запятой (68881) сохраняют большую точность, чем предполагается "двойной"
иметь. Аналогично для архитектуры x86. Для большинства программ избыточная точность
приносит только пользу, но некоторые программы полагаются на точное определение IEEE с плавающей точкой.
точка. Использовать -флот-магазин для таких программ, после их изменения для хранения всех
соответствующие промежуточные вычисления в переменных.

-fexcess-precision =стиль
Эта опция позволяет дополнительно контролировать избыточную точность на машинах с плавающей
точечные регистры имеют большую точность, чем типы IEEE "float" и "double", а также
процессор не поддерживает округление операций до этих типов. По умолчанию,
-fexcess-precision = быстро действует; это означает, что операции выполняются в
точность регистров и непредсказуемость при округлении до типов
указанное в исходном коде имеет место. При компиляции C, если
-fexcess-precision = стандарт указано, то избыточная точность будет соответствовать правилам
указано в ISO C99; в частности, как приведение, так и присваивание приводят к тому, что значения
округлены до их семантических типов (тогда как -флот-магазин влияет только на назначения).
Этот параметр включен по умолчанию для C, если параметр строгого соответствия, например
-std = C99 используется.

-fexcess-precision = стандарт не реализован для языков, отличных от C, и не имеет
эффект, если -funsafe-математическая-оптимизация or -ffast-математика указан. На x86 это
также не действует, если -mfpmath = sse or -mfpmath = sse + 387 указан; в бывшем
В этом случае семантика IEEE применяется без лишней точности, и в последнем случае округление
непредсказуемы.

-ffast-математика
Наборы -fno-math-errno, -funsafe-математическая-оптимизация, -ffinite-math-only - только математика,
-fno-округление-математика, -fno-сигнализация-нанс и -fcx-ограниченный диапазон.

Эта опция вызывает определение макроса препроцессора «__FAST_MATH__».

Эта опция не включена ни одним -O вариант кроме -Быстро поскольку это может привести к
некорректный вывод для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций.

-fno-math-errno
Не устанавливайте ERRNO после вызова математических функций, которые выполняются с одним
инструкция, например sqrt. Программа, использующая исключения IEEE для математических ошибок.
обработка может захотеть использовать этот флаг для скорости при сохранении арифметики IEEE
Совместимость.

Эта опция не включена ни одним -O вариант, так как это может привести к неправильному выводу
для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций.

По умолчанию используется -fmath-ошибка.

В системах Дарвина математическая библиотека никогда не устанавливает "errno". Следовательно, нет причин
для компилятора, чтобы рассмотреть возможность, и -fno-math-errno это
по умолчанию.

-funsafe-математическая-оптимизация
Разрешить оптимизацию арифметики с плавающей запятой, которая (а) предполагает, что аргументы и
результаты действительны и (б) могут нарушать стандарты IEEE или ANSI. При использовании во время ссылки
он может включать библиотеки или файлы запуска, которые изменяют контрольное слово FPU по умолчанию или
другие подобные оптимизации.

Эта опция не включена ни одним -O вариант, так как это может привести к неправильному выводу
для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций. Позволяет
-fno-знак-нули, -fno-ловушка-математика, -фассоциативная-математика и -freciprocal-математика.

По умолчанию используется -fno-unsafe-math-оптимизация.

-фассоциативная-математика
Разрешить повторное объединение операндов в серии операций с плавающей запятой. Этот
нарушает стандарты языка ISO C и C ++, возможно изменяя результат вычислений.
ПРИМЕЧАНИЕ: переупорядочивание может изменить знак нуля, а также игнорировать NaN и запретить или
создавать недополнение или переполнение (и, следовательно, не может использоваться в коде, который полагается на округление
поведение типа «(x + 2 ** 52) - 2 ** 52». Может также изменить порядок сравнений с плавающей запятой и
таким образом, не может использоваться, когда требуются упорядоченные сравнения. Этот вариант требует, чтобы
изоферменты печени -fno-знак-нули и -fno-ловушка-математика быть в силе. Более того, это не делает
много смысла с -frounding-математический. Для Фортрана опция автоматически включается, когда
изоферменты печени -fno-знак-нули и -fno-ловушка-математика действуют.

По умолчанию используется -fno-ассоциативная-математика.

-freciprocal-математика
Разрешить использование обратной величины значения вместо деления на значение, если это
позволяет оптимизации. Например, «x / y» можно заменить на «x * (1 / y)», что означает
полезно, если "(1 / y)" подлежит исключению из общего подвыражения. Обратите внимание, что это
теряет точность и увеличивает количество операций над значением.

По умолчанию используется -fno-взаимно-математика.

-ffinite-math-only - только математика
Разрешить оптимизацию арифметики с плавающей запятой, предполагающую, что аргументы и
результаты не являются NaN или + -Infs.

Эта опция не включена ни одним -O вариант, так как это может привести к неправильному выводу
для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций. Однако это может дать более быстрый код для
программы, для которых не требуются гарантии этих спецификаций.

По умолчанию используется -fno-только-конечная-математика.

-fno-знак-нули
Разрешить оптимизацию для арифметики с плавающей запятой, игнорирующую нулевое значение подписи.
Арифметика IEEE определяет поведение отдельных значений +0.0 и -0.0, которые затем
запрещает упрощение таких выражений, как x + 0.0 или 0.0 * x (даже с
-ffinite-math-only - только математика). Этот вариант подразумевает, что знак нулевого результата не
значительное.

По умолчанию используется -fsigned-нули.

-fno-ловушка-математика
Скомпилируйте код, предполагая, что операции с плавающей запятой не могут создавать видимые для пользователя
ловушки. Эти ловушки включают деление на ноль, переполнение, потеря значимости, неточный результат и
недопустимая операция. Этот вариант требует, чтобы -fno-сигнализация-нанс быть в силе.
Установка этой опции может позволить более быстрый код, если кто-то полагается на "непрерывную" арифметику IEEE,
например.

Эту опцию никогда не следует включать -O вариант, поскольку это может привести к
некорректный вывод для программ, которые зависят от точной реализации IEEE или ISO
правила / спецификации для математических функций.

По умолчанию используется -фтраппинг-математика.

-frounding-математический
Отключить преобразования и оптимизации, предполагающие округление с плавающей запятой по умолчанию
поведение. Это округление до нуля для всех преобразований с плавающей запятой в целые числа, и
округление до ближайшего для всех остальных арифметических усечений. Этот вариант должен быть
указан для программ, которые динамически изменяют режим округления FP, или это может быть
выполняется с нестандартным режимом округления. Эта опция отключает постоянное сворачивание
выражения с плавающей запятой во время компиляции (на которые может повлиять режим округления)
и арифметические преобразования, которые небезопасны при наличии знакозависимых
режимы округления.

По умолчанию используется -fno-округление-математика.

Этот вариант является экспериментальным и в настоящее время не гарантирует отключения всех GCC.
оптимизации, на которые влияет режим округления. Будущие версии GCC могут предоставлять
более точное управление этим параметром с помощью прагмы C99 "FENV_ACCESS". Эта командная строка
опция будет использоваться для определения состояния по умолчанию для «FENV_ACCESS».

-fsignaling-Nans
Компиляция кода предполагает, что NaN сигнализации IEEE могут генерировать видимые пользователем ловушки во время
операции с плавающей запятой. Установка этого параметра отключает оптимизацию, которая может изменить
количество исключений, видимых с сигнальными NaN. Этот вариант подразумевает
-фтраппинг-математика.

Эта опция вызывает определение макроса препроцессора «__SUPPORT_SNAN__».

По умолчанию используется -fno-сигнализация-нанс.

Этот вариант является экспериментальным и в настоящее время не гарантирует отключения всех GCC.
оптимизации, влияющие на сигнальное поведение NaN.

-fsingle-точность-константа
Рассматривайте константы с плавающей запятой как одинарную точность вместо неявного преобразования
их к константам двойной точности.

-fcx-ограниченный диапазон
Когда этот параметр включен, этот параметр указывает, что шаг уменьшения диапазона не требуется, когда
выполнение сложного деления. Кроме того, не проверяется, является ли результат
сложное умножение или деление "NaN + I * NaN" с попыткой спасти
ситуация в таком случае. По умолчанию -fno-cx-ограниченный диапазон, но включен
-ffast-математика.

Этот параметр управляет настройкой по умолчанию прагмы ISO C99 «CX_LIMITED_RANGE».
Тем не менее, опция применима ко всем языкам.

-fcx-фортран-правила
Сложное умножение и деление подчиняются правилам Фортрана. Снижение дальности осуществляется как
часть сложного деления, но не проверяется, является ли результат сложного
умножение или деление "NaN + I * NaN", с попыткой спасти ситуацию
в таком случае.

По умолчанию используется -fno-cx-фортран-правила.

Следующие параметры управляют оптимизацией, которая может улучшить производительность, но не
разрешено любым -O параметры. Этот раздел включает экспериментальные варианты, которые могут привести к
сломанный код.

-fbranch-вероятности
После запуска программы, скомпилированной с -fprofile-дуги, вы можете скомпилировать его второй раз
через -fbranch-вероятности, чтобы улучшить оптимизацию в зависимости от того, сколько раз
каждая ветка была взята. Когда программа скомпилирована с -fprofile-дуги выходит, это спасает
выполнение дуги засчитывается в файл с именем имя источника.gcda для каждого исходного файла. В
информация в этом файле данных очень зависит от структуры сгенерированного
код, поэтому вы должны использовать один и тот же исходный код и одинаковые параметры оптимизации для обоих
сборники.

Доступно -fbranch-вероятности, GCC ставит REG_BR_PROB обратите внимание на каждый JUMP_INSN и
CALL_INSN. Их можно использовать для улучшения оптимизации. В настоящее время они используются только
в одном месте: в reorg.c, вместо того, чтобы угадывать, по какому пути ветвь, скорее всего, пойдет
взять, REG_BR_PROB значения используются, чтобы точно определить, какой путь используется больше
довольно часто.

-fprofile-значения
В сочетании с -fprofile-дуги, он добавляет код, чтобы некоторые данные о значениях
выражений в программе собрано.

Доступно -fbranch-вероятности, он считывает данные, собранные из значений профилирования
выражения для использования в оптимизации.

Включено с -fprofile-генерировать и -fprofile-использование.

-fvpt
В сочетании с -fprofile-дуги, он инструктирует компилятор добавить код для сбора
информация о значениях выражений.

Доступно -fbranch-вероятности, он считывает собранные данные и фактически выполняет
оптимизации на их основе. В настоящее время оптимизации включают специализацию
операция деления с использованием знания о значении знаменателя.

-frename-регистры
Попытка избежать ложных зависимостей в запланированном коде, используя оставшиеся регистры
после размещения регистров. Эта оптимизация принесет наибольшую пользу процессорам с
много регистров. В зависимости от формата отладочной информации, принятого целью,
однако это может сделать отладку невозможной, поскольку переменные больше не будут оставаться в
"домашний регистр".

Включено по умолчанию с помощью -фунролл-петли и -fpeel-петли.

-фтрейсер
Выполните дублирование хвоста, чтобы увеличить размер суперблока. Это преобразование упрощает
поток управления функции, позволяющий другим оптимизациям работать лучше.

Включено с -fprofile-использование.

-фунролл-петли
Циклы развертывания, количество итераций которых может быть определено во время компиляции или после
вход в цикл. -фунролл-петли подразумевает -frerun-cse-после-петля, -fвеб и
-frename-регистры. Он также включает полное отслаивание петли (т.е. полное удаление
циклы с малым постоянным числом итераций). Эта опция увеличивает размер кода и
может или не может заставить его работать быстрее.

Включено с -fprofile-использование.

-фунролл-все-петли
Разверните все циклы, даже если их количество итераций неизвестно, когда цикл
вошел. Обычно это заставляет программы работать медленнее. -фунролл-все-петли подразумевает
те же варианты, что и -фунролл-петли.

-fpeel-петли
Отдирает петли, по которым достаточно информации, что они не сильно скатываются (от
отзыв профиля). Он также включает полное отслаивание петли (т.е. полное удаление
циклы с малым постоянным числом итераций).

Включено с -fprofile-использование.

-fmove-loop-инварианты
Включает инвариантный проход движения цикла в оптимизаторе цикла RTL. Включено на уровне
-O1

-funswitch-петли
Переместите ветви с условиями инвариантного цикла из цикла, с дубликатами
цикл на обеих ветвях (изменяется в соответствии с результатом выполнения условия).

-функции-разделы
-fdata-разделы
Поместите каждую функцию или элемент данных в отдельный раздел в выходном файле, если цель
поддерживает произвольные разделы. Имя функции или имя элемента данных
определяет имя раздела в выходном файле.

Используйте эти параметры в системах, где компоновщик может выполнять оптимизацию для улучшения
место ссылки в пространстве инструкций. Большинство систем, использующих объект ELF
format и процессоры SPARC под управлением Solaris 2 имеют компоновщики с такой оптимизацией.
В AIX могут быть эти оптимизации в будущем.

Используйте эти параметры только тогда, когда это дает значительную выгоду. Когда ты
укажите эти параметры, ассемблер и компоновщик создадут более крупный объект и
исполняемые файлы, а также будет медленнее. Вы не сможете использовать gprof на всех
систем, если вы укажете эту опцию, и у вас могут возникнуть проблемы с отладкой, если вы
укажите как этот параметр, так и -g.

-fbranch-target-load-оптимизировать
Выполните оптимизацию загрузки целевого регистра ветвления перед потоковой передачей пролога / эпилога.
Использование целевых регистров обычно может быть раскрыто только во время перезагрузки, таким образом поднимая
загружается вне циклов, и выполнение межблочного планирования требует отдельной оптимизации
проходить.

-fbranch-target-load-optimize2
Выполните оптимизацию загрузки целевого регистра ветвления после распараллеливания пролога / эпилога.

-fbtr-bb-эксклюзивный
При выполнении оптимизации загрузки целевого регистра ветвления не используйте повторно цель ветвления.
регистрируется в любом базовом блоке.

-fstack-протектор
Выпустить дополнительный код для проверки переполнения буфера, например атак с разбиением стека. Этот
выполняется путем добавления охранной переменной к функциям с уязвимыми объектами. Этот
включает функции, которые вызывают alloca, и функции с буферами размером более 8 байтов.
Ограждения инициализируются при вводе функции, а затем проверяются, когда
функция завершается. Если проверка не удалась, печатается сообщение об ошибке и программа
выходы.

ПРИМЕЧАНИЕ. В Ubuntu 6.10 и более поздних версиях этот параметр включен по умолчанию для C, C ++,
ObjC, ObjC ++, если ни один из -fno-стек-протектор, -nostdlib, ни -Отдельные Он
найдено.

-fstack-протектор-все
Подобно -fstack-протектор за исключением того, что все функции защищены.

-секция-анкеры
Постарайтесь уменьшить количество вычислений символьных адресов, используя общий "якорь"
символы для обозначения близлежащих объектов. Это преобразование может помочь уменьшить количество
записей GOT и доступов GOT для некоторых целей.

Например, реализация следующей функции «foo»:

статические int a, b, c;
int foo (void) {вернуть + b + c; }

обычно вычисляет адреса всех трех переменных, но если вы его скомпилируете
-секция-анкеры, он будет обращаться к переменным из общей точки привязки
вместо. Эффект аналогичен следующему псевдокоду (который недействителен C):

int foo (недействительно)
{
зарегистрировать int * xr = & x;
return xr [& a - & x] + xr [& b - & x] + xr [& c - & x];
}

Не все цели поддерживают этот вариант.

--парам имя=ценностное
В некоторых местах GCC использует различные константы для управления степенью оптимизации, которая
сделано. Например, GCC не будет встраивать функции, содержащие более определенного
количество инструкций. Вы можете управлять некоторыми из этих констант в командной строке.
используя --парам опцию.

Имена конкретных параметров и значения значений привязаны к
внутренности компилятора и могут быть изменены без предварительного уведомления в будущем.
релизы.

В каждом случае ценностное целое число. Допустимые варианты для имя даны в
следующая таблица:

предсказуемая ветвь-исход
Когда прогнозируется переход к переходу с вероятностью ниже этого порога
(в процентах), то считается вполне предсказуемым. По умолчанию 10.

max-crossjump-края
Максимальное количество входящих ребер, учитываемых при перекрестном прыжке. Алгоритм
используется -fcrossjumping равно O (N ^ 2) по количеству ребер, входящих в каждый блок.
Увеличение значений означает более агрессивную оптимизацию, сокращая время компиляции
увеличится, вероятно, с небольшим улучшением размера исполняемого файла.

min-crossjump-insns
Минимальное количество инструкций, которые должны быть сопоставлены в конце двух блоков
перед тем, как на них будет выполняться кроссджампинг. Это значение игнорируется в случае
где сопоставляются все инструкции в блоке, из которого выполняется перекрестный переход. В
значение по умолчанию - 5.

макс-рост-копия-BB-insns
Максимальный коэффициент увеличения размера кода при копировании базовых блоков вместо
прыжки. Расширение относится к инструкции перехода. Значение по умолчанию -
8.

max-goto-дупликация-insns
Максимальное количество инструкций для дублирования в блок, который переходит к
вычисленный goto. Чтобы избежать поведения O (N ^ 2) за несколько проходов, GCC факторы
вычисляет gotos на ранних этапах процесса компиляции и восстанавливает их до
возможный. Только рассчитанные прыжки в конце базового блока с не более чем макс.
goto-duplication-insns не подвергаются сектору. Значение по умолчанию - 8.

Макс-задержка-слот-insn-поиск
Максимальное количество инструкций, которые следует учитывать при поиске инструкции для
заполните слот задержки. Если больше, чем это произвольное количество инструкций
поиске, экономия времени от заполнения слота задержки будет минимальной, поэтому остановитесь
поиск. Увеличение значений означает более агрессивную оптимизацию, в результате чего
увеличение времени компиляции с, вероятно, небольшим улучшением времени выполнения.

Макс-задержка-слот-живой-поиск
При попытке заполнить слоты задержки максимальное количество инструкций, которые следует учитывать
при поиске блока с действительной информацией живого регистра. Увеличение этого
произвольно выбранное значение означает более агрессивную оптимизацию, увеличивая
время компиляции. Этот параметр следует удалить, если установлен код слота задержки.
переписан для поддержки графа потока управления.

макс-gcse-память
Примерный максимальный объем памяти, который будет выделен для
выполнить глобальную оптимизацию исключения общих подвыражений. Если больше памяти
чем указано, оптимизация выполняться не будет.

макс-коэффициент вставки gcse
Если соотношение вставок и удалений выражений больше, чем это значение для
любое выражение, тогда RTL PRE вставит или удалит выражение и, таким образом, оставит
частично избыточные вычисления в потоке команд. Значение по умолчанию -
20.

максимальная длина ожидающего списка
Планирование максимального количества ожидающих зависимостей позволит перед сбросом
текущее состояние и начиная с начала. Большие функции с несколькими ответвлениями или вызовами
может создавать слишком большие списки, которые без нужды потребляют память и ресурсы.

макс-по модулю-попыток возврата
Максимальное количество попыток возврата, которое планировщик должен сделать по модулю
планирование цикла. Большие значения могут экспоненциально увеличить время компиляции.

макс-встроенный-insns-одиночный
Несколько параметров управляют инлайнером дерева, используемым в gcc. Это число устанавливает
максимальное количество инструкций (подсчитанных во внутреннем представлении GCC) в
единственная функция, которую инлайнер дерева будет рассматривать для встраивания. Только это
влияет на функции, объявленные встроенными, и методы, реализованные в объявлении класса
(C ++). Значение по умолчанию - 400.

макс-встроенный-insns-авто
Когда вы используете весы для поддона -finline-функции (включен в -O3), множество функций, которые
в противном случае не будет рассматриваться для встраивания компилятором. К
эти функции, другой (более строгий) предел по сравнению с функциями
заявленный встроенный может быть применен. Значение по умолчанию - 40.

большие функции-insns
Предел, указывающий на действительно большие функции. Для функций, превышающих этот предел
после встраивания встраивание ограничивается --парам рост с большими функциями. Это
Параметр полезен в первую очередь, чтобы избежать чрезмерного времени компиляции, вызванного не-
линейные алгоритмы, используемые серверной частью. Значение по умолчанию - 2700.

рост с большими функциями
Задает максимальный рост большой функции за счет встраивания в процентах. В
значение по умолчанию - 100, что ограничивает рост большой функции до 2.0 раз по сравнению с исходным
размер.

большие блоки
Предел, указывающий на большую единицу перевода. Рост, вызванный встраиванием юнитов
больше, чем этот предел ограничен --парам встроенный-юнит-рост. Для небольших подразделений
это может быть слишком плотно (рассмотрим модуль, состоящий из встроенной функции A и
B, который просто звонит A три раза. Если B мало относительно A, рост единицы
составляет 300 \%, и все же такое встраивание очень разумно. Для очень больших агрегатов, состоящих из
небольшие встроенные функции, однако общий предел роста единицы необходим для
избежать экспоненциального увеличения размера кода. Таким образом, для меньших единиц размер составляет
увеличилась до --парам большие блоки перед применением --парам встроенный-юнит-рост.
По умолчанию 10000.

встроенный-юнит-рост
Задает максимальный общий рост единицы компиляции, вызванный встраиванием. В
значение по умолчанию - 30, что ограничивает рост единицы в 1.3 раза от исходного размера.

ipcp-unit-рост
Задает максимальный общий рост единицы компиляции, вызванный межпроцедурным
постоянное распространение. Значение по умолчанию - 10, что ограничивает рост единицы до 1.1.
раз больше исходного размера.

крупногабаритная рама
Предел, определяющий фреймы большого стека. При встраивании алгоритм пытается
чтобы не перерасти этот предел слишком сильно. Значение по умолчанию - 256 байт.

рост кадра большого стека
Задает максимальный рост фреймов большого стека за счет встраивания в процентах.
Значение по умолчанию - 1000, что ограничивает рост кадра большого стека до 11 раз больше
первоначальный размер.

макс-встроенный-insns-рекурсивный
Макс-встроенный-insns-рекурсивный-авто
Определяет максимальное количество инструкций вне строки копии саморекурсивной встроенной
функция может перерасти в рекурсивное встраивание.

Для функций, объявленных встроенными --парам макс-встроенный-insns-рекурсивный принимается в
учетная запись. Для функции, не объявленной встроенной, рекурсивное встраивание происходит только тогда, когда
-finline-функции (включен в -O3) включен и --парам макс-встроенный-insns-
рекурсивно-авто используется. Значение по умолчанию - 450.

макс-строчная рекурсивная глубина
макс-встроенный-рекурсивный-глубина-авто
Задает максимальную глубину рекурсии, используемую рекурсивным встраиванием.

Для функций, объявленных встроенными --парам макс-строчная рекурсивная глубина принимается в
учетная запись. Для функции, не объявленной встроенной, рекурсивное встраивание происходит только тогда, когда
-finline-функции (включен в -O3) включен и --парам макс-встроенный-рекурсивный-
глубина авто используется. Значение по умолчанию - 8.

минимальная встроенная рекурсивная вероятность
Рекурсивное встраивание выгодно только для функции, имеющей глубокую рекурсию в
среднее значение и может повредить функции, имеющей небольшую глубину рекурсии, из-за увеличения
размер пролога или сложность тела функции для других оптимизаторов.

Когда доступен отзыв профиля (см. -fprofile-генерировать) фактическая рекурсия
глубину можно угадать по вероятности того, что функция будет рекурсивно проходить через данный вызов
выражение. Этот параметр ограничивает встраивание только вызовом выражения, чье
вероятность превышает заданный порог (в процентах). Значение по умолчанию - 10.

раннее встраивание-insns
Укажите рост, который может дать ранний вкладыш. Фактически это увеличивает количество
встраивание кода с большим штрафом за абстракцию. Значение по умолчанию - 10.

max-Early-inliner-итераций
max-Early-inliner-итераций
Предел итераций раннего инлайнера. Это в основном ограничивает количество вложенных
косвенные вызовы могут разрешиться на раннем этапе встраивания. Более глубокие цепи все еще обрабатываются поздно
встраивание.

comdat-sharing-вероятность
comdat-sharing-вероятность
Вероятность (в процентах) того, что встроенная функция C ++ с видимостью comdat будет
совместно используется несколькими единицами компиляции. Значение по умолчанию - 20.

min-vect-loop-привязанный
Минимальное количество итераций, при которых цикл не будет векторизован, когда
-ftree-векторизация используется. Количество итераций после векторизации должно
быть больше значения, указанного в этом параметре, чтобы разрешить векторизацию. В
значение по умолчанию - 0.

gcse-стоимость-расстояние-соотношение
Коэффициент масштабирования при вычислении максимального расстояния, на которое выражение может быть перемещено
Оптимизация GCSE. В настоящее время это поддерживается только в проходе подъема кода.
Чем больше коэффициент, тем более агрессивным будет подъем кода с помощью простых
выражения, т. е. выражения, стоимость которых меньше, чем gcse-неограниченный-
стоят. Указание 0 отключит подъем простых выражений. По умолчанию
значение 10.

gcse-неограниченная-стоимость
Стоимость, примерно измеряемая как стоимость одной типичной машинной инструкции, при
какие оптимизации GCSE не будут ограничивать расстояние, которое может пройти выражение.
В настоящее время это поддерживается только в проходе подъема кода. Чем меньше стоимость,
тем более агрессивным будет подъем кода. Если указать 0, все
выражения для путешествий на неограниченные расстояния. Значение по умолчанию - 3.

максимальная глубина подъема
Глубина поиска в дереве доминаторов выражений, которые нужно поднять. Это используется
чтобы избежать квадратичного поведения в алгоритме подъема. Значение 0 позволит избежать
ограничивает поиск, но может замедлить компиляцию огромных функций. По умолчанию
значение 30.

макс-хвост-слияние-сравнения
Максимальное количество похожих BB для сравнения. Это используется, чтобы избежать
квадратичное поведение при слиянии хвостов дерева. Значение по умолчанию - 10.

макс-хвост-слияние-итераций
Максимальное количество итераций прохождения функции. Это используется для
ограничить время компиляции при слиянии хвостов дерева. Значение по умолчанию - 2.

Макс-развернутый-insns
Максимальное количество инструкций, которое должен иметь цикл, если этот цикл
развернутый, и если цикл развернут, он определяет, сколько раз код цикла
развернута.

Макс-средний-развернутый-insns
Максимальное количество инструкций, зависящих от вероятностей их выполнения, которые
цикл должен иметь, если этот цикл развернут, и если цикл развернут, он
определяет, сколько раз разворачивается код цикла.

максимальное время разворачивания
Максимальное количество разверток одной петли.

Макс-Пилед-Иннс
Максимальное количество инструкций, которое должен иметь цикл, если этот цикл очищен,
и если цикл очищен, он определяет, сколько раз очищается код цикла.

максимальное время отслаивания
Максимальное количество отслоений одной петли.

макс-полностью очищенные-insns
Максимальное количество петель полностью очищенной петли.

максимальное время полного отслаивания
Максимальное количество итераций цикла, подходящее для полной очистки.

макс-полностью-отслоить-петлю-глубину гнезда
Максимальная глубина петлевого гнезда, подходящая для полного отслаивания.

макс-unswitch-insns
Максимальное количество insns некоммутируемого шлейфа.

максимальный уровень отключения
Максимальное количество неотключаемых ветвей в одном шлейфе.

Лим-дорогой
Минимальная стоимость дорогостоящего выражения в цикле инвариантного движения.

iv-рассмотреть-всех-кандидатов-связанных
Ограничено числом кандидатов в индукционные переменные ниже, чем у всех кандидатов
рассматриваются для каждого использования в оптимизации индукционных переменных. Только самые
соответствующие кандидаты рассматриваются, если есть больше кандидатов, чтобы избежать
квадратичная временная сложность.

iv-max-рассмотренное использование
Оптимизация индукционной переменной отказывается от циклов, которые содержат больше индукции.
переменная использует.

iv-всегда-обрезка-канд-сет-связанный
Если количество кандидатов в наборе меньше этого значения, мы всегда стараемся
удалить ненужные iv из набора во время его оптимизации при добавлении нового iv
к набору.

Scev-max-expr-size
Ограничен размером выражений, используемых в анализаторе скалярных эволюций. Большой
выражения замедляют анализатор.

scev-max-expr-сложность
Ограничено сложностью выражений в анализаторе скалярных эволюций.
Сложные выражения замедляют анализатор.

омега-макс-варс
Максимальное количество переменных в системе ограничений Omega. Значение по умолчанию
это 128.

омега-макс-geqs
Максимальное количество неравенств в системе ограничений Omega. По умолчанию
значение 256.

омега-макс-экв
Максимальное количество равенств в системе ограничений Omega. Значение по умолчанию
это 128.

omega-max-wild-карты
Максимальное количество переменных с подстановочными знаками, которые решатель Omega сможет
вставлять. Значение по умолчанию - 18.

размер омега-хеш-таблицы
Размер хеш-таблицы в решателе Omega. Значение по умолчанию - 550.

омега-макс-ключи
Максимальное количество ключей, используемых решателем Omega. Значение по умолчанию - 500.

омега-исключить-избыточные-ограничения
Если установлено значение 1, используйте дорогие методы для устранения всех избыточных ограничений. В
значение по умолчанию - 0.

vect-max-версия-для-проверки-выравнивания
Максимальное количество проверок времени выполнения, которое может быть выполнено при выполнении цикла
версионирование для выравнивания в векторизаторе. См. Вариант ftree-vect-loop-version
чтобы получить больше информации.

vect-max-версия-для-проверки-псевдонима
Максимальное количество проверок времени выполнения, которое может быть выполнено при выполнении цикла
версионирование псевдонима в векторизаторе. Смотрите опцию ftree-vect-loop-version для
больше информации.

максимальное количество итераций на отслеживание
Максимальное количество итераций цикла алгоритма перебора для анализа
of # итераций цикла пытается оценить.

hot-bb-count-фракция
Выберите долю от максимального количества повторений базового блока в программе.
данный базовый блок должен считаться горячим.

hot-bb-частота-фракция
Выберите долю входного блока частоты выполнения базового блока в
функция, заданная базовым блоком, должна считаться горячей.

макс-предсказанные-итерации
Максимальное количество итераций цикла, которое мы прогнозируем статически. Это полезно в
случаи, когда функция содержит один цикл с известной границей и другой цикл с
неизвестный. Мы правильно предсказываем известное количество итераций, а неизвестное
количество итераций в среднем составляет примерно 10. Это означает, что цикл без
границы будут казаться искусственно холодными по сравнению с другими.

выровнять порог
Выберите долю от максимальной частоты выполнения базового блока в функции
данный базовый блок будет выровнен.

выровнять итерации цикла
Ожидается, что цикл будет повторяться, пока выбранное количество итераций не получит
выровнен.

трассировщик-динамическое-покрытие
трассировщик-динамическое-покрытие-обратная связь
Это значение используется для ограничения формирования суперблока после достижения заданного процента
выполняемые инструкции покрываются. Это ограничивает ненужное увеличение размера кода.

Ассоциация трассировщик-динамическое-покрытие-обратная связь используется только тогда, когда обратная связь профиля
доступный. Реальные профили (в отличие от статически оцененных) намного
менее сбалансирован, допускает большее значение порога.

трейсер-макс-рост кода
Остановите дублирование хвоста, как только рост кода достигнет заданного процента. Это
довольно банальный аргумент, так как большинство дубликатов будет устранено позже перекрестным
скачком, поэтому его можно установить на гораздо более высокие значения, чем желаемый рост кода.

трассировщик-мин-ветвь-коэффициент
Остановить обратный рост, когда обратная вероятность лучшего преимущества меньше этой
порог (в процентах).

трассировщик-мин-ветвь-коэффициент
трассировщик-мин-ветвь-отношение-обратная связь
Остановите форвардный рост, если у лучшего преимущества вероятность ниже, чем эта.
порог.

Аналогично трассировщик-динамическое-покрытие присутствуют два значения, одно для компиляции
для отзывов профиля и один для компиляции без. Значение для компиляции
с отзывами профиля должны быть более консервативными (выше), чтобы
трассировщик эффективен.

макс-cse-длина пути
Максимальное количество базовых блоков на пути, которое учитывает cse. По умолчанию - 10.

макс-cse-insns
Максимум инструкции CSE обработать перед промывкой. По умолчанию 1000.

ggc-мин-расширить
GCC использует сборщик мусора для управления выделением собственной памяти. Этот параметр
указывает минимальный процент, на который должна быть установлена ​​куча сборщика мусора.
разрешено расширяться между коллекциями. Настройка этого может улучшить скорость компиляции;
это не влияет на генерацию кода.

По умолчанию 30% + 70% * (RAM / 1GB) с верхней границей 100%, когда RAM> = 1GB.
Если доступен "getrlimit", понятие "RAM" является наименьшим из фактических RAM и
«RLIMIT_DATA» или «RLIMIT_AS». Если GCC не может рассчитать ОЗУ на конкретном
платформа, используется нижняя граница 30%. Установка этого параметра и ggc-мин-
кучу к нулю приводит к полному сбору данных при каждой возможности. Это
очень медленно, но может быть полезно для отладки.

ggc-мин-куча
Минимальный размер кучи сборщика мусора до того, как он начнет собирать
мусор. Первый сбор происходит после того, как куча расширяется на ggc-мин-расширить%
За ggc-мин-куча. Опять же, настройка может улучшить скорость компиляции и
не влияет на генерацию кода.

По умолчанию используется меньшее из RAM / 8, RLIMIT_RSS или ограничение, которое пытается гарантировать
что RLIMIT_DATA или RLIMIT_AS не превышаются, но с нижней границей 4096
(четыре мегабайта) и верхняя граница 131072 (128 мегабайт). Если GCC не может
для расчета ОЗУ на конкретной платформе используется нижняя граница. Установка этого
параметр очень большой эффективно отключает сборку мусора. Установка этого
параметр и ggc-мин-расширить к нулю приводит к тому, что полный сбор происходит каждый
возможность.

максимальная перезагрузка-поиск-insns
Максимальное количество перезагрузок инструкций должно смотреть назад в поисках эквивалента.
регистр. Увеличение значений означает более агрессивную оптимизацию, в результате чего
время компиляции увеличивается, возможно, немного лучше. По умолчанию
значение 100.

Макс-cselib-места-памяти
Cselib должен учитывать максимальное количество ячеек памяти.
Увеличение значений означает более агрессивную оптимизацию, сокращая время компиляции
увеличится с, вероятно, немного лучшей производительностью. Значение по умолчанию - 500.

переупорядочить блоки-дубликаты
переупорядочить-блоки-дубликат-обратная связь
Используется проходом переупорядочения базового блока, чтобы решить, использовать ли безусловный переход
или продублируйте код в месте назначения. Код дублируется при его оценке
размер меньше, чем это значение, умноженное на предполагаемый размер безусловного
прыгать в горячие точки программы.

Ассоциация переупорядочить блок-дубликат-обратная связь используется только тогда, когда обратная связь профиля
доступны и могут быть установлены на более высокие значения, чем переупорядочить-блок-дубликат с
информация о горячих точках более точна.

максимальное расписание-ready-insns
Максимальное количество инструкций, готовых к выдаче планировщику.
рассмотреть в любой момент времени во время первого прохода планирования. Возрастающие ценности
означают более тщательный поиск, увеличивая время компиляции, вероятно,
мало пользы. Значение по умолчанию - 100.

максимальное расписание-регион-блоков
Максимальное количество блоков в регионе, которое будет считаться межблочным.
планирование. Значение по умолчанию - 10.

макс-конвейер-регион-блоков
Максимальное количество блоков в регионе, которые будут рассматриваться для конвейерной обработки в
селективный планировщик. Значение по умолчанию - 15.

макс-sched-регион-insns
Максимальное количество insns в регионе, которое будет считаться межблочным.
планирование. Значение по умолчанию - 100.

макс-конвейер-регион-insns
Максимальное количество insns в регионе, которое будет рассматриваться для конвейерной передачи в
селективный планировщик. Значение по умолчанию - 200.

минимальная спецификация-проб
Минимальная вероятность (в процентах) попадания в исходный блок для межблока
спекулятивное планирование. Значение по умолчанию - 40.

max-sched-extension-регионы-итеры
Максимальное количество итераций через CFG для расширения регионов. 0 - отключить
региональное расширение, N - сделать не более N итераций. Значение по умолчанию - 0.

max-sched-insn-конфликт-задержка
Максимальная задержка конфликта для insn, рассматриваемого как спекулятивное движение.
Значение по умолчанию - 3.

план-спецификация-вероятность отсечки
Минимальная вероятность успеха спекуляции (в процентах), так что спекулятивная
insn будет запланировано. Значение по умолчанию - 40.

sched-mem-true-dep-стоимость
Минимальное расстояние (в циклах ЦП) между хранилищем и загрузкой, ориентированное на одну и ту же память
локации. Значение по умолчанию - 1.

selsched-max-просмотр
Максимальный размер окна просмотра выборочного планирования. Это глубина
поиска доступных инструкций. Значение по умолчанию - 50.

selsched-max-sched-раз
Максимальное количество раз, когда инструкция будет запланирована во время выборочного
планирование. Это ограничение на количество итераций, через которые
инструкция может быть конвейерной. Значение по умолчанию - 2.

selsched-max-insns-to-rename
Максимальное количество лучших инструкций в готовом списке, которые рассматриваются для
переименование в селективном планировщике. Значение по умолчанию - 2.

смс-мин-ск
Минимальное значение количества этапов, которое будет генерировать планировщик по модулю качания. В
значение по умолчанию - 2.

макс-последнее-значение-RTL
Максимальный размер, измеряемый как количество RTL, которые могут быть записаны в выражении.
в сумматоре псевдорегистратора как последнее известное значение этого регистра. В
по умолчанию - 10000.

целочисленный предел доли
Маленькие целочисленные константы могут использовать общую структуру данных, уменьшая компилятор
использование памяти и увеличение ее скорости. Это устанавливает максимальное значение общего
целочисленная константа. Значение по умолчанию - 256.

минимальные виртуальные сопоставления
Задает минимальное количество виртуальных сопоставлений в инкрементальном средстве обновления SSA.
который должен быть зарегистрирован для запуска эвристики виртуальных сопоставлений, определяемой
соотношение виртуальных отображений. Значение по умолчанию - 100.

соотношение виртуальных отображений
Если количество виртуальных сопоставлений больше, чем количество виртуальных сопоставлений
виртуальных символов, которые нужно обновить, то инкрементное средство обновления SSA переключается на
полное обновление для этих символов. По умолчанию коэффициент равен 3.

размер буфера ssp
Минимальный размер буферов (т.е. массивов), которые будут подвергаться разбиению стека.
защита, когда -fstack-защита используется.

Это значение по умолчанию до Ubuntu 10.10 было «8». В настоящее время это «4», чтобы увеличить
количество функций, защищенных стековым протектором.

Макс-скачок-поток-дублирование-stmts
Максимальное количество операторов, разрешенных в блоке, которое необходимо дублировать, когда
резьба скачки.

max-fields-for-field-чувствительны
Максимальное количество полей в структуре, которые мы будем обрабатывать с учетом поля
во время анализа указателя. Значение по умолчанию - ноль для -O0 и -O1 и 100 для -Os,
-O2 и -O3.

задержка предварительной выборки
Оценить среднее количество инструкций, которые выполняются до предварительной выборки.
отделка. Расстояние, которое мы предварительно выбираем, пропорционально этой константе.
Увеличение этого числа также может привести к уменьшению количества предварительно загружаемых потоков (см.
одновременная предварительная выборка).

одновременная предварительная выборка
Максимальное количество предварительных выборок, которые могут выполняться одновременно.

l1-размер строки-кэша
Размер строки кэша в кэше L1 в байтах.

l1-размер кэша
Размер кеша L1 в килобайтах.

l2-размер кэша
Размер кеша L2 в килобайтах.

минимальное соотношение insn к предварительной выборке
Минимальное соотношение между количеством инструкций и количеством предварительной выборки
чтобы включить предварительную выборку в цикле.

соотношение предварительной выборки-min-insn к памяти
Минимальное соотношение между количеством инструкций и количеством памяти
ссылки для включения предварительной выборки в цикле.

использовать-канонические-типы
Должен ли компилятор использовать "каноническую" систему типов. По умолчанию это
всегда должен быть 1, что позволяет использовать более эффективный внутренний механизм сравнения
типы в C ++ и Objective-C ++. Однако, если ошибки в канонической системе типов
вызывая сбои компиляции, установите для этого значения 0, чтобы отключить канонические типы.

переключатель-преобразование-максимальное-соотношение ветвей
Преобразование инициализации переключателя откажется создавать массивы, размер которых превышает
переключатель-преобразование-максимальное-соотношение ветвей умноженное на количество ветвей в коммутаторе.

макс-частичная-античная длина
Максимальная длина частичного античного набора, вычисленная во время частичного дерева
оптимизация устранения избыточности (-free-pre) при оптимизации на -O3 и выше.
Для некоторых типов исходного кода улучшенное устранение частичной избыточности
оптимизация может исчезнуть, потребляя всю доступную на хосте память
машина. Этот параметр устанавливает ограничение на длину вычисляемых наборов,
что предотвращает неконтролируемое поведение. Установка значения 0 для этого параметра приведет к
разрешить неограниченную длину набора.

sccvn-max-scc-размер
Максимальный размер сильно связанного компонента (SCC) во время обработки SCCVN. Если
этот предел достигнут, обработка SCCVN для всей функции не будет выполняться и
оптимизации в зависимости от этого будут отключены. Максимальный размер SCC по умолчанию:
10000.

Ира-макс-петель-число
IRA по умолчанию использует региональное распределение регистров. Если функция содержит больше
циклов, чем число, заданное этим параметром, только не более заданного числа
наиболее часто выполняемые петли образуют регионы для размещения региональных регистров.
Значение параметра по умолчанию - 100.

Ира-макс-конфликт-размер таблицы
Хотя IRA использует сложный алгоритм для сжатия таблицы конфликтов,
table по-прежнему может потребовать чрезмерного количества памяти для огромных функций. Если
таблица конфликтов для функции может быть больше, чем размер в МБ, заданный этим
параметр, распределитель регистров вместо этого использует более быстрый, простой и
качественный алгоритм, не требующий построения таблицы конфликтов псевдорегистраторов.
Значение параметра по умолчанию - 2000.

Ира-петля-зарезервированные-регс
IRA можно использовать для более точной оценки давления в контурах для принятия решений
для перемещения инвариантов цикла (см. -O3). Количество доступных регистров, зарезервированных для
некоторые другие цели задаются этим параметром. Значение по умолчанию
параметр равен 2, что является минимальным количеством регистров, необходимых для типичного
инструкции. Это значение лучше всего получено в результате многочисленных экспериментов.

цикл-инвариант-макс-BBS-в-цикле
Инвариантное движение петли может быть очень дорогостоящим, как во время компиляции, так и в
объем необходимой памяти времени компиляции с очень большими циклами. Петли с большим количеством
базовые блоки, чем этот параметр, не будут иметь оптимизацию движения инвариантного цикла
исполняется на них. Значение параметра по умолчанию - 1000 для -O1 и 10000.
для -O2 и выше.

цикл-макс-datarefs-for-datadeps
Создание резервов данных для очень больших циклов обходится дорого. Этот параметр
ограничивает количество ссылок на данные в циклах, которые рассматриваются для данных
анализ зависимости. Эти большие петли не будут обрабатываться
оптимизации с использованием зависимостей данных цикла. Значение по умолчанию - 1000.

максимальный размер vartrack
Устанавливает максимальное количество слотов хеш-таблицы для использования во время потока данных отслеживания переменных
анализ любой функции. Если этот предел превышен с отслеживанием переменных на
присвоения включены, анализ для этой функции повторяется без этого, после
удаление всех отладочных insns из функции. Если лимит превышен даже без
debug insns, для функции полностью отключен анализ отслеживания var.
Установка параметра в ноль делает его неограниченным.

макс-vartrack-expr-depth
Устанавливает максимальное количество уровней рекурсии при попытке сопоставить имена переменных или
отлаживать временные выражения для значений выражений. Это меняет время компиляции на больше
полная отладочная информация. Если установлено слишком низкое значение, выражения значений, которые
доступны и могут быть представлены в отладочной информации, могут в конечном итоге не использоваться;
установка этого более высокого значения может позволить компилятору найти более сложную отладку
выражений, но время компиляции и использование памяти могут возрасти. По умолчанию - 12.

мин-неотладка-insn-uid
Используйте идентификаторы uid, начинающиеся с этого параметра, для nondebug insns. Диапазон ниже
параметр зарезервирован исключительно для отладки insns, созданного
-fvar-отслеживания-присваивания, но отладочные insns могут получить (неперекрывающиеся) uid, указанные выше
это, если зарезервированный диапазон исчерпан.

ipa-sra-ptr-фактор роста
IPA-SRA заменит указатель на агрегат одним или несколькими новыми параметрами.
только когда их совокупный размер меньше или равен ipa-sra-ptr-фактор роста
умноженный на размер исходного параметра указателя.

tm-max-aggregate-размер
При создании копий локальных переменных потока в транзакции этот параметр
указывает размер в байтах, после которого переменные будут сохранены с журналированием
функции в отличие от сохранения / восстановления пар кодовых последовательностей. Только этот вариант
применяется при использовании -fgnu-тм.

графит-макс-нб-объем-параметры
Чтобы избежать экспоненциальных эффектов в преобразованиях графитового цикла, количество
параметры в части статического управления (SCoP) ограничены. Значение по умолчанию - 10.
параметры. Переменная, значение которой неизвестно во время компиляции и определено
вне SCoP - это параметр SCoP.

графит-макс-bbs-на функцию
Чтобы избежать экспоненциальных эффектов при обнаружении SCoP, размер функций
анализируемый Graphite ограничен. Значение по умолчанию - 100 базовых блоков.

петля-блок-размер плитки
Преобразования в блокировке петель или добыче полезных ископаемых, включенные с помощью -floop-блок or
-фуп-стрип-мина, разделите каждую петлю в гнезде петли на заданное количество
итераций. Длину полосы можно изменить с помощью петля-блок-размер плитки
параметр. Значение по умолчанию - 51 итерация.

ipa-cp-значение-список-размер
IPA-CP пытается отслеживать все возможные значения и типы, передаваемые функции
параметр, чтобы распространить их и выполнить девиртуализацию. ipa-cp-значение-
размер списка - максимальное количество значений и типов, которые он хранит на один формальный
параметр функции.

lto-разделы
Укажите желаемое количество разделов, создаваемых во время компиляции WHOPR. В
количество разделов должно превышать количество процессоров, используемых для компиляции. В
значение по умолчанию - 32.

lto-minpartition
Размер минимального раздела для WHOPR (в ориентировочной инструкции). Это предотвращает
расходы на разбиение очень маленьких программ на слишком много разделов.

cxx-max-namespaces-для-диагностики-справки
Максимальное количество пространств имен, к которым следует обращаться для получения предложений при поиске имени C ++
не работает для идентификатора. По умолчанию 1000.

порог частоты понижения
Максимальная относительная частота выполнения (в процентах) целевого блока
относительно исходного блока инструкции, чтобы разрешить опускание инструкции
утверждение. Большие числа приводят к более агрессивному опусканию заявления. В
значение по умолчанию - 75. Небольшая положительная корректировка применяется для операторов с
операнды памяти, так как они даже более выгодны, так что тонут.

макс. запасы до раковины
Максимальное количество пар условных хранилищ, которые могут быть потоплены. Установите 0, если
либо векторизация (-ftree-векторизация) или если-преобразование (-ftree-loop-если-преобразовать)
выключен. По умолчанию - 2.

разрешить загрузки данных гонки
Разрешите оптимизаторам вводить новые гонки данных при загрузке. Установите 1, чтобы разрешить,
в противном случае - 0. Этот параметр включен по умолчанию, если неявно установлен
-fmemory-model = опцию.

разрешить-хранить-данные-гонки
Разрешите оптимизаторам вводить новые гонки данных в магазинах. Установите 1, чтобы разрешить,
в противном случае - 0. Этот параметр включен по умолчанию, если неявно установлен
-fmemory-model = опцию.

разрешить-упакованные-загрузки-данные-гонки
Разрешите оптимизаторам вводить новые гонки данных при загрузке упакованных данных. Установите от 1 до
разрешить, в противном случае - 0. Этот параметр включен по умолчанию, если не установлен явно
домен -fmemory-model = опцию.

разрешить упакованные данные-гонки
Разрешите оптимизаторам вводить новые гонки данных в хранилищах упакованных данных. Установите от 1 до
разрешить, в противном случае - 0. Этот параметр включен по умолчанию, если не установлен явно
домен -fmemory-model = опцию.

регистр-значения-порог
Наименьшее количество различных значений, для которых лучше всего использовать таблицу переходов
вместо дерева условных ветвей. Если значение равно 0, используйте значение по умолчанию для
машина. По умолчанию - 0.

дерево-reassoc-ширина
Установите максимальное количество инструкций, выполняемых параллельно в повторно ассоциированном дереве.
Этот параметр переопределяет эвристику, зависящую от цели, используемую по умолчанию, если нет
нулевое значение.

Опции Управление домен препроцессор
Эти параметры управляют препроцессором C, который запускается для каждого исходного файла C перед фактическим выполнением.
сборник.

Если вы используете -E вариант, кроме предварительной обработки ничего не делается. Некоторые из этих вариантов
имеет смысл только вместе с -E потому что они заставляют вывод препроцессора быть
не подходит для реальной компиляции.

-Вп,вариант
Вы можете использовать -Вп,вариант обойти драйвер компилятора и передать вариант прямо через
препроцессору. Если вариант содержит запятые, он разделен на несколько вариантов в
запятые. Однако многие параметры изменяются, переводятся или интерпретируются
драйвер компилятора перед передачей препроцессору, и -Вп насильственно обходит
этот этап. Прямой интерфейс препроцессора недокументирован и подлежит
изменить, поэтому, когда это возможно, вам следует избегать использования -Вп и позвольте водителю справиться с
варианты вместо этого.

-Xпрепроцессор вариант
Проходить вариант как вариант препроцессору. Вы можете использовать это для снабжения системы-
конкретные параметры препроцессора, которые GCC не знает, как распознать.

Если вы хотите передать параметр, который принимает аргумент, вы должны использовать -Xпрепроцессор
дважды, один раз для варианта и один раз для аргумента.

-D имя
Предопределить имя как макрос с определением 1.

-D имя=определение
Содержание определение токенизируются и обрабатываются так, как если бы они появились во время
перевод третий этап в #define директива. В частности, определение будет
усекается встроенными символами новой строки.

Если вы вызываете препроцессор из оболочки или программы, подобной оболочке, вам может потребоваться
использовать синтаксис кавычек оболочки для защиты символов, таких как пробелы, которые имеют
значение в синтаксисе оболочки.

Если вы хотите определить макрос в командной строке, напишите его аргумент
список с окружающими круглыми скобками перед знаком равенства (если есть). Круглые скобки
имеет смысл для большинства оболочек, поэтому вам нужно будет указать эту опцию в кавычках. С участием sh и CSH,
-D 'имя(аргументы ...)=определение' работ.

-D и -U параметры обрабатываются в том порядке, в котором они указаны в командной строке. Все
-имакрос файл и -включают файл варианты обрабатываются все-таки -D и -U настройки.

-U имя
Отменить любое предыдущее определение имя, либо встроенные, либо снабженные -D опцию.

-undef
Не задавайте заранее какие-либо системные или специфичные для GCC макросы. Стандартный предопределенный
макросы остаются определенными.

-I директория
Добавить каталог директория в список каталогов для поиска файлов заголовков.
Каталоги, названные -I поиск выполняется до того, как стандартная система включает каталоги.
Если каталог директория стандартный системный каталог include, параметр игнорируется, чтобы
убедитесь, что порядок поиска по умолчанию для системных каталогов и особая обработка
системных заголовков не побеждены. Если директория начинается с "=", тогда "=" будет
заменен префиксом sysroot; видеть --sroot и -isysroot.

-o файл
Записать вывод в файл. Это то же самое, что указать файл как второй вариант
аргумент CPP. GCC имеет другое толкование второго аргумента, не являющегося опционом,
так что вы должны использовать -o чтобы указать выходной файл.

-Стена
Включает все необязательные предупреждения, которые желательны для обычного кода. В настоящее время это
is -Wкомментарий, -Писания, -Wмультисимвол и предупреждение о целочисленной рекламе, вызывающей
изменение знака в выражениях "#if". Обратите внимание, что многие предупреждения препроцессора
включены по умолчанию и не имеют возможности управлять ими.

-Wкомментарий
-Комментарии
Предупреждать всякий раз, когда начинается последовательность комментариев /* появляется в /* комментарий, или всякий раз, когда
обратная косая черта-новая строка появляется в // комментарий. (Обе формы имеют одинаковый эффект.)

-Писания
Большинство триграфов в комментариях не могут повлиять на смысл программы. Однако
триграф, который сформировал бы экранированный символ новой строки (?? / в конце строки) может,
изменение места начала или конца комментария. Следовательно, только триграфы, образующие
экранированные символы новой строки вызывают предупреждения внутри комментария.

Этот вариант подразумевается -Стена. Если -Стена не указан, этот параметр все еще включен
если не включены триграфы. Чтобы получить преобразование триграфа без предупреждений, но получить
другие -Стена предупреждения, используйте -триграфы -Стена -Wno-триграфы.

-Wтрадиционный
Предупреждать об определенных конструкциях, которые ведут себя по-разному в традиционном и ISO C. Также
предупреждать о конструкциях ISO C, у которых нет традиционного эквивалента C, и о проблемных
конструкции, которых следует избегать.

-Вундеф
Предупреждать всякий раз, когда идентификатор, не являющийся макросом, встречается в #если Директива,
пределами определенный. Такие идентификаторы заменяются нулем.

-Wunused-макросы
Предупреждать о неиспользуемых макросах, определенных в основном файле. Макрос используемый если это
расширен или протестирован на наличие хотя бы один раз. Препроцессор также предупредит, если
макрос не использовался во время переопределения или неопределенности.

Встроенные макросы, макросы, определенные в командной строке, и макросы, определенные в include
файлы не предупреждаются.

Примечание: Если макрос действительно используется, но используется только в пропущенных условных блоках, тогда
CPP сообщит, что он не использовался. Чтобы избежать предупреждения в таком случае, вы можете улучшить
область определения макроса, например, перемещая его в первое пропущенное
блокировать. В качестве альтернативы вы можете предоставить фиктивное использование с чем-то вроде:

#if определено the_macro_causing_the_warning
#endif

-Wendif-лейблы
Предупреждать всякий раз, когда #еще или #endif следуют текст. Обычно это происходит в
код формы

#если фу
...
#else ФУ
...
#endif ФУ

Второй и третий «FOO» должны быть в комментариях, но их часто нет в старых программах.
Это предупреждение включено по умолчанию.

-Ошибка
Превратите все предупреждения в серьезные ошибки. Исходный код, вызывающий предупреждения, будет
отвергнуто.

-Wsystem-заголовки
Выдавать предупреждения для кода в системных заголовках. Обычно они бесполезны при поиске
ошибки в вашем собственном коде, поэтому подавляются. Если вы отвечаете за систему
библиотеки, возможно, вы захотите их увидеть.

-w Подавить все предупреждения, включая те, которые выдает GNU CPP по умолчанию.

-педантический
Выполните все обязательные диагностики, перечисленные в стандарте C. Некоторые из них остались
по умолчанию, поскольку они часто срабатывают для безобидного кода.

-педантические-ошибки
Проведите всю обязательную диагностику и превратите всю обязательную диагностику в ошибки.
Это включает в себя обязательную диагностику, которую GCC выдает без -педантический но относится как
предупреждения.

-M Вместо вывода результата предварительной обработки выведите правило, подходящее для сделать
описание зависимостей основного исходного файла. Препроцессор выдает один
сделать правило, содержащее имя объектного файла для этого исходного файла, двоеточие и имена
всех включенных файлов, в том числе из -включают or -имакрос команду
параметры линии.

Если не указано явно (с -MT or -MQ) имя объектного файла состоит из
имя исходного файла с любым суффиксом, замененным суффиксом объектного файла и любым
ведущие части каталога удалены. Если есть много включенных файлов, то правило
разделить на несколько строк, используя \-новая линия. В правиле нет команд.

Эта опция не подавляет отладочные данные препроцессора, такие как -дМ. Избежать
смешивая такой вывод отладки с правилами зависимости, вы должны явно указать
выходной файл зависимости с или используйте переменную среды, например
ЗАВИСИМОСТИ_OUTPUT. Выходные данные отладки будут по-прежнему отправляться в обычный выходной поток как
Normal.

Прохождение -M водителю подразумевает -E, и подавляет предупреждения с неявным -w.

-MM Подобно -M но не упоминайте файлы заголовков, которые находятся в каталогах системных заголовков,
ни файлы заголовков, которые прямо или косвенно включены из такого заголовка.

Это означает, что выбор угловых скобок или двойных кавычек в #включают
директива сама по себе не определяет, появится ли этот заголовок в -MM
вывод зависимости. Это небольшое изменение семантики по сравнению с версиями GCC 3.0 и
ранее.

файл
При использовании с -M or -MM, указывает файл для записи зависимостей. Если нет
switch препроцессор отправляет правила в то же место, куда он отправил бы
предварительно обработанный вывод.

При использовании с опциями драйвера -MD or -ММД, отменяет зависимость по умолчанию
выходной файл.

-МГ В сочетании с такой опцией, как -M запрос генерации зависимости, -МГ предполагает,
отсутствующие файлы заголовков являются сгенерированными файлами и добавляют их в список зависимостей без
поднимая ошибку. Имя файла зависимости берется непосредственно из "#include"
директива без добавления пути. -МГ также подавляет предварительно обработанный вывод, так как
отсутствие файла заголовка делает это бесполезным.

Эта функция используется при автоматическом обновлении make-файлов.

-МП Эта опция указывает CPP добавить фальшивую цель для каждой зависимости, кроме
main файл, в результате чего каждый ни от чего не зависит. Эти фиктивные правила позволяют обходить ошибки
сделать дает, если вы удалите файлы заголовков без обновления Makefile чтобы соответствовать.

Это типичный вывод:

test.o: test.c test.h

тест.ч:

-MT цель
Измените цель правила, созданного при генерации зависимости. По умолчанию CPP принимает
имя основного входного файла, удаляет все компоненты каталога и любой суффикс файла
как .c, и добавляет обычный суффикс объекта платформы. Результат - цель.

An -MT option установит в качестве цели именно ту строку, которую вы указали. Если хочешь
несколько целей, вы можете указать их как один аргумент для -MT, или используйте несколько
-MT настройки.

Например, -MT '$ (objpfx) foo.o' может дать

$ (objpfx) foo.o: foo.c

-MQ цель
Такой же как -MT, но он цитирует любые символы, которые являются специальными для Make.
-MQ '$ (objpfx) foo.o' дает

$$ (objpfx) foo.o: foo.c

Цель по умолчанию автоматически цитируется, как если бы она была задана с помощью -MQ.

-MD -MD эквивалентна -M файл, Кроме этого -E не подразумевается. Водитель
определяет файл в зависимости от того, есть ли -o предоставляется вариант. Если это так, драйвер использует свой
аргумент, но с суффиксом .d, в противном случае он принимает имя входного файла,
удаляет все компоненты каталога и суффикс и применяет .d суффикс.

If -MD используется в сочетании с -E, любой -o переключатель понимается, чтобы указать
выходной файл зависимостей, но если он используется без -Eкаждый -o понимается как указать
целевой объектный файл.

С -E не подразумевается, -MD может использоваться для создания выходного файла зависимости как
побочный эффект процесса компиляции.

-ММД
Подобно -MD за исключением упоминания только файлов заголовков пользователей, а не файлов системных заголовков.

-fpch-депс
При использовании предварительно скомпилированных заголовков этот флаг приведет к тому, что флаги вывода зависимости будут
также перечислите файлы из зависимостей предварительно скомпилированного заголовка. Если не указано только
будет указан предварительно скомпилированный заголовок, а не файлы, которые использовались для его создания
потому что эти файлы не используются при использовании предварительно скомпилированного заголовка.

-fpch-предварительный процесс
Эта опция позволяет использовать предварительно скомпилированный заголовок вместе с -E. Он вставляет специальный
"#pragma", "#pragma GCC pch_preprocess"имя файла"" на выходе отметить место
где был найден предварительно скомпилированный заголовок, и его имя файла. Когда -fпредварительно обработанный В
использования, GCC распознает этот "#pragma" и загружает PCH.

По умолчанию этот параметр отключен, так как конечный предварительно обработанный вывод - это только
действительно подходит в качестве входных данных для GCC. Включается -сохранение темпов.

Вы не должны писать эту "#pragma" в своем собственном коде, но вы можете безопасно редактировать
имя файла, если файл PCH доступен в другом месте. Имя файла может быть
абсолютный или может относиться к текущему каталогу GCC.

-x c
-x C ++
-x Objective-C
-x ассемблер-с-cpp
Укажите исходный язык: C, C ++, Objective-C или ассемблер. Это не имеет ничего общего
с соответствием или расширениями стандартов; он просто выбирает, какой базовый синтаксис
ожидать. Если вы не укажете ни один из этих параметров, cpp определит язык из
расширение исходного файла: .c, .cc, .mили .S. Некоторые другие распространенные расширения для
Также распознаются C ++ и сборка. Если cpp не распознает расширение, он
будет рассматривать файл как C; это самый общий режим.

Примечание: Предыдущие версии cpp принимали -ланг вариант, который выбрал как
язык и уровень соответствия стандартам. Эта опция была удалена, потому что
это противоречит -l опцию.

-std =стандарт
-анси
Укажите стандарт, которому должен соответствовать код. В настоящее время CPP знает о C
и стандарты C ++; другие могут быть добавлены в будущем.

стандарт может быть одним из:

"c90"
"c89"
"iso9899: 1990"
Стандарт ISO C с 1990 года. c90 обычное сокращение для этой версии
стандарт.

Ассоциация -анси вариант эквивалентен -std = C90.

"iso9899: 199409"
Стандарт C 1990 г. с поправками 1994 г.

"iso9899: 1999"
"c99"
"iso9899: 199x"
"c9x"
Пересмотренный стандарт ISO C, опубликованный в декабре 1999 г. Перед публикацией этот
был известен как C9X.

"iso9899: 2011"
"c11"
"c1x"
Пересмотренный стандарт ISO C, опубликованный в декабре 2011 г. Перед публикацией этот
был известен как C1X.

"gnu90"
"gnu89"
Стандарт C 1990 года плюс расширения GNU. Это значение по умолчанию.

"gnu99"
"gnu9x"
Стандарт C 1999 года плюс расширения GNU.

"gnu11"
"gnu1x"
Стандарт C 2011 года плюс расширения GNU.

"c ++ 98"
Стандарт ISO C ++ 1998 года с поправками.

"GNU ++ 98"
Такой же как -std = c ++ 98 плюс расширения GNU. Это значение по умолчанию для кода C ++.

-Я- Разделите включаемый путь. Любые каталоги, указанные с помощью -I варианты до -Я- Он
искал только заголовки, запрошенные с "#include"файл""; их не ищут
"#включаютфайл> ". Если дополнительные каталоги указаны с -I варианты после
-Я-, в этих каталогах выполняется поиск всех #включают директивы.

Кроме того, -Я- запрещает использование каталога текущего файлового каталога как
первый каталог поиска для "#include"файл"". Эта опция устарела.

-ностдинк
Не ищите файлы заголовков в стандартных системных каталогах. Только каталоги
вы указали с -I опции (и каталог текущего файла, если
соответствующие) ищутся.

-nostdinc ++
Не ищите файлы заголовков в стандартных каталогах C ++, но все же выполняйте поиск.
поиск в других стандартных каталогах. (Эта опция используется при сборке C ++
библиотека.)

-включают файл
Обработка файл как если бы "#include" файл "" появился как первая строка первичного источника
файл. Однако первый каталог искал файл препроцессор работает
каталог вместо of каталог, содержащий основной исходный файл. Если не найден
там он ищется в оставшейся части поисковой цепочки "#include" ... "" как
Normal.

Если несколько -включают приведены параметры, файлы включаются в том порядке, в котором они
появляются в командной строке.

-имакрос файл
В точности как -включают, за исключением того, что любой результат сканирования файл брошен
прочь. Макросы, которые он определяет, остаются определенными. Это позволяет получить все макросы
из заголовка без обработки его объявлений.

Все файлы, указанные -имакрос обрабатываются до того, как все файлы, указанные в -включают.

-идирафтер директория
Поиск директория для файлов заголовков, но сделайте это после все каталоги, указанные с помощью -I и
стандартные системные каталоги исчерпаны. директория рассматривается как система, включающая
каталог. Если директория начинается с "=", затем "=" будет заменен системным корнем
приставка; видеть --sroot и -isysroot.

-iпрефикс префикс
Указывать префикс в качестве префикса для последующих -iс префиксом параметры. Если приставка
представляет каталог, вы должны включить последний /.

-iс префиксом директория
-iwithprefixbefore директория
присоединять директория к префиксу, указанному ранее с -iпрефикс, и добавляем полученный
каталог в путь поиска включения. -iwithprefixbefore кладет в то же место -I
бы; -iс префиксом кладет это где -идирафтер бы.

-isysroot директория
Этот вариант похож на --sroot вариант, но применяется только к файлам заголовков (кроме
Darwin, где он применяется как к файлам заголовков, так и к библиотекам). Увидеть
--sroot вариант для получения дополнительной информации.

-имультилиб директория
Используйте директория в качестве подкаталога каталога, содержащего заголовки C ++ для конкретных целей.

-система директория
Поиск директория для файлов заголовков после всех каталогов, указанных -I но до
стандартные системные каталоги. Отметьте его как системный каталог, чтобы он был таким же
специальный режим, применяемый к стандартным системным каталогам. Если директория начинается
с "=", тогда "=" будет заменен префиксом sysroot; видеть --sroot и
-isysroot.

-я цитирую директория
Поиск директория только для файлов заголовков, запрошенных с "#include"файл""; они не
искал "#includeфайл> ", перед всеми каталогами, указанными -I и перед
стандартные системные каталоги. Если директория начинается с "=", затем "=" заменяется на
префикс sysroot; видеть --sroot и -isysroot.

-fdirectives-только
При предварительной обработке обрабатывайте директивы, но не расширяйте макросы.

Поведение опции зависит от -E и -fпредварительно обработанный настройки.

Доступно -E, предварительная обработка ограничивается обработкой таких директив, как "#define",
«#ifdef» и «#error». Другие операции препроцессора, такие как расширение макроса и
преобразование триграфа не выполняется. В дополнение -дД опция неявно
включен.

Доступно -fпредварительно обработанный, предопределение командной строки и большинства встроенных макросов
отключен. Обрабатываются такие макросы, как «__LINE__», которые зависят от контекста.
как обычно. Это позволяет компилировать файлы, предварительно обработанные с помощью "-E".
-fdirectives-only ".

С обоими -E и -fпредварительно обработанный, правила для -fпредварительно обработанный имеют приоритет. Этот
включает полную предварительную обработку файлов, предварительно обработанных с помощью "-E"
-fdirectives-only ".

-fdollars-в-идентификаторах
Принять $ в идентификаторах.

-fextended-идентификаторы
Принимайте универсальные символьные имена в идентификаторах. Это экспериментальный вариант; в
в будущей версии GCC он будет включен по умолчанию для C99 и C ++.

-fпредварительно обработанный
Сообщите препроцессору, что входной файл уже был предварительно обработан. Этот
подавляет такие вещи, как расширение макроса, преобразование триграфа, экранирование сращивания новой строки,
и обработка большинства директив. Препроцессор по-прежнему распознает и удаляет
комментарии, чтобы вы могли передать файл, предварительно обработанный с помощью -C компилятору без
проблемы. В этом режиме интегрированный препроцессор - это не что иное, как токенизатор.
для передних концов.

-fпредварительно обработанный неявно, если входной файл имеет одно из расширений .i, .ii or .mi.
Это расширения, которые GCC использует для предварительно обработанных файлов, созданных -сохранение темпов.

-ftabstop =ширина
Установите расстояние между позициями табуляции. Это помогает препроцессору сообщить правильный столбец.
числа в предупреждениях или ошибках, даже если в строке появляются табуляции. Если значение меньше
чем 1 или больше 100, опция игнорируется. По умолчанию - 8.

-fdebug-cpp
Эта опция полезна только для отладки GCC. При использовании с -E, выводит отладку
информация о картах расположения. Каждому токену на выходе предшествует дамп
карта, к которой принадлежит его местоположение. Дамп карты с местонахождением токена
было бы:

{"ПФ ; "F": F ; "L": ; "C": ; "S": ; "М": ; "E": , "loc": }

При использовании без -E, этот параметр не действует.

-ftrack-macro-extension[=уровень]
Отслеживайте расположение токенов в расширениях макросов. Это позволяет компилятору выдавать
диагностика текущего стека расширения макроса при возникновении ошибки компиляции в
расширение макроса. Использование этой опции заставляет препроцессор и компилятор потреблять
больше памяти. В уровень параметр может использоваться для выбора уровня точности токена
отслеживание местоположения, что при необходимости снижает потребление памяти. Ценить 0 of
уровень отключает эту опцию, как если бы нет -ftrack-macro-extension присутствовал на
командная строка. Ценить 1 отслеживает расположение токенов в деградированном режиме ради
минимальные накладные расходы на память. В этом режиме все жетоны, полученные в результате расширения
аргумент функционально-подобного макроса находится в том же месте. Ценить 2 отслеживает токены
локации полностью. Это значение больше всего требует памяти. Когда предоставляется этот вариант
без аргумента, значение параметра по умолчанию 2.

-fexec-charset =кодировок
Установите набор символов выполнения, используемый для строковых и символьных констант. По умолчанию
это UTF-8. кодировок может быть любой кодировкой, поддерживаемой системной библиотекой "iconv"
рутина.

-fwide-exec-charset =кодировок
Установите широкий набор символов выполнения, используемый для широких строковых и символьных констант.
По умолчанию используется UTF-32 или UTF-16, в зависимости от того, что соответствует ширине wchar_t. В качестве
-fexec-кодировка, кодировок может быть любой кодировкой, поддерживаемой системным "iconv"
библиотечная рутина; однако у вас будут проблемы с кодировками, которые не подходят
именно в "wchar_t".

-finput-charset =кодировок
Установите набор символов ввода, используемый для перевода из набора символов ввода
в исходный набор символов, используемый GCC. Если языковой стандарт не указан, либо GCC
не может получить эту информацию из локали, по умолчанию используется UTF-8. Это может быть
переопределено либо локалью, либо этой опцией командной строки. В настоящее время команда
опция line имеет приоритет в случае конфликта. кодировок может быть любая кодировка
поддерживается подпрограммой библиотеки "iconv" системы.

-рабочий-каталог
Включите генерацию линейных маркеров в выводе препроцессора, что позволит компилятору
знать текущий рабочий каталог во время предварительной обработки. Когда эта опция
включен, препроцессор будет выдавать после начального линейного маркера второй линейный маркер.
с текущим рабочим каталогом с двумя косыми чертами. GCC будет использовать это
каталог, когда он присутствует в предварительно обработанных входных данных, поскольку каталог создается как
текущий рабочий каталог в некоторых форматах отладочной информации. Этот вариант
неявно включен, если включена отладочная информация, но это можно запретить с помощью
отрицательная форма -fno-рабочий-каталог, Если -P флаг присутствует в команде
line, эта опция не действует, так как никакие директивы "#line" не испускаются вообще.

-fno-show-столбец
Не печатайте номера столбцов в диагностике. Это может быть необходимо, если диагностика
сканирование программой, которая не понимает номера столбцов, например
Дежагну.

-A сказуемое=ответ
Сделайте утверждение с предикатом сказуемое и ответ ответ. Эта форма
предпочтительнее более старой формы -A сказуемое(ответ), который все еще поддерживается, потому что он
не использует специальные символы оболочки.

-A -сказуемое=ответ
Отменить утверждение с предикатом сказуемое и ответ ответ.

-dCHARS
СИМВОЛЫ представляет собой последовательность из одного или нескольких следующих символов и не может быть
предшествует пробел. Остальные символы интерпретируются компилятором, или
зарезервировано для будущих версий GCC и поэтому игнорируется. Если вы укажете
персонажи, поведение которых противоречит, результат не определен.

M Вместо обычного вывода сгенерируйте список #define директивы для всех
макросы, определенные во время выполнения препроцессора, включая предопределенные
макросы. Это дает вам возможность узнать, что предопределено в вашей версии
препроцессор. Предполагая, что у вас нет файла фу.ч, команда

прикоснитесь к foo.h; cpp -dM foo.h

покажет все предопределенные макросы.

Если вы используете -дМ без -E вариант, -дМ интерпретируется как синоним
-fdump-rtl-mach.

D Подобно M за исключением двух аспектов: это делает не включить предопределенные макросы, и
выходы изоферменты печени домен #define директивы и результат предварительной обработки. Оба вида
вывода идут в стандартный выходной файл.

N Подобно D, но выдают только имена макросов, а не их расширения.

I Результат #включают директивы в дополнение к результату предварительной обработки.

U Подобно D за исключением того, что только макросы, которые раскрываются или чья определенность проверяется
в директивах препроцессора выводятся; вывод задерживается до использования или
тест макроса; а также #ундеф директивы также выводятся для протестированных макросов, но
не определено в то время.

-P Запретить создание линейных маркеров на выходе препроцессора. Это может быть
полезно при запуске препроцессора на чем-то, что не является кодом C, и будет отправлено
программе, которая может быть сбита с толку маркерами линий.

-C Не отбрасывайте комментарии. Все комментарии передаются в выходной файл, кроме
для комментариев в обработанных директивах, которые удаляются вместе с директивой.

Будьте готовы к побочным эффектам при использовании -C; это заставляет препроцессор
рассматривать комментарии как самостоятельные токены. Например, комментарии, появляющиеся в
начало того, что было бы строкой директивы, привело бы к превращению этой строки в
обычная исходная строка, так как первый токен в строке больше не является #.

-CC Не отбрасывайте комментарии, в том числе при раскрытии макроса. Это похоже на -C, Кроме
что комментарии, содержащиеся в макросах, также передаются в выходной файл, где
макрос расширен.

Помимо побочных эффектов -C вариант, -CC опция вызывает все C ++ - стиль
комментарии внутри макроса, которые будут преобразованы в комментарии в стиле C. Это сделано для предотвращения в будущем
использование этого макроса из-за непреднамеренного комментирования оставшейся части исходной строки.

Ассоциация -CC опция обычно используется для поддержки комментариев lint.

-традиционный-cpp
Попробуйте имитировать поведение устаревших препроцессоров C, в отличие от ISO C
препроцессоры.

-триграфы
Обработка последовательностей триграфов. Это трехсимвольные последовательности, начинающиеся с
??, которые определены ISO C для обозначения одиночных символов. Например, ?? / стоит
для \, так '?? / n' - символьная константа для новой строки. По умолчанию GCC игнорирует
триграфы, но в стандартных режимах он их преобразует. Увидеть -стандарт и -анси
настройки.

Девять триграфов и их замены:

Триграф: ?? (??) ?? <??> ?? = ?? / ?? ' ??! ?? -
Замена: [] {} # \ ^ | ~

-переназначить
Включите специальный код для работы с файловыми системами, которые разрешают только очень короткие файлы
имена, такие как MS-DOS.

--Помогите
--target-помощь
Напечатайте текст, описывающий все параметры командной строки, вместо предварительной обработки чего-либо.

-v Подробный режим. Распечатайте номер версии GNU CPP в начале выполнения и
сообщить окончательную форму пути включения.

-H Выведите имя каждого используемого файла заголовка в дополнение к другим обычным действиям. Каждый
имя выделено, чтобы показать, насколько глубоко #включают стек это есть. Предварительно скомпилированный заголовок
файлы также распечатываются, даже если они признаны недействительными; недействительный предварительно скомпилированный
заголовочный файл печатается с ...Икс и действительный с ! ... .

-версия
--версия
Распечатайте номер версии GNU CPP. С одним тире переходите к предварительной обработке как обычно.
С двумя дефисами немедленно выйти.

Прохождение Опции в домен Ассемблер
Вы можете передать параметры ассемблеру.

-Ва,вариант
Проходить вариант как вариант ассемблеру. Если вариант содержит запятые, он разделен
на несколько вариантов через запятую.

-Xассемблер вариант
Проходить вариант как вариант ассемблеру. Вы можете использовать это для предоставления специфичных для системы
параметры ассемблера, которые GCC не знает, как распознать.

Если вы хотите передать параметр, который принимает аргумент, вы должны использовать -Xассемблер дважды,
один раз за вариант и один раз за аргумент.

Опции для Связывающий
Эти параметры вступают в игру, когда компилятор связывает объектные файлы с исполняемым файлом.
выходной файл. Они бессмысленны, если компилятор не выполняет шаг ссылки.

имя-файла-объекта
Имя файла, не оканчивающееся на специальный распознанный суффикс, считается именем файла.
объектный файл или библиотека. (Объектные файлы отличаются от библиотек компоновщиком
в соответствии с содержимым файла.) Если связывание выполнено, эти объектные файлы используются как
ввод в компоновщик.

-c
-S
-E Если используется какой-либо из этих параметров, компоновщик не запускается, а имена файлов объектов
не следует использовать в качестве аргументов.

-lбиблиотека
-l библиотека
Найдите библиотеку с именем библиотека при связывании. (Вторая альтернатива с
библиотека в качестве отдельного аргумента предназначена только для соответствия POSIX и не рекомендуется.)

Имеет значение, где в команде вы пишете эту опцию; компоновщик ищет
и обрабатывает библиотеки и объектные файлы в указанном порядке. Таким образом, фу.о
-лз бар.о поиск в библиотеке z после файла фу.о но прежде бар.о. Если бар.о относится к
функций в z, эти функции могут не быть загружены.

Компоновщик ищет библиотеку в стандартном списке каталогов, который на самом деле
файл с именем библиотека.а. Затем компоновщик использует этот файл, как если бы он был указан
именно по имени.

Поисковые каталоги включают несколько стандартных системных каталогов, а также все, что вы
указать с -L.

Обычно файлы, найденные таким образом, являются файлами библиотек --- архивными файлами, членами которых являются
объектные файлы. Компоновщик обрабатывает архивный файл, сканируя его на предмет участников.
которые определяют символы, которые до сих пор упоминались, но не были определены. Но если
Найденный файл является обычным объектным файлом, он связан обычным образом. В
единственная разница между использованием -l вариант и указание имени файла заключается в том, что -l
окружает библиотека Lib и .a и ищет в нескольких каталогах.

-lobjc
Вам нужен этот особый случай -l вариант, чтобы связать Objective-C или
Программа Objective-C ++.

-nostartfiles
При связывании не используйте стандартные файлы запуска системы. Стандартная система
библиотеки используются нормально, если только -nostdlib or -nodefaultlibs используется.

-nodefaultlibs
При компоновке не используйте стандартные системные библиотеки. Только указанные вами библиотеки
будут переданы компоновщику, параметры, определяющие привязку системных библиотек, например
как "-static-libgcc" или "-shared-libgcc", будут игнорироваться. Стандартные файлы запуска
используются нормально, если только -nostartfiles используется. Компилятор может генерировать вызовы
«memcmp», «memset», «memcpy» и «memmove». Эти записи обычно разрешаются
записи в libc. Эти точки входа должны быть предоставлены через какой-то другой механизм.
когда указана эта опция.

-nostdlib
При компоновке не используйте стандартные файлы или библиотеки запуска системы. Нет запуска
файлы и только указанные вами библиотеки будут переданы компоновщику, параметры
указание связывания системных библиотек, например "-static-libgcc" или
"-shared-libgcc" будет проигнорирован. Компилятор может генерировать вызовы «memcmp»,
«memset», «memcpy» и «memmove». Эти записи обычно разрешаются записями в
libc. Эти точки входа должны быть предоставлены через какой-либо другой механизм, когда это
опция указана.

Одна из стандартных библиотек, обошедшая -nostdlib и -nodefaultlibs is libgcc.a, чтобы
библиотека внутренних подпрограмм, которую GCC использует для преодоления недостатков отдельных
машины или специальные потребности для некоторых языков.

В большинстве случаев вам понадобится libgcc.a даже если вы хотите избежать использования других стандартных библиотек.
Другими словами, когда вы указываете -nostdlib or -nodefaultlibs ты должен обычно
указывать -lgcc также. Это гарантирует, что у вас нет неразрешенных ссылок на
подпрограммы внутренней библиотеки GCC. (Например, __главный, используется для обеспечения C ++
конструкторы будут называться.)

-пирог
Создайте независимый от позиции исполняемый файл для целей, которые его поддерживают. Для предсказуемой
результатов, вы также должны указать тот же набор параметров, который использовался для генерации кода
(-fpie, -fPIE, или подопции модели), когда вы указываете этот параметр.

-рдинамический
Передать флаг -экспорт-динамический к компоновщику ELF на целевых объектах, которые его поддерживают. Этот
указывает компоновщику добавить в динамический символ все символы, а не только используемые.
стол. Эта опция необходима для некоторых случаев использования "dlopen" или для получения
следы внутри программы.

-s Удалите из исполняемого файла всю таблицу символов и информацию о перемещении.

-статический
В системах, поддерживающих динамическое связывание, это предотвращает связывание с общим
библиотеки. В других системах этот параметр не действует.

-общий
Создайте общий объект, который затем можно связать с другими объектами, чтобы сформировать
исполняемый файл. Не все системы поддерживают эту опцию. Для предсказуемых результатов вы должны
также укажите тот же набор параметров, который использовался для генерации кода (-fpic, -fPICили
подопции модели), когда вы указываете эту опцию. [1]

-shared-libgcc
-статический-libgcc
В системах, которые обеспечивают libgcc как разделяемая библиотека, эти параметры заставляют использовать
либо общая, либо статическая версия соответственно. Если нет общей версии libgcc законопроект
созданные при настройке компилятора, эти параметры не действуют.

Есть несколько ситуаций, в которых приложение должно использовать общий libgcc
вместо статической версии. Самый распространенный из них - когда приложение
хочет генерировать и перехватывать исключения в разных разделяемых библиотеках. В этом случае,
каждая из библиотек, а также само приложение должны использовать общие libgcc.

Поэтому драйверы G ++ и GCJ автоматически добавляют -shared-libgcc всякий раз, когда вы строите
разделяемая библиотека или основной исполняемый файл, поскольку программы на C ++ и Java обычно используют
исключения, так что это правильный поступок.

Если вместо этого вы используете драйвер GCC для создания общих библиотек, вы можете обнаружить, что они
не всегда будет связан с общим libgcc. Если GCC найдет, в его конфигурации
время, когда у вас есть компоновщик, отличный от GNU, или компоновщик GNU, который не поддерживает опцию
--eh-frame-hdr, он свяжет общую версию libgcc в общие библиотеки
дефолт. В противном случае он воспользуется преимуществами компоновщика и оптимизирует
связь с общей версией libgcc, связываясь со статической версией libgcc
по умолчанию. Это позволяет исключениям распространяться через такие разделяемые библиотеки,
без затрат на перемещение во время загрузки библиотеки.

Однако, если предполагается, что библиотека или основной исполняемый файл генерирует или перехватывает исключения, вы
должен связать его с помощью драйвера G ++ или GCJ, в зависимости от языков, используемых в
программа, или используя опцию -shared-libgcc, так что он связан с общим
libgcc.

-статическая-libstdc ++
Когда г ++ программа используется для компоновки программы на C ++, обычно она автоматически
ссылка на libstdc ++. Если libstdc ++ доступен как общая библиотека, а
-статический не используется, тогда это будет ссылка на общую версию
libstdc ++. Обычно это нормально. Однако иногда бывает полезно заморозить
версии libstdc ++ используется программой, не переходя полностью в статический
ссылка. В -статическая-libstdc ++ вариант направляет г ++ драйвер для ссылки libstdc ++
статически, без обязательного статического связывания других библиотек.

-символический
При создании общего объекта привязывайте ссылки к глобальным символам. Предупреждать о любых
неразрешенные ссылки (если они не отменены опцией редактора ссылок -Xlinker -z
-Xlinker определение). Только несколько систем поддерживают эту опцию.

-T скрипт
Используйте скрипт как скрипт компоновщика. Этот вариант поддерживается большинством систем, использующих
Компоновщик GNU. Для некоторых целей, например для целей без операционной системы,
домен -T опция может потребоваться при связывании, чтобы избежать ссылок на неопределенные символы.

-Xlinker вариант
Проходить вариант как вариант для компоновщика. Вы можете использовать это для предоставления специфичных для системы
параметры компоновщика, которые GCC не распознает.

Если вы хотите передать параметр, который принимает отдельный аргумент, вы должны использовать -Xlinker
дважды, один раз для варианта и один раз для аргумента. Например, передать -утверждать
Определенияты должен написать -Xlinker -утверждать -Xlinker Определения. Это не работает
написать -Xlinker "-утверждать определения ", потому что это передает всю строку как
единственный аргумент, чего не ожидает компоновщик.

При использовании компоновщика GNU обычно удобнее передавать аргументы компоновщику
варианты с использованием вариант=ценностное синтаксис, чем отдельные аргументы. Например, вы
можно указать -Xlinker -Map = output.map , а не -Xlinker -Карта -Xlinker вывод.карта.
Другие компоновщики могут не поддерживать этот синтаксис для параметров командной строки.

-Вл,вариант
Проходить вариант как вариант для компоновщика. Если вариант содержит запятые, он разбит на
несколько вариантов в запятых. Вы можете использовать этот синтаксис для передачи аргумента в
вариант. Например, -Wl, -Map, output.map проходит -Карта вывод.карта компоновщику. Когда
используя компоновщик GNU, вы также можете получить тот же эффект с -Wl, -Map = output.map.

ПРИМЕЧАНИЕ. В Ubuntu 8.10 и более поздних версиях для LDFLAGS параметр -Wl, -z, relro используется.
Чтобы отключить, используйте -Wl, -z, норелро.

-u символ
Представьте себе символ символ не определено, чтобы связать модули библиотеки для определения
Это. Вы можете использовать -u несколько раз с разными символами для принудительной загрузки
дополнительные библиотечные модули.

Опции для Каталог Поиск
Эти параметры указывают каталоги для поиска файлов заголовков, библиотек и деталей.
компилятора:

-Iдиректория
Добавить каталог директория в начало списка каталогов для поиска по заголовку
файлы. Это можно использовать для переопределения файла системного заголовка, заменяя ваш собственный
версия, так как эти каталоги ищутся перед файлом заголовка системы
каталоги. Однако вы не должны использовать эту опцию для добавления каталогов, содержащих
файлы заголовков системы, предоставляемые поставщиком (используйте -система для этого). Если вы используете более одного
-I опция, каталоги просматриваются слева направо; стандартная система
каталоги идут после.

Если стандартная система включает каталог или каталог, указанный с помощью -система, Является
также указано с -I, -I опция будет проигнорирована. Каталог по-прежнему будет
ищется, но как системный каталог в его обычном положении в цепочке системных включений.
Это необходимо для того, чтобы процедура GCC по исправлению ошибочных системных заголовков и упорядочивания
для директивы include_next не были случайно изменены. Если тебе действительно нужно
измените порядок поиска для системных каталогов, используйте -ностдинк и / или -система
настройки.

-iplugindir =директория
Установите каталог для поиска плагинов, которые передаются через -fplugin =имя вместо
-fplugin =путь/имя.так. Этот параметр не предназначен для использования пользователем, а только
проехал водитель.

-я цитируюдиректория
Добавить каталог директория в начало списка каталогов для поиска по заголовку
файлы только для случая #включают "файл"; их не ищут #включают <файл>,
в остальном точно так же, как -I.

-Lдиректория
Добавить каталог директория в список каталогов для поиска -l.

-Bпрефикс
Этот параметр указывает, где найти исполняемые файлы, библиотеки, включаемые файлы и
файлы данных самого компилятора.

Программа драйвера компилятора запускает одну или несколько подпрограмм. CPP, cc1, as и ld.
Он пытается префикс в качестве префикса для каждой программы, которую он пытается запустить, как с, так и без
машина/версия/.

Для каждой запускаемой подпрограммы драйвер компилятора сначала пытается -B префикс, если есть.
Если это имя не найдено, или если -B не указывалось, драйвер пробует два стандартных
префиксы, / usr / lib / gcc / и / usr / местные / библиотека / gcc /. Если ни один из этих результатов не
имя найденного файла, неизмененное имя программы ищется с помощью
каталоги, указанные в вашем PATH переменная среды.

Компилятор проверит, не указан ли путь -B относится к каталогу,
и при необходимости он добавит символ разделителя каталогов в конце пути.

-B префиксы, которые эффективно определяют имена каталогов, также применяются к библиотекам в
компоновщик, потому что компилятор переводит эти параметры в -L параметры для компоновщика.
Они также применяются к включаемым файлам в препроцессоре, поскольку компилятор переводит
эти варианты в -система параметры препроцессора. В этом случае компилятор
добавляет включают к приставке.

Файл поддержки времени выполнения libgcc.a также можно искать, используя -B префикс, если
нужный. Если он там не найден, пробуются два стандартных префикса, указанные выше, и это
это все. Файл не попадает в ссылку, если он не найден с помощью этих средств.

Другой способ указать префикс, очень похожий на -B префикс - использовать среду
переменная GCC_EXEC_PREFIX.

Как особый кладж, если путь, предоставленный -B is [dir /] stageN /, Где N это число
в диапазоне от 0 до 9, то он будет заменен на [dir /] включить. Это поможет с
загрузку компилятора.

-specs =файл
Обработка файл после того, как компилятор прочитает в стандарте функции файл, чтобы переопределить
значения по умолчанию, которые GCC программа-драйвер использует при определении, какие переключатели передать
в cc1, cc1plus, as, ldи т. д. Более одного -specs =файл можно указать на
в командной строке, и они обрабатываются в порядке слева направо.

--sysroot =директория
Используйте директория как логический корневой каталог для заголовков и библиотек. Например, если
компилятор обычно ищет заголовки в / usr / include и библиотеки в / USR / Lib,
вместо этого он будет искать каталог / usr / include и каталог / usr / lib.

Если вы используете и эту опцию, и -isysroot вариант, затем --sroot вариант будет
применяются к библиотекам, но -isysroot опция будет применяться к файлам заголовков.

Компоновщик GNU (начиная с версии 2.16) имеет необходимую поддержку для этого.
вариант. Если ваш компоновщик не поддерживает эту опцию, аспект файла заголовка
--sroot по-прежнему будет работать, но аспект библиотеки - нет.

-Я- Эта опция устарела. Пожалуйста, используйте -я цитирую вместо этого для -I каталоги до
домен -Я- и удалите -Я-. Любые каталоги, которые вы укажете с помощью -I варианты до
-Я- вариант ищется только в случае #включают "файл"; их не обыскивают
для #включают <файл>.

Если дополнительные каталоги указаны с -I варианты после -Я-эти
каталоги ищутся по всем #включают директивы. (Обычно Найти -I каталоги
используются таким образом.)

Кроме того, -Я- опция запрещает использование текущего каталога (где
текущий входной файл был получен из) в качестве первого каталога поиска для #включают "файл".
Невозможно отменить этот эффект -Я-. С -I. вы можете указать поиск
каталог, который был текущим при вызове компилятора. Это не совсем то
то же, что и препроцессор по умолчанию, но часто бывает удовлетворительным.

-Я- не запрещает использование стандартных системных каталогов для файлов заголовков.
Таким образом, -Я- и -ностдинк независимы.

Указание цель Машина и составитель Версия
Обычный способ запустить GCC - запустить исполняемый файл с именем GCCили машина-gcc когда перекрестно
компиляция, или машина-gcc-версия запустить версию, отличную от той, которая была установлена
последний.

Аппаратные средства Модели и Конфигурации
У каждого целевого типа машины могут быть свои особые параметры, начиная с -m, выбирать
среди различных моделей или конфигураций оборудования - например, 68010 против 68020, плавающий
сопроцессор или нет. Одна установленная версия компилятора может компилироваться для любой модели.
или конфигурации, в соответствии с указанными опциями.

Некоторые конфигурации компилятора также поддерживают дополнительные специальные параметры, обычно для
совместимость с другими компиляторами на той же платформе.

Адаптева Богоявление Опции

Эти -m для Адаптева Богоявления определены варианты:

-mhalf-reg-файл
Не размещайте регистры в диапазоне «r32» ... «r63». Это позволяет коду работать на
варианты оборудования, в которых отсутствуют эти регистры.

-mprefer-короткие-insn-regs
Предпочтительно выделять регистры, которые позволяют генерировать короткие инструкции. Это может
приведет к увеличению количества инструкций, поэтому, если это уменьшает или увеличивает размер кода
может варьироваться от случая к случаю.

-mbranch-cost =Num
Установите стоимость веток примерно на Num "простые" инструкции. Эта стоимость всего лишь
эвристический и не гарантирует получение согласованных результатов для всех выпусков.

-mcmove
Включите генерацию условных ходов.

-mnops =Num
Испускают Num nops перед каждой другой сгенерированной инструкцией.

-mno-soft-cmpsf
Для сравнения с плавающей запятой одинарной точности испустите инструкцию fsub и проверьте
флаги. Это быстрее, чем сравнение программного обеспечения, но может получить неверные результаты в
наличие NaN, или когда сравниваются два разных небольших числа так, что их
разница рассчитывается как ноль. По умолчанию -msoft-cmpsf, который использует медленнее, но
Соответствие IEEE, сравнение программного обеспечения.

-mstack-offset =Num
Установите смещение между вершиной стека и указателем стека. Например, значение 8
означает, что восемь байтов в диапазоне sp + 0 ... sp + 7 могут использоваться листовыми функциями
без выделения стека. Значения, отличные от 8 or 16 непроверены и вряд ли
Работа. Также обратите внимание, что этот параметр изменяет ABI, компилируя программу с
другое смещение стека, чем было скомпилировано в библиотеках, обычно не
Работа. Эта опция может быть полезна, если вы хотите оценить, есть ли другое смещение стека.
даст вам лучший код, но на самом деле использовать другое смещение стека для создания
рабочих программ, рекомендуется настроить набор инструментов с соответствующими
--with-stack-offset =Num опцию.

-мно-круглый-ближайший
Сделайте так, чтобы планировщик предполагал, что для режима округления установлено усечение. В
по умолчанию -круг-ближайший.

-mlong-вызовы
Если иное не указано в атрибуте, предположим, что все вызовы могут выходить за пределы
диапазон смещения инструкций b / bl, и поэтому загрузите адрес функции в
зарегистрируйтесь перед выполнением (в противном случае прямого) вызова. Это значение по умолчанию.

-mshort-звонки
Если иное не указано в атрибуте, предположим, что все прямые вызовы находятся в диапазоне
инструкций b / bl, поэтому используйте эти инструкции для прямых вызовов. По умолчанию
is -mlong-вызовы.

-msmall16
Предположим, адреса могут быть загружены как 16-битные беззнаковые значения. Это не относится к
адреса функций, для которых -mlong-вызовы семантика.

-mfp-mode =Режим
Установите преобладающий режим единицы с плавающей запятой. Это определяет плавающий
точечный режим, который предоставляется и ожидается при вызове функции и времени возврата. Изготовление
этот режим соответствует режиму, который вам в основном нужен при запуске функции, может сделать ваш
программы меньше и быстрее, избегая ненужных переключений режимов.

Режим можно установить одно из следующих значений:

гость
Любой режим при вводе функции действителен и сохраняется или восстанавливается, когда функция
возвращается, и когда он вызывает другие функции. Этот режим полезен для компиляции
библиотеки или другие единицы компиляции, которые вы, возможно, захотите включить в различные
программы с различными преобладающими режимами FPU, а также удобство возможности
использование одного объектного файла перевешивает накладные расходы на размер и скорость для любого дополнительного режима
переключение, которое может потребоваться, по сравнению с тем, что потребовалось бы с более
конкретный выбор преобладающего режима FPU.

усекать
Это режим, используемый для вычислений с плавающей запятой с усечением (т. Е. Округление
в сторону нуля) режим округления. Это включает преобразование из числа с плавающей запятой в
целое число.

округлый
Это режим, используемый для вычислений с плавающей запятой с округлением до ближайшего или
даже режим округления.

Int Это режим, используемый для выполнения целочисленных вычислений в FPU, например, целочисленных
умножить или целочисленное умножение и накопление.

По умолчанию используется -mfp-mode = вызывающий

-мносплит-лохи
-мно-постинк
-mno-постмодифицировать
Твики генерации кода, отключающие, соответственно, разделение 32-битных загрузок,
генерация адресов после инкремента и генерация адресов после изменения. В
значения по умолчанию msplit-лохи, -mpost-incкачества -mpost-изменить.

-мновект-дабл
Измените предпочтительный режим SIMD на SImode. По умолчанию -mvect-двойной, Которая использует
DImode в качестве предпочтительного режима SIMD.

-max-vect-align =Num
Максимальное выравнивание для типов векторных режимов SIMD. Num может быть 4 или 8. По умолчанию
8. Обратите внимание, что это изменение ABI, хотя многие интерфейсы библиотечных функций будут
не будут затронуты, если они не используют векторные режимы SIMD в местах, где они влияют на размер
и / или согласование соответствующих типов.

-msplit-vecmove-рано
Перед перезагрузкой разделенный вектор перемещается на одно слово. Теоретически это могло дать
лучше распределение регистров, но пока что, как правило, имеет место обратное.

-m1reg-Редж
Укажите регистр для хранения константы -1, что делает загрузку небольшого отрицательного значения
константы и определенные битовые маски быстрее. Допустимые значения для reg: r43 и r63,
которые указывают использовать этот регистр как фиксированный регистр, и none, что означает, что нет
Регистр используется для этой цели. По умолчанию -m1reg-нет.

AAArch64 Опции

Эти параметры определены для реализаций AArch64:

-mbig-endian
Сгенерируйте код с прямым порядком байтов. Это значение по умолчанию, когда GCC настроен для
aarch64_be - * - * цель.

-mgeneral-regs-only
Сгенерируйте код, который использует только общие регистры.

-с младшим порядком байтов
Сгенерируйте код с прямым порядком байтов. Это значение по умолчанию, когда GCC настроен для
aarch64 - * - * но не aarch64_be - * - * цель.

-mcmodel = крошечный
Сгенерируйте код для крошечной модели кода. Программа и ее статически определенные символы
должны находиться в пределах 1 ГБ друг от друга. Указатели 64-битные. Программы могут быть статически
или динамически связаны. Эта модель реализована не полностью и в основном рассматривается как
"небольшой".

-mcmodel = маленький
Сгенерируйте код для небольшой модели кода. Программа и ее статически определенные
символы должны находиться в пределах 4 ГБ друг от друга. Указатели 64-битные. Программы могут быть
статически или динамически связаны. Это модель кода по умолчанию.

-mcmodel = большой
Сгенерируйте код для большой модели кода. Это не делает никаких предположений об адресах и
размеры секций. Указатели 64-битные. Программы могут быть связаны только статически.

-mstrict-выравнивание
Не предполагайте, что невыровненные ссылки на память будут обрабатываться системой.

-Momit-Leaf-Frame-указатель
-mno-опустить-лист-указатель-кадра
Пропускайте или сохраняйте указатель фрейма в листовых функциях. Первое поведение - это
по умолчанию.

-mtls-dialect = desc
Используйте дескрипторы TLS в качестве механизма хранения локального потока для динамического доступа к TLS
переменные. Это значение по умолчанию.

-mtls-dialect = традиционный
Используйте традиционный TLS в качестве механизма локального хранилища потока для динамического доступа к TLS.
переменные.

-март =имя
Укажите имя целевой архитектуры, необязательно с суффиксом одним или несколькими
модификаторы функций. Этот вариант имеет вид -март =арка{+[нет]которая}*, где
единственное значение для арка is armv8-а. Возможные значения для которая задокументированы в
подраздел ниже.

Если указаны конфликтующие модификаторы функций, используется самая правая функция.

GCC использует это имя, чтобы определить, какие инструкции он может выдавать при генерации
код сборки. Этот параметр можно использовать вместе с параметром -mcpu =
опцию.

-mcpu =имя
Укажите имя целевого процессора, необязательно с суффиксом одной или нескольких функций.
модификаторы. Этот вариант имеет вид -mcpu =процессор{+[нет]которая} *, где возможно
значения для процессор Он родовой, большой. Возможные значения для которая задокументированы в
подраздел ниже.

Если указаны конфликтующие модификаторы функций, используется самая правая функция.

GCC использует это имя, чтобы определить, какие инструкции он может выдавать при генерации
код сборки.

-mtune =имя
Укажите имя процессора, для которого нужно настроить производительность. Код будет настроен
как если бы целевой процессор был того типа, который указан в этой опции, но по-прежнему использует
инструкции, совместимые с целевым процессором, указанным -mcpu = вариант. Этот
Параметр не может быть дополнен суффиксом модификатора функции.

-маршировать и -MCPU модификаторы функций

Модификаторы функций, используемые с -маршировать и -MCPU может быть одним из следующих:

крипто-
Включите расширение Crypto. Это означает, что Advanced SIMD включен.

fp Включите инструкции с плавающей запятой.

Симд
Включите расширенные инструкции SIMD. Это означает, что инструкции с плавающей запятой
включено. Это значение по умолчанию для всех текущих возможных значений параметров. -маршировать и
-mcpu =.

ARM Опции

Эти -m параметры определены для архитектур Advanced RISC Machines (ARM):

-mabi =имя
Сгенерировать код для указанного ABI. Допустимые значения: БТР-ГНУ, АТПК, аапс,
AAPCS-Linux и iwmmxt.

-mapcs-рамка
Сгенерируйте кадр стека, соответствующий стандарту вызова процедур ARM для всех
функций, даже если это не является строго необходимым для правильного выполнения кода.
Указание -fomit-frame-pointer с этой опцией приведет к тому, что кадры стека не будут
сгенерирован для листовых функций. По умолчанию -мно-БТР-рама.

-карты
Это синоним -mapcs-рамка.

-mthumb-интерворк
Сгенерируйте код, поддерживающий вызов между наборами инструкций ARM и Thumb.
Без этой опции на архитектурах до v5 два набора инструкций не могут быть
надежно используется внутри одной программы. По умолчанию -mno-thumb-взаимодействие, так как немного
код большего размера создается, когда -mthumb-интерворк указан. В конфигурациях AAPCS
эта опция бессмысленна.

-mno-sched-пролог
Предотвратить изменение порядка инструкций в прологе функции или слияние
эти инструкции с инструкциями в теле функции. Это означает, что все
функции будут начинаться с узнаваемого набора инструкций (или фактически одной из
выбор из небольшого набора различных прологов функций), и эта информация может быть
используется для определения местоположения начала if-функций внутри исполняемого фрагмента кода. По умолчанию
is -msched-пролог.

-mfloat-abi =имя
Указывает, какой ABI с плавающей запятой использовать. Допустимые значения: легонько, софтфп и
жесткий.

Указание легонько заставляет GCC генерировать вывод, содержащий вызовы библиотеки для плавающих
точечные операции. софтфп позволяет генерировать код с использованием аппаратных средств с плавающей запятой
инструкции, но по-прежнему использует соглашения о вызовах soft-float. жесткий позволяет
генерация инструкций с плавающей запятой и использует соглашения о вызовах, специфичные для FPU.

Значение по умолчанию зависит от конкретной целевой конфигурации. Обратите внимание, что жесткое плавание
и ABI с плавным перемещением не совместимы по ссылкам; вы должны скомпилировать всю свою программу с
тот же ABI и линк с совместимым набором библиотек.

-с младшим порядком байтов
Сгенерируйте код для процессора, работающего в режиме прямого порядка байтов. Это значение по умолчанию для
все стандартные конфигурации.

-mbig-endian
Сгенерировать код для процессора, работающего в режиме прямого байта; по умолчанию компилируется
код для процессора с прямым порядком байтов.

-mwords-little-endian
Этот параметр применяется только при генерации кода для процессоров с прямым порядком байтов. Генерировать
код для порядка слов с прямым порядком байтов, но с прямым порядком байтов. То есть байт
порядок формы 32107654. Примечание: эту опцию следует использовать только в том случае, если вам требуется
совместимость с кодом для процессоров ARM с прямым порядком байтов, созданным версиями
компилятор до 2.8. Эта опция устарела.

-март =имя
Это определяет имя целевой архитектуры ARM. GCC использует это имя для
определить, какие инструкции он может выдавать при генерации ассемблерного кода. Этот
опция может использоваться вместе с или вместо -mcpu = вариант. Допустимый
имена: ARMv2, Armv2a, ARMv3, армв3м, ARMv4, Armv4t, ARMv5, Armv5t, Armv5e,
Armv5te, ARMv6, Armv6j, Armv6t2, Armv6z, Armv6zk, армв6-м, ARMv7, armv7-а, armv7-р,
армв7-м, armv7e-м, iwmmxt, iwmmxt2, ep9312.

-march = родной заставляет компилятор автоматически определять архитектуру сборки
компьютер. В настоящее время эта функция поддерживается только в Linux, и не во всех
архитектуры признаны. Если автоопределение не помогло, у опции нет
Эффект.

-mtune =имя
Этот параметр указывает имя целевого процессора ARM, для которого GCC должен настраиваться.
производительность кода. Для некоторых реализаций ARM лучшая производительность может быть
получается с помощью этой опции. Допустимые имена: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, рука7м, рука7д, рука7дм, Arm7di, Arm7dmi, arm70,
arm700, рука700i, arm710, рука710c, arm7100, arm720, arm7500, рука7500fe, Arm7tdmi,
Arm7tdmi-s, рука710т, рука720т, рука740т, сильная рука, сила110, сила1100,
сила1110, arm8, arm810, arm9, рука9е, arm920, рука920т, рука922т, рука946е-с,
рука966е-с, рука968е-с, рука926ej-s, рука940т, Arm9tdmi, Arm10tdmi, рука1020т, рука1026ej-s,
рука10е, рука1020е, рука1022е, рука1136j-s, рука1136jf-s, mpcore, mpcorenovfp, рука1156т2-с,
рука1156т2ф-с, рука1176jz-s, рука1176jzf-s, Кора-a5, Кора-a7, Кора-a8, Кора-a9,
Кора-a15, кора-r4, кора-r4f, кора-r5, Кора-m4, Кора-m3, Кора-m1,
Кора-m0, масштаб, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, фмп626,
fa726te.

-mtune = generic-арка указывает, что GCC должен настроить производительность для смеси
процессоры в архитектуре арка. Цель состоит в том, чтобы сгенерировать код, который хорошо работает на
текущие самые популярные процессоры, балансировка между оптимизациями, которые приносят пользу некоторым
ЦП в этом диапазоне и избежание проблем с производительностью других ЦП. Эффекты
этот параметр может измениться в будущих версиях GCC по мере того, как модели ЦП приходят и уходят.

-mtune = родной заставляет компилятор автоматически определять процессор компьютера сборки. В
в настоящее время эта функция поддерживается только в Linux, и не все архитектуры
признал. Если автоопределение не удалось, опция не действует.

-mcpu =имя
Это указывает имя целевого процессора ARM. GCC использует это имя для получения
имя целевой архитектуры ARM (как если бы указано -маршировать) и процессор ARM
тип, для которого настраивается производительность (как если бы -мтюн). Где этот вариант
используется в сочетании с -маршировать or -мтюн, эти параметры имеют приоритет перед
соответствующая часть этого варианта.

Допустимые названия для этой опции такие же, как и для -мтюн.

-mcpu = generic-арка также допустимо и эквивалентно -март =арка
-mtune = generic-арка. Посмотреть -мтюн чтобы получить больше информации.

-mcpu = родной заставляет компилятор автоматически определять процессор компьютера сборки. В
в настоящее время эта функция поддерживается только в Linux, и не все архитектуры
признал. Если автоопределение не удалось, опция не действует.

-mfpu =имя
-mfpe =номер
-mfp =номер
Это указывает, какое оборудование с плавающей запятой (или аппаратная эмуляция) доступно на
цель. Допустимые имена: FPA, fpe2, fpe3, индивидуалист, ВФП, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, неоновый, неон-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 и неон-vfpv4. -мфп и -мфпе являются синонимами для -мфпу=FPEномер, Для
совместимость со старыми версиями GCC.

If -msoft-поплавок указывается, это определяет формат значений с плавающей запятой.

Если выбранное оборудование с плавающей запятой включает расширение NEON (например, -мфпу=неоновый),
обратите внимание, что операции с плавающей запятой не будут использоваться проходом автоматической векторизации GCC.
если не -funsafe-математическая-оптимизация также указано. Это потому, что оборудование NEON
не полностью реализует стандарт IEEE 754 для арифметики с плавающей запятой (в
определенные денормальные значения рассматриваются как ноль), поэтому использование инструкций NEON может
привести к потере точности.

-mfp16-format =имя
Укажите формат типа «__fp16» с плавающей запятой половинной точности. Допустимый
имена никто, IEEEкачества альтернатива; по умолчанию никто, в этом случае "__fp16"
тип не определен.

-m структура-размер-граница =n
Размер всех структур и объединений будет округлен до кратного числа
битов, установленных этой опцией. Допустимые значения: 8, 32 и 64. Значение по умолчанию.
варьируется для разных наборов инструментов. Для целевой инструментальной цепочки COFF значение по умолчанию -
8. Значение 64 разрешено только в том случае, если базовый ABI поддерживает его.

Указание большего числа может дать более быстрый и эффективный код, но также может
увеличить размер программы. Различные значения потенциально несовместимы.
Код, скомпилированный с одним значением, не обязательно может работать с кодом или библиотеками.
компилируются с другим значением, если они обмениваются информацией с помощью структур или объединений.

-маборт-на-невозврате
Сгенерируйте вызов функции abort в конце функции noreturn. Так и будет
будет выполняться, если функция пытается вернуться.

-mlong-вызовы
-мно-долгие звонки
Сообщает компилятору выполнить вызовы функций, сначала загрузив адрес
функцию в регистр, а затем выполняет вызов подпрограммы в этом регистре. Этот
переключатель нужен, если целевая функция будет лежать за пределами адресации 64 мегабайта
диапазон версии инструкции вызова подпрограммы, основанной на смещении.

Даже если этот переключатель включен, не все вызовы функций будут превращены в длинные вызовы.
Эвристика заключается в том, что статические функции, функции, которые имеют короткий звонок атрибут,
функции, которые находятся в рамках #прагма no_long_calls директива и функции
чьи определения уже были скомпилированы в текущей единице компиляции, будет
не превратиться в долгие звонки. Исключением из этого правила является слабая функция
определения, функции с долгий звонок атрибут или . атрибут и
функции, которые входят в сферу #прагма длинные_звонки директива, всегда будет
превратились в долгие звонки.

По умолчанию эта функция отключена. Указание -мно-долгие звонки восстановит
поведение по умолчанию, как и размещение вызовов функций в рамках #прагма
long_calls_off директива. Обратите внимание, что эти переключатели не влияют на то, как компилятор
генерирует код для обработки вызовов функций через указатели функций.

-msingle-pic-база
Считайте регистр, используемый для адресации PIC, доступным только для чтения, а не загружайте его в
пролог для каждой функции. Система времени выполнения отвечает за инициализацию этого
до начала выполнения зарегистрируйтесь с соответствующим значением.

-mpic-register =Редж
Укажите регистр, который будет использоваться для адресации PIC. По умолчанию - R10, если только стек
проверка включена при использовании R9.

-mcirrus-fix-invalid-insns
Вставьте NOP в поток инструкций, чтобы обойти проблемы с
недопустимые комбинации инструкций Maverick. Этот вариант действителен только в том случае, если
-mcpu = ep9312 опция была использована для включения генерации инструкций для Cirrus
Сопроцессор Maverick с плавающей запятой. Эта опция не включена по умолчанию, так как
проблема присутствует только в более старых реализациях Maverick. Значение по умолчанию можно изменить.
обеспечивается за счет использования -mno-cirrus-fix-invalid-insns переключатель.

-mpoke-имя-функции
Напишите название каждой функции в текстовом разделе, непосредственно перед функцией.
пролог. Сгенерированный код похож на этот:

t0
.ascii "arm_poke_function_name", 0
.выровнять
t1
.слово 0xff000000 + (t1 - t0)
Arm_poke_function_name
мов ip, сп
stmfd sp !, {fp, ip, lr, pc}
sub fp, ip, # 4

При выполнении обратной трассировки стека код может проверять значение «pc», хранящееся в «fp +».
0 ". Если функция трассировки затем смотрит на местоположение" pc - 12 ", и старшие 8 бит
set, то мы знаем, что есть имя функции, встроенное непосредственно перед этим
местоположение и длина "((pc [-3]) & 0xff000000)".

-мпалец
-мам
Выберите между генерацией кода, который выполняется в состояниях ARM и Thumb. По умолчанию для
большинство конфигураций заключается в генерации кода, который выполняется в состоянии ARM, но по умолчанию
можно изменить, настроив GCC с --with-mode =состояние вариант настройки.

-мтпкс-рама
Сгенерируйте кадр стека, соответствующий стандарту вызова процедуры большого пальца для
все нелистовые функции. (Листовая функция - это функция, которая не вызывает никаких других
функций.) По умолчанию -мно-тпкс-рамка.

-мтпкс-створка-рамка
Сгенерируйте кадр стека, соответствующий стандарту вызова процедуры большого пальца для
все функции листа. (Листовая функция - это функция, которая не вызывает никаких других функций.)
По умолчанию используется -mno-apcs-створка-рама.

-mcallee-супер-взаимодействие
Дает всем видимым извне функциям в компилируемом файле инструкцию ARM
установить заголовок, который переключается в режим Thumb перед выполнением остальной функции.
Это позволяет вызывать эти функции из не взаимодействующего кода. Этот вариант
недействителен в конфигурациях AAPCS, поскольку взаимодействие включено по умолчанию.

-mcaller-супер-взаимодействие
Позволяет правильно выполнять вызовы через указатели функций (включая виртуальные функции)
независимо от того, был ли скомпилирован целевой код для взаимодействия или нет.
Есть небольшие накладные расходы на выполнение указателя функции, если эта опция
включен. Эта опция недействительна в конфигурациях AAPCS, потому что взаимодействие
по умолчанию включен.

-mtp =имя
Укажите модель доступа для указателя локального хранилища потока. Действующие модели:
легонько, который вызывает вызовы "__aeabi_read_tp", cp15, который извлекает поток
указатель напрямую от "cp15" (поддерживается в архитектуре arm6k), и автоматический, который
использует лучший доступный метод для выбранного процессора. По умолчанию установлено
автоматический.

-mtls-dialect =диалект
Укажите диалект, который будет использоваться для доступа к локальному хранилищу потока. Два диалекта
поддерживается --- гну и GNU2, гну диалект выбирает исходную схему GNU для
поддержка локальных и глобальных динамических моделей TLS. В GNU2 диалект выбирает GNU
схема дескриптора, которая обеспечивает лучшую производительность для разделяемых библиотек. GNU
схема дескриптора совместима с исходной схемой, но требует новых
Ассемблер, компоновщик и поддержка библиотек. Начальная и локальная модели exec TLS:
не зависит от этой опции и всегда используйте оригинальную схему.

-mword-перемещений
Создавать только абсолютные перемещения для значений размером в слово (например, R_ARM_ABS32). Это
включен по умолчанию для целей (uClinux, SymbianOS), где загрузчик времени выполнения накладывает
это ограничение, и когда -fpic or -fPIC указан.

-mfix-cortex-m3-ldrd
Некоторые ядра Cortex-M3 могут вызвать повреждение данных, когда инструкции "ldrd" с
используются перекрывающиеся регистры назначения и базовые регистры. Эта опция позволяет избежать генерации
эти инструкции. Эта опция включена по умолчанию, когда -mcpu = кора-м3 is
указано.

-мунифицированный-доступ
-mno-unaligned-доступ
Включает (или отключает) чтение и запись 16- и 32-битных значений из адресов
которые не выровнены по 16 или 32 бита. По умолчанию невыровненный доступ отключен для всех
pre-ARMv6 и все архитектуры ARMv6-M, а также включен для всех других архитектур. Если
невыровненный доступ не включен, тогда будут доступны слова в упакованных структурах данных
байт за раз.

Атрибут ARM "Tag_CPU_unaligned_access" будет установлен в сгенерированном объектном файле.
значение true или false, в зависимости от настройки этого параметра. Если не выровнен
доступ разрешен, тогда символ препроцессора "__ARM_FEATURE_UNALIGNED" также будет
определены.

-mneon-для-64 бит
Позволяет использовать Neon для обработки скалярных 64-битных операций. По умолчанию отключено
поскольку стоимость перемещения данных из регистров ядра в Neon высока.

AVR Опции

-mmcu =БУМ
Укажите архитектуру набора команд Atmel AVR (ISA) или тип MCU.

Значение по умолчанию для этой опции - @ tie {} "avr2".

GCC поддерживает следующие устройства AVR и ISA:

"avr2"
«Классические» устройства с объемом памяти программ до 8 @ tie {}. БУМ@tie {} = "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
"Классические" устройства с памятью программ до 8 @ tie {} КиБ и с "MOVW"
инструкцию. БУМ@tie {} = "ata6289", "attiny13", "attiny13a", "attiny2313",
attiny2313a, attiny24, attiny24a, attiny25, attiny261, attiny261a,
attiny43u, attiny4313, attiny44, attiny44a, attiny45, attiny461,
attiny461a, attiny48, attiny84, attiny84a, attiny85, attiny861,
attiny861a, attiny87, attiny88, at86rf401.

"avr3"
"Классические" устройства с 16 @ связью {} КиБ до 64 @ связью {} КиБ программной памяти.
БУМ@tie {} = "at43usb355", "at76c711".

"avr31"
«Классические» устройства с 128 @ связью {} КиБ программной памяти. БУМ@tie {} = "atmega103",
"at43usb320".

"avr35"
"Классические" устройства с 16 @ tie {} KiB до 64 @ tie {} KiB программной памяти и с
инструкция "MOVW". БУМ@tie {} = "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
«Улучшенные» устройства с памятью программ объемом до 8 @ {} КиБ. БУМ@tie {} =
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
«atmega8535», «atmega88», «atmega88a», «atmega88p», «atmega88pa», «at90pwm1»,
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
"Улучшенные" устройства с 16 @ связью {} КиБ до 64 @ связью {} КиБ программной памяти.
БУМ@tie {} = "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
«at90usb646», «at90usb647», «at94k», «m3000».

"avr51"
«Улучшенные» устройства с 128 @ связью {} КиБ программной памяти. БУМ@tie {} = "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
«at90usb1286», «at90usb1287».

"avr6"
"Усовершенствованные" устройства с 3-х байтовым ПК, т.е. с более чем 128 @ связью {} КиБ программы
Память. БУМ@tie {} = "atmega2560", "atmega2561".

"avrxmega2"
Устройства "XMEGA" с более чем 8 @ tie {} KiB и до 64 @ tie {} памяти программ.
БУМ@tie {} = "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
«atxmega32d4», «atxmega32x1».

"avrxmega4"
Устройства "XMEGA" с более чем 64 @ tie {} KiB и до 128 @ tie {} KiB программы
Память. БУМ@tie {} = "atxmega64a3", "atxmega64d3".

"avrxmega5"
Устройства "XMEGA" с более чем 64 @ tie {} KiB и до 128 @ tie {} KiB программы
памяти и более 64 @ галстук {} КиБ ОЗУ. БУМ@tie {} = "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Устройства "XMEGA" с более чем 128 @ tie {} КиБ программной памяти. БУМ@tie {} =
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
Устройства "XMEGA" с более чем 128 @ tie {} КиБ программной памяти и более
64 @ tie {} КБ ОЗУ. БУМ@tie {} = "atxmega128a1", "atxmega128a1u".

"avr1"
Этот ISA реализуется минимальным ядром AVR и поддерживается только для ассемблера.
БУМ@tie {} = "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-маккумулировать-аргументы
Накопить исходящие аргументы функции и получить / освободить необходимое пространство стека для
исходящие аргументы функции один раз в прологе / эпилоге функции. Без этой опции
исходящие аргументы помещаются перед вызовом функции и выводятся после нее.

Выдвижение аргументов после вызова функции может быть дорогостоящим для AVR, так что
накопление пространства стека может привести к уменьшению исполняемых файлов, поскольку аргументы требуют
не удаляться из стека после вызова такой функции.

Эта опция может привести к уменьшению размера кода для функций, которые выполняют несколько вызовов
функции, которые получают свои аргументы в стеке, как вызовы функций, подобных printf.

-mbranch-cost =стоят
Установите стоимость перехода для инструкций условного перехода на стоят. Разумные ценности
для стоят маленькие неотрицательные целые числа. Стоимость ветки по умолчанию равна 0.

-mcall-прологи
Прологи / эпилоги функций раскрываются как вызовы соответствующих подпрограмм. Код
размер меньше.

-мята8
Предположим, что int - это 8-битное целое число. Это влияет на размеры всех типов: char - это 1.
byte, int - 1 байт, long - 2 байта, long long - 4 байта. Пожалуйста
обратите внимание, что этот параметр не соответствует стандартам C, но приводит к уменьшению
размер кода.

-мно-прерывания
Сгенерированный код несовместим с аппаратными прерываниями. Размер кода меньше.

-мелакс
Попробуйте заменить "ЗВОНОК" соотв. Инструкция "JMP" более короткой "RCALL" соотв. «РЖМП»
инструкция, если применимо. Установка "-mrelax" просто добавляет параметр "--relax" к
Командная строка компоновщика при вызове компоновщика.

Ослабление перехода выполняется компоновщиком, потому что смещения перехода ранее не были известны.
код находится. Следовательно, код ассемблера, сгенерированный компилятором, такой же,
но инструкции в исполняемом файле могут отличаться от инструкций в ассемблере
код.

Если нужны заглушки компоновщика, необходимо включить расслабление, см. Раздел «EIND» и
заглушки компоновщика ниже.

-mshort-звонки
Эта опция устарела и будет удалена в GCC 4.8. См. "-Mrelax" для
замена.

Используйте инструкции «RCALL» / «RJMP» даже на устройствах с 16 @ tie {} KiB или более программой.
память, то есть на устройствах, которые имеют инструкции «CALL» и «JMP».

-msp8
Рассматривать регистр указателя стека как 8-битный регистр, т.е. принимать старший байт
указатель стека равен нулю. В общем, вам не нужно устанавливать эту опцию вручную.

Этот параметр используется внутри компилятора для выбора и построения мультибиблиотек для
архитектуры "avr2" и "avr25". Эти архитектуры смешивают устройства с и без
«СПХ». Для любого параметра, кроме «-mmcu = avr2» или «-mmcu = avr25», драйвер компилятора
добавит или удалит этот параметр из командной строки компилятора, потому что
затем компилятор знает, есть ли у устройства или архитектуры 8-битный указатель стека и, следовательно,
нет регистрации "SPH" или нет.

-mstrict-X
Используйте регистр адреса «X» способом, предложенным оборудованием. Это означает, что "X" - это
используется только при косвенной адресации, адресации с постинкрементом или до декремента.

Без этой опции регистр «X» может использоваться так же, как «Y» или «Z», которые
затем эмулируется дополнительными инструкциями. Например, загрузка значения с помощью
Адресация "X + const" с небольшим неотрицательным "const <64" в регистр Rn is
выполнен как

adiw r26, const; X + = const
ld , ИКС ; = * Х
sbiw r26, const; X - = const

-mtiny-стек
Измените только младшие 8 битов @ tie {} указателя стека.

«EIND» и устройства с более чем 128 байтами Ki Flash

Указатели в реализации имеют ширину 16 @ tie {} бит. Адрес функции или метки
представлен как адрес слова, так что косвенные переходы и вызовы могут быть нацелены на любой код
адрес в диапазоне 64 @ tie {} Ki слов.

Для облегчения непрямого перехода на устройства с более чем 128 @ tie {} байтов Ki
область памяти программ, есть специальный функциональный регистр, называемый "EIND", который служит
наиболее значимая часть целевого адреса, когда команды "EICALL" или "EIJMP"
используемый.

Косвенные переходы и вызовы на этих устройствах обрабатываются компилятором следующим образом и
с некоторыми ограничениями:

· Компилятор никогда не устанавливает «EIND».

· Компилятор неявно использует «EIND» в инструкциях «EICALL» / «EIJMP» или может читать
"EIND" напрямую для имитации косвенного вызова / перехода с помощью "RET"
инструкцию.

· Компилятор предполагает, что "EIND" никогда не изменяется во время запуска кода или во время
заявление. В частности, "EIND" не сохраняется / не восстанавливается в функции или прерывании.
служебная рутина пролог / эпилог.

· Для косвенных вызовов функций и вычисленного goto компоновщик генерирует заглушки. Заглушки
прыжковые площадки иногда также называют батуты. Таким образом, косвенный вызов / переход переходит к
такая заглушка. Заглушка содержит прямой переход к нужному адресу.

· Должна быть включена релаксация компоновщика, чтобы компоновщик создавал заглушки
правильно вся ситуация. См. Параметр компилятора "-mrelax" и параметр linler.
"--расслабляться". Есть угловые случаи, когда компоновщик должен генерировать заглушки, но
прерывается без релаксации и без полезного сообщения об ошибке.

· Сценарий компоновщика по умолчанию предназначен для кода с «EIND = 0». Если предполагается код
для работы с настройкой с «EIND! = 0» необходимо использовать настраиваемый скрипт компоновщика, чтобы
чтобы поместить разделы, названия которых начинаются с ".trampolines", в сегмент, где
"EIND" указывает на.

· Код запуска из libgcc никогда не устанавливает "EIND". Обратите внимание, что код запуска представляет собой смесь
кода из libgcc и AVR-LibC. О влиянии AVR-LibC на "EIND" см. AVR-
Руководство пользователя LibC ("http://nongnu.org/avr-libc/user-manual/").

· Для пользовательского кода запуска вполне законно заранее установить "EIND", например,
средство инициализации кода находится в разделе ".init3". Такой код запускается до
общий код запуска, который инициализирует ОЗУ и вызывает конструкторы, но после бита
код запуска из AVR-LibC, который устанавливает "EIND" в сегмент, в котором находится векторная таблица.
располагается.

#включают

статическая пустота
__attribute __ ((section (". init3"), naked, used, no_instrument_function))
init3_set_eind (недействительно)
{
__asm ​​volatile ("ldi r24, pm_hh8 (__ trampolines_start) \ n \ t"
"out% i0, r24" :: "n" (& EIND): "r24", "memory");
}

Символ «__trampolines_start» определен в скрипте компоновщика.

· Заглушки создаются компоновщиком автоматически, если выполняются следующие два условия.
встретились:

-
(Короче для порождать заглушки) вот так:

LDI r24, lo8 (GS ( ))
LDI r25, hi8 (GS ( ))

-
внешнюю сегмент, на котором расположены заглушки.

· Компилятор испускает такие модификаторы "gs" для меток кода в следующих ситуациях:

-
-
- -mcall-прологи>
параметр командной строки.

-
таблицы вы можете указать -fno-jump-столы параметр командной строки.

-
-
· Переход к несимвольным адресам, как это не при поддержке:

int main (void)
{
/ * Вызов функции по адресу слова 0x2 * /
возврат ((int (*) (void)) 0x2) ();
}

Вместо этого должна быть установлена ​​заглушка, т.е. функция должна вызываться через символ
("func_4" в примере):

int main (void)
{
extern int func_4 (недействительно);

/ * Вызов функции по байтовому адресу 0x4 * /
return func_4 ();
}

и приложение будет связано с "-Wl, - defsym, func_4 = 0x4". В качестве альтернативы "func_4"
можно определить в скрипте компоновщика.

Обработка регистров специальных функций RAMPD, RAMPX, RAMPY и RAMPZ

Некоторые устройства AVR поддерживают доступную память размером более 64 @ tie {} KiB.
с 16-битными указателями. Чтобы получить доступ к ячейкам памяти за пределами этого диапазона 64 @ tie {} KiB,
содержимое регистра «RAMP» используется как старшая часть адреса: «X», «Y», «Z»
адресный регистр объединен со специальной функцией RAMPX, RAMPY, RAMPZ
Зарегистрируйтесь, соответственно, чтобы получить широкий адрес. Аналогичным образом "RAMPD" используется вместе с
прямая адресация.

· Код запуска инициализирует регистры специальной функции "RAMP" нулями.

· Если AVR Названный Адрес Пространства, названные адрес космосе кроме общего или "__flash"
используется, то "RAMPZ" устанавливается по мере необходимости перед операцией.

· Если устройство поддерживает RAM больше 64 @ tie {KiB} и компилятор должен изменить
«RAMPZ» для выполнения операции, «RAMPZ» сбрасывается в ноль после операции.

· Если устройство поставляется с определенным регистром RAMP, пролог / эпилог ISR
сохраняет / восстанавливает этот SFR и инициализирует его нулем на случай, если код ISR может
(неявно) использовать его.

· ОЗУ больше 64 @ tie {KiB} не поддерживается GCC для целей AVR. Если вы используете
встроенный ассемблер для чтения из мест за пределами 16-битного диапазона адресов и изменения
один из регистров "RAMP", вы должны сбросить его до нуля после обращения.

Встроенные макросы AVR

GCC определяет несколько встроенных макросов, чтобы пользовательский код мог проверить наличие или
отсутствие особенностей. Практически любой из следующих встроенных макросов выводится из устройства.
возможности и, таким образом, запускается параметром командной строки "-mmcu =".

Дополнительные сведения о встроенных макросах для AVR см. AVR Названный Адрес Spaces и AVR Встроенный
функции.

«__AVR_ARCH__»
Встроенный макрос, который преобразуется в десятичное число, определяющее архитектуру и
зависит от "-mmcu =mcu " вариант. Возможные значения:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

для БУМ= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
«avrxmega2», «avrxmega4», «avrxmega5», «avrxmega6», «avrxmega7» соответственно. Если БУМ
указывает устройство, этот встроенный макрос устанавливается соответствующим образом. Например, с
"-mmcu = atmega8" макрос будет определен как 4.

"__AVR_Устройство__"
Установка "-mmcu =устройство" определяет этот встроенный макрос, который отражает имя устройства.
Например, «-mmcu = atmega8» определяет встроенный макрос «__AVR_ATmega8__»,
«-mmcu = attiny261a» определяет «__AVR_ATtiny261A__» и т. д.

Имена встроенных макросов следуют схеме «__AVR_Устройство__" в котором Устройство это
имя устройства согласно руководству пользователя AVR. Разница между Устройство во встроенном
макро и устройство в "-mmcu =устройство" в том, что последнее всегда в нижнем регистре.

If устройство это не устройство, а только базовая архитектура, такая как "avr51", этот макрос будет
не подлежит определению.

«__AVR_XMEGA__»
Устройство / архитектура принадлежит к семейству устройств XMEGA.

"__AVR_HAVE_ELPM__"
В устройстве есть инструкция «ELPM».

"__AVR_HAVE_ELPMX__"
В аппарате установлен «ЭЛПМ Р».n, Z " и "ELPM Rn, Z + " инструкциями.

"__AVR_HAVE_MOVW__"
В устройстве есть инструкция «MOVW» для выполнения 16-битных перемещений регистр-регистр.

"__AVR_HAVE_LPMX__"
В аппарате установлен «ЛПМ Р».n, Z " и «ЛПМ Рn, Z + " инструкциями.

"__AVR_HAVE_MUL__"
В устройстве есть аппаратный умножитель.

"__AVR_HAVE_JMP_CALL__"
Устройство имеет инструкции «JMP» и «CALL». Это относится к устройствам с
не менее 16 @ tie {} КиБ программной памяти, и если "-mshort-calls" не задано.

"__AVR_HAVE_EIJMP_EICALL__"
«__AVR_3_BYTE_PC__»
Устройство имеет инструкции «EIJMP» и «EICALL». Так обстоит дело с устройствами
с более чем 128 @ tie {} КиБ программной памяти. Это также означает, что программа
counter (PC) имеет ширину 3 @ tie {} байта.

«__AVR_2_BYTE_PC__»
Счетчик программ (ПК) имеет ширину 2 @ tie {} байта. Это относится к устройствам до
128 @ tie {} КиБ программной памяти.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Регистр указателя стека (SP) обрабатывается как 8-битный или 16-битный регистр.
компилятор. На определение этих макросов влияет "-mtiny-stack".

"__AVR_HAVE_SPH__"
«__AVR_SP8__»
Устройство имеет регистр специальной функции SPH (старшая часть указателя стека) или имеет
соответственно 8-битный указатель стека. На определение этих макросов влияет
«-mmcu =», а в случаях «-mmcu = avr2» и «-mmcu = avr25» также «-msp8».

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Устройство имеет регистры специальных функций «RAMPD», «RAMPX», «RAMPY», «RAMPZ»,
соответственно.

«__NO_INTERRUPTS__»
Этот макрос отражает параметр командной строки "-mno-interrupts".

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Некоторые устройства AVR (AT90S8515, ATmega103) не должны пропускать 32-битные инструкции из-за
аппаратная ошибка. Инструкции пропуска - это «SBRS», «SBRC», «SBIS», «SBIC» и «CPSE».
Второй макрос определяется, только если также установлено «__AVR_HAVE_JMP_CALL__».

"__AVR_SFR_OFFSET __ =компенсировать"
Инструкции, которые могут напрямую обращаться к регистрам специальных функций ввода-вывода, например "IN",
«OUT», «SBI» и т. Д. Могут использовать другой адрес, как если бы они были адресованы инструкцией к
доступ к ОЗУ как "LD" или "STS". Это смещение зависит от архитектуры устройства и имеет
следует вычесть из адреса RAM, чтобы получить соответствующий адрес I / O @ tie {}.

«__WITH_AVRLIBC__»
Компилятор настроен для использования вместе с AVR-Libc. Увидеть
Параметр конфигурации "--with-avrlibc".

Blackfin Опции

-mcpu =процессор[-видение]
Задает имя целевого процессора Blackfin. В настоящее время, процессор может быть одним из
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, бф542м,
бф544м, бф547м, бф548м, бф549м, bf561, bf592. Необязательный видение указывает на
силиконовая ревизия целевого процессора Blackfin. Любые обходные пути, доступные для
целевая ревизия кремния будет включена. Если видение is никто, обходных путей нет
включено. Если видение is любой, все обходные пути для целевого процессора будут
включено. Макрос «__SILICON_REVISION__» определяется двумя шестнадцатеричными цифрами.
представляющие старший и младший числа в кремниевой ревизии. Если видение is
никто, "__SILICON_REVISION__" не определено. Если видение is любой,
«__SILICON_REVISION__» определяется как 0xffff. Если это необязательно видение Не
используется, GCC предполагает последнюю известную кремниевую ревизию целевого Blackfin
процессор.

Поддержка bf561 неполный. Для bf561, Определяется только макрос процессора.
Без этой опции bf532 по умолчанию используется как процессор. Соответствующие
предопределенные макросы процессора для процессор подлежит определению. И для лучший эльф инструментальная цепочка
это приводит к связыванию аппаратного BSP, предоставляемого libgloss, если -мсим Не
данный.

-мсим
Указывает, что программа будет запускаться на симуляторе. Это заставляет симулятор
BSP, предоставляемый libgloss для связывания. Этот параметр действует только для лучший эльф
набор инструментов. Некоторые другие варианты, например -средняя-разделяемая-библиотека и -мфдпик, подразумевать
-мсим.

-Momit-Leaf-Frame-указатель
Не храните указатель фрейма в регистре для листовых функций. Это позволяет избежать
инструкции по сохранению, настройке и восстановлению указателей кадров и делает дополнительный регистр
доступны в листовых функциях. Опция -fomit-frame-pointer снимает рамку
указатель для всех функций, что может затруднить отладку.

-mspecld-аномалия
При включении компилятор гарантирует, что сгенерированный код не содержит
спекулятивные нагрузки после инструкций перехода. Если эта опция используется,
"__WORKAROUND_SPECULATIVE_LOADS" определено.

-mno-specld-аномалия
Не создавайте лишний код, чтобы предотвратить возникновение спекулятивных нагрузок.

-mcsync-аномалия
При включении компилятор гарантирует, что сгенерированный код не содержит CSYNC.
или инструкции SSYNC слишком быстро после условных переходов. Если эта опция используется,
"__WORKAROUND_SPECULATIVE_SYNCS" определено.

-mno-csync-аномалия
Не генерируйте дополнительный код, чтобы предотвратить выполнение инструкций CSYNC или SSYNC.
вскоре после условного перехода.

-mlow-64k
Когда этот параметр включен, компилятор может свободно пользоваться знанием того, что все
Программа умещается в невысоких 64k памяти.

-мно-низкий-64к
Предположим, что программа произвольно велика. Это значение по умолчанию.

-mstack-check-l1
Выполните проверку стека, используя информацию, помещенную в оперативную память L1 с помощью uClinux.
ядро.

-средняя-разделяемая-библиотека
Сгенерируйте код, поддерживающий общие библиотеки, с помощью метода идентификатора библиотеки. Это позволяет
для выполнения на месте и совместно используемых библиотек в среде без виртуальной памяти
управление. Этот вариант подразумевает -fPIC, С лучший эльф цель, этот вариант подразумевает
-мсим.

-mno-id-общая-библиотека
Сгенерируйте код, который не предполагает использования разделяемых библиотек на основе идентификаторов. Это
по умолчанию.

-mleaf-id-общая-библиотека
Сгенерируйте код, который поддерживает общие библиотеки с помощью метода идентификатора библиотеки, но предполагает
что эта библиотека или исполняемый файл не будут связываться с другими разделяемыми библиотеками ID.
Это позволяет компилятору использовать более быстрый код для переходов и вызовов.

-mno-лист-идентификатор-общая-библиотека
Не думайте, что компилируемый код не будет связываться с какими-либо разделяемыми библиотеками ID.
Более медленный код будет генерироваться для insns перехода и вызова.

-mshared-library-id = п
Указал идентификационный номер компилируемой разделяемой библиотеки на основе идентификатора.
Указание значения 0 приведет к созданию более компактного кода, указание других значений приведет к
принудительно выделить этот номер в текущую библиотеку, но больше нет места или
время эффективнее, чем отсутствие этой опции.

-msep-данные
Сгенерируйте код, который позволяет сегменту данных располагаться в другой области памяти.
из текстового сегмента. Это позволяет выполнять на месте в среде без
управление виртуальной памятью за счет исключения перемещений по текстовой части.

-mno-sep-данные
Сгенерируйте код, который предполагает, что сегмент данных следует за текстовым сегментом. Это
по умолчанию.

-mlong-вызовы
-мно-долгие звонки
Сообщает компилятору выполнить вызовы функций, сначала загрузив адрес
функцию в регистр, а затем выполняет вызов подпрограммы в этом регистре. Этот
переключатель необходим, если целевая функция находится за пределами 24-битного диапазона адресации
основанная на смещении версия инструкции вызова подпрограммы.

По умолчанию эта функция отключена. Указание -мно-долгие звонки восстановит
поведение по умолчанию. Обратите внимание, что эти переключатели не влияют на то, как компилятор генерирует
код для обработки вызовов функций через указатели функций.

-mfast-fp
Свяжите с быстрой библиотекой с плавающей запятой. Эта библиотека ослабляет некоторые аспекты IEEE
правила стандарта с плавающей запятой для проверки входных данных по Not-a-Number (NAN) в
интерес исполнения.

-minline-plt
Разрешить встраивание записей PLT в вызовы функций к функциям, которые неизвестны
привязать локально. Без -мфдпик.

многоядерный
Создание автономного приложения для многоядерного процессора Blackfin. Правильные стартовые файлы и
скрипты ссылок будут использоваться для поддержки многоядерности. Этот параметр определяет
«__BFIN_MULTICORE». Его можно использовать только с -mcpu = bf561[-видение]. Его можно использовать
-мкорея or -мкореб. Если он используется без -мкорея or -мкореб, Одноместный
используется модель программирования приложений / двухъядерных процессоров. В этой модели основная функция
Ядро B должно называться coreb_main. Если он используется с -мкорея or -мкореб, один
приложение на ядро ​​модели программирования. Если этот вариант не используется, одиночный
используется базовая модель программирования приложений.

-мкорея
Создание автономного приложения для ядра A BF561 при использовании одного приложения на ядро
модель программирования. Правильные стартовые файлы и сценарии ссылок будут использоваться для поддержки Core A.
Эта опция определяет «__BFIN_COREA». Он должен использоваться с многоядерный.

-мкореб
Создание автономного приложения для ядра B BF561 при использовании одного приложения на ядро
модель программирования. Правильные стартовые файлы и сценарии ссылок будут использоваться для поддержки Core B.
Эта опция определяет «__BFIN_COREB». Когда используется этот параметр, coreb_main должен быть
используется вместо main. Он должен использоваться с многоядерный.

-мсдрам
Создайте отдельное приложение для SDRAM. Правильные стартовые файлы и скрипты ссылок будут
используется для помещения приложения в SDRAM. Загрузчик должен инициализировать SDRAM перед загрузкой
приложение в SDRAM. Эта опция определяет «__BFIN_SDRAM».

-micplb
Предположим, что ICPLB включены во время выполнения. Это влияет на определенную аномалию
обходные пути. Для целей Linux по умолчанию предполагается, что ICPLB включены; для
автономные приложения по умолчанию отключены.

C6X Опции

-март =имя
Это определяет имя целевой архитектуры. GCC использует это имя для определения
какие инструкции он может выдавать при генерации ассемблерного кода. Допустимый
имена: c62x, c64x, c64x +, c67x, c67x +, c674x.

-mbig-endian
Сгенерируйте код для цели с прямым порядком байтов.

-с младшим порядком байтов
Сгенерируйте код для цели с прямым порядком байтов. Это значение по умолчанию.

-мсим
Выберите файлы запуска и скрипт компоновщика, подходящие для симулятора.

-msdata = по умолчанию
Поместите небольшие глобальные и статические данные в .neardata раздел, на который указывает
регистр «В14». Поместите небольшие неинициализированные глобальные и статические данные в .bss раздел,
который примыкает к .neardata раздел. Поместите небольшие данные только для чтения в .родата
раздел. Соответствующие разделы, используемые для больших объемов данных: .фардата, .far
и .const.

-msdata = все
Поместите все данные, а не только небольшие объекты, в разделы, предназначенные для небольших данных, и
используйте адресацию относительно регистра «B14» для доступа к ним.

-msdata = нет
Не используйте разделы, зарезервированные для небольших данных, и используйте абсолютные адреса для
получить доступ ко всем данным. Поместите все инициализированные глобальные и статические данные в .фардата раздел,
и все неинициализированные данные в .far раздел. Поместите все постоянные данные в .const
.

КРИС Опции

Эти параметры определены специально для портов CRIS.

-март =архитектурный тип
-mcpu =архитектурный тип
Сгенерируйте код для указанной архитектуры. Выбор для архитектурный тип Он
v3, v8 и v10 для ETRAX 4, ETRAX 100 и ETRAX 100 LX соответственно. По умолчанию v0
кроме cris-axis-linux-gnu, где по умолчанию v10.

-mtune =архитектурный тип
Настройтесь на архитектурный тип все, что применимо к сгенерированному коду, кроме
ABI и набор доступных инструкций. Выбор для архитектурный тип Он
то же, что и для -март =архитектурный тип.

-mmax-stack-frame =n
Предупреждать, когда кадр стека функции превышает n байт.

-метракс4
-метракс100
Варианты -метракс4 и -метракс100 являются синонимами для -март = v3 и -март = v8
соответственно.

-mmul-ошибка-обходной путь
-mno-mul-bug-обходной путь
Обходите ошибку в инструкциях "muls" и "mulu" для моделей ЦП, где она
применяется. Эта опция активна по умолчанию.

-mpdebug
Включите специфичную для CRIS подробную информацию, связанную с отладкой, в коде сборки. Этот
опция также позволяет отключить #NO_APP индикатор форматированного кода в
ассемблер в начале файла сборки.

-mcc-инициализация
Не используйте результаты кода условия из предыдущей инструкции; всегда испускать сравнение и
инструкции по тестированию перед использованием кодов состояния.

-мно-побочные эффекты
Не отправляйте инструкции с побочными эффектами в режимах адресации, отличных от пост-
приращение.

-mstack-выравнивание
-mno-выравнивание стека
-mdata-align
-mno-выравнивание данных
-mconst-выравнивание
-mno-const-выравнивание
Эти параметры (без параметров) упорядочивают (устраняют расположения) для кадра стека,
отдельные данные и константы должны быть согласованы для максимального размера доступа к единым данным
для выбранной модели процессора. По умолчанию используется 32-битное выравнивание. ABI
эти параметры не влияют на такие детали, как макет структуры.

-m32-бит
-m16-бит
-m8-бит
Подобно опциям stack-data- и const-align выше, эти опции упорядочивают
стековый фрейм, записываемые данные и константы должны быть выровнены по 32, 16 или 8 бит.
По умолчанию - 32-битное выравнивание.

-мно-пролог-эпилог
-пролог-эпилог
Доступно -мно-пролог-эпилог, нормальный пролог и эпилог функции, которые устанавливают
фрейм стека опущены, и нет команд возврата или возвращаемых последовательностей.
генерируется в коде. Используйте эту опцию только вместе с визуальным осмотром
скомпилированный код: не генерируются предупреждения или ошибки, когда регистры, сохраненные при вызове, должны быть
сохранены, или необходимо выделить хранилище для локальной переменной.

-мно-готплт
-мготплт
Доступно -fpic и -fPIC, не генерируйте (не генерируйте) последовательности инструкций, которые загружают
адреса для функций из части PLT GOT, а не (традиционные для других
архитектур) обращаются к PLT. По умолчанию -мготплт.

-мелф
Устаревшая опция no-op распознается только с cris-axis-elf и cris-axis-linux-gnu
целей.

-млинукс
Устаревшая опция no-op распознается только с целью cris-axis-linux-gnu.

-сим
Эта опция, признанная для cris-axis-elf, обеспечивает связь с вводом-выводом.
функции из библиотеки симулятора. Код, инициализированные данные и данные с нулевой инициализацией
распределяются последовательно.

-sim2
Подобно -сим, но передайте параметры компоновщика, чтобы найти инициализированные данные по адресу 0x40000000 и нулю-
инициализированные данные по адресу 0x80000000.

CR16 Опции

Эти параметры определены специально для портов CR16.

-ммак
Включите использование инструкций умножения-накопления. По умолчанию отключено.

-mcr16cplus
-mcr16c
Сгенерируйте код для архитектуры CR16C или CR16C +. Архитектура CR16C + по умолчанию.

-мсим
Связывает библиотеку libsim.a, совместимую с симулятором. Применимо к эльфу
только компилятор.

-мята32
Выберите целочисленный тип шириной 32 бита.

-мбит-операции
Создает инструкции sbit / cbit для битовых манипуляций.

-mdata-model =модель
Выберите модель данных. Выбор для модель Он возле, далеко or средний. средний по умолчанию.
Однако далеко недействителен, если выбрана опция -mcr16c, поскольку архитектура CR16C не поддерживает
поддержка дальней модели данных.

Дарвин Опции

Эти параметры определены для всех архитектур, на которых работает операционная система Darwin.

FSF GCC на Дарвине не создает «толстых» объектных файлов; он создаст объектный файл для
единую архитектуру, для которой он был создан. GCC от Apple на Дарвине действительно создает
"толстые" файлы, если их несколько -арх используются варианты; он делает это, запустив компилятор или
компоновщик несколько раз и объединяет результаты вместе с липо.

Подтип созданного файла (например, ppc7400 or ppc970 or i686) определяется
флаги, указывающие ISA, на который нацелен GCC, например -MCPU or -маршировать,
-force_cpusubtype_ALL опцию можно использовать, чтобы переопределить это.

Инструменты Дарвина различаются по своему поведению при несоответствии ISA. В
ассемблер, as, разрешит использование только тех инструкций, которые действительны для подтипа
файл, который он генерирует, поэтому вы не можете поместить 64-битные инструкции в ppc750 объектный файл.
Компоновщик для разделяемых библиотек, / usr / bin / libtool, потерпит неудачу и выведет сообщение об ошибке, если его спросят
для создания общей библиотеки с менее строгим подтипом, чем ее входные файлы (для
например, пытаясь поставить ppc970 объектный файл в ppc7400 библиотека). Компоновщик для
исполняемые файлы, ld, незаметно предоставит исполняемому файлу самый строгий подтип из всех
его входные файлы.

-Fдиректория
Добавьте каталог фреймворка директория в начало списка каталогов для поиска
для файлов заголовков. Эти каталоги чередуются с каталогами, указанными в -I
варианты и сканируются в порядке слева направо.

Каталог фреймворка - это каталог с фреймворками в нем. Фреймворк - это
каталог с "Заголовки" и / или "PrivateHeaders" каталог, содержащийся прямо в нем
это заканчивается ".фреймворк". Имя фреймворка - это имя этого каталога
исключая ".фреймворк". Заголовки, связанные с фреймворком, находятся в одном из
эти два каталога с "Заголовки" обыскивается первым. Подрамник - это
каталог фреймворка, который находится в фреймворке «Фреймворки» каталог. Включает
заголовки подкадра могут появляться только в заголовке платформы, которая содержит
subframework, или в заголовке одноуровневого подкадра. Два подрамника являются братьями и сестрами, если
они происходят в одной структуре. Подрамник не должен иметь то же имя, что и
framework, в случае нарушения будет выдано предупреждение. В настоящее время подрамник
не может иметь подрамников, в будущем механизм может быть расширен для поддержки
это. Стандартные фреймворки можно найти в "/ Система / Библиотека / Фреймворки" и
"/ Библиотека / Frameworks". Пример включения выглядит как "#include ",
в котором Рамки обозначает имя фреймворка, а header.h находится в
"PrivateHeaders" or "Заголовки" каталог.

-рамкадиректория
Подобно -F за исключением того, что каталог рассматривается как системный каталог. Главное отличие
между этим -рамка и -F это с -рамка компилятор не предупреждает
о конструкциях, содержащихся в файлах заголовков, найденных через директория. Этот вариант действителен
только для семейства языков C.

угаданный
Выдать отладочную информацию для используемых символов. Для формата отладки STABS,
это позволяет -feliminate-неиспользуемые-символы-отладки. По умолчанию это ВКЛ.

-gполный
Выдать отладочную информацию для всех символов и типов.

-mmacosx-version-min =версия
Самая ранняя версия MacOS X, на которой будет работать этот исполняемый файл, - версия, типичный
значения версия включают 10.1, 10.2 и 10.3.9.

Если компилятор был построен для использования заголовков системы по умолчанию, то значение по умолчанию для
эта опция - версия системы, на которой работает компилятор, в противном случае
по умолчанию выбираются варианты, совместимые с таким количеством систем и кодовых баз, как
возможное.

-мядро
Включите режим разработки ядра. В -мядро наборы опций -статический, -fno-общий,
-fno-cxa-atexit, -fno-исключения, -fno-non-call-исключения, -fapple-кекст, -fno-слабый
и -фно-ртти где применимо. Этот режим также устанавливает -мно-алтивек, -msoft-поплавок,
-fno-встроенный и -mlong-ветка для целей PowerPC.

-моне-байт-бул
Отменить настройки по умолчанию для BOOL так что sizeof (булево) == 1. По умолчанию sizeof (булево) is 4
при компиляции для Darwin / PowerPC и 1 при компиляции для Darwin / x86, поэтому этот вариант
не влияет на x86.

Внимание! Ассоциация -моне-байт-бул переключатель заставляет GCC генерировать код, который не является двоичным
совместим с кодом, созданным без этого переключателя. Использование этого переключателя может потребовать
перекомпиляция всех остальных модулей в программе, включая системные библиотеки. Использовать этот
переключиться, чтобы соответствовать модели данных, отличной от модели данных по умолчанию.

-mfix-и-продолжить
-ffix-и-продолжить
-findirect-данные
Сгенерируйте код, подходящий для быстрой разработки. Необходимо для включения GDB в
динамически загружать файлы ".o" в уже запущенные программы. -findirect-данные и
-ffix-и-продолжить предоставляются для обратной совместимости.

-all_load
Загружает все элементы статических архивных библиотек. Видеть человека ld(1) для получения дополнительной информации.

-arch_errors_fatal
Причина, по которой ошибки, связанные с файлами с неправильной архитектурой, становятся фатальными.

-bind_at_load
Вызывает пометку выходного файла таким образом, что динамический компоновщик связывает все
неопределенные ссылки при загрузке или запуске файла.

-расслоении
Создайте файл формата пакета Mach-o. Видеть человека ld(1) для получения дополнительной информации.

-bundle_loader выполнимый
Эта опция определяет выполнимый который будет загружать выходной файл сборки,
связаны. Видеть человека ld(1) для получения дополнительной информации.

-динамическая библиотека
При передаче этой опции GCC создаст динамическую библиотеку вместо исполняемого файла.
при связывании с использованием метода Дарвина Libtool команда.

-force_cpusubtype_ALL
Это приводит к тому, что выходной файл GCC имеет BCE подтип, вместо того, который контролируется
домен -MCPU or -маршировать опцию.

-allowable_client имя клиента
-имя клиента
-версия_совместимости
-текущая версия
-dead_strip
-dependency-файл
-dylib_file
-dylinker_install_name
-динамический
-exported_symbols_list
-список файлов
- Flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-в этом
-имя_установки
-keep_private_externs
-multi_module
-multiply_define
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixпредварительная привязка
-nomultidefs
-без предварительной привязки
-noseglinkedit
-pagezero_size
-предварительно связать
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-сектральный
-сектобъектысимволы
-почему
-seg1адрес
-sectcreate
-сектобъектысимволы
-сектор
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-сегпрот
-segs_read_only_addr
-segs_read_write_addr
-single_module
-статический
-под_библиотека
-sub_umbrella
-twolevel_namespace
-зонтик
-неопределенный
-unexported_symbols_list
-weak_reference_mismatches
-загружено
Эти параметры передаются компоновщику Darwin. Справочная страница компоновщика Дарвина описывает
их подробно.

Декабрь Альфа Опции

Эти -m параметры определены для реализаций DEC Alpha:

-мно-мягкий-поплавок
-msoft-поплавок
Использовать (не использовать) аппаратные инструкции с плавающей запятой для операций с плавающей запятой
операции. Когда -msoft-поплавок указано, функции в libgcc.a будет использоваться для
выполнять операции с плавающей запятой. Если они не заменены подпрограммами, которые имитируют
операции с плавающей запятой, или скомпилированные таким образом, чтобы вызывать такие эмуляции
подпрограммы, эти подпрограммы будут выполнять операции с плавающей запятой. Если вы компилируете
для Alpha без операций с плавающей запятой вы должны убедиться, что библиотека
построен так, чтобы их не называть.

Обратите внимание, что реализации Alpha без операций с плавающей запятой должны иметь
регистры с плавающей запятой.

-mfp-reg
-mno-fp-regs
Сгенерируйте код, который использует (не использует) набор регистров с плавающей запятой. -mno-fp-regs
подразумевает -msoft-поплавок. Если набор регистров с плавающей запятой не используется, с плавающей запятой
операнды передаются в целочисленные регистры, как если бы они были целыми числами и с плавающей запятой.
результаты передаются в $ 0 вместо $ f0. Это нестандартная последовательность вызовов, поэтому
любая функция с аргументом с плавающей запятой или возвращаемое значение, вызываемая скомпилированным кодом
-mno-fp-regs также должен быть скомпилирован с этой опцией.

Типичное использование этой опции - создание ядра, которое не использует и, следовательно, требует
не сохранять и не восстанавливать регистры с плавающей запятой.

-миее
Архитектура Alpha реализует оборудование с плавающей запятой, оптимизированное для максимальной
представление. Он в основном соответствует стандарту с плавающей запятой IEEE. Тем не мение,
для полного соответствия требуется помощь программного обеспечения. Эта опция генерирует код
полностью IEEE-совместимый код кроме , что неточный флаг не поддерживается (см. ниже).
Если эта опция включена, макрос препроцессора "_IEEE_FP" определяется во время
компиляция. Полученный код менее эффективен, но может правильно поддерживать
денормализованные числа и исключительные значения IEEE, такие как не-число и плюс / минус
бесконечность. Другие компиляторы Alpha называют эту опцию -ieee_with_no_inexact.

-mieee-с-неточным
Это похоже на -миее за исключением того, что сгенерированный код также поддерживает IEEE неточный флаг.
Включение этого параметра приводит к тому, что сгенерированный код реализует полностью совместимый с IEEE
математика. В дополнение к «_IEEE_FP», «_IEEE_FP_EXACT» определен как макрос препроцессора.
В некоторых реализациях Alpha результирующий код может выполняться значительно медленнее, чем
код, сгенерированный по умолчанию. Поскольку существует очень мало кода, который зависит от
неточный флаг, обычно не следует указывать эту опцию. Другие компиляторы Alpha называют
этот вариант -ieee_with_inexact.

-mfp-trap-mode =ловушка-режим
Эта опция контролирует, какие ловушки, связанные с плавающей запятой, включены. Другая Альфа
компиляторы называют эту опцию -fptm ловушка-режим. Можно выбрать один из четырех режимов ловушки.
ценности:

n Это стандартная (нормальная) настройка. Включены только ловушки.
те, которые нельзя отключить программно (например, ловушка деления на ноль).

u В дополнение к ловушкам, включенным n, также включены ловушки потери значимости.

su Подобно u, но инструкции помечены как безопасные для завершения программного обеспечения (см.
Подробности в руководстве по альфа-архитектуре).

на Подобно su, но включены и неточные ловушки.

-mfp-режим округления =режим округления
Выбирает режим округления IEEE. Другие компиляторы Alpha называют эту опцию -фпрм
режим округления, режим округления может быть одним из:

n Нормальный режим округления IEEE. Числа с плавающей запятой округляются до ближайшего
номер машины или в сторону четного номера машины в случае ничьей.

m Округлите в сторону минус бесконечности.

c Режим рубленого округления. Числа с плавающей запятой округляются до нуля.

d Режим динамического округления. Поле в регистре управления с плавающей запятой (фпкрСм.
Справочное руководство по архитектуре Alpha) управляет действующим режимом округления. C
библиотека инициализирует этот регистр для округления в сторону плюс бесконечности. Таким образом,
если ваша программа не изменяет фпкр, d соответствует округлению в сторону плюса
бесконечность.

-mtrap-precision =ловушка-точность
В архитектуре Alpha ловушки с плавающей запятой неточны. Это означает без
программное обеспечение невозможно вылечить из плавающей ловушки и программы
выполнение обычно необходимо прекратить. GCC может генерировать код, который может помочь
обработчики прерываний операционной системы в определении точного местоположения, которое вызвало
ловушка с плавающей запятой. В зависимости от требований приложения разные
уровни точности могут быть выбраны:

p Программная точность. Этот параметр установлен по умолчанию и означает, что обработчик прерываний может только
определить, какая программа вызвала исключительную ситуацию с плавающей запятой.

f Функциональная точность. Обработчик прерывания может определить функцию, которая вызвала
исключение с плавающей запятой.

i Точность инструкции. Обработчик прерывания может определить точную инструкцию, которая
вызвало исключение с плавающей запятой.

Другие компиляторы Alpha предоставляют аналогичные параметры, называемые -scope_safe и
-resuming_safe.

-mieee-совместимый
Эта опция отмечает сгенерированный код как соответствующий IEEE. Вы не должны использовать эту опцию
если вы также не укажете -mtrap-precision = я и либо -mfp-trap-mode = su or
-mfp-trap-mode = sui. Его единственный эффект - испустить строку .flag 48 в функции
пролог сгенерированного файла сборки. В DEC Unix это означает, что
Подпрограммы математической библиотеки, соответствующие стандарту IEEE, будут связаны в.

-mbuild-константы
Обычно GCC проверяет 32- или 64-разрядную целочисленную константу, чтобы узнать, может ли он ее построить.
от более мелких констант в двух или трех инструкциях. Если не может, он выведет
константу как литерал и сгенерируйте код для ее загрузки из сегмента данных во время выполнения.

Используйте эту опцию, чтобы потребовать от GCC построить Найти целочисленные константы с использованием кода, даже если
требуется больше инструкций (максимум шесть).

Обычно этот параметр используется для создания динамического загрузчика общей библиотеки. Сам
разделяемая библиотека, она должна переместиться в память, прежде чем сможет найти переменные
и константы в собственном сегменте данных.

-мальфа-ас
-мгаз
Выберите, нужно ли генерировать код для сборки с помощью ассемблера, поставляемого поставщиком.
(-мальфа-ас) или ассемблером GNU -мгаз.

-mbwx
-mno-bwx
-mcix
-mno-cix
-мфикс
-мно-фикс
-ммакс
-мно-макс
Укажите, должен ли GCC генерировать код для использования дополнительных BWX, CIX, FIX и MAX.
наборы инструкций. По умолчанию используются наборы инструкций, поддерживаемые ЦП.
тип, указанный через -mcpu = вариант или процессор, на котором был построен GCC, если ни один не был
указано.

-mfloat-vax
-mfloat-ieee
Сгенерировать код, который использует (не использует) арифметику с плавающей запятой VAX F и G вместо
одинарной и двойной точности IEEE.

-mexplicit-relocs
-mno-explicit-relocs
Старые альфа-ассемблеры не позволяли генерировать перемещения символов, кроме как через
макросы ассемблера. Использование этих макросов не позволяет оптимально планировать выполнение инструкций.
GNU binutils версии 2.12 поддерживает новый синтаксис, который позволяет компилятору
четко отметьте, какие перемещения должны применяться к каким инструкциям. Этот вариант
в основном полезен для отладки, поскольку GCC определяет возможности ассемблера, когда он
построен и соответственно устанавливает значение по умолчанию.

-msmall-данные
-mlarge-данные
После появления -mexplicit-relocs действует, доступ к статическим данным осуществляется через gp-родственник
переезды. Когда -msmall-данные используется, объекты длиной 8 и менее байтов помещаются в
a небольшой данным область (разделы ".sdata" и ".sbss") и доступны через 16-битные
перемещений из регистра $ gp. Это ограничивает размер небольшой области данных до
64 КБ, но позволяет напрямую обращаться к переменным с помощью одной инструкции.

По умолчанию используется -mlarge-данные. С этой опцией область данных ограничена чуть ниже
2 ГБ. Программы, которым требуется более 2 ГБ данных, должны использовать "malloc" или "mmap" для
размещать данные в куче, а не в сегменте данных программы.

При генерации кода для разделяемых библиотек -fpic подразумевает -msmall-данные и -fPIC
подразумевает -mlarge-данные.

-msmall-текст
-mlarge-текст
После появления -msmall-текст , компилятор предполагает, что код всей программы
(или разделяемая библиотека) умещается в 4 МБ и, таким образом, доступна с помощью инструкции перехода.
После появления -msmall-данные , компилятор может предположить, что все локальные символы разделяют
то же значение $ gp и, таким образом, уменьшить количество инструкций, необходимых для функции
звоните с 4 до 1.

По умолчанию используется -mlarge-текст.

-mcpu =тип_процессора
Установите набор инструкций и параметры планирования инструкций для типа машины
тип_процессора. Вы можете указать либо EV название стиля или соответствующий номер чипа.
GCC поддерживает параметры планирования для процессоров семейства EV4, EV5 и EV6 и
выберет значения по умолчанию для набора инструкций указанного вами процессора.
Если вы не укажете тип процессора, GCC по умолчанию будет использовать процессор, на котором
компилятор был построен.

Поддерживаемые значения для тип_процессора Он

ev4
ev45
21064
Планируется как EV4 и не имеет расширений набора команд.

ev5
21164
Планируется как EV5 и не имеет расширений набора команд.

ev56
21164a
Планируется как EV5 и поддерживает расширение BWX.

рса56
21164pc
21164PC
Планируется как EV5 и поддерживает расширения BWX и MAX.

ev6
21264
Планируется как EV6 и поддерживает расширения BWX, FIX и MAX.

ev67
21264a
Планируется как EV6 и поддерживает расширения BWX, CIX, FIX и MAX.

Собственные инструменты также поддерживают ценность родной, который выбирает лучшую архитектуру
вариант для хост-процессора. -mcpu = родной не действует, если GCC не распознает
процессор.

-mtune =тип_процессора
Установите только параметры планирования инструкций для типа машины тип_процессора,
набор инструкций не меняется.

Собственные инструменты также поддерживают ценность родной, который выбирает лучшую архитектуру
вариант для хост-процессора. -mtune = родной не действует, если GCC не распознает
процессор.

-mmemory-latency =время
Устанавливает задержку, которую планировщик должен принять для типичных обращений к памяти, как их видит
приложение. Это число сильно зависит от используемых шаблонов доступа к памяти.
приложением и размером внешнего кэша на машине.

Допустимые варианты для время Он

номер
Десятичное число, представляющее такты.

L1
L2
L3
main
Компилятор содержит оценки количества тактов для "типичного" EV4 и
Оборудование EV5 для кешей уровней 1, 2 и 3 (также называемых Dcache, Scache и
Bcache), а также в основную память. Обратите внимание, что L3 действителен только для EV5.

Декабрь Альфа / VMS Опции

Эти -m параметры определены для реализаций DEC Alpha / VMS:

-mvms-коды-возврата
Возвращать коды условий VMS из main. По умолчанию возвращается условие стиля POSIX.
(например, коды ошибок).

-mdebug-main =префикс
Отметьте первую подпрограмму, имя которой начинается с префикс в качестве основного распорядка для
отладчик.

-mmalloc64
По умолчанию используются 64-битные процедуры выделения памяти.

FR30 Опции

Эти параметры определены специально для порта FR30.

-msmall-модель
Используйте модель малого адресного пространства. Это может привести к уменьшению размера кода, но предполагает
что все символьные значения и адреса уместятся в 20-битном диапазоне.

-мно-льсим
Предположим, что была предоставлена ​​поддержка среды выполнения и поэтому нет необходимости включать
библиотека симулятора (libsim.a) в командной строке компоновщика.

FRV Опции

-мгпр-32
Используйте только первые 32 регистра общего назначения.

-мгпр-64
Используйте все 64 регистра общего назначения.

-мфпр-32
Используйте только первые 32 регистра с плавающей запятой.

-мфпр-64
Используйте все 64 регистра с плавающей запятой.

-mhard-поплавок
Используйте аппаратные инструкции для операций с плавающей запятой.

-msoft-поплавок
Используйте библиотечные подпрограммы для операций с плавающей запятой.

-malloc-cc
Динамическое размещение регистров кода условия.

-mfixed-cc
Не пытайтесь динамически распределять регистры кода условия, используйте только «icc0» и
"fcc0".

-mdword
Измените ABI, чтобы использовать двойные слова insns.

-мно-слово
Не используйте инструкции из двойных слов.

-mдвойной
Используйте двойные инструкции с плавающей запятой.

-мно-дабл
Не используйте двойные инструкции с плавающей запятой.

-Медиа
Используйте инструкции для СМИ.

-мно-медиа
Не используйте инструкции для носителей.

-ммуладд
Используйте инструкции умножения и сложения / вычитания.

-мно-муладд
Не используйте инструкции умножения и сложения / вычитания.

-мфдпик
Выберите FDPIC ABI, который использует дескрипторы функций для представления указателей на
функции. Без каких-либо параметров, связанных с PIC / PIE, это подразумевает -fPIE. С -fpic or
-fpie, предполагается, что записи GOT и небольшие данные находятся в пределах 12-битного диапазона от GOT.
базовый адрес; с участием -fPIC or -fPIE, Смещения GOT вычисляются с 32 битами. С
лучший эльф цель, этот вариант подразумевает -мсим.

-minline-plt
Разрешить встраивание записей PLT в вызовы функций к функциям, которые неизвестны
привязать локально. Без -мфдпик. По умолчанию он включен, если
оптимизация скорости и компиляция для разделяемых библиотек (т. е. -fPIC or -fpic), или
когда вариант оптимизации, такой как -O3 или выше присутствует в командной строке.

-мТЛС
Предположим, что при генерации локального кода потока используется большой сегмент TLS.

-мтлс
Не предполагайте наличие большого сегмента TLS при генерации кода, локального для потока.

-mgprel-ро
Включите использование перемещений "GPREL" в FDPIC ABI для данных, которые, как известно, находятся в
разделы только для чтения. По умолчанию он включен, кроме -fpic or -fpie: хотя
это может помочь уменьшить глобальную таблицу смещений, она меняет 1 инструкцию на 4. С
-fPIC or -fPIE, он обменивает 3 инструкции на 4, одна из которых может использоваться несколькими
символы, и это позволяет избежать необходимости в записи GOT для указанного символа, поэтому он
с большей вероятностью будет победа. Если это не так, -mno-gprel-ро можно использовать для его отключения.

-multilib-библиотека-ПИК
Свяжите с (библиотекой, а не FD) библиотеками изображений. Это подразумевается -mlibrary-pic, также
как -fPIC и -fpic без -мфдпик. Вы никогда не должны использовать его явно.

-mlinked-fp
Следуйте требованию EABI о создании указателя кадра всякий раз, когда кадр стека
выделяется. Этот параметр включен по умолчанию и может быть отключен с помощью
-mno-connected-fp.

-mlong-вызовы
Используйте косвенную адресацию для вызова функций вне текущего модуля компиляции. Этот
позволяет размещать функции в любом месте 32-битного адресного пространства.

-злокачественные ярлыки
Попробуйте выровнять метки по 8-байтовой границе, вставив nops в предыдущий пакет.
Этот параметр действует только тогда, когда включена упаковка VLIW. Он не создает новых
пакеты; он просто добавляет nops к существующим.

-mlibrary-pic
Сгенерируйте независимый от позиции код EABI.

-макк-4
Используйте только первые четыре регистра аккумулятора носителя.

-макк-8
Используйте все восемь регистров медиааккумулятора.

-мпак
Упакуйте инструкции VLIW.

-мно-упаковка
Не упаковывайте инструкции VLIW.

-мно-флаги
Не помечайте переключатели ABI в e_flags.

-второй ход
Включите использование инструкций условного перемещения (по умолчанию).

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mno-cond-переместить
Отключите использование инструкций условного перемещения.

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-мскк
Включите использование инструкций условного набора (по умолчанию).

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mno-scc
Отключите использование инструкций условного набора.

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mcond-exec
Разрешить использование условного исполнения (по умолчанию).

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mno-cond-exec
Отключите использование условного исполнения.

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mvliw-филиал
Выполните проход для упаковки ветвей в инструкции VLIW (по умолчанию).

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mno-vliw-филиал
Не запускайте проход для упаковки ветвей в инструкции VLIW.

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mmmulti-cond-exec
Включите оптимизацию "&&" и "||" в условном исполнении (по умолчанию).

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mno-multi-cond-exec
Отключите оптимизацию "&&" и "||" в условном исполнении.

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mnested-cond-exec
Включить вложенные оптимизации условного выполнения (по умолчанию).

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-mno-вложенный-cond-exec
Отключите вложенные оптимизации условного выполнения.

Этот переключатель предназначен в основном для отладки компилятора и, вероятно, будет удален в
будущая версия.

-moptimize -mbar
Этот переключатель удаляет избыточные «мембранные» инструкции из кода, сгенерированного компилятором.
Он включен по умолчанию.

-mno-optimize -mbar
Этот переключатель отключает автоматическое удаление избыточных "мембранных" инструкций из
сгенерированный код.

-mtomcat-статистика
Заставить газ распечатать статистику кота.

-mcpu =процессор
Выберите тип процессора, для которого нужно сгенерировать код. Возможные значения: FRV, fr550,
кот, fr500, fr450, fr405, fr400, fr300 и декриминализовано.

GNU / Linux Опции

Эти -m параметры определены для целей GNU / Linux:

-mglibc
Используйте библиотеку GNU C. Это значение по умолчанию, кроме * - * - Linux- * uclibc * и
* - * - Linux- * Android * целей.

-муклибк
Используйте библиотеку uClibc C. Это значение по умолчанию * - * - Linux- * uclibc * целей.

-мбионный
Используйте библиотеку Bionic C. Это значение по умолчанию * - * - Linux- * Android * целей.

-мандроид
Скомпилируйте код, совместимый с платформой Android. Это значение по умолчанию
* - * - Linux- * Android * целей.

При компиляции эта опция включает -мбионный, -fPIC, -fno-исключения и -фно-ртти by
дефолт. При связывании этот параметр заставляет драйвер GCC передавать параметры, специфичные для Android.
компоновщику. Наконец, эта опция заставляет макрос препроцессора «__ANDROID__» быть
определены.

-tno-android-cc
Отключить эффекты компиляции -мандроид, т.е. не включать -мбионный, -fPIC,
-fno-исключения и -фно-ртти по умолчанию.

-tno-android-ld
Отключить эффекты связывания -мандроид, т. е. передать стандартные параметры линковки Linux в
компоновщик.

H8 / 300 Опции

Эти -m параметры определены для реализаций H8 / 300:

-мелакс
По возможности сокращайте некоторые адресные ссылки во время ссылки; использует опцию компоновщика
-расслабиться.

-мч Сгенерируйте код для H8 / 300H.

-Миз Сгенерируйте код для H8S.

-мн Сгенерируйте код для H8S и H8 / 300H в обычном режиме. Этот переключатель необходимо использовать
либо с -мч or -Миз.

-мс2600
Сгенерируйте код для H8S / 2600. Этот переключатель необходимо использовать с -Миз.

-мята32
По умолчанию данные типа int должны быть 32 бита.

-злокачественный-300
На H8 / 300H и H8S используйте те же правила юстировки, что и для H8 / 300. По умолчанию
для H8 / 300H и H8S - это выравнивание длинных и плавающих чисел на 4-байтовых границах.
-злокачественный-300 заставляет их выравниваться по 2-байтовым границам. Эта опция не действует
на H8 / 300.

HPPA Опции

Эти -m параметры определены для компьютеров семейства HPPA:

-март =архитектурный тип
Сгенерируйте код для указанной архитектуры. Выбор для архитектурный тип Он
1.0 для PA 1.0, 1.1 для PA 1.1, и 2.0 для процессоров PA 2.0. Ссылаться на
/usr/lib/sched.models в системе HP-UX, чтобы определить подходящий вариант архитектуры
для вашей машины. Код, скомпилированный для архитектур с меньшими номерами, будет работать на более высоких
пронумерованные архитектуры, но не наоборот.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Синонимы к слову -март = 1.0, -март = 1.1качества -март = 2.0 соответственно.

-mbig-переключатель
Сгенерируйте код, подходящий для больших таблиц переключателей. Используйте эту опцию, только если
ассемблер / компоновщик жалуются на ветвления вне диапазона в таблице переключателей.

-mjump-in-задержка
Заполните интервалы задержки вызовов функций инструкциями безусловного перехода, изменив
указатель возврата для вызова функции, который будет целью условного перехода.

-mdisable-фпреги
Не допускайте использования регистров с плавающей запятой каким-либо образом. Это необходимо для
компиляция ядер, которые выполняют ленивое переключение контекста регистров с плавающей запятой. Если
вы используете эту опцию и пытаетесь выполнять операции с плавающей запятой, компилятор
прерывание.

-mdisable-индексирование
Запретить компилятору использовать режимы адресации индексации. Это позволяет избежать некоторых
неясные проблемы при компиляции кода, сгенерированного MIG, под MACH.

-mno-space-regs
Сгенерируйте код, который предполагает, что цель не имеет регистров пространства. Это позволяет GCC
генерировать более быстрые косвенные вызовы и использовать режимы немасштабируемого индекса адреса.

Такой код подходит для систем и ядер уровня 0.

-mfast-непрямые звонки
Сгенерируйте код, который предполагает, что вызовы никогда не пересекают границы пространства. Это позволяет GCC
испускать код, который выполняет более быстрые косвенные вызовы.

Эта опция не будет работать при наличии разделяемых библиотек или вложенных функций.

-mfixed-range =регистр-диапазон
Сгенерируйте код, обрабатывающий данный диапазон регистров как фиксированные регистры. Фиксированный регистр
это тот, который не может использовать распределитель регистров. Это полезно при компиляции ядра
код. Диапазон регистров определяется как два регистра, разделенных тире. Несколько
диапазоны регистров можно указать через запятую.

-mlong-загрузить-магазин
Создание последовательностей загрузки и сохранения 3 инструкций, как иногда требуется HP-UX 10
компоновщик. Это эквивалентно +k вариант для компиляторов HP.

-mportable-время выполнения
Используйте портативные соглашения о вызовах, предложенные HP для систем ELF.

-мгаз
Разрешить использование директив ассемблера, понятных только GAS.

-mschedule =тип процессора
Код расписания в соответствии с ограничениями для типа машины тип процессора. Выбор
для тип процессора Он 700 7100, 7100LC, 7200, 7300 и 8000, Ссылаться на
/usr/lib/sched.models в системе HP-UX, чтобы определить подходящий вариант планирования для
ваша машина. Расписание по умолчанию 8000.

-mlinker-opt
Включите этап оптимизации в компоновщике HP-UX. Обратите внимание, что это делает символическую отладку
невозможно. Это также вызывает ошибку в компоновщиках HP-UX 8 и HP-UX 9, в которых они
выдавать ложные сообщения об ошибках при компоновке некоторых программ.

-msoft-поплавок
Сгенерировать вывод, содержащий вызовы библиотеки для чисел с плавающей запятой. Внимание! реквизит
библиотеки доступны не для всех целей HPPA. Обычно помещения
используется обычный компилятор C машины, но это не может быть сделано напрямую в кросс-
компиляция. Вы должны сами принять меры, чтобы предоставить подходящую библиотеку.
функции для кросс-компиляции.

-msoft-поплавок изменяет соглашение о вызовах в выходном файле; следовательно, это только
полезно, если вы компилируете Найти программы с этой опцией. В частности, вам необходимо
компилировать libgcc.a, библиотека, поставляемая с GCC, с -msoft-поплавок для этого
Если вы меняете свою работу и работаете с другим работодателем, то этот новый работодатель должен получить для вас новое разрешение на работу.

-мсио
Создайте предопределенное значение «_SIO» для ввода-вывода сервера. По умолчанию -мвсио, Это генерирует
предопределенные значения «__hp9000s700», «__hp9000s700__» и «_WSIO» для ввода-вывода рабочей станции.
Эти параметры доступны в HP-UX и HI-UX.

-mgnu-ld
Используйте специальные опции GNU ld. Это проходит -общий ld при создании общего
библиотека. Это значение по умолчанию, когда GCC настроен, явно или неявно, с
Компоновщик GNU. Эта опция не влияет на то, какой ld вызывается, а только
изменяет параметры, передаваемые этому ld. Вызываемый ld определяется
домен --with-ld параметр конфигурации, путь поиска программы GCC и, наконец, пользователем
PATH. Компоновщик, используемый GCC, можно распечатать, используя который `gcc -print-prog-name = ld`.
Эта опция доступна только в 64-битном HP-UX GCC, т. Е. Настроена с
hppa * 64 * - * - hpux *.

-mhp-ld
Используйте специальные параметры HP ld. Это проходит -b ld при создании общей библиотеки и
проходит + Принять Несоответствие типов ld по всем ссылкам. Это значение по умолчанию, когда GCC
настроен явно или неявно с помощью компоновщика HP. В этой опции нет
любое влияние, на которое вызывается ld, меняет только то, какие параметры передаются этому
ld. Вызываемый ld определяется --with-ld параметр конфигурации, GCC
путь поиска программы, и, наконец, пользователем PATH. Компоновщик, используемый GCC, может быть
напечатано с использованием который `gcc -print-prog-name = ld`. Эта опция доступна только на
64-битный HP-UX GCC, т.е. настроенный с hppa * 64 * - * - hpux *.

-mlong-вызовы
Сгенерируйте код, использующий длинные последовательности вызовов. Это гарантирует, что звонок всегда возможен.
для доступа к сгенерированным компоновщиком заглушкам. По умолчанию длинные вызовы генерируются только тогда, когда
расстояние от места вызова до начала функции или единицы перевода, как
в этом случае может быть превышен предопределенный предел, установленный используемым типом ветви. В
ограничения для обычных вызовов составляют 7,600,000 240,000 2.0 и XNUMX XNUMX байтов соответственно для PA XNUMX.
и архитектуры PA 1.X. Sibcall всегда ограничен 240,000 XNUMX байтами.

Расстояния измеряются от начала функций при использовании
-функции-разделы вариант, или при использовании -мгаз и -mno-Portable-runtime кредита
вместе под HP-UX с компоновщиком SOM.

Обычно использовать эту опцию нежелательно, так как это снизит производительность.
Однако это может быть полезно в больших приложениях, особенно когда частичное связывание
используется для создания приложения.

Типы используемых длинных вызовов зависят от возможностей ассемблера и компоновщика,
и тип генерируемого кода. Влияние на системы, поддерживающие длительную
Абсолютные вызовы и длинные вызовы с разницей в символах или относительные вызовы ПК должны быть
относительно маленький. Однако косвенный вызов используется в 32-битных системах ELF в коде pic.
и это довольно долго.

-munix =unix-std
Сгенерируйте предопределения компилятора и выберите начальный файл для указанного стандарта UNIX.
Выбор для unix-std Он 93, 95 и 98. 93 поддерживается во всех версиях HP-UX.
95 доступно в HP-UX 10.10 и более поздних версиях. 98 доступно в HP-UX 11.11 и более поздних версиях.
Значения по умолчанию: 93 для HP-UX 10.00, 95 для HP-UX 10.10 хотя и до 11.00, и 98
для HP-UX 11.11 и более поздних версий.

-munix = 93 предоставляет те же предопределения, что и GCC 3.3 и 3.4. -munix = 95 приводит
дополнительные предопределения для "XOPEN_UNIX" и "_XOPEN_SOURCE_EXTENDED", а также для файла запуска
unix95.о. -munix = 98 предоставляет дополнительные предопределения для "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" и "_INCLUDE_XOPEN_SOURCE_500",
и стартовый файл unix98.о.

Это важную отметить, что эта опция изменяет интерфейсы для различных библиотек
рутины. Это также влияет на рабочее поведение библиотеки C. Таким образом, экстремальный
при использовании этой опции требуется осторожность.

Код библиотеки, предназначенный для работы с более чем одним стандартом UNIX, должен быть протестирован,
установить и восстановить переменную __xpg4_extended_mask по мере необходимости. Большинство программ GNU
не предоставляет такую ​​возможность.

-нолибдлд
Подавить создание параметров ссылки для поиска libdld.sl, когда -статический опция
указано в HP-UX 10 и более поздних версиях.

-статический
Реализация setlocale в libc для HP-UX зависит от libdld.sl. Там
не является архивной версией libdld.sl. Таким образом, когда -статический опция указана,
Для разрешения этой зависимости необходимы специальные параметры ссылки.

В HP-UX 10 и более поздних версиях драйвер GCC добавляет необходимые параметры для связи с
libdld.sl, когда -статический опция указана. Это приводит к тому, что результирующий двоичный файл
быть динамичным. На 64-битном порту компоновщики по умолчанию генерируют динамические двоичные файлы в
любой случай. В -нолибдлд параметр может использоваться для предотвращения добавления драйвером GCC
эти параметры ссылки.

-потоки
Добавьте поддержку многопоточности с помощью АКД нить библиотека под HP-UX. Этот вариант
устанавливает флаги как для препроцессора, так и для компоновщика.

Intel 386 и AMD x86-64 Опции

Эти -m параметры определены для компьютеров семейства i386 и x86-64:

-mtune =тип процессора
Настройтесь на тип процессора все, что применимо к сгенерированному коду, кроме ABI
и набор доступных инструкций. Выбор для тип процессора составляют:

родовой
Создавайте код, оптимизированный для наиболее распространенных процессоров IA32 / AMD64 / EM64T. если ты
знать процессор, на котором будет выполняться ваш код, тогда вы должны использовать соответствующий
-мтюн вместо -mtune = общий. Но, если вы точно не знаете, какой процессор
пользователи вашего приложения будут иметь, тогда вы должны использовать эту опцию.

По мере появления на рынке новых процессоров поведение этого параметра
изменится. Поэтому, если вы обновитесь до более новой версии GCC, код
сгенерированный параметр изменится, чтобы отразить процессоры, которые были наиболее распространены, когда
эта версия GCC была выпущена.

Здесь нет -march = общий вариант, потому что -маршировать указывает на набор инструкций
компилятор может использовать, и нет общего набора инструкций, применимого ко всем
процессоры. Наоборот, -мтюн обозначает процессор (или, в данном случае,
набор процессоров), для которых оптимизирован код.

родной
Это выбирает ЦП для настройки во время компиляции, определяя процессор
тип компилирующей машины. С использованием -mtune = родной создаст оптимизированный код
для локальной машины в рамках ограничений выбранного набора команд.
. -march = родной включит все подмножества инструкций, поддерживаемые локальным
машина (следовательно, результат может не работать на разных машинах).

i386
Оригинальный процессор Intel i386.

i486
Процессор Intel i486. (Для этого чипа планирование не реализовано.)

i586, Pentium
Процессор Intel Pentium без поддержки MMX.

Pentium-MMX
Процессор Intel PentiumMMX на базе ядра Pentium с поддержкой набора команд MMX.

Pentiumpro
Процессор Intel PentiumPro.

i686
То же, что и «общий», но при использовании в качестве «маршевого» варианта, набор инструкций PentiumPro
будет использоваться, поэтому код будет работать на всех чипах семейства i686.

Pentium2
Процессор Intel Pentium2 на базе ядра PentiumPro с поддержкой набора команд MMX.

Pentium3, Pentium3M
Процессор Intel Pentium3 на базе ядра PentiumPro с набором инструкций MMX и SSE
.

Pentium-M
Версия с низким энергопотреблением процессора Intel Pentium3 с набором инструкций MMX, SSE и SSE2
служба поддержки. Используется ноутбуками Centrino.

Pentium4, Pentium4M
Процессор Intel Pentium4 с поддержкой набора инструкций MMX, SSE и SSE2.

Prescott
Улучшенная версия процессора Intel Pentium4 с инструкциями MMX, SSE, SSE2 и SSE3
установить опору.

Nocona
Улучшенная версия процессора Intel Pentium4 с 64-битными расширениями, MMX, SSE, SSE2 и
Поддержка набора инструкций SSE3.

core2
Процессор Intel Core2 с 64-битными расширениями, MMX, SSE, SSE2, SSE3 и инструкция SSSE3
установить опору.

corei7
Процессор Intel Core i7 с 64-битными расширениями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 и
Поддержка набора инструкций SSE4.2.

corei7-avx
Процессор Intel Core i7 с 64-битными расширениями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Поддержка набора инструкций SSE4.2, AVX, AES и PCLMUL.

ядро-avx-я
Процессор Intel Core с 64-битными расширениями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Поддержка набора инструкций SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND и F16C.

атом
Процессор Intel Atom с 64-битными расширениями, MMX, SSE, SSE2, SSE3 и инструкция SSSE3
установить опору.

k6 Процессор AMD K6 с поддержкой набора команд MMX.

к6-2, k6-3
Улучшенные версии процессора AMD K6 с MMX и 3DNow! поддержка набора команд.

Атлон Athlon-Tbird
Процессор AMD Athlon с MMX, 3dNOW !, улучшенный 3DNow! и инструкции предварительной выборки SSE
.

Атлон-4, Athlon-XP, Athlon-MP
Улучшенный процессор AMD Athlon с MMX, 3DNow !, улучшенный 3DNow! и полная инструкция SSE
установить опору.

к8, оптерон Athlon64, Athlon-FX
Процессоры на базе ядра AMD K8 с поддержкой набора команд x86-64. (Это расширяет MMX,
SSE, SSE2, 3DNow !, улучшенное 3DNow! и 64-битные расширения набора команд.)

к8-ссе3, оптерон-ссе3, Athlon64-sse3
Улучшенные версии k8, opteron и athlon64 с поддержкой набора инструкций SSE3.

амдфам10, Барселона
Процессоры AMD семейства 10h на базе ядра с поддержкой набора команд x86-64. (Этот
суперсеты MMX, SSE, SSE2, SSE3, SSE4A, 3DNow !, улучшенные 3DNow !, ABM и 64-битные
расширения набора инструкций.)

бдвер1
Процессоры AMD семейства 15h на базе ядра с поддержкой набора команд x86-64. (Этот
надмножества FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM и 64-битные расширения набора команд.)

бдвер2
Процессоры AMD семейства 15h на базе ядра с поддержкой набора команд x86-64. (Этот
суперсеты BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM и 64-разрядные расширения набора инструкций.)

бтвер1
Процессоры AMD семейства 14h на базе ядра с поддержкой набора команд x86-64. (Этот
надмножества MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM и 64-битный набор инструкций
расширения.)

лебедка-c6
IDT Winchip C6 CPU, работает так же, как i486, с дополнительным набором инструкций MMX
.

винчип2
IDT Winchip2 CPU, работает так же, как i486, с дополнительным MMX и 3DNow!
поддержка набора команд.

c3 Через ЦП C3 с MMX и 3DNow! поддержка набора команд. (Нет расписания
реализовано для этого чипа.)

c3-2
Через ЦП C3-2 с поддержкой набора команд MMX и SSE. (Нет расписания
реализовано для этого чипа.)

жеода
Встроенный процессор AMD с MMX и 3DNow! поддержка набора команд.

Выбирая конкретный тип процессора будет планировать вещи соответственно для этого
конкретный чип, компилятор не будет генерировать код, который не запускается на
тип машины по умолчанию без -март =тип процессора используемый вариант. Например, если
GCC настроен для i686-pc-linux-gnu, затем -mtune = Pentium4 сгенерирует код, который
настроен для Pentium4, но по-прежнему будет работать на машинах i686.

-март =тип процессора
Сгенерируйте инструкции для типа машины тип процессора. Выбор для тип процессора являются
то же, что и для -мтюн. Кроме того, указав -март =тип процессора подразумевает -mtune =тип процессора.

-mcpu =тип процессора
Устаревший синоним слова -мтюн.

-mfpmath =Ед. изм
Сгенерировать арифметику с плавающей запятой для выбранной единицы Ед. изм. Выбор для Ед. изм составляют:

387 Используйте стандартный сопроцессор с плавающей запятой 387, присутствующий на большинстве микросхем
и эмулировал иначе. Код, скомпилированный с этой опцией, работает почти везде.
Временные результаты вычисляются с точностью до 80 бит вместо точности.
указан типом, что приводит к немного другим результатам по сравнению с большинством
другие фишки. Видеть -флот-магазин для более подробного описания.

Это выбор по умолчанию для компилятора i386.

SSE Используйте скалярные инструкции с плавающей запятой, присутствующие в наборе инструкций SSE. Этот
набор команд поддерживается Pentium3 и более новыми чипами, в линейке AMD -
Чипы Athlon-4, Athlon-xp и Athlon-mp. Более ранняя версия инструкции SSE
set поддерживает только арифметику с одинарной точностью, поэтому двойные и расширенные
точная арифметика по-прежнему выполняется с использованием 387. Более поздняя версия, присутствует только в
Pentium4 и будущие чипы AMD x86-64, поддерживают арифметику двойной точности
тоже.

Для компилятора i386 вам нужно использовать -март =тип процессора, -msse or -msse2 переключатели
чтобы включить расширения SSE и сделать эту опцию эффективной. Для компилятора x86-64
эти расширения включены по умолчанию.

Результирующий код должен быть значительно быстрее в большинстве случаев и
избежать проблем с числовой нестабильностью кода 387, но может нарушить некоторые существующие
код, который ожидает, что временные файлы будут 80-битными.

Это выбор по умолчанию для компилятора x86-64.

sse, 387
sse + 387
изоферменты печени
Попытайтесь использовать оба набора инструкций одновременно. Это эффективно удваивает
количество доступных регистров и на микросхемах с отдельными исполнительными блоками на 387
и SSE ресурсы исполнения тоже. Используйте эту опцию осторожно, так как она все еще
экспериментальный, потому что распределитель регистров GCC не моделирует отдельные
функциональные блоки хорошо, что приводит к нестабильной работе.

-masm =диалект
Вывести инструкции asm, используя selected диалект. Поддерживаемые варианты: Intel or к
(по умолчанию). Дарвин не поддерживает Intel.

-mieee-fp
-mno-ieee-fp
Контролируйте, использует ли компилятор сравнения с плавающей запятой IEEE. Эти
правильно обрабатывать случай, когда результат сравнения неупорядочен.

-msoft-поплавок
Сгенерировать вывод, содержащий вызовы библиотеки для чисел с плавающей запятой. Внимание! реквизит
библиотеки не являются частью GCC. Обычно возможности обычного C машины
компилятор, но это невозможно сделать напрямую в кросс-компиляции. Вы должны
примите меры, чтобы предоставить подходящие библиотечные функции для перекрестных
сборник.

На машинах, где функция возвращает результаты с плавающей запятой в регистре 80387
стек, некоторые коды операций с плавающей запятой могут быть испущены, даже если -msoft-поплавок используется.

-mno-fp-рет-в-387
Не используйте регистры FPU для возвращаемых значений функций.

Обычное соглашение о вызовах имеет функции, возвращающие значения типов "float" и "double".
в регистре FPU, даже если FPU отсутствует. Идея в том, что операционная система
должен имитировать FPU.

Опция -mno-fp-рет-в-387 заставляет такие значения возвращаться в обычном процессоре
вместо этого регистрируется.

-мно-фантазия-математика-387
Некоторые эмуляторы 387 не поддерживают инструкции sin, cos и sqrt для
387. Укажите эту опцию, чтобы эти инструкции не генерировались. Этот вариант является
по умолчанию во FreeBSD, OpenBSD и NetBSD. Эта опция отменяется, когда -маршировать
указывает, что целевой ЦП всегда будет иметь FPU, и поэтому инструкция не будет
нужна эмуляция. Начиная с версии 2.6.1, эти инструкции не создаются, если вы
также использовать -funsafe-математическая-оптимизация переключатель.

-злокачественный-двойной
-mno-align-двойной
Контролируйте, выравнивает ли GCC переменные типа double, long double и long long на
граница из двух слов или граница из одного слова. Выравнивание "двойных" переменных на двух словах
Граница создает код, который работает несколько быстрее на Пентиум за счет большего
Память.

На x86-64, -злокачественный-двойной по умолчанию включен.

Внимание! если вы используете -злокачественный-двойной switch, структуры, содержащие указанные выше типы
будет выровнен иначе, чем двоичный интерфейс опубликованного приложения
спецификации для 386 и не будут двоично совместимы со структурами в коде
скомпилирован без этого переключателя.

-m96bit-длинный-двойной
-m128bit-длинный-двойной
Эти переключатели регулируют размер типа «длинный двойной». Бинарный файл приложения i386
интерфейс определяет размер 96 бит, поэтому -m96bit-длинный-двойной по умолчанию в
32-битный режим.

Современные архитектуры (Pentium и новее) предпочитают «длинный двойной» выравнивать с 8-ю цифрами.
или 16-байтовая граница. В массивах или структурах, соответствующих ABI, это не
возможный. Так что уточняя -m128bit-длинный-двойной выравнивает "длинный двойной" по 16-байтовому
границу, добавив к "длинному двойнику" дополнительный 32-битный ноль.

В компиляторе x86-64 -m128bit-длинный-двойной - выбор по умолчанию в качестве ABI
указывает, что «длинный двойной» должен быть выровнен по 16-байтовой границе.

Обратите внимание, что ни один из этих параметров не обеспечивает дополнительную точность по сравнению со стандартом x87.
80 бит для "длинного двойника".

Внимание! если вы переопределите значение по умолчанию для вашего целевого ABI, структуры и
массивы, содержащие переменные типа long double, изменят свой размер, а также функцию
будет изменено соглашение о вызове функции, принимающей "длинный двойной". Следовательно, они
не будет двоично совместим с массивами или структурами в коде, скомпилированном без этого
переключатель.

-mlarge-data-threshold =номер
После появления -mcmodel = средний указано, данные больше, чем порог размещены в большом
раздел данных. Это значение должно быть одинаковым для всех объектов, связанных с двоичным файлом.
и по умолчанию 65535.

-мртд
Используйте другое соглашение о вызове функций, в котором функции, которые принимают фиксированный
количество аргументов, возвращаемых с помощью "ret" Num инструкция, которая выдвигает свои аргументы
при возвращении. Это сохраняет одну инструкцию в вызывающей программе, так как нет необходимости
вставьте туда аргументы.

Вы можете указать, что отдельная функция вызывается с этой последовательностью вызовов с помощью
атрибут функции STDCALL. Вы также можете переопределить -мртд вариант с помощью
атрибут функции cdecl.

Внимание! это соглашение о вызовах несовместимо с тем, которое обычно используется в Unix,
поэтому вы не можете использовать его, если вам нужно вызвать библиотеки, скомпилированные с помощью компилятора Unix.

Кроме того, вы должны предоставить прототипы функций для всех функций, которые принимают переменные.
количество аргументов (включая «printf»); иначе будет сгенерирован неверный код
для вызовов этих функций.

Кроме того, если вы вызовете функцию со слишком большим количеством
аргументы. (Обычно дополнительные аргументы безвредно игнорируются.)

-mregparm =Num
Управляйте количеством регистров, используемых для передачи целочисленных аргументов. По умолчанию нет
регистры используются для передачи аргументов, и можно использовать не более 3 регистров. Вы можете
контролировать это поведение для конкретной функции с помощью атрибута функции регпарм.

Внимание! если вы используете этот переключатель, и Num не равно нулю, тогда вы должны собрать все модули
с тем же значением, включая любые библиотеки. Сюда входят системные библиотеки и
модули запуска.

-msseregparm
Используйте соглашения о передаче регистров SSE для аргументов типа float и double и возвращаемых значений.
Вы можете контролировать это поведение для конкретной функции с помощью атрибута function
ссерегпарм.

Внимание! если вы используете этот переключатель, вы должны собрать все модули с одинаковым значением,
включая любые библиотеки. Сюда входят системные библиотеки и модули запуска.

-mvect8-ret-in-mem
Возврат 8-байтовых векторов в память вместо регистров MMX. Это значение по умолчанию
Solaris @ tie {} 8 и 9 и VxWorks должны соответствовать ABI компиляторов Sun Studio до тех пор, пока
версия 12. Более поздние версии компилятора (начиная с Studio 12 Update @ tie {} 1) следуют
ABI, используемый другими целями x86, который используется по умолчанию в Solaris @ tie {} 10 и более поздних версиях.
Только используйте эту опцию, если вам нужно оставаться совместимым с существующим кодом, созданным
те предыдущие версии компилятора или более старые версии GCC.

-mpc32
-mpc64
-mpc80
Установите точность 80387 с плавающей запятой на 32, 64 или 80 бит. Когда -mpc32 указано,
значения результатов операций с плавающей запятой округлены до 24 бит
(одинарная точность); -mpc64 округляет значения результатов с плавающей запятой
операции до 53 бит (двойная точность) и -mpc80 округляет значения результатов
операций с плавающей запятой до 64 бит (расширенная двойная точность), что является
дефолт. При использовании этого параметра выполняются операции с плавающей запятой с более высокой точностью.
недоступно для программиста без явной установки управляющего слова FPU.

Установка округления операций с плавающей запятой ниже 80 бит по умолчанию может
ускорить некоторые программы на 2% и более. Обратите внимание, что некоторые математические библиотеки предполагают, что
операции с плавающей запятой расширенной точности (80 бит) включены по умолчанию; распорядки
в таких библиотеках может быть значительно потеряна точность, обычно из-за
называется "катастрофическая отмена", когда этот параметр используется для установки точности на
меньшая, чем повышенная точность.

-mstackrealign
Выровняйте стек при входе. На Intel x86 -mstackrealign вариант сгенерирует
альтернативный пролог и эпилог, которые при необходимости перестраивают стек выполнения.
Это поддерживает смешивание устаревших кодов, которые поддерживают 4-байтовый стек, выровненный с современными кодами.
которые хранят 16-байтовый стек для совместимости с SSE. См. Также атрибут
«force_align_arg_pointer», применимый к отдельным функциям.

-mpreferred-stack-boundary =Num
Попытка сохранить границу стека, выровненную по значению 2, поднятому до Num граница байта. Если
-mpreferred-stack-граница не указан, по умолчанию - 4 (16 байтов или 128 бит).

Внимание! При генерации кода для архитектуры x86-64 с расширениями SSE
отключен, -mpreferred-stack-boundary = 3 может использоваться для выравнивания границы стека
до 8-байтовой границы. Вы должны собрать все модули с -mpreferred-stack-boundary = 3,
включая любые библиотеки. Сюда входят системные библиотеки и модули запуска.

-mincoming-stack-boundary =Num
Предположим, что входящий стек выровнен по 2, увеличенному до Num граница байта. Если
-mincoming-stack-граница не указан, тот, который указан
-mpreferred-stack-граница будет использоваться.

В Pentium и PentiumPro значения "double" и "long double" должны быть выровнены по
8-байтовая граница (см. -злокачественный-двойной) или страдают от значительной производительности во время выполнения
штрафы. В Pentium III тип данных Streaming SIMD Extension (SSE) «__m128» может
не будет работать должным образом, если он не выровнен по 16 байтам.

Чтобы обеспечить правильное выравнивание этих значений в стеке, граница стека должна быть такой, как
выровнен в соответствии с требованиями любого значения, хранящегося в стеке. Далее, каждая функция
должен быть сгенерирован таким образом, чтобы он поддерживал выравнивание стека. Таким образом вызывая функцию
скомпилирован с более высокой предпочтительной границей стека из функции, скомпилированной с более низкой
предпочтительная граница стека, скорее всего, приведет к смещению стека. Рекомендуется, чтобы
библиотеки, использующие обратные вызовы, всегда используют настройку по умолчанию.

Это дополнительное выравнивание требует дополнительного места в стеке и, как правило, увеличивает объем кода.
размер. Код, чувствительный к использованию пространства стека, например встроенные системы и
ядра операционной системы, может потребоваться уменьшить предпочтительное выравнивание до
-mpreferred-stack-boundary = 2.

-мммх
-мно-ммх
-msse
-мно-ссе
-msse2
-мно-ссе2
-msse3
-мно-ссе3
-mssse3
-мно-сссе3
-msse4.1
-мно-ссе4.1
-msse4.2
-мно-ссе4.2
-msse4
-мно-ссе4
-мавкс
-mno-avx
-mavx2
-mno-avx2
-мэйс
-мно-аес
-mpclmul
-мно-пклмул
-mfsgsbase
-mno-fsgsbase
-мрдрнд
-мно-rdrnd
-mf16c
-mno-f16c
-мфма
-мно-фма
-msse4a
-mno-sse4a
-мфма4
-mno-fma4
-mxop
-мно-хоп
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-мно-попцнт
-мабм
-мно-абм
-мбми
-mbmi2
-мно-бми
-mno-bmi2
-mlzcnt
-mno-lzcnt
-мтбм
-мно-тбм
Эти переключатели включают или отключают использование инструкций в MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT или 3DNow!
расширенные наборы инструкций. Эти расширения также доступны как встроенные.
функции: см. X86 Встроенный функции, для получения подробной информации о включенных функциях и
отключены этими переключателями.

Чтобы инструкции SSE / SSE2 автоматически генерировались из кода с плавающей запятой (как
в отличие от 387 инструкций), см. -mfpmath = sse.

GCC отменяет инструкции SSEx, когда -мавкс используется. Вместо этого он генерирует новый AVX
инструкции или эквивалент AVX для всех инструкций SSEx при необходимости.

Эти параметры позволят GCC использовать эти расширенные инструкции в сгенерированном коде,
даже без -mfpmath = sse. Приложения, выполняющие определение ЦП во время выполнения, должны
компилировать отдельные файлы для каждой поддерживаемой архитектуры, используя соответствующие флаги.
В частности, файл, содержащий код обнаружения ЦП, должен быть скомпилирован без
эти варианты.

-мклд
Эта опция предписывает GCC выдавать инструкцию "cld" в прологе функций.
которые используют строковые инструкции. Строковые инструкции зависят от флага DF для выбора
между режимом автоинкремента или автоудекремента. В то время как ABI указывает флаг DF для
очищаться при вводе функции, некоторые операционные системы нарушают эту спецификацию, не
очистка флага DF в диспетчерах исключений. Обработчик исключения может быть
вызывается с установленным флагом DF, что приводит к неправильному режиму направления, когда строка
инструкции используются. Этот параметр можно включить по умолчанию для 32-разрядных целей x86 с помощью
настройка GCC с --enable-cld вариант настройки. Генерация "cld"
инструкции могут быть подавлены с помощью -mno-cld параметр компилятора в этом случае.

-mvzerupper
Эта опция предписывает GCC выдать инструкцию "vzeroupper" перед передачей
поток управления из функции для минимизации штрафа перехода от AVX к SSE, а также
удалить ненужные встроенные функции zeroupper.

-mprefer-avx128
Эта опция указывает GCC использовать 128-битные инструкции AVX вместо 256-битных AVX.
инструкции в авто-векторизаторе.

-mcx16
Эта опция позволит GCC использовать инструкцию CMPXCHG16B в сгенерированном коде.
CMPXCHG16B позволяет выполнять атомарные операции с данными 128-битного двойного четверного слова (или слова)
типы. Это полезно для счетчиков с высоким разрешением, которые могут обновляться несколькими
процессоры (или ядра). Эта инструкция генерируется как часть встроенного атомарного
функции: см. __синхронизация Встроенные or __ атомный Встроенные для получения информации.

-мсахф
Эта опция позволит GCC использовать инструкцию SAHF в сгенерированном 64-битном коде. Рано
В процессорах Intel с Intel 64 отсутствовали инструкции LAHF и SAHF, поддерживаемые AMD64 до тех пор, пока
представление Pentium 4 G1 step в декабре 2005 года. LAHF и SAHF загружаются и сохраняются.
инструкции, соответственно, для определенных флагов состояния. В 64-битном режиме SAHF
инструкция используется для оптимизации встроенных функций «fmod», «drem» или «остаток»: см.
Другие контрактные услуги Встроенные для получения информации.

-ммовбе
Эта опция позволит GCC использовать инструкцию movbe для реализации "__builtin_bswap32"
и «__builtin_bswap64».

-mcrc32
Эта опция включит встроенные функции, «__builtin_ia32_crc32qi»,
"__builtin_ia32_crc32hi". «__builtin_ia32_crc32si» и «__builtin_ia32_crc32di» на
сгенерируйте машинную инструкцию crc32.

-mrecip
Эта опция позволит GCC использовать инструкции RCPSS и RSQRTSS (и их
векторизованные варианты RCPPS и RSQRTPS) с дополнительным шагом Ньютона-Рафсона для
повысить точность вместо DIVSS и SQRTSS (и их векторизованных вариантов) для
аргументы с плавающей запятой одинарной точности. Эти инструкции генерируются только тогда, когда
-funsafe-математическая-оптимизация включен вместе с -finite-math-only - только математика и
-fno-ловушка-математика. Обратите внимание, что хотя пропускная способность последовательности выше, чем
пропускная способность невзаимной инструкции, точность последовательности может быть
уменьшилось до 2 ulp (т.е. обратное значение 1.0 равно 0.99999994).

Обратите внимание, что GCC реализует "1.0f / sqrtf (Икс)" с точки зрения RSQRTSS (или RSQRTPS) уже с
-ffast-математика (или указанная выше комбинация опций) и не требует -mrecip.

Также обратите внимание, что GCC испускает указанную выше последовательность с дополнительным шагом Ньютона-Рафсона для
векторизованное деление с одним поплавком и векторизованное "sqrtf (Икс)" уже с -ffast-математика
(или указанная выше комбинация опций) и не требует -mrecip.

-mrecip =выбирать
Эта опция позволяет контролировать, какие инструкции обратной оценки могут использоваться. выбирать
- это список параметров, разделенных запятыми, которому может предшествовать "!" инвертировать
option: "all": включить все инструкции по оценке, "default": включить значение по умолчанию
инструкции, эквивалентные -mrecip, "none": отключить все инструкции по оценке,
что эквивалентно -мно-рецип, "div": включить аппроксимацию для скалярного деления,
"vec-div": включить аппроксимацию для векторизованного деления, "sqrt": включить
приближение для скалярного квадратного корня, "vec-sqrt": включите приближение для
векторизованный квадратный корень.

Так, например, -mrecip = все,! sqrt позволил бы все взаимные приближения,
кроме квадратного корня.

-mveclibabi =напишите
Задает тип ABI, который будет использоваться для векторизации встроенных функций с использованием внешней библиотеки.
Поддерживаемые типы: svml для математической библиотеки коротких векторов Intel и acml для
Стиль взаимодействия с математической основной библиотекой AMD. GCC в настоящее время будет отправлять вызовы на
"vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
"vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2",
"vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
«vmlsExp4», «vmlsLn4», «vmlsLog104», «vmlsLog104», «vmlsPow4», «vmlsTanh4»,
«vmlsTan4», «vmlsAtan4», «vmlsAtanh4», «vmlsCbrt4», «vmlsSinh4», «vmlsSin4»,
"vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" и "vmlsAcos4" для
соответствующий тип функции, когда -mveclibabi = svml используется и "__vrd2_sin",
«__vrd2_cos», «__vrd2_exp», «__vrd2_log», «__vrd2_log2», «__vrd2_log10»,
«__vrs4_sinf», «__vrs4_cosf», «__vrs4_expf», «__vrs4_logf», «__vrs4_log2f»,
«__vrs4_log10f» и «__vrs4_powf» для соответствующего типа функции, когда
-mveclibabi = acml используется. Оба -ftree-векторизация и -funsafe-математическая-оптимизация иметь
быть включенным. Библиотека, совместимая с SVML или ACML ABI, должна быть указана по ссылке
времени.

-mabi =имя
Сгенерируйте код для указанного соглашения о вызовах. Допустимые значения: сисв для
ABI, используемый в GNU / Linux и других системах и ms для Microsoft ABI. По умолчанию
- использовать Microsoft ABI при нацеливании на Windows. Во всех других системах по умолчанию
это SYSV ABI. Вы можете контролировать это поведение для конкретной функции с помощью
атрибут функции мс_аби/sysv_abi.

-mtls-dialect =напишите
Сгенерируйте код для доступа к локальному хранилищу потока с помощью гну or GNU2 конвенций. гну
консервативный дефолт; GNU2 более эффективен, но может добавить компиляцию и запуск
требования ко времени, которые не могут быть удовлетворены во всех системах.

-mpush-аргументы
-mno-push-аргументы
Используйте операции PUSH для сохранения исходящих параметров. Этот метод короче и обычно
так же быстро, как и метод, использующий операции SUB / MOV, и включен по умолчанию. В некоторых
случаев, отключение которых может улучшить производительность из-за улучшенного планирования и уменьшения
зависимости.

-maccumulate-исходящие-аргументы
Если этот параметр включен, максимальный объем пространства, необходимого для исходящих аргументов, будет
вычисляется в прологе функции. Это быстрее на большинстве современных процессоров из-за
уменьшение зависимостей, улучшенное планирование и меньшее использование стека при предпочтительном стеке
Граница не равна 2. Недостатком является заметное увеличение размера кода. Этот
переключатель подразумевает -mno-push-аргументы.

-mthreads
Поддержка потокобезопасной обработки исключений на Мингв32. Код, основанный на потокобезопасности
обработка исключений должна компилироваться и связывать весь код с -mthreads вариант. Когда
компиляция, -mthreads определяет -D_MT; при связывании он ссылается на специальный помощник потока
библиотека -lmingwthrd который очищает данные обработки исключений для каждого потока.

-mno-align-stringops
Не выравнивайте назначение встроенных строковых операций. Этот переключатель уменьшает размер кода
и повышает производительность в случае, если пункт назначения уже выровнен, но GCC не
знать об этом.

-минлайн-все-струнные
По умолчанию GCC встраивает строковые операции только в том случае, если известно, что адресатом
выровнен по крайней мере по 4-байтовой границе. Это позволяет больше встраивать, увеличивать размер кода,
но может улучшить производительность кода, который зависит от быстрых memcpy, strlen и memset для
короткие длины.

-minline-stringops-динамически
Для строковых операций неизвестного размера используйте проверки времени выполнения со встроенным кодом для небольших
блоки и библиотека требуют больших блоков.

-mstringop-strategy =ALG
Перезаписать внутреннюю эвристику решения о конкретном алгоритме во встроенную строку
работа с. Допустимые значения: rep_byte, rep_4byte, rep_8byte для
расширение с использованием префикса i386 "rep" указанного размера, "byte_loop", "loop",
unrolled_loop для расширения встроенного цикла, libcall для постоянного расширения библиотеки
вызов.

-Momit-Leaf-Frame-указатель
Не храните указатель фрейма в регистре для листовых функций. Это позволяет избежать
инструкции по сохранению, настройке и восстановлению указателей кадров и делает дополнительный регистр
доступны в листовых функциях. Опция -fomit-frame-pointer снимает рамку
указатель для всех функций, что может затруднить отладку.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Управляет доступом к переменным TLS со смещениями из сегмента TLS.
регистр (% gs для 32-разрядной версии,% fs для 64-разрядной версии), или должен ли базовый указатель потока быть
добавлен. Законно это или нет, зависит от операционной системы и от того,
отображает сегмент, чтобы покрыть всю область TLS.

Для систем, использующих GNU libc, по умолчанию включено.

-msse2avx
-mno-sse2avx
Укажите, что ассемблер должен кодировать инструкции SSE с префиксом VEX. Опция
-мавкс по умолчанию включается.

-mfentry
-мно-фентри
Если профилирование активно -пг поставьте вызов счетчика профилирования перед прологом. Примечание: Вкл.
На архитектурах x86 атрибут "ms_hook_prologue" в настоящее время недоступен для
-mfentry и -пг.

-m8bit-идив
-mno-8bit-идив
На некоторых процессорах, таких как Intel Atom, 8-битное целочисленное деление без знака выполняется намного быстрее, чем
32-битное / 64-битное целочисленное деление. Эта опция генерирует проверку во время выполнения. Если оба
делимое и делитель находятся в диапазоне от 0 до 255, 8-битное целочисленное деление без знака равно
используется вместо 32-битного / 64-битного целочисленного деления.

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
Разделите 32-байтовую невыровненную загрузку и сохранение AVX.

Эти -m Переключатели поддерживаются в дополнение к вышеперечисленному на процессорах AMD x86-64 в
64-битные среды.

-м32
-м64
-мх32
Сгенерируйте код для 32-битной или 64-битной среды. В -м32 option устанавливает int, long и
указатель на 32 бита и генерирует код, который работает в любой системе i386. В -м64 вариант
устанавливает int равным 32 битам и long и указатель на 64 бита и генерирует код для AMD
Архитектура x86-64. В -мх32 опция устанавливает int, long и указатель на 32 бита и
генерирует код для архитектуры AMD x86-64. Для Дарвина только -м64 вариант поворачивается
от -фно-пик и -mdynamic-без изображения настройки.

-мно-красная-зона
Не используйте так называемую красную зону для кода x86-64. Красная зона обязана
x86-64 ABI, это 128-байтовая область за пределами указателя стека, которая будет
не могут быть изменены обработчиками сигналов или прерываний и, следовательно, могут использоваться для
временные данные без изменения указателя стека. Флаг -мно-красная-зона отключает
эта красная зона.

-mcmodel = маленький
Сгенерируйте код для небольшой модели кода: программа и ее символы должны быть связаны в
нижние 2 ГБ адресного пространства. Указатели 64-битные. Программы могут быть
статически или динамически связаны. Это модель кода по умолчанию.

-mcmodel = ядро
Сгенерируйте код для модели кода ядра. Ядро работает в отрицательных 2 ГБ
адресное пространство. Эта модель должна использоваться для кода ядра Linux.

-mcmodel = средний
Сгенерируйте код для средней модели: программа связана в нижних 2 ГБ
адресное пространство. Там же размещены маленькие символы. Символы размером больше, чем
-mlarge-данные-порог помещаются в разделы больших данных или bss и могут быть расположены
выше 2 ГБ. Программы могут быть статически или динамически связаны.

-mcmodel = большой
Сгенерировать код для большой модели: эта модель не делает никаких предположений об адресах и
размеры секций.

-maddress-mode = длинный
Сгенерируйте код для режима длинного адреса. Поддерживается только для 64-битных и x32-битных версий.
среды. Это режим адресации по умолчанию для 64-битных сред.

-maddress-mode = короткий
Сгенерируйте код для режима короткого адреса. Поддерживается только для 32-битных версий и x32.
среды. Это режим адреса по умолчанию для 32-битных и x32 сред.

i386 и x86-64 Windows Опции

Эти дополнительные параметры доступны для целей Windows:

-mconsole
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что консоль
приложение должно быть сгенерировано, указав компоновщику установить заголовок PE
тип подсистемы, необходимый для консольных приложений. Это поведение по умолчанию для
Цели Cygwin и MinGW.

-mdll
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что DLL - это
библиотека динамической компоновки - должна быть сгенерирована, позволяя выбрать требуемый
объект запуска среды выполнения и точка входа.

-mnop-весело-dllimport
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что
Атрибут dllimport следует игнорировать.

-mthread
Эта опция доступна для целей MinGW. Он указывает, что поток, специфичный для MinGW,
поддержка должна использоваться.

-коммуникод
Этот параметр доступен для целей mingw-w64. Он указывает, что макрос UNICODE
становится предопределенным, и что выбран код запуска среды выполнения с поддержкой Unicode.

-mwin32
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что типичный
Предопределенные макросы Windows должны быть установлены в препроцессоре, но не влияют на
выбор библиотеки времени выполнения / кода запуска.

-мокна
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что графический интерфейс
приложение должно быть сгенерировано, указав компоновщику установить заголовок PE
тип подсистемы соответственно.

-fno-set-stack-исполняемый файл
Эта опция доступна для целей MinGW. Он указывает, что исполняемый флаг для
стек, используемый вложенными функциями, не установлен. Это необходимо для двоичных файлов, работающих в
режим ядра Windows, так как там user32 API, который используется для установки исполняемого файла
привилегии, недоступно.

-mpe-выровненные-общие
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что GNU
расширение формата PE-файла, которое позволяет правильно выравнивать ОБЩИЕ переменные
следует использовать при генерации кода. Он будет включен по умолчанию, если GCC обнаружит
что целевой ассемблер, обнаруженный во время настройки, поддерживает эту функцию.

Смотрите также под i386 и x86-64 Опции для стандартных вариантов.

IA-64 Опции

Это -m параметры, определенные для архитектуры Intel IA-64.

-mbig-endian
Сгенерируйте код для цели с прямым порядком байтов. Это значение по умолчанию для HP-UX.

-с младшим порядком байтов
Сгенерируйте код для цели с прямым порядком байтов. Это значение по умолчанию для AIX5 и GNU / Linux.

-мгну-ас
-мно-гну-ас
Создавайте (или не создавайте) код для ассемблера GNU. Это значение по умолчанию.

-mgnu-ld
-мно-гну-лд
Создавайте (или не создавайте) код для компоновщика GNU. Это значение по умолчанию.

-мно-пик
Сгенерируйте код, который не использует регистр глобального указателя. Результат не позиция
независимый код и нарушает ABI IA-64.

-msolver-asm-stop
-mno-voluty-asm-stop
Сгенерировать (или не создавать) стоповый бит непосредственно перед и после volatile asm-операторов.

-mрегистр-имена
-mno-регистры-имена
Создавать (или не создавать) in, LOCкачества внешний имена регистров для стековых регистров. Этот
может сделать вывод ассемблера более читабельным.

-mno-sdata
-мсданные
Отключите (или включите) оптимизацию, использующую небольшой раздел данных. Это может быть полезно
для работы с ошибками оптимизатора.

-mconstant-gp
Сгенерируйте код, который использует одно постоянное значение глобального указателя. Это полезно, когда
компиляция кода ядра.

-мауто-пик
Создавайте самоперемещаемый код. Из этого следует -mconstant-gp. Это полезно
при компиляции кода прошивки.

-минлайн-поплавок-деление-мин-задержка
Сгенерируйте код для встроенного деления значений с плавающей запятой, используя минимальную задержку
алгоритм.

-minline-float-div-max-пропускная способность
Сгенерируйте код для встроенного деления значений с плавающей запятой, используя максимальную пропускную способность
алгоритм.

-mno-inline-float-div
Не создавайте встроенный код для деления значений с плавающей запятой.

-минлайн-интервал-разделить-мин-задержка
Сгенерируйте код для встроенного деления целочисленных значений, используя минимальную задержку
алгоритм.

-minline-int-div-max-пропускная способность
Сгенерируйте код для встроенного деления целочисленных значений с использованием максимальной пропускной способности
алгоритм.

-mno-inline-int-div
Не создавайте встроенный код для деления целочисленных значений.

-minline-sqrt-min-задержка
Сгенерируйте код для встроенных квадратных корней, используя алгоритм минимальной задержки.

-minline-sqrt-max-пропускная способность
Сгенерируйте код для встроенных квадратных корней, используя алгоритм максимальной пропускной способности.

-mno-inline-sqrt
Не создавайте встроенный код для sqrt.

-растерянный-безумный
-mno-плавленный-madd
Не создавайте (не) код, который использует объединенные функции умножения / сложения или умножения / вычитания
инструкции. По умолчанию используются эти инструкции.

-mno-dwarf2-asm
-mdwarf2-asm
Не (или не создавайте) код ассемблера для отладочной информации номера строки DWARF2. Этот
может быть полезно, когда не используется ассемблер GNU.

-Marly-Stop-биты
-мно-ранние-стоп-биты
Разрешить установку стоповых битов раньше, чем непосредственно перед инструкцией, которая
сработал стоповый бит. Это может улучшить планирование инструкций, но не всегда
Сделай так.

-mfixed-range =регистр-диапазон
Сгенерируйте код, обрабатывающий данный диапазон регистров как фиксированные регистры. Фиксированный регистр
это тот, который не может использовать распределитель регистров. Это полезно при компиляции ядра
код. Диапазон регистров определяется как два регистра, разделенных тире. Несколько
диапазоны регистров можно указать через запятую.

-mtls-size =tls-размер
Укажите размер битов для немедленных смещений TLS. Допустимые значения: 14, 22 и 64.

-mtune =тип процессора
Настройте расписание выполнения инструкций для конкретного процессора. Допустимые значения: itanium,
itanium1, merced, itanium2 и mckinley.

-milp32
-mlp64
Сгенерируйте код для 32-битной или 64-битной среды. 32-битная среда устанавливает int,
long и указатель на 32 бита. В 64-битной среде int устанавливается равным 32 битам и long, а
указатель на 64 бита. Это специфические флаги HP-UX.

-mno-sched-br-data-spec
-msched-br-данные-спецификации
(Dis / En) возможность спекулятивного планирования данных перед перезагрузкой. Это приведет к
создание инструкций ld.a и соответствующих инструкций по проверке (ld.c /
чк.а). По умолчанию отключено.

-msched-ar-данные-спецификации
-mno-sched-ar-data-spec
(En / Dis) возможность спекулятивного планирования данных после перезагрузки. Это приведет к генерации
инструкций ld.a и соответствующих инструкций по проверке (ld.c / chk.a). В
по умолчанию - «включить».

-mno-sched-control-spec
-msched-control-спецификация
(Dis / En) возможность управления спекулятивным планированием. Эта функция доступна только во время
планирование региона (т.е. перед перезагрузкой). Это приведет к созданию ld.s
инструкции и соответствующие инструкции по проверке chk.s. По умолчанию
'запрещать'.

-msched-br-в-данных-спецификации
-mno-sched-br-в-данных-спецификации
(En / Dis) возможность спекулятивного планирования инструкций, зависящих от данных
спекулятивные нагрузки перед перезагрузкой. Это эффективно только с -msched-br-данные-спецификации
включено. По умолчанию установлено «разрешено».

-msched-ar-в-спецификации данных
-mno-sched-ar-in-data-spec
(En / Dis) возможность спекулятивного планирования инструкций, зависящих от данных
спекулятивные нагрузки после перезагрузки. Это эффективно только с -msched-ar-данные-спецификации
включено. По умолчанию установлено «разрешено».

-msched-in-control-spec
-mno-sched-in-control-spec
(En / Dis) возможность спекулятивного планирования инструкций, зависящих от
контролировать спекулятивные нагрузки. Это эффективно только с -msched-control-спецификация включен.
По умолчанию установлено «разрешено».

-mno-sched-preference-non-data-spec-insns
-msched-предпочитают-не-данные-спецификации-insns
Если этот параметр включен, предполагаемые инструкции по данным будут выбраны для расписания, только если есть
других вариантов на данный момент нет. Это позволит использовать предположения о данных.
намного консервативнее. По умолчанию отключено.

-mno-sched-Preferred-non-control-spec-insns
-msched-предпочитают-неконтролируемые-спецификации-insns
Если включено, контрольные умозрительные инструкции будут выбраны для расписания, только если есть
других вариантов на данный момент нет. Это позволит использовать спекуляцию с контролем
намного консервативнее. По умолчанию отключено.

-mno-sched-count-spec-критический путь
-msched-count-spec-в-критическом пути
Если включено, умозрительные зависимости будут учитываться при вычислении
указания приоритетов. Это немного расширит использование спекуляций.
консервативный. По умолчанию отключено.

-msched-spec-ldc
Используйте простую проверку предположений о данных. По умолчанию эта опция включена.

-msched-control-spec-ldc
Используйте простую проверку для контроля спекуляций. По умолчанию эта опция включена.

-msched-стоповые биты после каждого цикла
При планировании ставьте стоповый бит после каждого цикла. По умолчанию эта опция включена.

-msched-fp-mem-deps-нулевой стоимости
Предположим, что хранилища и загрузки с плавающей запятой вряд ли вызовут конфликт, когда
помещены в ту же группу инструкций. По умолчанию эта опция отключена.

-msel-sched-dont-check-control-spec
Создавайте проверки для предположений о контроле при выборочном планировании. Этот флаг
по умолчанию отключено.

-msched-max-memory-insns =макс-инснс
Ограничьте количество insns памяти на группу инструкций, давая более низкий приоритет
последующие insns памяти, пытающиеся запланировать в той же группе инструкций.
Часто используется для предотвращения конфликтов банка кэша. Значение по умолчанию - 1.

-msched-max-memory-insns-жесткий-ограничение
Запретить в группе инструкций больше чем msched-max-memory-insns. В противном случае ограничьте
"мягкий" означает, что мы предпочли бы операции, не связанные с памятью, когда предел достигнут, но
может по-прежнему планировать операции с памятью.

IA-64 / VMS Опции

Эти -m параметры определены для реализаций IA-64 / VMS:

-mvms-коды-возврата
Возвращать коды условий VMS из main. По умолчанию возвращается условие стиля POSIX.
(например, коды ошибок).

-mdebug-main =префикс
Отметьте первую подпрограмму, имя которой начинается с префикс в качестве основного распорядка для
отладчик.

-mmalloc64
По умолчанию используются 64-битные процедуры выделения памяти.

LM32 Опции

Эти -m параметры определены для архитектуры Lattice Mico32:

-mbarrel-shift-включен
Включите инструкции по сдвигу ствола.

-mdivide-включен
Включите инструкции деления и модуля.

-mmultiply-включен
Включить инструкции умножения.

-msign-extension-включен
Включить инструкции по расширению знака.

-muser-включено
Включите пользовательские инструкции.

M32C Опции

-mcpu =имя
Выберите ЦП, для которого создается код. имя может быть одним из r8c для R8C / Tiny
серии, m16c для серии M16C (до / 60), m32см для серии M16C / 80 или m32c
для серии M32C / 80.

-мсим
Указывает, что программа будет запускаться на симуляторе. Это вызывает альтернативный
подключаемая библиотека времени выполнения, поддерживающая, например, файловый ввод-вывод. Ты не должен
используйте эту опцию при создании программ, которые будут работать на реальном оборудовании; Вы должны
предоставьте свою собственную библиотеку времени выполнения для любых необходимых функций ввода-вывода.

-memregs =номер
Определяет количество псевдорегистров на основе памяти, которые GCC будет использовать во время кода.
поколение. Эти псевдорегистры будут использоваться как настоящие регистры, поэтому есть
компромисс между способностью GCC уместить код в доступные регистры и
снижение производительности за счет использования памяти вместо регистров. Обратите внимание, что все модули в
программа должна быть скомпилирована с тем же значением для этой опции. Из-за этого вы
не следует использовать этот параметр с библиотеками времени выполнения по умолчанию, построенными gcc.

M32R / D Опции

Эти -m параметры определены для архитектур Renesas M32R / D:

-м32р2
Сгенерируйте код для M32R / 2.

-m32rx
Сгенерируйте код для M32R / X.

-м32р
Сгенерируйте код для M32R. Это значение по умолчанию.

-mmodel = маленький
Предположим, что все объекты находятся в нижних 16 МБ памяти (так что их адреса могут быть
загружен с помощью инструкции "ld24"), и предположим, что все подпрограммы достижимы с помощью
Инструкция "bl". Это значение по умолчанию.

Адресуемость конкретного объекта может быть установлена ​​с помощью атрибута «модель».

-mmodel = средний
Предположим, что объекты могут находиться где угодно в 32-битном адресном пространстве (компилятор сгенерирует
инструкции "seth / add3" для загрузки их адресов) и предположим, что все подпрограммы
достижимо с помощью инструкции "bl".

-mmodel = большой
Предположим, что объекты могут находиться где угодно в 32-битном адресном пространстве (компилятор сгенерирует
инструкции "seth / add3" для загрузки их адресов), и предположим, что подпрограммы не могут быть
достижимо с помощью инструкции "bl" (компилятор будет генерировать гораздо более медленный
последовательность инструкций "seth / add3 / jl").

-msdata = нет
Отключите использование небольшой области данных. Переменные будут помещены в одну из .данные, BSSили
.родата (если не указан атрибут "section"). Это значение по умолчанию.

Небольшая область данных состоит из разделов .sdata и .sbss. Объекты могут быть явно
поместите в небольшую область данных с атрибутом «section», используя один из этих разделов.

-msdata = sdata
Поместите небольшие глобальные и статические данные в небольшую область данных, но не создавайте специальные
код для ссылки на них.

-msdata = использовать
Поместите небольшие глобальные и статические данные в небольшую область данных и создайте специальные
инструкции для ссылки на них.

-G Num
Поместите глобальные и статические объекты меньше или равными Num байтов в небольшие данные или
bss-разделы вместо обычных data или bss-разделов. Значение по умолчанию Num is
8. -мсданные опция должна быть установлена ​​на одно из сданные or использование чтобы этот вариант имел какие-либо
Эффект.

Все модули должны быть скомпилированы с одинаковым -G Num ценить. Компиляция с разными
значения Num может работать или не работать; если этого не произойдет, компоновщик выдаст ошибку
сообщение --- неверный код не будет сгенерирован.

-mdebug
Заставляет специальный код M32R в компиляторе отображать некоторую статистику, которая может помочь
в отладочных программах.

-злокачественные петли
Выровняйте все циклы по 32-байтовой границе.

-mno-align-loops
Не применяйте 32-байтовое выравнивание для циклов. Это значение по умолчанию.

-missue-rate =номер
Вопрос номер инструкций за цикл. номер может быть только 1 или 2.

-mbranch-cost =номер
номер может быть только 1 или 2. Если это 1, то ветви будут предпочтительнее, чем
условный код, если он равен 2, то применяется противоположное.

-mflush-trap =номер
Задает номер прерывания для очистки кеша. По умолчанию - 12. Действителен.
числа от 0 до 15 включительно.

-мно-смыв-ловушка
Указывает, что кэш нельзя очистить с помощью ловушки.

-mflush-func =имя
Задает имя функции операционной системы, которую нужно вызвать для очистки кеша. В
по умолчанию _flash_cache, но вызов функции будет использоваться только в том случае, если ловушка не
доступен.

-mno-flush-func
Указывает, что в ОС нет функции очистки кеша.

M680x0 Опции

Это -m параметры, определенные для процессоров M680x0 и ColdFire. Настройки по умолчанию
зависеть от того, какая архитектура была выбрана при настройке компилятора; значения по умолчанию
наиболее распространенные варианты приведены ниже.

-март =арка
Сгенерируйте код для конкретной архитектуры набора команд M680x0 или ColdFire.
Допустимые значения арка для архитектур M680x0 это: 68000, 68010, 68020, 68030,
68040, 68060 и cpu32. Архитектуры ColdFire выбираются согласно Freescale's
Классификация ISA и допустимые значения: ИСАА, Isaaplus, МНКС и Исаак.

gcc определяет макрос __mcfарка__ всякий раз, когда он генерирует код для цели ColdFire.
Ассоциация арка в этом макросе один из -маршировать аргументы, приведенные выше.

При совместном использовании -маршировать и -мтюн выберите код, который работает на семействе похожих
процессоров, но он оптимизирован для конкретной микроархитектуры.

-mcpu =процессор
Сгенерируйте код для конкретного процессора M680x0 или ColdFire. M680x0 процессорs:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 и cpu32. Холодный огонь процессорs
приведены в таблице ниже, в которой процессоры также классифицируются по семействам:

Семья: -MCPU Аргументы
51 : 51 51ac 51cn 51em 51кэ
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu =процессор переопределения -март =арка if арка совместим с процессор. Другие комбинации
-MCPU и -маршировать отклоняются.

gcc определяет макрос __mcf_cpu_процессор когда цель ColdFire процессор выбрано. Это также
определяет __mcf_family_семья, где значение семья приведена в таблице выше.

-mtune =мелодия
Настройте код для конкретной микроархитектуры в рамках ограничений, установленных -маршировать
и -MCPU. Микроархитектуры M680x0: 68000, 68010, 68020, 68030, 68040,
68060 и cpu32. Микроархитектуры ColdFire: cfv1, cfv2, cfv3, cfv4 и
cfv4e.

Вы также можете использовать -mtune = 68020-40 для кода, который должен относительно хорошо работать на 68020,
68030 и 68040 целей. -mtune = 68020-60 аналогичен, но включает 68060 целей, так как
хорошо. Эти две опции выбирают те же настройки настройки, что и -м68020-40 и -м68020-60
соответственно.

gcc определяет макросы __мкарка и __мкарка__ при настройке на архитектуру 680x0
арка. Он также определяет mcарка если либо -анси или не-GNU -стандарт опция используется.
Если gcc настраивается для ряда архитектур, как выбрано -mtune = 68020-40 or
-mtune = 68020-60, он определяет макросы для каждой архитектуры в диапазоне.

gcc также определяет макрос __муарх__ при настройке под микроархитектуру ColdFire
уарх, Где уарх это один из аргументов, приведенных выше.

-м68000
-mc68000
Сгенерировать вывод для 68000. Это значение по умолчанию, если компилятор настроен для
68000 систем. Это эквивалентно -март = 68000.

Используйте эту опцию для микроконтроллеров с ядром 68000 или EC000, включая 68008,
68302, 68306, 68307, 68322, 68328 и 68356.

-м68010
Сгенерировать вывод для 68010. Это значение по умолчанию, если компилятор настроен для
68010 систем. Это эквивалентно -март = 68010.

-м68020
-mc68020
Сгенерировать вывод для 68020. Это значение по умолчанию, если компилятор настроен для
68020 систем. Это эквивалентно -март = 68020.

-м68030
Сгенерировать вывод для 68030. Это значение по умолчанию, если компилятор настроен для
68030 систем. Это эквивалентно -март = 68030.

-м68040
Сгенерировать вывод для 68040. Это значение по умолчанию, если компилятор настроен для
68040 систем. Это эквивалентно -март = 68040.

Эта опция запрещает использование инструкций 68881/68882, которые должны эмулироваться
программного обеспечения на 68040. Используйте эту опцию, если на вашем 68040 нет кода для эмуляции
эти инструкции.

-м68060
Сгенерировать вывод для 68060. Это значение по умолчанию, если компилятор настроен для
68060 систем. Это эквивалентно -март = 68060.

Эта опция запрещает использование инструкций 68020 и 68881/68882, которые должны быть
эмулируется программным обеспечением на 68060. Используйте эту опцию, если на вашем 68060 нет кода
подражать этим инструкциям.

-mcpu32
Сгенерировать вывод для CPU32. Это значение по умолчанию, если компилятор настроен для
Системы на базе CPU32. Это эквивалентно -march = cpu32.

Используйте эту опцию для микроконтроллеров с ядром CPU32 или CPU32 +, включая 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 и 68360.

-м5200
Сгенерировать вывод для ЦП 520X ColdFire. Это значение по умолчанию, когда компилятор
настроен для систем на базе 520X. Это эквивалентно -mcpu = 5206, и сейчас
не рекомендуется в пользу этого варианта.

Используйте эту опцию для микроконтроллера с ядром 5200, включая MCF5202, MCF5203,
MCF5204 и MCF5206.

-m5206e
Сгенерировать вывод для ЦП 5206e ColdFire. Эта опция устарела и заменена на
эквивалент -mcpu = 5206e.

-m528x
Сгенерируйте выходные данные для члена семейства ColdFire 528X. Вариант сейчас
устарел в пользу эквивалента -mcpu = 528x.

-м5307
Сгенерировать вывод для ЦП ColdFire 5307. Эта опция устарела и заменена
эквивалент -mcpu = 5307.

-м5407
Сгенерировать вывод для ЦП ColdFire 5407. Эта опция устарела и заменена
эквивалент -mcpu = 5407.

-mcfv4e
Сгенерировать вывод для ЦП семейства ColdFire V4e (например, 547x / 548x). Это включает использование
аппаратные инструкции с плавающей запятой. Вариант эквивалентен -mcpu = 547x, И
теперь не рекомендуется в пользу этого варианта.

-м68020-40
Сгенерируйте вывод для 68040 без использования каких-либо новых инструкций. Это результаты
в коде, который может относительно эффективно работать либо на 68020/68881, либо на 68030, либо на
68040. Сгенерированный код действительно использует инструкции 68881, которые эмулируются на
68040.

Вариант эквивалентен -март = 68020 -mtune = 68020-40.

-м68020-60
Сгенерируйте вывод для 68060 без использования каких-либо новых инструкций. Это результаты
в коде, который может относительно эффективно работать либо на 68020/68881, либо на 68030, либо на
68040. Сгенерированный код действительно использует инструкции 68881, которые эмулируются на
68060.

Вариант эквивалентен -март = 68020 -mtune = 68020-60.

-mhard-поплавок
-м68881
Сгенерируйте инструкции с плавающей запятой. Это значение по умолчанию для 68020 и выше, и
для устройств ColdFire с FPU. Он определяет макрос __HAVE_68881__ на M680x0
цели и __mcffpu__ по целям ColdFire.

-msoft-поплавок
Не создавайте инструкции с плавающей запятой; вместо этого используйте вызовы библиотеки. Это
по умолчанию для целей 68000, 68010 и 68832. Это также значение по умолчанию для ColdFire.
устройства без FPU.

-мдив
-мно-див
Генерировать (не генерировать) инструкции аппаратного разделения и остатка ColdFire. Если
-маршировать используется без -MCPU, по умолчанию для архитектур ColdFire установлено «включено», а для архитектур ColdFire - «выключено».
для архитектур M680x0. В противном случае значение по умолчанию берется из целевого ЦП (либо
ЦП по умолчанию или тот, который задан -MCPU). Например, по умолчанию "выключено".
для -mcpu = 5206 и "на" для -mcpu = 5206e.

gcc определяет макрос __mcfhwdiv__ когда эта опция включена.

-msshort
Считайте, что тип int имеет ширину 16 бит, например short int. Дополнительно параметры
передаются в стек, также выравниваются по 16-битной границе даже для целей, чей API
требует перехода на 32-разрядную версию.

-мно-короткий
Не считайте, что тип int имеет ширину 16 бит. Это значение по умолчанию.

-мнобитфилд
-mno-битовое поле
Не используйте инструкции с битовыми полями. В -м68000, -mcpu32 и -м5200 варианты подразумевают
-мнобитфилд.

-Мбитфилд
Используйте инструкции битового поля. В -м68020 вариант подразумевает -Мбитфилд. Это
значение по умолчанию, если вы используете конфигурацию, разработанную для 68020.

-мртд
Используйте другое соглашение о вызове функций, в котором функции, которые принимают фиксированный
количество аргументов, возвращаемых инструкцией "rtd", которая выталкивает их аргументы
при возвращении. Это сохраняет одну инструкцию в вызывающей программе, так как нет необходимости
вставьте туда аргументы.

Это соглашение о вызовах несовместимо с тем, которое обычно используется в Unix, поэтому вы
не может использовать его, если вам нужно вызвать библиотеки, скомпилированные с помощью компилятора Unix.

Кроме того, вы должны предоставить прототипы функций для всех функций, которые принимают переменные.
количество аргументов (включая «printf»); иначе будет сгенерирован неверный код
для вызовов этих функций.

Кроме того, если вы вызовете функцию со слишком большим количеством
аргументы. (Обычно дополнительные аргументы безвредно игнорируются.)

Инструкция "rtd" поддерживается 68010, 68020, 68030, 68040, 68060 и CPU32.
процессоров, но не 68000 или 5200.

-мно-ртд
Не используйте соглашения о вызовах, выбранные -мртд. Это значение по умолчанию.

-malign-int
-mno-align-int
Управляйте выравниванием GCC "int", "long", "long long", "float", "double" и "long".
двойные "переменные на 32-битной границе (-malign-int) или 16-битная граница
(-mno-align-int). Выравнивание переменных по 32-битным границам приводит к запуску кода.
несколько быстрее на процессорах с 32-битной шиной за счет большего объема памяти.

Внимание! если вы используете -malign-int переключатель, GCC выровняет структуры, содержащие
вышеперечисленные типы отличаются от двоичного интерфейса большинства опубликованных приложений
спецификации для m68k.

-мкрел
Используйте режим адресации относительно компьютера 68000 напрямую, вместо использования глобального
офсетный стол. В настоящее время этот вариант подразумевает -fpic, позволяя максимум 16-битное смещение
для адресации относительно компьютера. -fPIC в настоящее время не поддерживается -мкрел, хоть
это может поддерживаться процессорами 68020 и выше.

-mno-строгое выравнивание
-mstrict-выравнивание
Не предполагайте (не делайте), что невыровненные ссылки на память будут обрабатываться системой.

-msep-данные
Сгенерируйте код, который позволяет сегменту данных располагаться в другой области памяти.
из текстового сегмента. Это позволяет выполнять на месте в среде без
управление виртуальной памятью. Этот вариант подразумевает -fPIC.

-mno-sep-данные
Сгенерируйте код, который предполагает, что сегмент данных следует за текстовым сегментом. Это
по умолчанию.

-средняя-разделяемая-библиотека
Сгенерируйте код, поддерживающий общие библиотеки, с помощью метода идентификатора библиотеки. Это позволяет
для выполнения на месте и совместно используемых библиотек в среде без виртуальной памяти
управление. Этот вариант подразумевает -fPIC.

-mno-id-общая-библиотека
Сгенерируйте код, который не предполагает использования разделяемых библиотек на основе идентификаторов. Это
по умолчанию.

-mshared-library-id = п
Указал идентификационный номер компилируемой разделяемой библиотеки на основе идентификатора.
Указание значения 0 приведет к созданию более компактного кода, указание других значений приведет к
принудительно выделить этот номер в текущую библиотеку, но больше нет места или
время эффективнее, чем отсутствие этой опции.

-mxgot
-мно-хгот
При генерации независимого от позиции кода для ColdFire генерируйте код, который работает, если
GOT имеет более 8192 записей. Этот код больше и медленнее, чем код
генерируется без этой опции. На процессорах M680x0 эта опция не нужна; -fPIC
достаточно.

GCC обычно использует одну инструкцию для загрузки значений из GOT. Пока это
относительно эффективен, он работает, только если GOT меньше примерно 64 КБ. Что-нибудь
больше заставляет компоновщик сообщать об ошибке, например:

перемещение усечено, чтобы соответствовать: R_68K_GOT16O foobar

Если это произойдет, вам следует перекомпилировать свой код с помощью -mxgot. Затем он должен работать с
очень большие GOT. Однако код, созданный с помощью -mxgot менее эффективен, так как он
требуется 4 инструкции для получения значения глобального символа.

Обратите внимание, что некоторые компоновщики, включая более новые версии компоновщика GNU, могут создавать
несколько GOT и отсортируйте записи GOT. Если у вас есть такой компоновщик, вам понадобится только
использовать -mxgot при компиляции одного объектного файла, который обращается к более чем 8192 GOT
записи. Очень немногие так делают.

Эти параметры не действуют, если GCC не генерирует позиционно-независимый код.

MCore Опции

Это -m параметры, определенные для процессоров Motorola M * Core.

-мхардлит
-мно-жесткий свет
Встраивайте константы в поток кода, если это можно сделать двумя или менее инструкциями.

-мдив
-мно-див
Воспользуйтесь инструкцией по разделению. (Включено по умолчанию).

-мелакс-немедленный
-мно-расслабиться-немедленно
Разрешить произвольный размер непосредственно в битовых операциях.

-mwide-битовые поля
-mno-wide-битовые поля
Всегда считайте битовые поля размером int.

-m4byte-функции
-mno-4byte-функции
Принудительно выровнять все функции по 4-байтовой границе.

-mcallgraph-данные
-mno-callgraph-данные
Вывести информацию о коллграфе.

-mslow-байты
-мно-медленные байты
При чтении количества байтов предпочитайте доступ к словам.

-с младшим порядком байтов
-mbig-endian
Сгенерируйте код для цели с прямым порядком байтов.

-м210
-м340
Сгенерируйте код для процессора 210.

-мно-льсим
Предположим, что была предоставлена ​​поддержка времени выполнения, поэтому опустите библиотеку симулятора.
(libsim.а) из командной строки компоновщика.

-mstack-increment =размер
Установите максимальную сумму для одной операции увеличения стека. Большие значения могут
увеличить скорость работы программ, содержащих функции, требующие большого количества
пространство стека, но они также могут вызвать ошибку сегментации, если стек расширен
слишком. Значение по умолчанию - 0x1000.

член парламента Опции

-мабдифф
Включает инструкцию «abs», которая представляет собой абсолютную разницу между двумя регистрами.

-малл-оптс
Включает все дополнительные инструкции - усреднение, умножение, деление, битовые операции,
ведущий ноль, абсолютная разница, мин. / макс., клип и насыщенность.

-среднее
Включает инструкцию «ave», которая вычисляет среднее значение двух регистров.

-mbased =n
Переменные размера n байты или меньше будут помещены в раздел ".based"
дефолт. Базовые переменные используют регистр $ tp как базовый регистр, и есть
128-байтовый предел для раздела ".based".

-мбитопс
Включает инструкции битовой операции - битовый тест ("btstm"), установка ("bsetm"), очистка
("bclrm"), инвертировать ("bnotm") и проверить и установить ("tas").

-mc =имя
Выбирает, в какой раздел будут помещены данные констант. имя может быть "крошечный", "рядом" или
"далеко".

-мклип
Включает инструкцию «клип». Обратите внимание, что "-mclip" бесполезен, если вы также
укажите "-mminmax".

-mconfig =имя
Выбирает одну из встроенных конфигураций ядра. Каждый чип MeP имеет один или несколько
модули в нем; каждый модуль имеет основной ЦП и множество сопроцессоров, опционально
инструкции и периферийные устройства. Инструмент "MeP-Integrator", не входящий в GCC, предоставляет
эти конфигурации через эту опцию; использование этого параметра аналогично использованию всех
соответствующие параметры командной строки. Конфигурация по умолчанию - «по умолчанию».

-мкоп
Включает инструкции сопроцессора. По умолчанию это 32-битный сопроцессор. Примечание
что сопроцессор обычно включается с помощью параметра "-mconfig =".

-mcop32
Включает инструкции 32-битного сопроцессора.

-mcop64
Включает инструкции 64-битного сопроцессора.

-мивк2
Включает планирование IVC2. IVC2 - это 64-битный сопроцессор VLIW.

-мдк
Помещает постоянные переменные в секцию ".near".

-мдив
Включает инструкции «div» и «divu».

-меб
Сгенерируйте код с прямым порядком байтов.

-мель
Сгенерируйте код с прямым порядком байтов.

-мио-летучие
Сообщает компилятору, что любая переменная, отмеченная атрибутом «io», должна быть
считается изменчивым.

-ML Заставляет по умолчанию присваивать переменные разделу ".far".

-mleadz
Включает инструкцию "leadz" (ведущий ноль).

-mm Заставляет по умолчанию присваивать переменные разделу ".near".

-ммминмакс
Включает инструкции «min» и «max».

-мульт
Включает инструкции умножения и умножения с накоплением.

-mno-opts
Отключает все необязательные инструкции, разрешенные "-mall-opts".

-повторять
Включает инструкции «повторения» и «повторения», используемые для циклического выполнения с низким уровнем служебных данных.

-Миз Заставляет все переменные по умолчанию относиться к разделу ".tiny". Обратите внимание, что есть
Максимальный размер этого раздела - 65536 байт. Для доступа к этим переменным используется база% gp.
зарегистрируйтесь.

-мсатур
Включает инструкции по насыщению. Обратите внимание, что компилятор в настоящее время не
генерировать их самостоятельно, но эта опция включена для совместимости с другими инструментами,
как".

-мсдрам
Свяжите среду выполнения на основе SDRAM вместо среды выполнения на основе ПЗУ по умолчанию.

-мсим
Свяжите библиотеки времени выполнения симулятора.

-мсимновец
Свяжите библиотеки времени выполнения симулятора, исключая встроенную поддержку сброса и
векторы и таблицы исключений.

-мтф
По умолчанию все функции переходят в раздел ".far". Без этой опции функции
по умолчанию - раздел ".near".

-mtiny =n
Переменные, которые n байты или меньше будут размещены в разделе «.tiny». Эти
переменные используют базовый регистр $ gp. По умолчанию для этого параметра установлено 4, но учтите, что
Максимальный размер раздела ".tiny" составляет 65536 байт.

МикроБлейз Опции

-msoft-поплавок
Использовать программную эмуляцию для чисел с плавающей запятой (по умолчанию).

-mhard-поплавок
Используйте аппаратные инструкции с плавающей запятой.

-mmemcpy
Не оптимизируйте перемещение блоков, используйте memcpy.

-mno-clearbss
Эта опция устарела. Использовать -fno-ноль-инициализирован-в-bss .

-mcpu =тип процессора
Используйте функции и расписание кода для данного процессора. Поддерживаемые значения представлены в формате
vX.YY.Z, Где X это основная версия, YY это второстепенная версия, и Z совместимость
код. Примеры значений: Версия 3.00.a, v4.00.b, Версия 5.00.a, v5.00.b, v5.00.b, Версия 6.00.a.

-mxl-мягкий-мул
Использовать программную эмуляцию умножения (по умолчанию).

-mxl-мягкий-дел
Использовать программную эмуляцию для разделения (по умолчанию).

-mxl-баррель-сдвиг
Используйте аппаратный переключатель ствола.

-mxl-шаблон-сравнить
Используйте инструкции по сравнению шаблонов.

-msmall-делит
Используйте оптимизацию поиска в таблице для небольших целочисленных делений со знаком.

-mxl-проверка стека
Эта опция устарела. Вместо этого используйте -fstack-check.

-mxl-gp-opt
Используйте относительные разделы sdata / sbss GP.

-mxl-умножить-высокий
Используйте высокие инструкции умножения для старшей части умножения 32x32.

-mxl-поплавок-конвертировать
Используйте аппаратные инструкции преобразования с плавающей запятой.

-mxl-поплавок-sqrt
Используйте аппаратную инструкцию извлечения квадратного корня с плавающей запятой.

-mxl-режим-модель приложения
Выберите модель приложения модель приложения. Действительные модели

выполнимый
обычный исполняемый файл (по умолчанию), использует код запуска crt0.o.

xmdstub
для использования с программным отладчиком Xilinx Microprocessor Debugger (XMD) для интрузивной отладки
агент называется xmdstub. Это использует файл запуска crt1.o и устанавливает начальный адрес
программа должна быть 0x800.

начальная загрузка
для приложений, загружаемых с помощью загрузчика. Эта модель использует файл запуска
crt2.o который не содержит обработчика вектора сброса процессора. Это подходит
для передачи управления сбросом процессора загрузчику, а не
Приложение.

новички
для приложений, которым не требуются какие-либо векторы MicroBlaze. Этот вариант
может быть полезно для приложений, работающих в приложении для мониторинга. Эта модель
использования crt3.o как файл запуска.

Опция -xl-режим-модель приложения устаревший псевдоним для -mxl-режим-модель приложения.

MIPS Опции

-ЭБ Сгенерируйте код с прямым порядком байтов.

-EL Сгенерируйте код с прямым порядком байтов. Это значение по умолчанию для mips * el - * - * конфигурации.

-март =арка
Сгенерируйте код, который будет работать на арка, который может быть именем общего MIPS ISA или
название конкретного процессора. Имена ISA: мипс1, мипс2, мипс3, мипс4,
мипс32, мипс32р2, мипс64 и мипс64р2. Названия процессоров: 4kc, 4km, 4kp, 4кск,
4кес, 4кем, 4кэп, 4ксд, 5kc, 5кф, 20kc, 24kc, 24кф2_1, 24кф1_1, 24кес, 24кеф2_1,
24кеф1_1, 34kc, 34кф2_1, 34кф1_1, 74kc, 74кф2_1, 74кф1_1, 74кф3_2, 1004kc, 1004кф2_1,
1004кф1_1, лунгсон2е, лунгсон2ф, лунгсон3а, m4k, октеон, октеон +, октеон2, Орион,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 и XLR. Особая ценность из-аби выбирает наиболее совместимые
архитектура для выбранного ABI (то есть мипс1 для 32-битных ABI и мипс3 для 64-битной
ABI).

Собственные инструменты Linux / GNU и IRIX также поддерживают значение родной, который выбирает
лучший вариант архитектуры для хост-процессора. -march = родной не действует, если GCC
не распознает процессор.

В названиях процессоров заключительный 000 может быть сокращено как k (например, -march = r2k).
Префиксы необязательны, и vr может быть написано r.

Имена формы nf2_1 относятся к процессорам с FPU, работающими на половинной скорости
ядро, имена формы nf1_1 относятся к процессорам с FPU, работающими с одинаковой частотой
как ядро, а имена формы nf3_2 относятся к процессорам с тактовой частотой FPU
3: 2 по отношению к сердцевине. Из соображений совместимости nf принято как
синоним для nf2_1 в то время как nx и bfx принимаются как синонимы nf1_1.

GCC определяет два макроса на основе значения этой опции. Первый - это _MIPS_ARCH,
который дает имя целевой архитектуры в виде строки. Второй имеет вид
_MIPS_ARCH_Foo, Где Foo капитализированная стоимость _MIPS_ARCH, Например,
-март = r2000 установит _MIPS_ARCH в "r2000" и определите макрос _MIPS_ARCH_R2000.

Обратите внимание, что _MIPS_ARCH макрос использует указанные выше имена процессоров. Другими словами,
он будет иметь полный префикс и не будет сокращать 000 as k, В случае из-
аби, макрос называет разрешенную архитектуру (либо "mips1" or "mips3"). Это имена
архитектура по умолчанию, когда нет -маршировать предоставляется вариант.

-mtune =арка
Оптимизировать для арка. Среди прочего, этот параметр контролирует способ отображения инструкций.
запланированная и предполагаемая стоимость арифметических операций. Список арка ценности
то же самое, что и для -маршировать.

Если этот параметр не используется, GCC оптимизирует процессор для процессора, указанного в -маршировать.
С помощью -маршировать и -мтюн вместе можно сгенерировать код, который будет работать на
семейство процессоров, но оптимизируйте код для одного конкретного члена этого
семьи.

-мтюн определяет макросы _MIPS_TUNE и _MIPS_TUNE_Foo, которые работают так же, как
домен -маршировать описанные выше.

-мипс1
Эквивалентно -march = mips1.

-мипс2
Эквивалентно -march = mips2.

-мипс3
Эквивалентно -march = mips3.

-мипс4
Эквивалентно -march = mips4.

-мипс32
Эквивалентно -march = mips32.

-mips32r2
Эквивалентно -march = mips32r2.

-мипс64
Эквивалентно -march = mips64.

-mips64r2
Эквивалентно -march = mips64r2.

-мипс16
-мно-мипс16
Генерировать (не генерировать) код MIPS16. Если GCC нацелен на MIPS32 или MIPS64
архитектура, он будет использовать MIPS16e ASE.

Генерацию кода MIPS16 также можно контролировать для каждой функции с помощью
Атрибуты «mips16» и «nomips16».

-mflip-mips16
Сгенерируйте код MIPS16 для чередующихся функций. Этот вариант предусмотрен для регрессии
тестирование генерации смешанного кода MIPS16 / non-MIPS16 и не предназначено для обычных
использовать при компиляции пользовательского кода.

-minterlink-mips16
-mno-интерлинк-mips16
Требовать (не требовать), чтобы код, не относящийся к MIPS16, был совместим по ссылкам с кодом MIPS16.

Например, код, не относящийся к MIPS16, не может напрямую перейти к коду MIPS16; он должен либо использовать
вызов или непрямой прыжок. -minterlink-mips16 поэтому запрещает прямые прыжки, если
GCC знает, что целью перехода не является MIPS16.

-mabi = 32
-mabi = o64
-mabi = n32
-mabi = 64
-mabi = eabi
Сгенерируйте код для данного ABI.

Обратите внимание, что EABI имеет 32-битный и 64-битный варианты. GCC обычно генерирует 64-битный
код, когда вы выбираете 64-битную архитектуру, но вы можете использовать -мгп32 получить 32-битный код
.

Для получения информации о O64 ABI см.http://gcc.gnu.org/projects/mipso64-abi.html>.

GCC поддерживает вариант o32 ABI, в котором регистры с плавающей запятой равны 64.
чем 32 бита. Вы можете выбрать эту комбинацию с помощью -mabi = 32 -мфп64. Этот ABI
опирается на mthc1 и mfhc1 инструкции и поэтому поддерживается только для
Процессоры MIPS32R2.

Назначения регистров для аргументов и возвращаемых значений остаются прежними, но каждый
скалярное значение передается в одном 64-битном регистре, а не в паре 32-битных
регистры. Например, скалярные значения с плавающей запятой возвращаются в $ f0 только не
$ f0/$ f1 пара. Набор регистров сохраненных вызовов также остается прежним, но все 64 бита
сохранены.

-мэбиколлс
-мно-абикалы
Генерировать (не генерировать) код, подходящий для динамических объектов в стиле SVR4.
-мэбиколлс является значением по умолчанию для систем на базе SVR4.

-msshared
-мно-общий
Генерировать (не генерировать) код, который полностью независим от позиции, и который может
поэтому быть скомпонованным в разделяемые библиотеки. Эта опция влияет только на -мэбиколлс.

Все -мэбиколлс код традиционно не зависел от позиции, независимо от параметров
такое как -fPIC и -fpic. Однако в качестве расширения набор инструментов GNU позволяет исполняемым файлам
использовать абсолютный доступ для локально привязанных символов. Он также может использовать более короткие GP
последовательности инициализации и генерируют прямые вызовы локально определенных функций. Этот
режим выбирается -мно-общий.

-мно-общий зависит от binutils 2.16 или выше и генерирует объекты, которые могут быть только
соединено компоновщиком GNU. Однако опция не влияет на ABI финального
исполняемый файл; он влияет только на ABI перемещаемых объектов. С использованием -мно-общий будете
обычно делают исполняемые файлы меньше и быстрее.

-msshared по умолчанию.

-мплт
-мно-плт
Предположите (не предполагайте), что статические и динамические компоновщики поддерживают PLT и копируют
переезды. Эта опция влияет только на -мно-общий -мэбиколлс. Для n64 ABI это
опция не действует без -msym32.

Вы можете сделать -мплт по умолчанию, настроив GCC с --with-mips-plt. По умолчанию
is -мно-плт в противном случае.

-mxgot
-мно-хгот
Снимите (не снимайте) обычные ограничения на размер глобальной таблицы смещения.

GCC обычно использует одну инструкцию для загрузки значений из GOT. Пока это
относительно эффективен, он будет работать только в том случае, если GOT меньше примерно 64 КБ.
При увеличении размера компоновщик сообщит об ошибке, например:

перемещение усечено, чтобы соответствовать: R_MIPS_GOT16 foobar

Если это произойдет, вам следует перекомпилировать свой код с помощью -mxgot. Затем он должен работать с
очень большие GOT, хотя он также будет менее эффективным, так как потребуется три
инструкции для получения значения глобального символа.

Обратите внимание, что некоторые компоновщики могут создавать несколько GOT. Если у вас есть такой линкер, вы
нужно только использовать -mxgot когда один объектный файл обращается к более чем 64 КБ
стоит записей GOT. Очень немногие так делают.

Эти параметры не действуют, если GCC не генерирует независимый от позиции код.

-мгп32
Предположим, что регистры общего назначения имеют ширину 32 бита.

-мгп64
Предположим, что регистры общего назначения имеют ширину 64 бита.

-мфп32
Предположим, что регистры с плавающей запятой имеют ширину 32 бита.

-мфп64
Предположим, что регистры с плавающей запятой имеют ширину 64 бита.

-mhard-поплавок
Используйте инструкции сопроцессора с плавающей запятой.

-msoft-поплавок
Не используйте инструкции сопроцессора с плавающей запятой. Реализовать плавающую точку
вычисления с использованием вместо этого библиотечных вызовов.

-мн-поплавок
Предположим, что сопроцессор с плавающей запятой поддерживает только операции с одинарной точностью.

-mdouble-поплавок
Предположим, что сопроцессор с плавающей запятой поддерживает операции с двойной точностью. Этот
по умолчанию.

-мллск
-mno-llsc
Использовать (не использовать) ll, scкачества синхронизировать инструкции для реализации встроенной атомарной памяти
функции. Если ни одна из опций не указана, GCC будет использовать инструкции, если
целевая архитектура их поддерживает.

-мллск полезно, если среда выполнения может эмулировать инструкции и -mno-llsc
может быть полезно при компиляции нестандартных ISA. Вы можете сделать любой вариант
по умолчанию, настроив GCC с --with-llsc и --без-LLSC соответственно.
--with-llsc используется по умолчанию для некоторых конфигураций; см. документацию по установке
для получения информации.

-мдсп
-мно-дсп
Используйте (не используйте) версию 1 MIPS DSP ASE.
Эта опция определяет макрос препроцессора __mips_dsp. Он также определяет
__mips_dsp_rev в 1.

-mdspr2
-mno-dspr2
Используйте (не используйте) версию 2 MIPS DSP ASE.
Эта опция определяет макросы препроцессора __mips_dsp и __mips_dspr2. Он также
определяет __mips_dsp_rev в 2.

-msmartmips
-mno-smartmips
Используйте (не используйте) MIPS SmartMIPS ASE.

-поврежденный-одиночный
-мно-парный-одиночный
Используйте (не используйте) пары одинарных инструкций с плавающей запятой.
Эта опция требует, чтобы была включена аппаратная поддержка с плавающей запятой.

-mdmx
-mno-mdmx
Используйте (не используйте) инструкции MIPS Digital Media Extension. Этот вариант может быть только
используется при генерации 64-битного кода и требует наличия аппаратной поддержки с плавающей запятой.
включен.

-мипс3д
-mno-mips3d
Используйте (не используйте) MIPS-3D ASE. Опция -мипс3д подразумевает -поврежденный-одиночный.

-ммт
-мно-мт
Используйте (не используйте) инструкции MT Multithreading.

-mlong64
Сделать "длинные" типы шириной 64 бита. Видеть -mlong32 для объяснения дефолта
и способ определения размера указателя.

-mlong32
Установите для типов long, int и указателей ширину 32 бита.

Размер по умолчанию для int, long и указателей зависит от ABI. Все
поддерживаемые ABI используют 32-битные int. N64 ABI использует 64-битные "длинные" s, как и 64-битный
EABI; остальные используют 32-битные «длинные». Указатели того же размера, что и long, или
того же размера, что и целочисленные регистры, в зависимости от того, что меньше.

-msym32
-mno-sym32
Предположим (не предполагаем), что все символы имеют 32-битные значения, независимо от выбранного
ABI. Эта опция полезна в сочетании с -mabi = 64 и -мно-абикалы потому что
позволяет GCC генерировать более короткие и быстрые ссылки на символические адреса.

-G Num
Поместите определения видимых извне данных в небольшой раздел данных, если эти данные не
больше чем Num байтов. После этого GCC сможет получить доступ к данным более эффективно; видеть -мгпопт для
Детали.

По умолчанию -G вариант зависит от комплектации.

-mlocal-sdata
-mno-local-sdata
Расширять (не расширять) -G поведение и для локальных данных, например, для статических переменных
в С. -mlocal-sdata по умолчанию для всех конфигураций.

Если компоновщик жалуется, что приложение использует слишком много небольших данных, вы можете
хотите попробовать восстановить менее критичные к производительности части с -mno-local-sdata. Вы
может также захотеть создать большие библиотеки с -mno-local-sdata, так что библиотеки
оставьте больше места для основной программы.

-mextern-sdata
-mno-extern-sdata
Предположим (не предполагайте), что определенные извне данные будут находиться в небольшом разделе данных, если
эти данные находятся в пределах -G предел. -mextern-sdata по умолчанию для всех
конфигурации.

Если вы компилируете модуль Способ -mextern-sdata -G Num -мгпопткачества Способ ссылки на
переменная Var это не больше, чем Num байтов, вы должны убедиться, что Var размещен
в небольшом разделе данных. Если Var определяется другим модулем, вы должны либо скомпилировать
этот модуль с достаточно высоким -G установка или прикрепление атрибута "section" к Var's
определение. Если Var распространено, вы должны связать приложение с достаточно высоким -G
установка.

Самый простой способ удовлетворить эти ограничения - скомпилировать и связать каждый модуль.
с такой же -G вариант. Однако вы можете создать библиотеку, поддерживающую
несколько разных ограничений для небольших данных. Вы можете сделать это, скомпилировав библиотеку с помощью
самый высокий поддержанный -G установка и дополнительно использование -mno-extern-sdata остановить
библиотека от предположений о данных, определенных извне.

-мгпопт
-mno-gpopt
Использовать (не использовать) доступы относительно GP для символов, которые, как известно, находятся в небольших данных
раздел; видеть -G, -mlocal-sdata и -mextern-sdata. -мгпопт по умолчанию для всех
конфигурации.

-mno-gpopt полезен в случаях, когда регистр $ gp может не содержать значение
"_gp". Например, если код является частью библиотеки, которая может использоваться при загрузке
monitor, программы, вызывающие процедуры монитора загрузки, передают неизвестное значение в $ gp.
(В таких ситуациях сам монитор загрузки обычно компилируется с -G0.)

-mno-gpopt подразумевает -mno-local-sdata и -mno-extern-sdata.

-встроенные-данные
-mno-встроенные-данные
Если возможно, сначала разместите переменные в разделе данных только для чтения, а затем в
small data section, если возможно, иначе в data. Это дает немного более медленный код
чем по умолчанию, но уменьшает объем оперативной памяти, необходимой для выполнения, и, таким образом, может
предпочтительнее для некоторых встроенных систем.

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Поместите неинициализированные «константные» переменные в раздел данных только для чтения. Этот вариант
имеет смысл только в сочетании с -встроенные-данные.

-mcode-читаемый =установка
Укажите, может ли GCC генерировать код, который читает из исполняемых разделов. Есть
три возможных настройки:

-mcode-readable = да
Инструкции могут иметь свободный доступ к исполняемым разделам. Это значение по умолчанию.

-mcode-readable = pcrel
Инструкции загрузки MIPS16, относящиеся к ПК, могут иметь доступ к исполняемым разделам, но другие
инструкции не должны этого делать. Эта опция полезна на процессорах 4KSc и 4KSd.
когда в кодовых TLB установлен бит запрета чтения. Также полезно на процессорах
который может быть сконфигурирован для использования двойного интерфейса SRAM инструкций / данных и что,
как и M4K, автоматически перенаправляет связанные с ПК нагрузки в оперативную память команд.

-mcode-readable = нет
Инструкции не должны иметь доступа к исполняемым разделам. Эта опция может быть полезна на
цели, которые настроены на наличие двойного интерфейса SRAM инструкций / данных, но
которые (в отличие от M4K) не перенаправляют автоматически нагрузки, относящиеся к ПК, на
инструкция RAM.

-msplit-адреса
-мно-разделенные-адреса
Включите (отключите) использование ассемблерных операторов перемещения "% hi ()" и "% lo ()". Этот
вариант был заменен -mexplicit-relocs но сохраняется в обратном направлении
Совместимость.

-mexplicit-relocs
-mno-explicit-relocs
Используйте (не используйте) операторы перемещения ассемблера при работе с символическими адресами.
Альтернатива, выбранная -mno-explicit-relocs, заключается в использовании вместо этого макросов ассемблера.

-mexplicit-relocs по умолчанию, если GCC был настроен на использование ассемблера, который
поддерживает операторов перемещения.

-mcheck-нулевое деление
-mno-check-нулевое деление
Ловушка (не ловушка) при целочисленном делении на ноль.

По умолчанию используется -mcheck-нулевое деление.

-mdivide-ловушки
-mdivide-перерывы
Системы MIPS проверяют деление на ноль, генерируя либо условную ловушку, либо
сломать инструкцию. Использование ловушек приводит к уменьшению размера кода, но поддерживается только на MIPS.
II и позже. Также в некоторых версиях ядра Linux есть ошибка, предотвращающая ловушку.
от генерации правильного сигнала («SIGFPE»). Использовать -mdivide-ловушки разрешить условный
ловушки на поддерживающих их архитектурах и -mdivide-перерывы заставить использовать
брейки.

По умолчанию обычно -mdivide-ловушки, но это можно изменить во время настройки
через --with-DivX = разрывы. Проверки деления на ноль можно полностью отключить с помощью
-mno-check-нулевое деление.

-mmemcpy
-mno-memcpy
Принудительное (не принудительное) использование "memcpy ()" для нетривиальных перемещений блока. По умолчанию
is -mno-memcpy, что позволяет GCC встраивать большинство копий постоянного размера.

-mlong-вызовы
-мно-долгие звонки
Отключить (не отключать) использование инструкции «jal». Вызов функций с помощью "jal"
более эффективен, но требует, чтобы вызывающий и вызываемый были в одном и том же 256 мегабайте
сегмент.

Эта опция не влияет на код abicalls. По умолчанию -мно-долгие звонки.

-ммад
-мно-безумный
Включите (отключите) использование инструкций mad, madu и mul, как предусмотрено
R4650 ИСА.

-растерянный-безумный
-mno-плавленный-madd
Включите (отключите) использование команд умножения-накопления с плавающей запятой, когда они
доступны. По умолчанию -растерянный-безумный.

Когда используются инструкции умножения-накопления, вычисляется промежуточный продукт.
с бесконечной точностью и не зависит от бита сброса FCSR в ноль. Это может быть
нежелательно при некоторых обстоятельствах.

-nocpp
Сообщите ассемблеру MIPS, чтобы он не запускал свой препроцессор над файлами пользовательского ассемблера (с
.s суффикс) при их сборке.

-mfix-24k
-mno-fix-24k
Устранение ошибки 24K E48 (потеря данных о магазинах при пополнении). Обходные пути
реализуются ассемблером, а не GCC.

-mfix-r4000
-mno-fix-r4000
Устранение некоторых ошибок ЦП R4000:

- Двойное слово или сдвиг переменной могут дать неверный результат при выполнении
сразу после начала целочисленного деления.

- Двойное слово или сдвиг переменной может дать неверный результат, если выполняется во время
выполняется целочисленное умножение.

- Целочисленное деление может дать неверный результат, если начато в слоте задержки
взятая ветка или прыжок.

-mfix-r4400
-mno-fix-r4400
Устранение некоторых ошибок ЦП R4400:

- Двойное слово или сдвиг переменной могут дать неверный результат при выполнении
сразу после начала целочисленного деления.

-mfix-r10000
-mno-fix-r10000
Устранение некоторых ошибок R10000:

- Последовательности "ll" / "sc" могут не вести себя атомарно в версиях до 3.0. Они могут
тупик на ревизиях 2.6 и ранее.

Этот параметр можно использовать только в том случае, если целевая архитектура поддерживает вероятность ветвления.
инструкциями. -mfix-r10000 по умолчанию, когда -март = r10000 используется; -mno-fix-r10000
в противном случае - значение по умолчанию.

-mfix-vr4120
-mno-fix-vr4120
Устранение некоторых ошибок VR4120:

- «dmultu» не всегда дает правильный результат.

- «div» и «ddiv» не всегда дают правильный результат, если один из операндов
отрицательно.

Обходные пути для исправления ошибок деления полагаются на специальные функции в libgcc.a. В
в настоящее время эти функции предоставляются только конфигурациями "mips64vr * -elf".

Другие ошибки VR4120 требуют вставки nop между определенными парами
инструкции. Эти ошибки обрабатываются ассемблером, а не самим GCC.

-mfix-vr4130
Исправьте ошибку VR4130 "mflo" / "mfhi". Обходные пути реализованы
ассемблер, а не GCC, хотя GCC будет избегать использования "mflo" и "mfhi", если
Вместо этого доступны инструкции VR4130 «macc», «macchi», «dmacc» и «dmacchi».

-mfix-sb1
-mno-fix-sb1
Устраните определенные ошибки ядра ЦП SB-1. (Этот флаг в настоящее время работает на SB-1
исправление 2 "F1" и "F2" исправлений с плавающей запятой.)

-mr10k-cache-барьер =установка
Укажите, должен ли GCC вставлять барьеры кеширования, чтобы избежать побочных эффектов
спекуляции на процессорах R10K.

Как и многие другие процессоры, R10K пытается предсказать результат условного
ветвь и спекулятивно выполняет инструкции из «взятой» ветки. Это позже
отменяет эти инструкции, если предсказанный результат был неверным. Однако на R10K
даже прерванные инструкции могут иметь побочные эффекты.

Эта проблема затрагивает только хранилища ядра и, в зависимости от системы, загрузку ядра.
Например, спекулятивно выполняемое хранилище может загружать целевую память в кеш.
и пометить строку кэша как грязную, даже если само сохранение позже будет прервано. Если DMA
операция записывает в ту же область памяти до того, как «грязная» строка будет сброшена,
кэшированные данные перезапишут данные DMA-ed. См. Полное руководство по процессору R10K.
описание, включая другие потенциальные проблемы.

Один из обходных путей - вставлять инструкции по защите кеш-памяти перед каждым доступом к памяти, который
может быть спекулятивно выполнен и может иметь побочные эффекты даже в случае прерывания.
-mr10k-cache-барьер =установка контролирует реализацию GCC этого обходного пути. Это
предполагает, что прерванный доступ к любому байту в следующих регионах не будет иметь стороны
эффекты:

1. память, занятая кадром стека текущей функции;

2. память, занятая входящим аргументом стека;

3. память, занятая объектом с постоянным адресом времени связи.

Ядро несет ответственность за то, чтобы спекулятивный доступ к этим регионам
действительно безопасны.

Если входная программа содержит объявление функции, например:

void foo (недействительно);

тогда реализация «foo» должна разрешать выполнение «j foo» и «jal foo»
умозрительно. GCC соблюдает это ограничение для функций, которые он компилирует сам. Это
ожидает, что функции, не относящиеся к GCC (такие как рукописный ассемблерный код), будут делать то же самое.

Вариант имеет три формы:

-mr10k-cache-барьер = загрузка-хранилище
Вставьте барьер кеша перед загрузкой или сохранением, которые могут быть спекулятивно выполнены
и это может иметь побочные эффекты даже в случае прерывания.

-mr10k-cache-барьер = хранить
Вставьте барьер кеша перед магазином, который может быть спекулятивно выполнен, и
это может иметь побочные эффекты даже в случае прерывания.

-mr10k-cache-барьер = нет
Отключите вставку барьеров кеширования. Это значение по умолчанию.

-mflush-func =FUNC
-mno-flush-func
Определяет функцию, которую нужно вызвать для очистки кешей I и D или для того, чтобы не вызывать такие
функция. При вызове функция должна принимать те же аргументы, что и обычная
"_flush_func ()", то есть адрес диапазона памяти, для которого создается кеш.
сброшен, размер диапазона памяти и число 3 (чтобы очистить оба кеша). В
по умолчанию зависит от целевого GCC, для которого был настроен, но обычно либо
_flush_func or __cpu_flush.

mbranch-cost =Num
Установите стоимость веток примерно на Num "простые" инструкции. Эта стоимость всего лишь
эвристический и не гарантирует получение согласованных результатов для всех выпусков. Ноль
cost избыточно выбирает значение по умолчанию, которое основано на -мтюн установка.

-мембранно-вероятно
-мно-ветвь-вероятно
Включение или отключение использования инструкций Branch Likely, независимо от значения по умолчанию для
выбранная архитектура. По умолчанию инструкции Branch Likely могут быть сгенерированы, если
они поддерживаются выбранной архитектурой. Исключение составляют MIPS32 и
Архитектуры MIPS64 и процессоры, реализующие эти архитектуры; для тех,
Инструкции по переходу на вероятный переход по умолчанию не будут создаваться, потому что MIPS32 и
Архитектуры MIPS64 специально не рекомендуют их использование.

-mfp-исключения
-mno-fp-исключения
Указывает, включены ли исключения FP. Это влияет на то, как мы планируем FP
инструкции для некоторых процессоров. По умолчанию включены исключения FP.

Например, на SB-1, если исключения FP отключены, и мы выдаем 64-битные
код, то мы можем использовать оба канала FP. В противном случае мы можем использовать только одну трубу FP.

-mvr4130-выровнять
-mno-vr4130-выровнять
Конвейер VR4130 является двусторонним суперскалярным, но может выдавать только две инструкции.
вместе, если первый выровнен по 8 байт. Когда эта опция включена, GCC будет
выровнять пары инструкций, которые, по его мнению, должны выполняться параллельно.

Этот параметр действует только при оптимизации для VR4130. Обычно он делает код
быстрее, но за счет увеличения. По умолчанию он включен в
уровень оптимизации -O3.

-мсинци
-мно-синки
Включение (отключение) генерации инструкций "synci" на архитектурах, которые его поддерживают.
Инструкции "synci" (если они включены) будут сгенерированы, когда
"__builtin ___ clear_cache ()" скомпилирован.

По умолчанию для этого параметра используется "-mno-synci", но значение по умолчанию можно изменить, настроив
с "--with-synci".

При компиляции кода для однопроцессорных систем, как правило, безопасно использовать "synci".
Однако во многих многоядерных (SMP) системах это не делает инструкцию недействительной.
кеширует все ядра и может привести к неопределенному поведению.

-мелакс-пик-звонки
-мно-релакс-пик-звонки
Попробуйте превратить вызовы PIC, которые обычно отправляются через регистр 25 долларов США, в прямые вызовы.
Это возможно только в том случае, если компоновщик может разрешить назначение во время компоновки и если
пункт назначения находится в пределах досягаемости для прямого вызова.

-мелакс-пик-звонки по умолчанию, если GCC был настроен на использование ассемблера и
компоновщик, который поддерживает директиву сборки ".reloc" и "-mexplicit-relocs" находится в
эффект. С помощью "-mno-explicit-relocs" эту оптимизацию может выполнить
ассемблер и компоновщик без помощи компилятора.

-mmcount-ra-адрес
-mno-mcount-ra-адрес
Выдавать (не выводить) код, который позволяет _mcount изменять возвращаемый результат вызывающей функции
адрес. Если этот параметр включен, обычный интерфейс "_mcount" расширяется новым
ra-адрес параметр, имеющий тип intptr_t * и переданный в регистре $ 12.
Затем "_mcount" может изменить обратный адрес, выполнив оба следующих действия:

· Возврат нового адреса в регистр $ 31.

· Сохранение нового адреса в "*"ра-адрес ", Если ra-адрес ненулевой.

По умолчанию используется -mno-mcount-ra-адрес.

MMIX Опции

Эти параметры определены для MMIX:

-млибфункс
-mno-libfuncs
Укажите, что встроенные функции библиотеки компилируются, передавая все значения в
регистры, независимо от размера.

-мепсилон
-mno-эпсилон
Сгенерируйте инструкции сравнения с плавающей запятой, которые сравнивают по отношению к "rE"
эпсилон регистр.

-mabi = mmixware
-mabi = GNU
Сгенерируйте код, который передает параметры функции и возвращает значения, которые (в вызываемом
функция) рассматриваются как регистры от $ 0 и выше, в отличие от GNU ABI, который использует глобальные
регистрирует 231 доллар и выше.

-mzero-продлить
-mno-zero-extension
При чтении данных из памяти размером меньше 64 бит используйте (не используйте) ноль.
расширение инструкций загрузки по умолчанию, а не расширение знаков.

-мкнутдив
-мно-кнутдив
Сделайте так, чтобы результат деления, дающий остаток, имел тот же знак, что и делитель.
По умолчанию -мно-кнутдив, знак остатка следует за знаком
дивиденды. Оба метода арифметически действительны, причем последний почти всегда
используемый.

-mtoplevel-символы
-mno-toplevel-символы
Добавить (не добавлять) : ко всем глобальным символам, поэтому можно использовать ассемблерный код
с директивой сборки "PREFIX".

-мелф
Сгенерировать исполняемый файл в формате ELF, а не в формате по умолчанию главное метеорологическое управление формат используется
домен ммикс Тренажер.

-мбранч-предсказать
-mno-ветвь-предсказать
Используйте (не используйте) инструкции вероятного ветвления, когда предсказание статического ветвления
указывает вероятную ветвь.

-базовые-адреса
-mno-базовые-адреса
Генерировать (не генерировать) код, который использует Использование темпера с изогнутым основанием адреса. Использование базового адреса
автоматически генерирует запрос (обрабатываемый ассемблером и компоновщиком) для
константа, которая должна быть установлена ​​в глобальном регистре. Регистр используется для одной или нескольких базовых
адресные запросы в диапазоне от 0 до 255 от значения, хранящегося в регистре. В
обычно приводит к короткому и быстрому коду, но количество различных элементов данных, которые
может быть адресовано ограничено. Это означает, что программа, использующая много статических данных
может потребовать -mno-базовые-адреса.

-msingle-выход
-мно-одиночный выход
Принудительно (не заставлять) сгенерированный код иметь единственную точку выхода в каждой функции.

MN10300 Опции

Эти -m параметры определены для архитектур Matsushita MN10300:

-mmult-ошибка
Сгенерируйте код, чтобы избежать ошибок в инструкциях умножения для процессоров MN10300.
Это значение по умолчанию.

-мно-мульт-баг
Не создавайте код, чтобы избежать ошибок в инструкциях умножения для MN10300.
процессоры.

-мам33
Сгенерируйте код, используя функции, характерные для процессора AM33.

-мно-ам33
Не создавайте код с использованием функций, характерных для процессора AM33. Это
по умолчанию.

-мам33-2
Сгенерируйте код, используя функции, характерные для процессора AM33 / 2.0.

-мам34
Сгенерируйте код, используя функции, характерные для процессора AM34.

-mtune =тип процессора
При планировании инструкций используйте временные характеристики указанного типа ЦП.
Это не меняет целевой тип процессора. Тип ЦП должен быть одним из
mn10300, am33, am33-2 or am34.

-mreturn-указатель-на-d0
При создании функции, возвращающей указатель, возвращайте указатель как в "a0", так и в
«d0». В противном случае указатель возвращается только в a0 и пытается вызвать такой
функции без прототипа могут привести к ошибкам. Обратите внимание, что эта опция включена
дефолт; использовать -mno-return-указатель-на-d0 отключить это.

-mno-crt0
Не связывайте объектный файл инициализации среды выполнения C.

-мелакс
Укажите компоновщику, что он должен выполнить переход оптимизации релаксации к
сократить ветви, вызовы и абсолютные адреса памяти. Эта опция имеет только эффект
при использовании в командной строке для последнего шага ссылки.

Эта опция делает невозможную символьную отладку.

-млив
Разрешить компилятору сгенерировать Длинное инструкция Word инструкции, если целью является
AM33 или позже. Это значение по умолчанию. Эта опция определяет макрос препроцессора
__ЛИВ__.

-мнолив
Не позволяйте компилятору генерировать Длинное инструкция Word инструкции. Этот вариант
определяет макрос препроцессора __NO_LIW__.

-msetlb
Разрешить компилятору сгенерировать СЭТЛБ и Lcc инструкции, если целью является
AM33 или позже. Это значение по умолчанию. Эта опция определяет макрос препроцессора
__SETLB__.

-mnosetlb
Не позволяйте компилятору генерировать СЭТЛБ or Lcc инструкции. Этот параметр определяет
макрос препроцессора __NO_SETLB__.

PDP-11 Опции

Эти параметры определены для PDP-11:

-мфпу
Используйте аппаратную FPP с плавающей запятой. Это значение по умолчанию. (Плавающая точка FIS на
PDP-11/40 не поддерживается.)

-msoft-поплавок
Не используйте аппаратную плавающую точку.

-mac0
Возвращает результаты с плавающей запятой в ac0 (fr0 в синтаксисе ассемблера Unix).

-mno-ac0
Вернуть результаты с плавающей запятой в память. Это значение по умолчанию.

-м40
Сгенерируйте код для PDP-11/40.

-м45
Сгенерируйте код для PDP-11/45. Это значение по умолчанию.

-м10
Сгенерируйте код для PDP-11/10.

-mbcopy-встроенный
Используйте встроенные шаблоны "movmemhi" для копирования памяти. Это значение по умолчанию.

-mbcopy
Не используйте встроенные шаблоны "movmemhi" для копирования памяти.

-мята16
-mno-int32
Используйте 16-битное "int". Это значение по умолчанию.

-мята32
-mno-int16
Используйте 32-битное "int".

-mfloat64
-mno-поплавок32
Используйте 64-битный «float». Это значение по умолчанию.

-mfloat32
-mno-поплавок64
Используйте 32-битное «число с плавающей запятой».

-мабши
Используйте шаблон «abshi2». Это значение по умолчанию.

-мно-абсши
Не используйте шаблон «abshi2».

-мембранно-дорого
Сделайте вид, что ветки дорогие. Это для экспериментов с генерацией кода
только.

-мембранно-дешево
Не делайте вид, что ветки дорогие. Это значение по умолчанию.

-munix-asm
Используйте синтаксис ассемблера Unix. Это значение по умолчанию при настройке для pdp11 - * - bsd.

-mdec-asm
Используйте синтаксис ассемблера DEC. Это значение по умолчанию при настройке для любой цели PDP-11.
кроме pdp11 - * - bsd.

пикочип Опции

Эти -m параметры определены для реализаций picoChip:

-mae =ae_type
Установите набор инструкций, набор регистров и параметры планирования инструкций для массива
тип элемента ae_type. Поддерживаемые значения для ae_type Он ЛЮБОЕ, МУЛкачества MAC.

-mae = ЛЮБОЙ выбирает полностью общий тип AE. Код, созданный с помощью этой опции, будет
работать с любыми другими типами AE. Код не будет таким эффективным, как если бы
скомпилирован для определенного типа AE и некоторых типов операций (например, умножения)
не будет работать должным образом со всеми типами AE.

-mae = MUL выбирает тип MUL AE. Это наиболее полезный тип AE для скомпилированного кода,
и является значением по умолчанию.

-mae = MAC выбирает MAC AE в стиле DSP. Код, скомпилированный с этой опцией, может пострадать от
низкая производительность манипулирования байтами (символами), поскольку DSP AE не обеспечивает
аппаратная поддержка загрузки / сохранения байтов.

-msymbol-как-адрес
Разрешить компилятору напрямую использовать имя символа в качестве адреса в загрузке / хранилище
инструкция, не загружая ее предварительно в регистр. Обычно использование этого
опция будет генерировать более крупные программы, которые будут работать быстрее, чем когда опция не
использовал. Однако результаты варьируются от программы к программе, поэтому это остается как пользователь.
вариант, а не быть постоянно включенным.

-mno-неэффективные-предупреждения
Отключает предупреждения о генерации неэффективного кода. Эти предупреждения могут быть
генерируется, например, при компиляции кода, который выполняет операции с памятью на уровне байтов
на типе MAC AE. MAC AE не имеет аппаратной поддержки для байтовой памяти.
операции, поэтому все байтовые загрузки / сохранения должны быть синтезированы из слова загрузки / сохранения
операции. Это неэффективно, и будет сгенерировано предупреждение, указывающее на
программисту, что они должны переписать код, чтобы избежать операций с байтами или
Тип AE, имеющий необходимую аппаратную поддержку. Эта опция включает предупреждение для
быть выключенным.

PowerPC Опции

Они перечислены в

RL78 Опции

-мсим
Ссылки на дополнительные целевые библиотеки для поддержки работы в симуляторе.

-mmul = нет
-mmul = g13
-mmul = rl78
Задает тип используемой аппаратной поддержки умножения. По умолчанию
"none", использующий программные функции умножения. Параметр "g13" предназначен для
аппаратное умножение / деление периферийных устройств только для целей RL78 / G13. Вариант "rl78"
предназначен для стандартного аппаратного умножения, определенного в руководстве по программному обеспечению RL78.

IBM RS / 6000 и PowerPC Опции

Эти -m параметры определены для IBM RS / 6000 и PowerPC:

-мощность
-мно-мощность
-мсила2
-мно-сила2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-ммфкрф
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-жесткий-dfp
GCC поддерживает две связанные архитектуры набора команд для RS / 6000 и PowerPC.
Ассоциация МОЩНОСТЬ набор инструкций - это те инструкции, которые поддерживаются реки набор микросхем используется
в исходных системах RS / 6000 и PowerPC набор инструкций - это архитектура
микропроцессоры Freescale MPC5xx, MPC6xx, MPC8xx, а также IBM 4xx, 6xx и
последующие микропроцессоры.

Ни одна из архитектур не является подмножеством другой. Однако существует большое общее подмножество
инструкций, поддерживаемых обоими. Регистр MQ включен в процессоры
поддержка архитектуры POWER.

Вы используете эти параметры, чтобы указать, какие инструкции доступны на процессоре, который вы
используют. Значение этих параметров по умолчанию определяется при настройке GCC.
Указание -mcpu =тип_процессора отменяет спецификацию этих опций. Мы
рекомендую использовать -mcpu =тип_процессора вариант, а не параметры, перечисленные выше.

Ассоциация -мощность опция позволяет GCC генерировать инструкции, которые находятся только в
POWER и использовать регистр MQ. Указание -мсила2 подразумевает -мощность и
также позволяет GCC генерировать инструкции, которые присутствуют в архитектуре POWER2.
но не оригинальная архитектура POWER.

Ассоциация -mpowerpc опция позволяет GCC генерировать инструкции, которые находятся только в
32-битное подмножество архитектуры PowerPC. Указание -mpowerpc-gpopt подразумевает
-mpowerpc а также позволяет GCC использовать дополнительные инструкции архитектуры PowerPC в
группа общего назначения, включая квадратный корень с плавающей запятой. Указание
-mpowerpc-gfxopt подразумевает -mpowerpc а также позволяет GCC использовать дополнительный PowerPC
инструкции по архитектуре в группе Графика, включая выбор с плавающей запятой.

Ассоциация -ммфкрф опция позволяет GCC генерировать переход из поля регистра условий
инструкция реализована на процессоре POWER4 и других процессорах, поддерживающих
Архитектура PowerPC V2.01. В -mpopcntb опция позволяет GCC генерировать popcount
и инструкция обратной оценки FP с двойной точностью, реализованная на POWER5
процессор и другие процессоры, поддерживающие архитектуру PowerPC V2.02. В
-mpopcntd опция позволяет GCC генерировать инструкцию popcount, реализованную на
Процессор POWER7 и другие процессоры, поддерживающие архитектуру PowerPC V2.06.
Ассоциация -mfprnd опция позволяет GCC генерировать инструкции раунда FP для целочисленных инструкций
реализован на процессоре POWER5 + и других процессорах, поддерживающих PowerPC
Архитектура V2.03. В -mcmpb опция позволяет GCC генерировать байты сравнения
инструкция реализована на процессоре POWER6 и других процессорах, поддерживающих
Архитектура PowerPC V2.05. В -mmfpgpr опция позволяет GCC генерировать ход FP
в / из команд регистров общего назначения, реализованных на процессоре POWER6X и
другие процессоры, поддерживающие расширенную архитектуру PowerPC V2.05. В -mhard-dfp
опция позволяет GCC генерировать десятичные инструкции с плавающей запятой, реализованные на
некоторые процессоры POWER.

Ассоциация -mpowerpc64 опция позволяет GCC генерировать дополнительные 64-битные инструкции, которые
присутствуют в полной архитектуре PowerPC64 и рассматривают GPR как 64-битные, двойные слова
количества. GCC по умолчанию -mno-powerpc64.

Если вы укажете оба -мно-мощность и -mno-powerpc, GCC будет использовать только инструкции в
общее подмножество обеих архитектур плюс некоторые специальные вызовы общего режима AIX, и
не будет использовать регистр MQ. Указание обоих -мощность и -mpowerpc разрешает GCC
использовать любую инструкцию из любой архитектуры и разрешить использование регистра MQ;
укажите это для Motorola MPC601.

-mnew-мнемоника
-mold-мнемоника
Выберите, какую мнемонику использовать в сгенерированном коде ассемблера. С участием -mnew-мнемоника,
GCC использует мнемонику ассемблера, определенную для архитектуры PowerPC. С участием
-mold-мнемоника он использует мнемонику ассемблера, определенную для архитектуры POWER.
Инструкции, определенные только в одной архитектуре, имеют только одну мнемонику; GCC использует это
мнемоника независимо от того, какая из этих опций указана.

GCC по умолчанию использует мнемонику, соответствующую используемой архитектуре. Указание
-mcpu =тип_процессора иногда переопределяет значение этих параметров. Если вы не строите
кросс-компилятор, обычно не следует указывать -mnew-мнемоника or
-mold-мнемоника, но вместо этого следует принять значение по умолчанию.

-mcpu =тип_процессора
Установите тип архитектуры, использование регистров, выбор мнемоники и планирование инструкций
параметры для типа машины тип_процессора. Поддерживаемые значения для тип_процессора Он 401, 403,
405, 405fp, 440, 440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, ec603e, G3, G4, G5, исполин, мощностью, power2, power3, power4, power5,
мощность5 +, power6, мощность6x, power7, общий, PowerPC, мощностьpc64, реки, реки1, реки2, RSC,
и rs64.

-mcpu = общий выбирает полностью универсальный процессор. Код, созданный в соответствии с этой опцией
будет работать на любом процессоре POWER или PowerPC. GCC будет использовать только инструкции в
общее подмножество обеих архитектур и не будет использовать регистр MQ. GCC предполагает
общая модель процессора для целей планирования.

-mcpu = мощность, -mcpu = power2, -mcpu = powerpcкачества -mcpu = powerpc64 укажите общую МОЩНОСТЬ,
POWER2, ​​чистый 32-битный PowerPC (т.е. не MPC601) и 64-битная архитектура PowerPC
типы машин с соответствующей общей моделью процессора, предполагаемой для планирования
целей.

Другие параметры указывают конкретный процессор. Код, созданный в соответствии с этими параметрами
лучше всего будет работать на этом процессоре и может вообще не работать на других.

Ассоциация -MCPU параметры автоматически включают или отключают следующие параметры:

-малтивек -mfprnd -mhard-поплавок -ммфкрф -множественный -mnew-мнемоника -mpopcntb
-mpopcntd -мощность -мсила2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-мн-поплавок -mdouble-поплавок -mssimple-fpu -msstring -ммулхв -мдлмзб -mmfpgpr -мвкс

Конкретные параметры, установленные для любого конкретного процессора, будут различаться в зависимости от версии компилятора,
в зависимости от того, какие настройки создают оптимальный код для этого процессора; это не
обязательно отражают реальные возможности оборудования. Если вы хотите установить
индивидуальный параметр к определенному значению, вы можете указать его после -MCPU вариант,
такое как -mcpu = 970 -мно-алтивек.

В AIX -малтивек и -mpowerpc64 параметры не включены или отключены -MCPU
вариант в настоящее время, потому что AIX не полностью поддерживает эти параметры. Вы можете
по-прежнему включайте или отключайте их по отдельности, если вы уверены, что они будут работать в вашем
окружающей среды.

-mtune =тип_процессора
Установите параметры планирования инструкций для типа машины тип_процессора, но не устанавливайте
тип архитектуры, использование регистров или выбор мнемоники, как -mcpu =тип_процессора
бы. Те же значения для тип_процессора используются для -мтюн что касается -MCPU. Если оба
указанный, сгенерированный код будет использовать архитектуру, регистры и набор мнемоник
by -MCPU, но параметры планирования, установленные -мтюн.

-mcmodel = маленький
Сгенерируйте код PowerPC64 для маленькой модели: оглавление ограничено 64 КБ.

-mcmodel = средний
Сгенерируйте код PowerPC64 для средней модели: возможно, TOC и другие статические данные работают.
в общей сложности размером 4G.

-mcmodel = большой
Сгенерируйте код PowerPC64 для большой модели: размер TOC может быть до 4G. Другой
данные и код ограничены только 64-битным адресным пространством.

-малтивек
-мно-алтивек
Сгенерируйте код, который использует (не использует) инструкции AltiVec, а также включите использование
встроенных функций, обеспечивающих более прямой доступ к набору команд AltiVec.
Вам также может потребоваться установить -mabi = altivec настроить текущий ABI с помощью AltiVec ABI
усовершенствования.

-mvrsave
-mno-vrsave
Сгенерируйте инструкции VRSAVE при генерации кода AltiVec.

-mgen-cell-микрокод
Сгенерировать инструкции микрокода ячейки

-mwarn-cell-микрокод
Предупреждение, когда будет выпущена инструкция микрокода Cell. Пример ячейки
Инструкция микрокода - это переменный сдвиг.

-msecure-plt
Сгенерируйте код, который позволяет ld и ld.so создавать исполняемые файлы и разделяемые библиотеки с
разделы .plt и .got, не связанные с exec. Это 32-битная опция SYSV ABI PowerPC.

-mbss-plt
Сгенерируйте код, который использует раздел BSS .plt, который заполняет ld.so, и требует .plt и
Разделы .got, которые доступны как для записи, так и для выполнения. Это 32-битный SYSV PowerPC
Вариант ABI.

-мизель
-мно-исель
Этот переключатель включает или отключает генерацию инструкций ISEL.

-misel =да нет
Этот переключатель устарел. Использовать -мизель и -мно-исель .

-мспе
-мно-спе
Этот переключатель включает или отключает создание инструкций SPE simd.

-нарушение
-мно-парный
Этот переключатель включает или отключает генерацию СОПРЯЖЕННЫХ инструкций simd.

-mspe =да нет
Эта опция устарела. Использовать -мспе и -мно-спе .

-мвкс
-mno-vsx
Сгенерировать код, который использует (не использует) векторные / скалярные (VSX) инструкции, а также
позволяют использовать встроенные функции, которые обеспечивают более прямой доступ к VSX
набор инструкций.

-mfloat-gprs =да / одиночный / двойной / нет
-mfloat-gprs
Этот переключатель включает или отключает создание операций с плавающей запятой на
регистры общего назначения для поддерживающих его архитектур.

Аргумент Да or одинарной позволяет использовать числа с плавающей запятой одинарной точности
операций.

Аргумент двойной позволяет использовать числа с плавающей запятой одинарной и двойной точности
операций.

Аргумент нет отключает операции с плавающей запятой в регистрах общего назначения.

Эта опция в настоящее время доступна только на MPC854x.

-м32
-м64
Генерировать код для 32-битных или 64-битных сред целевых объектов Darwin и SVR4 (включая
GNU / Linux). 32-битная среда устанавливает int, long и указатель на 32 бита и
генерирует код, который работает на любом варианте PowerPC. В 64-битной среде для int установлено значение
32 бита и длинный и указатель на 64 бита, и генерирует код для PowerPC64, как для
-mpowerpc64.

-mfull-toc
-mno-fp-в-ток
-мно-сумма в сумме
-mminimal-toc
Изменить генерацию TOC (Table Of Contents), которая создается для каждого
запускаемый файл. В -mfull-toc опция выбрана по умолчанию. В этом случае GCC
выделит как минимум одну запись оглавления для каждой уникальной неавтоматической ссылки на переменную
в вашей программе. GCC также поместит в оглавление константы с плавающей запятой. Тем не мение,
только 16,384 XNUMX записи доступны в ТОС.

Если вы получаете сообщение об ошибке компоновщика, в котором говорится, что вы переполнили доступный
Пространство оглавления, вы можете уменьшить объем пространства оглавления, используемого -mno-fp-в-ток и
-мно-сумма в сумме настройки. -mno-fp-в-ток не позволяет GCC помещать числа с плавающей запятой
константы в ТОС и -мно-сумма в сумме заставляет GCC генерировать код для вычисления
сумма адреса и константы во время выполнения вместо помещения этой суммы в оглавление.
Вы можете указать один или оба этих параметра. Каждый из них заставляет GCC производить очень
немного медленнее и больше кода за счет экономии места TOC.

Если вам по-прежнему не хватает места в оглавлении даже при указании обоих этих параметров,
указывать -mminimal-toc вместо. Эта опция заставляет GCC делать только одну запись TOC для
каждый файл. Если вы укажете этот параметр, GCC будет создавать код, который будет медленнее и
больше, но при этом используется очень мало места для оглавления. Вы можете использовать эту опцию
только для файлов, которые содержат менее часто исполняемый код.

-maix64
-maix32
Включите 64-разрядный ABI AIX и соглашение о вызовах: 64-разрядные указатели, 64-разрядный «длинный» тип и
инфраструктура, необходимая для их поддержки. Указание -maix64 подразумевает -mpowerpc64 и
-mpowerpc, В то время -maix32 отключает 64-битный ABI и подразумевает -mno-powerpc64. ССАГПЗ
по умолчанию -maix32.

-mxl-совместимость
-mno-xl-совместимость
Создавать код, который больше соответствует семантике компилятора IBM XL при использовании AIX-
совместимый ABI. Передавать аргументы с плавающей запятой прототипированным функциям за пределами
Зарегистрируйте область сохранения (RSA) в стеке в дополнение к аргументам FPR. Не думайте
это самое старшее двойное в 128-битном двойном значении правильно округляется, когда
сравнение значений и преобразование в double. Используйте имена символов XL для длинного двойного
вспомогательные процедуры.

Соглашение о вызовах AIX было расширено, но изначально не задокументировано для обработки
непонятный случай K&R C вызова функции, которая принимает адрес своих аргументов с
меньше аргументов, чем заявлено. Компиляторы IBM XL получают доступ к аргументам с плавающей запятой, которые
не помещаются в RSA из стека, когда подпрограмма компилируется без
оптимизация. Поскольку всегда хранить аргументы с плавающей запятой в стеке
неэффективно и редко требуется, этот параметр по умолчанию не включен, а только
необходимо при вызове подпрограмм, скомпилированных компиляторами IBM XL без оптимизации.

-мпе
Поддержка IBM RS / 6000 SP Параллельные Окружающая среда (ПЭ). Свяжите приложение, написанное для использования
передача сообщений со специальным кодом запуска, позволяющим запускать приложение. В
в системе должен быть установлен PE в стандартном месте (/usr/lpp/ppe.poe/), или
функции файл должен быть заменен -specs = возможность указать соответствующий
расположение каталога. Параллельная среда не поддерживает потоки, поэтому -мпе
вариант и -pthread вариант несовместим.

-злокачественно-натуральный
-злокачественная сила
В AIX, 32-битном Darwin и 64-битном PowerPC GNU / Linux опция -злокачественно-натуральный
отменяет определенное ABI выравнивание более крупных типов, таких как числа с плавающей запятой,
на их естественной границе, основанной на размерах. Опция -злокачественная сила поручает GCC
следуйте правилам выравнивания, указанным в ABI. GCC по умолчанию использует стандартное выравнивание
определено в ABI.

В 64-битном Дарвине по умолчанию используется естественное выравнивание, а -злокачественная сила Не
поддерживается.

-msoft-поплавок
-mhard-поплавок
Сгенерируйте код, который не использует (использует) набор регистров с плавающей запятой. Программное обеспечение
эмуляция с плавающей точкой предоставляется, если вы используете -msoft-поплавок вариант и передать
возможность GCC при связывании.

-мн-поплавок
-mdouble-поплавок
Сгенерируйте код для операций с плавающей запятой одинарной или двойной точности.
-mdouble-поплавок подразумевает -мн-поплавок.

-mssimple-fpu
Не создавайте инструкции sqrt и div для аппаратного модуля с плавающей запятой.

-мфпу
Укажите тип блока с плавающей запятой. Допустимые значения: sp_lite (эквивалентно
-msingle-float -msimple-fpu), dp_lite (эквивалент -mdouble-float -msimple-fpu),
sp_full (эквивалент -msingle-float) и dp_full (эквивалент -mdouble-float).

-mxilinx-fpu
Выполните оптимизацию для модуля с плавающей запятой на Xilinx PPC 405/440.

-множественный
-мно-кратный
Сгенерируйте код, который использует (не использует) инструкции загрузки нескольких слов и
хранить инструкции из нескольких слов. Эти инструкции по умолчанию генерируются на
Системы POWER, а не генерируются в системах PowerPC. Не используйте -множественный на мало-
endian в системах PowerPC, поскольку эти инструкции не работают, когда процессор находится в
прямой порядок байтов. Исключением являются PPC740 и PPC750, которые разрешают эти
инструкции в режиме прямого порядка байтов.

-msstring
-mno-строка
Сгенерировать код, который использует (не использует) инструкции строки загрузки и хранилище
инструкции строкового слова для сохранения нескольких регистров и выполнения небольших перемещений блоков. Эти
инструкции генерируются по умолчанию в системах POWER, а не на PowerPC.
системы. Не используйте -msstring в системах PowerPC с прямым порядком байтов, поскольку те
инструкции не работают, когда процессор находится в режиме прямого порядка байтов. Исключения
это PPC740 и PPC750, которые разрешают эти инструкции в режиме с прямым порядком байтов.

-обновить
-mno-обновление
Сгенерировать код, который использует (не использует) инструкции загрузки или сохранения, обновляющие
базовый регистр по адресу вычисленной ячейки памяти. Эти инструкции
генерируются по умолчанию. Если вы используете -mno-обновление, между
время, когда указатель стека обновляется и адрес предыдущего кадра
сохранены, что означает, что код, который проходит фрейм стека по прерываниям или сигналам, может
получить поврежденные данные.

-mavoid-индексированные-адреса
-mno-избегайте-индексированных-адресов
Сгенерируйте код, который пытается избежать (но не избежать) использования индексированной загрузки или сохранения
инструкции. Эти инструкции могут снизить производительность процессоров Power6.
в определенных ситуациях, например, при переходе через большие массивы, которые пересекают 16M
граница. Этот параметр включен по умолчанию при настройке Power6 и отключен.
в противном случае.

-растерянный-безумный
-mno-плавленный-madd
Сгенерируйте код, который использует (не использует) умножение с плавающей запятой и накопление
инструкции. Эти инструкции генерируются по умолчанию, если аппаратное обеспечение с плавающей запятой
используется. Машинно-зависимый -растерянный-безумный опция теперь сопоставлена ​​с машиной-
независимые -ffp-contract = быстро вариант, и -mno-плавленный-madd сопоставлен с
-ffp-contract = выключено.

-ммулхв
-мно-мулхв
Сгенерировать код, который использует (не использует) полуслова умножения и умножения-накопления
инструкции для процессоров IBM 405, 440, 464 и 476. Эти инструкции
генерируется по умолчанию при настройке на эти процессоры.

-мдлмзб
-мно-длмзб
Сгенерировать код, который использует (не использует) поиск по строке длмзб инструкция по ИБМ
405, 440, 464 и 476 процессоров. Эта инструкция генерируется по умолчанию, когда
нацелены на эти процессоры.

-mno-битовое выравнивание
-mbit-выровнять
В System V.4 и встроенных системах PowerPC не используются (не действуют) структуры и объединения
которые содержат битовые поля, которые должны быть выровнены по базовому типу битового поля.

Например, по умолчанию структура, содержащая только 8 «беззнаковых» битовых полей
длина 1 выровнена по 4-байтовой границе и имеет размер 4 байта. Используя
-mno-битовое выравнивание, структура выравнивается по 1-байтовой границе и имеет размер 1 байт.

-mno-строгое выравнивание
-mstrict-выравнивание
В системе V.4 и встроенных системах PowerPC не предполагается, что невыровненная память
ссылки будут обрабатываться системой.

-мперемещаемый
-мно-перемещаемый
Сгенерировать код, который позволяет (не позволяет) перемещать статический исполняемый файл в
другой адрес во время выполнения. Простой встроенный загрузчик системы PowerPC должен
переместить все содержимое ".got2" и 4-байтовых местоположений, перечисленных в ".fixup"
раздел, таблица 32-битных адресов, сгенерированных этой опцией. Чтобы это работало, все
объекты, связанные вместе, должны быть скомпилированы с -мперемещаемый or -mrelocatable-lib.
-мперемещаемый код выравнивает стек по 8-байтовой границе.

-mrelocatable-lib
-mno-перемещаемый-lib
Подобно -мперемещаемый, -mrelocatable-lib создает раздел ".fixup", чтобы разрешить статические
исполняемые файлы должны быть перемещены во время выполнения, но -mrelocatable-lib не использует
выравнивание меньшего стека -мперемещаемый. Объекты, скомпилированные с помощью -mrelocatable-lib май
быть связанными с объектами, скомпилированными с любой комбинацией -мперемещаемый настройки.

-мно-ток
-mtoc
В системе V.4 и встроенных системах PowerPC не предполагается (не предполагается), что регистр 2 содержит
указатель на глобальную область, указывающую на адреса, используемые в программе.

-маленький
-с младшим порядком байтов
В системах System V.4 и встроенных системах PowerPC код для процессора компилируется в небольших количествах.
порядок байтов. В -с младшим порядком байтов вариант такой же, как -маленький.

-мБиг
-mbig-endian
В системах System V.4 и встроенных системах PowerPC код процессора компилируется в больших объемах.
порядок байтов. В -mbig-endian вариант такой же, как -мБиг.

-mdynamic-без изображения
В системах Darwin и Mac OS X скомпилируйте код так, чтобы его нельзя было перемещать, но чтобы
его внешние ссылки можно перемещать. Полученный код подходит для
приложения, но не разделяемые библиотеки.

-msingle-pic-база
Считайте регистр, используемый для адресации PIC, доступным только для чтения, а не загружайте его в
пролог для каждой функции. Система времени выполнения отвечает за инициализацию этого
до начала выполнения зарегистрируйтесь с соответствующим значением.

-mprioritize-limited-insns =приоритет
Эта опция управляет приоритетом, который назначается ограниченному слоту диспетчеризации.
инструкции во время второго прохода планирования. Аргумент приоритет принимает значение
0/1/2 назначить нет / высший / второй высший ограничен приоритет перед отправкой
инструкциями.

-msched-costly-dep =зависимость_тип
Эта опция контролирует, какие зависимости считаются дорогостоящими для цели во время
планирование инструкций. Аргумент зависимость_тип принимает одно из следующих
ценности: нет: отсутствие зависимости дорого, Найти: все зависимости стоят дорого,
true_store_to_load: истинная зависимость от магазина к загрузке стоит дорого, store_to_load: Любой
зависимость от магазина к загрузке стоит дорого, номер: любая зависимость, для которой задержка> =
номер стоит дорого.

-minsert-sched-nops =схема
Этот параметр определяет, какая схема вставки nop будет использоваться во время второго
планирование прохода. Аргумент схема принимает одно из следующих значений: нет: Не
вставить nops. площадка: Pad with nops любая группа отправки, в которой есть свободные места для задач,
согласно группировке планировщика. regroup_exact: Вставьте nops, чтобы
зависимых ИНН в отдельные группы. Вставьте ровно столько носков, сколько необходимо, чтобы
insn в новую группу в соответствии с предполагаемой группировкой процессоров. номер: Вставлять
nops, чтобы разделить дорогостоящие зависимые insns в отдельные группы. Вставлять номер нет
принудительно ввести insn в новую группу.

-mcall-sysv
В System V.4 и встроенных системах PowerPC код компилируется с использованием соглашений о вызовах, которые
придерживается проекта бинарного интерфейса приложений System V от марта 1995 г., PowerPC
Дополнение к процессору. Это значение по умолчанию, если вы не настроили GCC с помощью
powerpc - * - eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Укажите оба -mcall-sysv и -меаби настройки.

-mcall-sysv-noeabi
Укажите оба -mcall-sysv и -мно-эаби настройки.

-mcall-aixdesc
В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы AIX.

-mcall-линукс
В системах System V.4 и встроенных системах PowerPC код компиляции для GNU на базе Linux
системы.

-mcall-freebsd
В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы FreeBSD.
системы.

-mcall-netbsd
В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы NetBSD.
системы.

-mcall-openbsd
В системах System V.4 и встроенных системах PowerPC код компилируется для операционной системы OpenBSD.
системы.

-maix-структура-возврат
Вернуть все структуры в памяти (как указано в AIX ABI).

-msvr4-структура-возврат
Возвращает структуры размером менее 8 байт в регистрах (как указано в SVR4 ABI).

-mabi =abi-тип
Расширить текущий ABI определенным расширением или удалить такое расширение. Действительный
значения альтивек, но-алтивек, конкретный, не-спе, ibmlongdouble, ieeelongdouble.

-mabi = spe
Расширьте текущий ABI с помощью расширений SPE ABI. Это не меняет ABI по умолчанию,
вместо этого он добавляет расширения SPE ABI к текущему ABI.

-mabi = no-spe
Отключите расширения Booke SPE ABI для текущего ABI.

-mabi = ibmlongdouble
Измените текущий ABI, чтобы использовать long double с расширенной точностью IBM. Это PowerPC
32-битный вариант SYSV ABI.

-mabi = ieeelongdouble
Измените текущий ABI, чтобы использовать long double с расширенной точностью IEEE. Это PowerPC
32-битный вариант Linux ABI.

-mпрототип
-мно-прототип
В системе V.4 и встроенных системах PowerPC предполагается, что все вызовы переменных аргументов
функции должным образом прототипированы. В противном случае компилятор должен вставить инструкцию
перед каждым вызовом, не являющимся прототипом, для установки или очистки бита 6 регистра кода условия
(CR), чтобы указать, были ли переданы значения с плавающей запятой в
регистры, если функция принимает переменные аргументы. С участием -mпрототип, только звонки
к прототипу функции аргумента переменной устанавливается или очищается.

-мсим
Во встроенных системах PowerPC предположим, что модуль запуска называется sim-crt0.o и
что стандартные библиотеки C libsim.a и libc.a, Это по умолчанию для
powerpc - * - eabisim конфигурации.

-ммвме
Во встроенных системах PowerPC предположим, что модуль запуска называется crt0.o и
стандартные библиотеки C libmvme.a и libc.a.

-безумцы
Во встроенных системах PowerPC предположим, что модуль запуска называется crt0.o и
стандартные библиотеки C libads.a и libc.a.

-молотный нож
Во встроенных системах PowerPC предположим, что модуль запуска называется crt0.o и
стандартные библиотеки C либык.а и libc.a.

-mvxworks
В системе V.4 и встроенных системах PowerPC укажите, что вы компилируете для
Система VxWorks.

член
На встроенных системах PowerPC установите PPC_EMB бит в заголовке флагов ELF, чтобы указать
который Eabi используются расширенные переселения.

-меаби
-мно-эаби
В System V.4 и встроенных системах PowerPC не соблюдаются (не)
Бинарный интерфейс приложений (eabi), который представляет собой набор модификаций Системы V.4.
технические характеристики. Выбор -меаби означает, что стек выровнен по 8-байтовому
граница, функция "__eabi" вызывается из "main" для настройки среды eabi,
и -мсданные опция может использовать как "r2", так и "r13", чтобы указать на два отдельных небольших данных
области. Выбор -мно-эаби означает, что стек выровнен по 16-байтовой границе, выполните
не вызывать функцию инициализации из "main", и -мсданные вариант будет использовать только
«r13» указывает на одну небольшую область данных. В -меаби опция включена по умолчанию, если вы
настроил GCC, используя один из powerpc * - * - eabi * настройки.

-msdata = eabi
В System V.4 и встроенных системах PowerPC поместите небольшой инициализированный глобальный параметр const и
статические данные в .sdata2 раздел, на который указывает регистр "r2". Положите маленький
инициализированные неконстантные глобальные и статические данные в .sdata раздел, на который указывают
в регистр "r13". Поместите небольшие неинициализированные глобальные и статические данные в .sbss
раздел, примыкающий к .sdata раздел. -msdata = eabi опция
несовместимо с -мперемещаемый вариант. -msdata = eabi опция также устанавливает
член опцию.

-msdata = sysv
В System V.4 и встроенных системах PowerPC поместите небольшие глобальные и статические данные в
.sdata раздел, на который указывает регистр "r13". Поставьте небольшой неинициализированный глобальный
и статические данные в .sbss раздел, примыкающий к .sdata раздел.
-msdata = sysv вариант несовместим с -мперемещаемый опцию.

-msdata = по умолчанию
-мсданные
В системе V.4 и встроенных системах PowerPC, если -меаби используется, код компиляции такой же
as -msdata = eabi, в противном случае скомпилируйте код так же, как -msdata = sysv.

-msdata = данные
В System V.4 и встроенных системах PowerPC поместите небольшие глобальные данные в .sdata
раздел. Поместите небольшие неинициализированные глобальные данные в .sbss раздел. Не используйте
Однако регистр «r13» предназначен для работы с небольшими данными. Это поведение по умолчанию, если только
другие -мсданные используются варианты.

-msdata = нет
-mno-sdata
На встроенных системах PowerPC поместите все инициализированные глобальные и статические данные в .данные
раздел, и все неинициализированные данные в .bss .

-mblock-move-inline-limit =Num
Встроить все перемещения блоков (например, вызовы «memcpy» или структурные копии) меньше или
равно Num байтов. Минимальное значение для Num составляет 32 байта для 32-битных целей и 64
байтов для 64-битных целей. Значение по умолчанию зависит от цели.

-G Num
Во встроенных системах PowerPC поместите глобальные и статические элементы меньше или равными Num
байты в секции small data или bss вместо обычных data или bss.
По умолчанию Num составляет 8 XNUMX. -G Num переключатель также передается компоновщику. Все модули
должен быть скомпилирован с тем же -G Num значения.

-mregnames
-мно-переименования
В системе V.4 и встроенных системах PowerPC имена регистров в
вывод на ассемблере с использованием символьных форм.

-млонгколл
-мно-длинный вызов
По умолчанию предполагается, что все вызовы находятся далеко, поэтому более длительный и более дорогой вызов
последовательность обязательна. Это необходимо для звонков, превышающих 32 мегабайта.
(33,554,432 байта) из текущего местоположения. Будет сгенерирован короткий звонок, если
компилятор знает, что вызов не может быть так далеко. Этот параметр может быть изменен
атрибут функции "shortcall" или "#pragma" длинный звонок(0)».

Некоторые компоновщики способны обнаруживать вызовы вне диапазона и генерировать связующий код на
муха. В этих системах длинные вызовы не нужны и генерируют более медленный код. В качестве
На момент написания этой статьи компоновщик AIX может это сделать, как и компоновщик GNU для PowerPC / 64. Это
Планируется добавить эту функцию в компоновщик GNU для 32-битных систем PowerPC.

В системах Darwin / PPC "#pragma longcall" будет генерировать "jbsr callee, L42" плюс
«остров-ответвление» (клеевой код). Два целевых адреса представляют вызываемого и
"остров-ответвление". Компоновщик Darwin / PPC предпочтет первый адрес и сгенерирует
«bl callee», если инструкция PPC «bl» достигнет вызываемого напрямую; в противном случае
компоновщик сгенерирует "bl L42" для вызова "острова ответвления". «Остров-ветвь» - это
добавляется к телу вызывающей функции; он вычисляет полный 32-битный адрес
вызываемый и прыгает к нему.

В системах Mach-O (Darwin) этот параметр направляет компилятор на клей для
каждый прямой вызов, и компоновщик Дарвина решает, использовать или отклонить его.

В будущем мы можем заставить GCC игнорировать все спецификации longcall, когда компоновщик
известно, что образует клей.

-mtls-маркеры
-mno-TLS-маркеры
Отметьте (не помечайте) вызовы «__tls_get_addr» перемещением, указав функцию
аргумент. Перемещение позволяет ld надежно связать вызов функции с аргументом
инструкции по настройке для оптимизации TLS, что, в свою очередь, позволяет gcc лучше планировать
последовательность.

-pthread
Добавляет поддержку многопоточности с Pthreads библиотека. Эта опция устанавливает флаги для
как препроцессор, так и компоновщик.

-mrecip
-мно-рецип
Эта опция позволит GCC использовать обратную оценку и квадратный корень.
оцените инструкции с дополнительными шагами Ньютона-Рафсона для повышения точности
вместо деления или извлечения квадратного корня и деления для аргументов с плавающей запятой. Ты
следует использовать -ffast-математика вариант при использовании -mrecip (или по крайней мере
-funsafe-математическая-оптимизация, -finite-math-only - только математика, -freciprocal-математика и
-fno-ловушка-математика). Обратите внимание, что хотя пропускная способность последовательности обычно
выше, чем пропускная способность невзаимной инструкции, точность
последовательность может быть уменьшена до 2 ulp (т. е. значение, обратное 1.0, равно 0.99999994)
для взаимных квадратных корней.

-mrecip =выбирать
Эта опция позволяет контролировать, какие инструкции обратной оценки могут использоваться. выбирать
- это список параметров, разделенных запятыми, которому может предшествовать "!" инвертировать
option: "all": включить все инструкции по оценке, "default": включить значение по умолчанию
инструкции, эквивалентные -mrecip, "none": отключить все инструкции по оценке,
что эквивалентно -мно-рецип; "div": включить инструкции обратного приближения для
как одинарной, так и двойной точности; "divf": включить обратную одинарную точность
инструкции по приближению; "divd": включить обратную двойную точность
инструкции по приближению; "rsqrt": включить приближение обратного квадратного корня
инструкции как для одинарной, так и для двойной точности; "rsqrtf": включить одиночный
инструкции по точному вычислению обратного квадратного корня; "rsqrtd": включить
инструкции аппроксимации обратного квадратного корня двойной точности;

Так, например, -mrecip = все,! rsqrtd позволит получить все взаимные оценки
инструкции, кроме инструкций "FRSQRTE", "XSRSQRTEDP" и "XVRSQRTEDP"
которые обрабатывают вычисления обратного квадратного корня двойной точности.

-mrecip-точность
-mno-recip-точность
Предположите (не предполагайте), что инструкции по взаимной оценке обеспечивают более высокую
оценки точности, чем требуется PowerPC ABI. Выбор -mcpu = power6 or
-mcpu = power7 автоматически выбирает -mrecip-точность. Квадрат двойной точности
инструкции оценки корня не генерируются по умолчанию на машинах с низкой точностью,
поскольку они не дают оценки, сходящейся после трех шагов.

-mveclibabi =напишите
Задает тип ABI, который будет использоваться для векторизации встроенных функций с использованием внешней библиотеки.
В настоящее время поддерживается только тип "масса", который указывает на использование IBM
Библиотеки математической подсистемы ускорения (MASS) для векторизации встроенных функций с использованием
внешние библиотеки. GCC в настоящее время будет отправлять вызовы «acosd2», «acosf4», «acoshd2»,
«acoshf4», «asind2», «asinf4», «asinhd2», «asinhf4», «atan2d2», «atan2f4», «atand2»,
«atanf4», «atanhd2», «atanhf4», «cbrtd2», «cbrtf4», «cosd2», «cosf4», «coshd2»,
«coshf4», «erfcd2», «erfcf4», «erfd2», «erff4», «exp2d2», «exp2f4», «expd2», «expf4»,
«expm1d2», «expm1f4», «hypotd2», «hypotf4», «lgammad2», «lgammaf4», «log10d2»,
«log10f4», «log1pd2», «log1pf4», «log2d2», «log2f4», «logd2», «logf4», «powd2»,
"powf4", "sind2", "sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4",
«tanhd2» и «tanhf4» при генерации кода для power7. Оба -ftree-векторизация и
-funsafe-математическая-оптимизация должны быть включены. Библиотеки MASS должны быть
указано во время ссылки.

-мфриз
-мно-фриз
Сгенерировать (не генерировать) инструкцию "friz", когда -funsafe-математическая-оптимизация
опция используется для оптимизации округления значений с плавающей запятой до 64-битного целого числа и
вернуться к плавающей запятой. Инструкция "friz" не возвращает то же значение, если
число с плавающей запятой слишком велико для целого числа.

-mуказатели-на-вложенные-функции
-mno-указатели-на-вложенные-функции
Сгенерировать (не генерировать) код для загрузки статического регистра цепочки (r11) когда
вызов через указатель в AIX и 64-битных системах Linux, где указатель на функцию
указывает на трехсловный дескриптор, дающий адрес функции, значение оглавления, которое будет загружено в
зарегистрироваться r2, и статическое значение цепочки, которое будет загружено в регистр r11,
-mуказатели-на-вложенные-функции по умолчанию включен. Вы не сможете дозвониться
указатели на вложенные функции или указатели на функции, скомпилированные на других языках, которые
используйте статическую цепочку, если вы используете -mno-указатели-на-вложенные-функции.

-msave-toc-косвенный
-mno-save-toc-косвенный
Сгенерировать (не генерировать) код для сохранения значения TOC в зарезервированном месте стека
в прологе функции, если функция вызывает указатель на AIX и 64-битную
Системы Linux. Если значение TOC не сохраняется в прологе, оно сохраняется непосредственно перед
вызов через указатель. В -mno-save-toc-косвенный опция по умолчанию.

RX Опции

Эти параметры командной строки определены для целей RX:

-m64bit-удваивается
-m32bit-удваивается
Сделайте "двойной" тип данных 64-битным (-m64bit-удваивается) или 32 бита (-m32bit-удваивается)
по размеру. По умолчанию -m32bit-удваивается. Внимание Оборудование RX с плавающей запятой работает только
для 32-битных значений, поэтому по умолчанию -m32bit-удваивается.

-фпу
-нофпу
Включает (-фпу) или отключает (-нофпу) использование оборудования RX с плавающей запятой. В
по умолчанию включен для RX600 серии и отключен для RX200 серии.

Инструкции с плавающей запятой будут созданы только для 32-битных значений с плавающей запятой.
однако, если -m64bit-удваивается опция используется, тогда оборудование FPU не будет
используется для пар.

Внимание Если же линия индикатора -фпу опция включена, тогда -funsafe-математическая-оптимизация также включен
автоматически. Это потому, что инструкции RX FPU сами по себе небезопасны.

-mcpu =имя
Выбирает целевой тип ЦП RX. В настоящее время поддерживаются три типа:
родовой RX600 и RX200 серийное оборудование и конкретное RX610 ПРОЦЕССОР. По умолчанию
RX600.

Единственная разница между RX600 и RX610 в том, что RX610 не поддерживает
Инструкция "МВТИПЛ".

Ассоциация RX200 серия не имеет аппаратного модуля с плавающей запятой и поэтому -нофпу включен
по умолчанию, когда выбран этот тип.

-mbig-endian-данные
-mlittle-endian-данные
Храните данные (но не код) в формате big-endian. По умолчанию
-mlittle-endian-данные, т.е. хранить данные в формате little-endian.

-msmall-data-limit =N
Задает максимальный размер в байтах глобальных и статических переменных, которые могут быть размещены
в небольшую область данных. Использование небольшой области данных может привести к уменьшению размера и скорости
кода, но размер области ограничен, и программист должен убедиться, что
площадь не переливается. Также, когда используется небольшая область данных, один из RX
регистры (обычно "r13") зарезервированы для использования, указывающие на эту область, поэтому это не
больше доступен для использования компилятором. Это может привести к более медленному и / или большему
код, если переменные, которые когда-то могли храниться в зарезервированном регистре, теперь
помещен в стек.

Обратите внимание: общие переменные (переменные, которые не были инициализированы) и константы
не помещаются в небольшую область данных, поскольку они назначены другим разделам в
выходной исполняемый файл.

Значение по умолчанию - ноль, что отключает эту функцию. Обратите внимание, эта функция не
включен по умолчанию с более высокими уровнями оптимизации (-O2 и т. д.) из-за
потенциально пагубные последствия резервирования реестра. Все зависит от программиста
поэкспериментировать и выяснить, полезна ли эта функция для их программы. Видеть
описание -mpid вариант для описания того, как фактическая регистрация
удерживать указатель небольшой области данных выбран.

-мсим
-мно-сим
Используйте среду выполнения симулятора. По умолчанию используется среда выполнения, специфичная для платы libgloss.

-mas100-синтаксис
-mno-as100-синтаксис
При создании вывода на ассемблере используйте синтаксис, совместимый с Renesas AS100.
ассемблер. Этот синтаксис также может обрабатываться ассемблером GAS, но в нем есть
ограничения, поэтому его создание не является вариантом по умолчанию.

-mmax-constant-size =N
Задает максимальный размер в байтах константы, которая может использоваться в качестве операнда в
инструкция RX. Хотя набор команд RX допускает константы до 4
байтов, которые будут использоваться в инструкциях, более длинное значение приравнивается к более длинному
инструкция. Таким образом, в некоторых случаях может быть полезно ограничить размер
константы, которые используются в инструкциях. Вместо этого слишком большие константы
помещается в пул констант и ссылается на него посредством косвенного обращения к регистрам.

Значение N может быть от 0 до 4. Значение 0 (по умолчанию) или 4 означает, что
допускаются константы любого размера.

-мелакс
Включить релаксацию компоновщика. Ослабление линкера - это процесс, при котором линкер будет
попытаться уменьшить размер программы, найдя более короткие версии различных
инструкции. По умолчанию отключено.

-mint-register =N
Укажите количество регистров, которые необходимо зарезервировать для функций быстрого обработчика прерываний. В
ценностное N может быть от 0 до 4. Значение 1 означает, что регистр "r13" будет
зарезервировано для исключительного использования обработчиков быстрых прерываний. Стоимость 2 резерва
«r13» и «r12». Значение 3 резервирует «r13», «r12» и «r11», а значение 4
резервирует "r13" через "r10". Значение 0, по умолчанию, не резервирует никаких
регистры.

-msave-acc-в-прерываниях
Указывает, что функции обработчика прерывания должны сохранять регистр аккумулятора.
Это необходимо только в том случае, если обычный код может использовать регистр аккумулятора, например
потому что он выполняет 64-битное умножение. По умолчанию аккумулятор игнорируется.
так как это ускоряет работу обработчиков прерываний.

-mpid
-мно-пид
Позволяет генерировать данные, не зависящие от положения. Когда включен любой доступ к
постоянные данные будут осуществляться через смещение от базового адреса, хранящегося в регистре. Этот
позволяет определять местоположение постоянных данных во время выполнения, не требуя
исполняемый файл должен быть перемещен, что является преимуществом для встраиваемых приложений с жесткими
ограничения памяти. Этот параметр не влияет на данные, которые можно изменить.

Обратите внимание: при использовании этой функции для постоянных данных резервируется регистр, обычно "r13".
базовый адрес. Это может привести к более медленному и / или большему коду, особенно в сложных
функции.

Фактический регистр, выбранный для хранения постоянного адреса базы данных, зависит от того,
домен -msmall-данные-лимит и / или -mint-регистр параметры командной строки включены.
Начиная с регистра "r13" и далее вниз, регистры распределяются первыми.
для удовлетворения требований -mint-регистр, то -mpid и, наконец,
-msmall-данные-лимит. Таким образом, регистр малой области данных может быть "r8".
если оба -mint-register = 4 и -mpid указаны в командной строке.

По умолчанию эта функция отключена. Значение по умолчанию можно восстановить с помощью -мно-пид
параметр командной строки.

Примечание: Общий параметр командной строки GCC -фиксированный-Редж имеет особое значение для RX
порт при использовании с атрибутом функции "прерывание". Этот атрибут указывает на
функция, предназначенная для обработки быстрых прерываний. GCC будет гарантировать, что он использует только
регистры «r10», «r11», «r12» и / или «r13» и только при условии, что нормальное использование
соответствующие регистры были ограничены через -фиксированный-Редж or -mint-регистр
параметры командной строки.

S / 390 и zСерия Опции

Это -m параметры, определенные для архитектуры S / 390 и zSeries.

-mhard-поплавок
-msoft-поплавок
Используйте (не используйте) аппаратные инструкции с плавающей запятой и регистры для операций с плавающей запятой.
точечные операции. Когда -msoft-поплавок указано, функции в libgcc.a будет использовано
для выполнения операций с плавающей запятой. Когда -mhard-поплавок указан, компилятор
генерирует инструкции с плавающей запятой IEEE. Это значение по умолчанию.

-mhard-dfp
-mno-жесткий-dfp
Используйте (не используйте) аппаратные инструкции для десятичных чисел с плавающей запятой для десятичных чисел.
операции с плавающей запятой. Когда -mno-жесткий-dfp указано, функции в libgcc.a
будет использоваться для выполнения операций с десятичной и плавающей запятой. Когда -mhard-dfp is
указанный, компилятор генерирует аппаратные инструкции с десятичной и плавающей запятой. Этот
по умолчанию для -март = z9-ec или выше.

-млонг-двойной-64
-млонг-двойной-128
Эти переключатели регулируют размер типа «длинный двойной». Размер 64 бита делает
Тип "long double" эквивалентен типу "double". Это значение по умолчанию.

-mbackchain
-мно-бэкчейн
Сохранять (не сохранять) адрес кадра вызывающего абонента в качестве указателя на бэкчейн в
фрейм стека вызываемого объекта. Может потребоваться обратная цепочка, чтобы разрешить отладку с помощью инструментов, которые
не понимают информацию о кадре вызова DWARF-2. Когда -мно-упакованный-стек В
эффект, указатель backchain хранится в нижней части кадра стека; когда
-mpacked-стек действует, backchain помещается в самое верхнее слово
Область сохранения регистра 96/160 байт.

В общем, код, скомпилированный с -mbackchain совместим по вызову с кодом, скомпилированным с
-ммо-бэкчейн; однако использование backchain для целей отладки обычно требует
что весь двоичный файл построен с -mbackchain. Обратите внимание, что комбинация
-mbackchain, -mpacked-стек и -mhard-поплавок не поддерживается. Чтобы построить
использование ядра Linux -msoft-поплавок.

По умолчанию бэкчейн не поддерживается.

-mpacked-стек
-мно-упакованный-стек
Использовать (не использовать) компоновку упакованного стека. Когда -мно-упакованный-стек указано,
компилятор использует все поля области сохранения регистра 96/160 байтов только для своих
цель по умолчанию; неиспользуемые поля по-прежнему занимают место в стеке. Когда -mpacked-стек is
указано, слоты сохранения регистров плотно упакованы в верхней части сохранения регистра
площадь; неиспользуемое пространство повторно используется для других целей, что позволяет более эффективно использовать
доступное пространство стека. Однако когда -mbackchain также действует, самый верхний
слово области сохранения всегда используется для хранения бэкчейна, а адрес возврата
Регистр всегда сохраняется двумя словами ниже бэкчейна.

Пока не используется обратная цепочка кадра стека, код, сгенерированный с помощью -mpacked-стек
совместим с вызовами с кодом, сгенерированным с помощью -мно-упакованный-стек. Обратите внимание, что некоторые не-FSF
выпуски GCC 2.95 для S / 390 или zSeries сгенерированного кода, который использует кадр стека
backchain во время выполнения, а не только для целей отладки. Такой код не называется
совместим с кодом, скомпилированным с -mpacked-стек. Также обратите внимание, что комбинация
-mbackchain, -mpacked-стек и -mhard-поплавок не поддерживается. Чтобы построить
использование ядра Linux -msoft-поплавок.

По умолчанию компоновка упакованного стека не используется.

-msmall-exec
-mno-small-exec
Сгенерировать (или не генерировать) код с помощью инструкции "bras" для выполнения подпрограммы
звонки. Это работает надежно только в том случае, если общий размер исполняемого файла не превышает 64 КБ.
По умолчанию вместо этого используется инструкция "basr", которая не имеет этого
ограничение.

-м64
-м31
После появления -м31 указано, сгенерируйте код, соответствующий GNU / Linux для S / 390 ABI. Когда
-м64 указано, сгенерируйте код, соответствующий GNU / Linux для zSeries ABI. Этот
позволяет GCC, в частности, генерировать 64-битные инструкции. Для s390 цели,
по умолчанию -м31, В то время s390x по умолчанию цели -м64.

-мзарх
-меса
После появления -мзарх указан, сгенерируйте код, используя инструкции, доступные на
з / Архитектура. Когда -меса указан, сгенерируйте код, используя инструкции
доступно на ESA / 390. Обратите внимание, что -меса невозможно с -м64. При создании
код, соответствующий GNU / Linux для S / 390 ABI, по умолчанию -меса. При создании
код, соответствующий GNU / Linux для zSeries ABI, по умолчанию -мзарх.

-mmvcle
-mno-mvcle
Сгенерировать (или не генерировать) код с помощью инструкции "mvcle" для выполнения блока
движется. Когда -mno-mvcle указан, используйте вместо него цикл "mvc". Это по умолчанию
если не оптимизировать по размеру.

-mdebug
-мно-отладка
Распечатать (или не печатать) дополнительную отладочную информацию при компиляции. По умолчанию
не печатать отладочную информацию.

-март =тип процессора
Сгенерируйте код, который будет работать на тип процессора, которое является именем системы, представляющей
определенный тип процессора. Возможные значения для тип процессора Он g5, g6, z900, z990, z9-109,
z9-ec и z10. При генерации кода с помощью инструкций, доступных на
z / Architecture, по умолчанию -march = z900. В противном случае по умолчанию -март = g5.

-mtune =тип процессора
Настройтесь на тип процессора все, что применимо к сгенерированному коду, кроме ABI
и набор доступных инструкций. Список тип процессора значения такие же, как для
-маршировать. По умолчанию используется значение, используемое для -маршировать.

-mtpf-трассировка
-mno-tpf-трассировка
Сгенерировать код, который добавляет (не добавляет) в специальные ветви TPF OS для процедур трассировки.
в операционной системе. По умолчанию этот параметр отключен, даже при компиляции для
ОС TPF.

-растерянный-безумный
-mno-плавленный-madd
Сгенерируйте код, который использует (не использует) умножение с плавающей запятой и накопление
инструкции. Эти инструкции генерируются по умолчанию, если аппаратное обеспечение с плавающей запятой
используется.

-mwarn-framesize =размер кадра
Выдает предупреждение, если текущая функция превышает заданный размер кадра. Потому что это
проверка во время компиляции, это не должно быть реальной проблемой при запуске программы. Это
предназначен для определения функций, которые наиболее вероятно вызывают переполнение стека. это
полезно использовать в среде с ограниченным размером стека, например, в ядре Linux.

-mwarn-динамический стек
Выдает предупреждение, если функция вызывает alloca или использует массивы с динамическим размером. Это
вообще плохая идея с ограниченным размером стека.

-mstack-guard =охранник стека
-mstack-size =размер стопки
Если эти параметры предоставлены, серверная часть s390 выдает дополнительные инструкции в
пролог функции, которая запускает ловушку, если размер стека охранник стека байты выше
домен размер стопки (помните, что стек на s390 растет вниз). Если охранник стека
опция опущена наименьшая степень 2 больше, чем размер кадра скомпилированного
функция выбрана. Эти параметры предназначены для использования в отладке стека.
проблемы с переполнением. Дополнительный испускаемый код вызывает лишь небольшие накладные расходы и
следовательно, может также использоваться в производстве, например, в системах без большей производительности.
деградация. Приведенные значения должны быть точными степенями двойки и размер стопки должен быть
больше охранник стека не превышая 64к. Чтобы быть эффективными, дополнительные
код предполагает, что стек начинается с адреса, выровненного по значению
дано размер стопки, охранник стека опция может использоваться только вместе с
размер стопки.

Счет Опции

Эти параметры определены для реализаций Score:

-меб
Скомпилируйте код для режима прямого байта. Это значение по умолчанию.

-мель
Скомпилируйте код для режима с прямым порядком байтов.

-мнхвлуп
Отключить создание инструкции bcnz.

-мульс
Включите создание невыровненной инструкции загрузки и сохранения.

-ммак
Включите использование инструкций умножения-накопления. По умолчанию отключено.

-mscore5
Укажите SCORE5 в качестве целевой архитектуры.

-mscore5u
Укажите SCORE5U целевой архитектуры.

-mscore7
Укажите SCORE7 в качестве целевой архитектуры. Это значение по умолчанию.

-mscore7d
Укажите SCORE7D в качестве целевой архитектуры.

SH Опции

Эти -m параметры определены для реализаций SH:

-м1 Сгенерируйте код для SH1.

-м2 Сгенерируйте код для SH2.

-m2e
Сгенерируйте код для SH2e.

-m2a-нофпу
Сгенерируйте код для SH2a без FPU или для SH2a-FPU таким образом, чтобы
единица с плавающей запятой не используется.

-m2a-только для одного
Сгенерируйте код для SH2a-FPU таким образом, чтобы не было операций с плавающей запятой двойной точности.
используются операции.

-m2a-сингл
Сгенерируйте код для SH2a-FPU, предполагая, что единица с плавающей запятой имеет одинарную точность
режим по умолчанию.

-м2а
Сгенерируйте код для SH2a-FPU, предполагая, что блок с плавающей запятой имеет двойную точность
режим по умолчанию.

-м3 Сгенерируйте код для SH3.

-m3e
Сгенерируйте код для SH3e.

-m4-нофпу
Сгенерируйте код для SH4 без блока с плавающей запятой.

-m4-только для одного
Сгенерируйте код для SH4 с блоком с плавающей запятой, который поддерживает только одно-
точная арифметика.

-m4-одноместный
Сгенерируйте код для SH4, предполагая, что блок с плавающей запятой находится в режиме одинарной точности
по умолчанию.

-м4 Сгенерируйте код для SH4.

-m4a-нофпу
Сгенерируйте код для SH4al-dsp или SH4a таким образом, чтобы числа с плавающей запятой
единица не используется.

-m4a-только для одного
Сгенерируйте код для SH4a таким образом, чтобы не было операций с плавающей запятой двойной точности.
используются операции.

-m4a-сингл
Сгенерируйте код для SH4a, предполагая, что единица с плавающей запятой имеет одинарную точность
режим по умолчанию.

-м4а
Сгенерируйте код для SH4a.

-m4al
Такой же как -m4a-нофпу, за исключением того, что он неявно передает -дсп ассемблеру. GCC
в настоящий момент не генерирует никаких инструкций DSP.

-мб Скомпилируйте код процессора в режиме прямого байта.

-ML Скомпилируйте код для процессора в режиме little-endian.

-mdalign
Выровняйте двойники по 64-битным границам. Обратите внимание, что это меняет соглашения о вызовах,
и поэтому некоторые функции из стандартной библиотеки C не будут работать, если вы не перекомпилируете
это сначала с -mdalign.

-мелакс
По возможности сокращайте некоторые адресные ссылки во время ссылки; использует опцию компоновщика
-расслабиться.

-mbigtable
Используйте 32-битные смещения в таблицах переключения. По умолчанию используется 16-битное смещение.

-мбитопс
Включите использование инструкций по манипулированию битами на SH2A.

-мфмовд
Включите использование инструкции "fmovd". Проверять -mdalign для ограничений выравнивания.

-мхитачи
Соблюдайте соглашения о вызовах, определенные Renesas.

-мренеса
Соблюдайте соглашения о вызовах, определенные Renesas.

-мно-ренеса
Соблюдайте соглашения о вызовах, определенные для GCC до соглашений Renesas.
были доступны. Этот параметр используется по умолчанию для всех целей цепочки инструментов SH.

-mnomacsave
Отметьте регистр "MAC" как заблокированный вызов, даже если -мхитачи дано.

-миее
-мно-иеее
Контролировать соответствие IEEE сравнений с плавающей запятой, что влияет на обработку
случаев, когда результат сравнения неупорядочен. По умолчанию -миее is
неявно включен. Если -ffinite-math-only - только математика включен -мно-иеее неявно устанавливается,
что приводит к более быстрым сравнениям с плавающей запятой больше-равно и меньше-равно. В
настройки implcit можно переопределить, указав либо -миее or -мно-иеее.

-minline-ic_invalidate
Встроенный код для аннулирования записей кэша инструкций после настройки вложенной функции
батуты. Этот параметр не действует, если действует -musermode и выбранный
Параметр генерации кода (например, -m4) не позволяет использовать инструкцию icbi. Если
выбранный вариант генерации кода не позволяет использовать инструкцию icbi,
и -musermode не действует, встроенный код будет управлять инструкцией
кэшировать адресный массив напрямую с ассоциативной записью. Это не только требует
привилегированный режим, но он также не сработает, если строка кэша была отображена через TLB
и не было нанесено на карту.

-неправильный размер
Размер и расположение команды дампа в коде сборки.

-mpadstruct
Эта опция устарела. Он дополняет структуры до кратных 4 байтов, что является
несовместим с SH ABI.

-msoft-атомный
Генерация совместимых с GNU / Linux атомарных последовательностей программного обеспечения gUSA для встроенных атомарных
функции. Сгенерированные атомарные последовательности требуют поддержки прерывания /
код обработки исключений системы и подходят только для одноядерных систем.
Они не будут правильно работать в многоядерных системах. Эта опция включена
по умолчанию, когда целью является «sh - * - linux *». Подробнее о встроенном атомарном
функции см. __ атомный Встроенные.

-мспейс
Оптимизируйте пространство вместо скорости. Подразумевается -Операционные системы.

-мпрефергот
При генерации независимого от позиции кода испускайте вызовы функций, используя глобальное смещение.
Таблица вместо таблицы связи процедур.

-musermode
Не генерировать код только для привилегированного режима; подразумевает -mno-inline-ic_invalidate, если
встроенный код не будет работать в пользовательском режиме. Это значение по умолчанию, когда цель
"ш - * - линукс *".

-multcost =номер
Установите предполагаемую стоимость для умножения insn.

-mdiv =стратегия
Установите стратегию деления, которая будет использоваться для операций целочисленного деления. Для SHmedia
стратегия может быть одним из:

fp Выполняет операцию с плавающей запятой. Это имеет очень высокую задержку, но требует
всего несколько инструкций, поэтому это может быть хорошим выбором, если в вашем коде достаточно
легко эксплуатируемый ILP, позволяющий компилятору планировать операции с плавающей запятой
инструкции вместе с другими инструкциями. Деление на ноль вызывает
исключение с плавающей запятой.

инв Использует целочисленные операции для вычисления обратного делителя, а затем
умножает дивиденд на обратное. Эта стратегия позволяет CSE и подъем
обратного расчета. При делении на ноль вычисляется неопределенный результат,
но не ловушка.

inv: minlat
Вариант инв где, если не было обнаружено CSE или возможности подъема, или если
вся операция была поднята на то же место, последние этапы
обратные вычисления переплетаются с окончательным умножением, чтобы уменьшить общее
задержка, за счет использования нескольких дополнительных инструкций и, следовательно, меньшего количества
возможности планирования с другим кодом.

призывают
Вызывает библиотечную функцию, которая обычно реализует inv: minlat стратегия. Этот
дает высокую плотность кода для компиляций "m5- * media-nofpu".

call2
Использует другую точку входа той же библиотечной функции, где предполагается, что
указатель на таблицу поиска уже настроен, что показывает загрузку указателя
к CSE и оптимизации подъема кода.

inv: звонок
inv: call2
inv: fp
Использовать инв алгоритм для первоначальной генерации кода, но если код остается
неоптимизировано, вернуться к призывают, call2или fp стратегии соответственно. Обратите внимание, что
потенциально опасный побочный эффект деления на ноль переносится отдельным
инструкция, поэтому возможно, что все целочисленные инструкции подняты,
но маркер побочного эффекта остается на месте. Рекомбинация к
операции с плавающей запятой или вызов в этом случае невозможны.

inv20u
инв20л
Варианты inv: minlat стратегия. В случае, если обратное вычисление
не отделены от умножения, они ускоряют деление там, где подходит дивиденд
в 20 бит (знак плюс, если применимо), вставив тест, чтобы пропустить ряд
операции в этом случае; этот тест замедляет рост дивидендов.
inv20u предполагает, что такой небольшой дивиденд маловероятен, и инв20л
предполагает, что это вероятно.

Для целей, отличных от SHmedia стратегия может быть одним из:

вызов-div1
Вызывает библиотечную функцию, которая использует пошаговую инструкцию деления "div1" для
выполнить операцию. Деление на ноль вычисляет неопределенный результат и делает
не ловушка. Это значение по умолчанию, за исключением SH4, SH2A и SHcompact.

вызов-fp
Вызывает библиотечную функцию, выполняющую операцию с плавающей запятой двойной точности
точка. Деление на ноль вызывает исключение с плавающей запятой. Это по умолчанию
для SHcompact с FPU. Указание этого для целей, у которых нет двойного
точность FPU по умолчанию будет "call-div1".

колл-стол
Вызывает библиотечную функцию, которая использует таблицу поиска для малых делителей и
Инструкция "div1" с разделением регистра для больших делителей. Деление на ноль
вычисляет неопределенный результат и не ловит. Это значение по умолчанию для SH4.
Указание этого для целей, у которых нет инструкций динамического сдвига, приведет к
по умолчанию - "call-div1".

Если стратегия разделения не указана, будет выбрана стратегия по умолчанию.
на основе текущей цели. Для SH2A стратегия по умолчанию - использовать "div" и
инструкции "divu" вместо вызовов библиотечных функций.

-maccumulate-исходящие-аргументы
Зарезервируйте место один раз для исходящих аргументов в прологе функции, а не вокруг
каждый звонок. Обычно выгодно для производительности и размера. Также необходимо для разматывания
чтобы избежать изменения кадра стека вокруг условного кода.

-mdivsi3_libfunc =имя
Задайте для имени библиотечной функции, используемой для 32-битного деления со знаком, значение имя. Это
влияет только на имя, используемое в стратегиях разделения вызовов и inv: call, а
компилятор по-прежнему будет ожидать таких же наборов регистров ввода / вывода / затертых регистров, как если бы
этой опции нет.

-mfixed-range =регистр-диапазон
Сгенерируйте код, обрабатывающий данный диапазон регистров как фиксированные регистры. Фиксированный регистр
это тот, который не может использовать распределитель регистров. Это полезно при компиляции ядра
код. Диапазон регистров определяется как два регистра, разделенных тире. Несколько
диапазоны регистров можно указать через запятую.

-madjust-развернуть
Дроссельная заслонка раскручивается, чтобы избежать сбоя целевых регистров. Этот вариант имеет только
эффект, если база кода gcc поддерживает целевой хук TARGET_ADJUST_UNROLL_MAX.

-mindexed-адресация
Включите использование режима индексированной адресации для SHmedia32 / SHcompact. Это только
безопасно, если оборудование и / или ОС реализуют 32-битную семантику циклического переноса для индексированных
режим адресации. Архитектура позволяет реализовать процессоры с 64-битной
MMU, который ОС могла бы использовать для получения 32-битной адресации, но поскольку в настоящее время нет оборудования
реализация поддерживает этот или любой другой способ сделать режим индексированной адресации безопасным
для использования в 32-битном ABI значение по умолчанию -mno-indexed-адресация.

-mgettrcost =номер
Установите стоимость, предполагаемую для инструкции gettr, равной номер. По умолчанию 2, если
-mpt-фиксированный действует, иначе 100.

-mpt-фиксированный
Предположим, что инструкции pt * не будут перехватываться. Как правило, это будет лучше спланировать
код, но небезопасен на текущем оборудовании. Текущее определение архитектуры говорит
что ptabs и ptrel trap, когда цель с 3 равняется 3. Это имеет
непреднамеренный эффект, связанный с небезопасным планированием ptabs / ptrel перед ветвлением, или
вынуть его из петли. Например, __do_global_ctors, часть libgcc, которая запускает
конструкторы при запуске программы, вызывает функции в списке, разделенном -1.
С параметром -mpt-fixed, ptabs будут выполнены перед тестированием против -1. Что
означает, что все конструкторы будут запускаться немного быстрее, но когда цикл дойдет до
конец списка, программа вылетает, потому что ptabs загружает -1 в цель
регистр. Поскольку этот вариант небезопасен для любого оборудования, реализующего текущий
спецификация архитектуры, по умолчанию используется -mno-pt-fixed. Если пользователь не указывает
удельная стоимость с -mgettrcost, -mno-pt-fixed также подразумевает -mgettrcost = 100; это
сдерживает выделение регистров, используя целевые регистры для хранения обычных целых чисел.

-minvalid-символы
Предположим, символы могут быть недопустимыми. Обычные функциональные символы, генерируемые компилятором
всегда будет действителен для загрузки с помощью movi / шори / ptabs или movi / шори / ptrel, но с
уловки ассемблера и / или компоновщика можно генерировать символы, которые вызовут
ptabs / ptrel в ловушку. Эта опция имеет смысл только тогда, когда -mno-pt-фиксированный В
эффект. Затем это предотвратит кросс-базовую блочную cse, подъем и большую часть планирования
символ загружает. По умолчанию -mno-недопустимые-символы.

-mbranch-cost =Num
Предполагать Num быть стоимостью инструкции филиала. Более высокие числа сделают
компилятор попытается сгенерировать больше кода без ветвей, если это возможно. Если не указано
значение выбирается в зависимости от типа процессора, для которого выполняется компиляция.

-макбранчди
Включите шаблон инструкции "cbranchdi4".

-mcmpeqdi
Испускать шаблон инструкции "cmpeqdi_t", даже если -макбранчди действует.

-растерянный-безумный
Разрешить использование инструкции "fmac" (умножение-накопление с плавающей запятой), если
Тип процессора поддерживает это. Включение этой опции может генерировать код, который производит
другие числовые результаты с плавающей запятой по сравнению со строгой арифметикой IEEE 754.

-mpretend-cmove
Предпочитать условные ветви с нулевым смещением для инструкции условного перемещения
узоры. Это может привести к более быстрому выполнению кода на процессоре SH4.

Solaris 2 Опции

Эти -m опции поддерживаются в Solaris 2:

-mimpure-текст
-mimpure-текст, используется в дополнение к -общий, сообщает компилятору не передавать -z текст в
компоновщик при связывании общего объекта. Используя эту опцию, вы можете связать позицию-
зависимый код в общий объект.

-mimpure-текст подавляет "перемещения остаются для размещения, но не для записи
section "сообщение об ошибке компоновщика. Однако необходимые перемещения вызовут копирование-
при записи, и общий объект фактически не используется процессами. Вместо того
через -mimpure-текст, вам следует скомпилировать весь исходный код с помощью -fpic or -fPIC.

Эти переключатели поддерживаются в дополнение к вышеперечисленным в Solaris 2:

-pthreads
Добавьте поддержку многопоточности с помощью библиотеки потоков POSIX. Эта опция устанавливает
флаги как для препроцессора, так и для компоновщика. Эта опция не влияет на поток
безопасность объектного кода, созданного компилятором или поставляемых с ним библиотек.

-pthread
Это синоним -pthreads.

SPARC Опции

Эти -m параметры поддерживаются на SPARC:

-mno-приложение-regs
-карта-regs
Указывать -карта-regs для генерации вывода с использованием глобальных регистров 2-4, которые
SPARC SVR4 ABI резервирует для приложений. Подобно глобальному регистру 1, каждый глобальный
регистры с 2 по 4 затем обрабатываются как размещаемые регистры, которые закрываются
вызовы функций. Это значение по умолчанию.

Чтобы быть полностью совместимым с SVR4 ABI за счет некоторой потери производительности, укажите
-mno-приложение-regs. Вы должны компилировать библиотеки и системное программное обеспечение с этой опцией.

-квартира
-мно-квартира
Доступно -квартира, компилятор не генерирует инструкции по сохранению / восстановлению и использует
"плоская" или оконная модель с одним регистром. Эта модель совместима с обычными
регистр оконной модели. Локальные регистры и входные регистры (0-5) по-прежнему
обрабатываются как регистры, сохраненные при вызове, и будут сохраняться в стеке по мере необходимости.

Доступно -мно-квартира (по умолчанию), компилятор генерирует инструкции сохранения / восстановления (кроме
для листовых функций). Это нормальный рабочий режим.

-мфпу
-mhard-поплавок
Сгенерировать вывод, содержащий инструкции с плавающей запятой. Это значение по умолчанию.

-мно-ФПУ
-msoft-поплавок
Сгенерировать вывод, содержащий вызовы библиотеки для чисел с плавающей запятой. Внимание! реквизит
библиотеки доступны не для всех целей SPARC. Обычно помещения
используется обычный компилятор C машины, но это не может быть сделано напрямую в кросс-
компиляция. Вы должны сами принять меры, чтобы предоставить подходящую библиотеку.
функции для кросс-компиляции. Встроенные цели sparc - * - aout и спарклит - * - *
обеспечивают программную поддержку операций с плавающей запятой.

-msoft-поплавок изменяет соглашение о вызовах в выходном файле; следовательно, это только
полезно, если вы компилируете Найти программы с этой опцией. В частности, вам необходимо
компилировать libgcc.a, библиотека, поставляемая с GCC, с -msoft-поплавок для этого
Если вы меняете свою работу и работаете с другим работодателем, то этот новый работодатель должен получить для вас новое разрешение на работу.

-mhard-quad-поплавок
Сгенерировать вывод, содержащий инструкции с четырьмя словами (длинными двойными) с плавающей запятой.

-msoft-quad-поплавок
Создание вывода, содержащего вызовы библиотеки для четырехслова (длинное двойное) с плавающей запятой
инструкции. Вызываемые функции указаны в SPARC ABI. Это
по умолчанию.

На момент написания этой статьи нет реализаций SPARC, которые поддерживали бы аппаратное обеспечение для
инструкции с четырьмя словами с плавающей запятой. Все они вызывают обработчик ловушек для одного из
эти инструкции, а затем обработчик прерывания имитирует эффект инструкции.
Из-за накладных расходов обработчика прерываний это намного медленнее, чем вызов библиотеки ABI.
рутины. Таким образом -msoft-quad-поплавок опция по умолчанию.

-mno-unaligned-doubles
-муналиннед-дублеры
Предположим, что двойные имеют 8-байтовое выравнивание. Это значение по умолчанию.

Доступно -муналиннед-дублеры, GCC предполагает, что двойники имеют 8-байтовое выравнивание, только если они
содержатся в другом типе или имеют абсолютный адрес. В противном случае это
предполагает, что они имеют 4-байтовое выравнивание. Указание этого параметра позволяет избежать некоторых редких
проблемы совместимости с кодом, созданным другими компиляторами. Это не по умолчанию
потому что это приводит к потере производительности, особенно для кода с плавающей запятой.

-mno-более быстрые структуры
-mfaster-Structs
Доступно -mfaster-Structs, компилятор предполагает, что структуры должны иметь 8-байтовые
выравнивание. Это позволяет использовать пары инструкций "ldd" и "std" для копий.
в назначении структуры вместо вдвое большего количества пар "ld" и "st". Однако
использование этого измененного выравнивания напрямую нарушает SPARC ABI. Таким образом, это предназначено
только для использования в целях, где разработчик признает, что полученный им код
не будет прямо соответствовать правилам ABI.

-mcpu =тип_процессора
Установите набор инструкций, набор регистров и параметры планирования инструкций для
тип аппарата тип_процессора. Поддерживаемые значения для тип_процессора Он v7, кипарис, v8, супер-пар,
гиперпарка, Леон, спарклит, f930, f934, спарклит86x, спарклет, цк701, v9,
ультразвук, ультраспарк3, Ниагарский, Ниагара2, Ниагара3качества Ниагара4.

Собственные инструменты Solaris и GNU / Linux также поддерживают значение родной, который выбирает
лучший вариант архитектуры для хост-процессора. -mcpu = родной не действует, если
GCC не распознает процессор.

Параметры планирования инструкций по умолчанию используются для значений, которые выбирают
архитектура, а не реализация. Эти v7, v8, спарклит, спарклет, v9.

Вот список каждой поддерживаемой архитектуры и поддерживаемых реализаций.

v7 кипарис

v8 supersparc, гиперспарк, леон

спарклит
ф930, ф934, спарклит86х

спарклет
цк701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

По умолчанию (если не настроено иное) GCC генерирует код для варианта V7
Архитектура SPARC. С участием -mcpu = кипарис, компилятор дополнительно оптимизирует его для
микросхема Cypress CY7C602, используемая в серии SPARCStation / SPARCServer 3xx. Это
также подходит для более старых SPARCStation 1, 2, IPX и т. д.

Доступно -mcpu = v8, GCC генерирует код для варианта V8 архитектуры SPARC. В
Единственное отличие от кода V7 в том, что компилятор выдает целочисленное умножение и
инструкции целочисленного деления, которые существуют в SPARC-V8, но отсутствуют в SPARC-V7. С участием
-mcpu = supersparc, компилятор дополнительно оптимизирует его для микросхемы SuperSPARC, так как
используется в сериях SPARCStation 10, 1000 и 2000.

Доступно -mcpu = спарклит, GCC генерирует код для варианта SPARClite SPARC
архитектура. Это добавляет целочисленное умножение, шаг целочисленного деления и сканирование ("ffs")
инструкции, которые существуют в SPARClite, но отсутствуют в SPARC-V7. С участием -mcpu = f930,
компилятор дополнительно оптимизирует его для чипа Fujitsu MB86930, который является оригинальным
SPARClite, без FPU. С участием -mcpu = f934, компилятор дополнительно оптимизирует его для
чип Fujitsu MB86934, более поздний SPARClite с FPU.

Доступно -mcpu = sparclet, GCC генерирует код для варианта SPARClet SPARC
архитектура. Это добавляет целочисленное умножение, умножение / накопление, целочисленное деление
инструкции step и scan (ffs), которые существуют в SPARClet, но отсутствуют в SPARC-V7. С участием
-mcpu = tsc701, компилятор дополнительно оптимизирует его для микросхемы TEMIC SPARClet.

Доступно -mcpu = v9, GCC генерирует код для варианта V9 архитектуры SPARC. Этот
добавляет 64-битные целые числа и инструкции перемещения с плавающей запятой, 3 дополнительных числа с плавающей запятой
регистры кода состояния и инструкции условного перемещения. С участием -mcpu = ultrasparc,
компилятор дополнительно оптимизирует его для микросхем Sun UltraSPARC I / II / IIi. С участием
-mcpu = ultrasparc3, компилятор дополнительно оптимизирует его для Sun UltraSPARC
III / III + / IIIi / IIIi + / IV / IV + микросхемы. С участием -mcpu = Ниагара, компилятор дополнительно
оптимизирует его для чипов Sun UltraSPARC T1. С участием -mcpu = niagara2, компилятор
дополнительно оптимизирует его для чипов Sun UltraSPARC T2. С участием -mcpu = niagara3,
компилятор дополнительно оптимизирует его для чипов Sun UltraSPARC T3. С участием -mcpu = niagara4,
компилятор дополнительно оптимизирует его для чипов Sun UltraSPARC T4.

-mtune =тип_процессора
Установите параметры планирования инструкций для типа машины тип_процессора, но не устанавливайте
набор инструкций или набор регистров, который параметр -mcpu =тип_процессора бы.

Те же значения для -mcpu =тип_процессора может быть использован для -mtune =тип_процессора, но единственный
полезные значения - это те, которые выбирают конкретную реализацию ЦП. Это
кипарис, супер-пар, гиперпарка, Леон, f930, f934, спарклит86x, цк701, ультразвук,
ультраспарк3, Ниагарский, Ниагара2, Ниагара3 и Ниагара4. С родным Solaris и
Инструменты GNU / Linux, родной также может быть использован.

-mv8plus
-mno-v8plus
Доступно -mv8plus, GCC генерирует код для SPARC-V8 + ABI. Отличие от V8
ABI заключается в том, что глобальный и выходной регистры считаются шириной 64 бита. Это включено
по умолчанию в Solaris в 32-битном режиме для всех процессоров SPARC-V9.

-мвис
-мно-вис
Доступно -мвис, GCC генерирует код, который использует преимущества UltraSPARC Visual
Расширения набора инструкций. По умолчанию -мно-вис.

-мвис2
-мно-вис2
Доступно -мвис2, GCC генерирует код, использующий преимущества версии 2.0 UltraSPARC.
Расширения набора визуальных инструкций. По умолчанию -мвис2 при нацеливании на процессор, который
поддерживает такие инструкции, как UltraSPARC-III и более поздние версии. Параметр -мвис2 Также
Наборы -мвис.

-мвис3
-мно-вис3
Доступно -мвис3, GCC генерирует код, использующий преимущества версии 3.0 UltraSPARC.
Расширения набора визуальных инструкций. По умолчанию -мвис3 при нацеливании на процессор, который
поддерживает такие инструкции, как niagara-3 и более поздние версии. Параметр -мвис3 также устанавливает
-мвис2 и -мвис.

-mpopc
-мно-попс
Доступно -mpopc, GCC генерирует код, использующий популяцию UltraSPARC.
посчитать инструкцию. По умолчанию -mpopc при выборе ЦП, поддерживающего такие
инструкции, например Ниагара-2 и новее.

-мфмаф
-мно-фмаф
Доступно -мфмаф, GCC генерирует код, который использует преимущества UltraSPARC Fused Multiply-
Добавьте расширения с плавающей запятой. По умолчанию -мфмаф при нацеливании на процессор, который
поддерживает такие инструкции, как Niagara-3 и более поздние версии.

-mfix-at697f
Включите документированный обходной путь для единственной ошибки процессора Atmel AT697F
(что соответствует ошибке № 13 процессора AT697E).

Эти -m параметры поддерживаются в дополнение к вышеперечисленным на процессорах SPARC-V9 в 64-разрядной версии.
среды:

-м32
-м64
Сгенерируйте код для 32-битной или 64-битной среды. 32-битная среда устанавливает int,
long и указатель на 32 бита. В 64-битной среде int устанавливается равным 32 битам и long, а
указатель на 64 бита.

-mcmodel =который
Установите модель кода на одну из

медлить
Модель кода Medium / Low: 64-битные адреса, программы должны быть связаны в младших 32
биты памяти. Программы могут быть статически или динамически связаны.

Медмид
Модель кода Medium / Middle: 64-битные адреса, программы должны быть связаны в младшем
44 бита памяти, сегменты текста и данных должны быть меньше 2 ГБ и
сегмент данных должен располагаться в пределах 2 ГБ от текстового сегмента.

Меданы
Модель кода Medium / Anywhere: 64-битные адреса, программы могут быть связаны где угодно
в памяти сегменты текста и данных должны быть меньше 2 ГБ, а данные
сегмент должен располагаться в пределах 2 ГБ от текстового сегмента.

эмбмедания
Модель кода Medium / Anywhere для встроенных систем: 64-битные адреса, текст
и сегменты данных должны быть меньше 2 ГБ, оба начинаются с любого места в памяти.
(определяется во время ссылки). Глобальный регистр% g4 указывает на базу данных
сегмент. Программы статически связаны, и PIC не поддерживается.

-mmemory-model =мем-модель
Установите модель памяти, действующую на процессоре, на одну из

по умолчанию
Модель памяти по умолчанию для процессора и операционной системы.

рмо Порядок расслабления памяти

ПСО Частичный заказ магазина

релиз Общий заказ магазина

sc Последовательная согласованность

Эти модели памяти формально определены в Приложении D архитектуры Sparc V9.
manual, как установлено в поле процессора "PSTATE.MM".

-mstack-предвзятость
-mno-стек-предвзятость
Доступно -mstack-предвзятость, GCC предполагает, что указатель стека и указатель кадра, если он присутствует,
смещены на -2047, которые должны быть добавлены обратно при создании ссылок на кадры стека. Этот
по умолчанию в 64-битном режиме. В противном случае предположите, что такого смещения нет.

SPU Опции

Эти -m на SPU поддерживаются опции:

-mwarn-reloc
-merror-reloc
Загрузчик для SPU не обрабатывает динамические перемещения. По умолчанию GCC выдаст
ошибка при генерации кода, требующего динамического перемещения. -mno-ошибка-переместить
отключает ошибку, -mwarn-reloc вместо этого сгенерирует предупреждение.

-msafe-DMA
-мунсафе-дма
Инструкции, которые инициируют или тестируют завершение прямого доступа к памяти, не должны переупорядочиваться с помощью
по отношению к загрузкам и хранению памяти, к которой осуществляется доступ. Обычно пользователи
решить эту проблему с помощью ключевого слова volatile, но это может привести к неэффективному коду
в местах, где известно, что память не меняется. Вместо того, чтобы отмечать память как
volatile мы рассматриваем инструкции DMA как потенциально влияющие на всю память. С участием
-мунсафе-дма пользователи должны использовать ключевое слово volatile для защиты доступа к памяти.

-mbranch-подсказки
По умолчанию GCC генерирует инструкцию подсказки ветвления, чтобы избежать остановки конвейера для
всегда взятые или, вероятно, взятые ветки. Подсказка не будет сгенерирована ближе 8
инструкции подальше от своей ветки. Нет особых причин для их отключения, за исключением
в целях отладки или уменьшения размера объекта.

-msmall-мем
-mlarge-мем
По умолчанию GCC генерирует код, предполагая, что адреса никогда не превышают 18 бит.
Доступно -mlarge-мем генерируется код, предполагающий полный 32-битный адрес.

-mstdmain
По умолчанию GCC ссылается на код запуска, который предполагает основную функцию в стиле SPU.
интерфейс (с нестандартным списком параметров). С участием -mstdmain, GCC свяжет
ваша программа против кода запуска, который предполагает интерфейс в стиле C99 для "main",
включая локальную копию строк "argv".

-mfixed-range =регистр-диапазон
Сгенерируйте код, обрабатывающий данный диапазон регистров как фиксированные регистры. Фиксированный регистр
это тот, который не может использовать распределитель регистров. Это полезно при компиляции ядра
код. Диапазон регистров определяется как два регистра, разделенных тире. Несколько
диапазоны регистров можно указать через запятую.

-mea32
-mea64
Компиляция кода предполагает, что указатели на адресное пространство PPU доступны через "__ea"
квалификатор именованного адресного пространства имеет ширину 32 или 64 бита. По умолчанию 32 бита.
Поскольку это вариант изменения ABI, весь объектный код в исполняемом файле должен быть скомпилирован.
с такой же настройкой.

-пространство-адрес-преобразование
-mno-адрес-пространство-преобразование
Разрешить / запретить обработку адресного пространства «__ea» как надмножества общего адреса
Космос. Это позволяет явное приведение типов между «__ea» и универсальным указателем, а также
неявное преобразование универсальных указателей в указатели «__ea». По умолчанию разрешено
преобразования указателя адресного пространства.

-mcache-size =размер кэша
Эта опция контролирует версию libgcc, которую компилятор связывает с исполняемым файлом.
и выбирает программно управляемый кеш для доступа к переменным в адресе "__ea"
пространство с определенным размером кеша. Возможные варианты размер кэша Он 8, 16, 32, 64
и 128. Размер кеша по умолчанию составляет 64 КБ.

-matomic-обновления
-mno-атомарные-обновления
Эта опция контролирует версию libgcc, которую компилятор связывает с исполняемым файлом.
и выбирает, нужно ли выполнять атомарные обновления в программно управляемом кэше переменных на стороне PPU.
используются. Если вы используете атомарные обновления, изменения в переменной PPU из кода SPU с использованием
квалификатор именованного адресного пространства «__ea» не будет мешать изменениям в других PPU
переменные, находящиеся в той же строке кэша из кода PPU. Если вы не используете атомарный
обновления, такое вмешательство может произойти; однако обратная запись строк кэша будет больше
эффективный. По умолчанию используются атомарные обновления.

-mdual-nops
-mdual-nops =n
По умолчанию GCC будет вставлять nops, чтобы увеличить двойную проблему, когда ожидает ее увеличения.
производительность. n может принимать значение от 0 до 10. Меньше n вставит меньше nops. 10
по умолчанию, 0 то же, что и -мно-дуал-нопс. Отключено с -Операционные системы.

-mhint-max-nops =n
Максимальное количество nops для вставки подсказки ветки. Подсказка ветки должна быть не менее 8
инструкции вдали от ветки, которую он выполняет. GCC вставит до n нет
принудительно выполните это, иначе он не будет генерировать подсказку ветки.

-mhint-max-distance =n
Кодирование инструкции подсказки ветвления ограничивает подсказку до 256
инструкции выполняемой ветки. По умолчанию GCC гарантирует, что он находится в пределах
125.

-msafe-подсказки
Обходите аппаратную ошибку, из-за которой SPU зависает на неопределенное время. По умолчанию GCC
вставит инструкцию «hbrp», чтобы избежать остановки.

Опции для Система V

Эти дополнительные параметры доступны в System V Release 4 для совместимости с другими
компиляторы в этих системах:

-G Создайте общий объект. Рекомендуется, чтобы -символический or -общий использоваться вместо этого.

-Ку Определите версии каждого инструмента, используемого компилятором, в ассемблере ".ident"
директива в выводе.

-Qn Воздержитесь от добавления директив «.ident» в выходной файл (это значение по умолчанию).

-ЮП,каталоги
Искать в каталогах каталогии никакие другие для библиотек, указанных с -l.

-Ым,директория
Посмотрите в справочнике директория найти препроцессор M4. Ассемблер использует это
опцию.

ПЛИТКА-Gx Опции

Эти -m опции TILE-Gx поддерживаются:

-mcpu =имя
Выбирает целевой тип ЦП. В настоящее время единственный поддерживаемый тип: тайлегкс.

-м32
-м64
Сгенерируйте код для 32-битной или 64-битной среды. 32-битная среда устанавливает int,
long и указатель на 32 бита. В 64-битной среде int установлено в 32 бита и long, а
указатель на 64 бита.

ПЛИТКАПро Опции

Эти -m опции поддерживаются на TILEPro:

-mcpu =имя
Выбирает целевой тип ЦП. В настоящее время единственный поддерживаемый тип: плиткапро.

-м32
Сгенерируйте код для 32-битной среды, который устанавливает int, long и указатель на 32 бита.
Это единственное поддерживаемое поведение, поэтому флаг по существу игнорируется.

V850 Опции

Эти -m параметры определены для реализаций V850:

-mlong-вызовы
-мно-долгие звонки
Относитесь ко всем вызовам как к находящимся далеко (близко). Если предполагается, что звонки находятся далеко,
компилятор всегда загружает адреса функций в регистр и вызывает косвенный
через указатель.

-мно-эп
-меп
Не оптимизируйте (не оптимизируйте) базовые блоки, которые используют один и тот же указатель индекса 4 или более
раз, чтобы скопировать указатель в регистр "ep" и использовать более короткие "sld" и "sst"
инструкции. -меп опция включена по умолчанию, если вы оптимизируете.

-mno-пролог-функция
-mprolog-функция
Не используйте (не используйте) внешние функции для сохранения и восстановления регистров в прологе.
и эпилог функции. Внешние функции работают медленнее, но используют меньше кода
пробел, если несколько функций сохраняют одинаковое количество регистров. В
-mprolog-функция опция включена по умолчанию, если вы оптимизируете.

-мспейс
Постарайтесь сделать код как можно меньше. В настоящее время это просто включает -меп
и -mprolog-функция настройки.

-mtda =n
Поместите статические или глобальные переменные, размер которых n байтов или меньше в крошечную область данных
что регистр "ep" указывает на. Крошечная область данных может содержать до 256 байт в сумме.
(128 байтов для байтовых ссылок).

-msda =n
Поместите статические или глобальные переменные, размер которых n байтов или меньше в небольшую область данных
что регистр "gp" указывает на. Небольшая область данных может содержать до 64 килобайт.

-mzda =n
Поместите статические или глобальные переменные, размер которых n байтов или меньше в первые 32
килобайты памяти.

-мв850
Укажите, что целевой процессор - V850.

-mbig-переключатель
Сгенерируйте код, подходящий для больших таблиц переключателей. Используйте эту опцию, только если
ассемблер / компоновщик жалуются на ветвления вне диапазона в таблице переключателей.

-карта-regs
Эта опция заставит r2 и r5 использоваться в коде, сгенерированном компилятором.
Этот параметр установлен по умолчанию.

-mno-приложение-regs
Эта опция заставит r2 и r5 обрабатываться как фиксированные регистры.

-mv850e2v3
Укажите, что целевой процессор - V850E2V3. Константы препроцессора
__v850e2v3__ будет определено, если используется эта опция.

-mv850e2
Укажите, что целевой процессор - V850E2. Константы препроцессора
__v850e2__ будет определено, если используется эта опция.

-mv850e1
Укажите, что целевой процессор - V850E1. Константы препроцессора
__v850e1__ и __v850e__ будет определено, если используется эта опция.

-mv850es
Укажите, что целевой процессор - V850ES. Это псевдоним для -mv850e1
опцию.

-mv850e
Укажите, что целевой процессор - V850E. Константа препроцессора __v850e__
будет определено, если используется эта опция.

Если ни -мв850 ни -mv850e ни -mv850e1 ни -mv850e2 ни -mv850e2v3 определены
затем будет выбран целевой процессор по умолчанию и соответствующий __v850 * __ препроцессор
будет определена константа.

Константы препроцессора __v850 и __v851__ всегда определены, независимо от того, какие
Вариант процессора является целью.

-mdisable-вызов
Эта опция подавляет создание инструкции CALLT для v850e, v850e1,
v850e2 и v850e2v3 разновидности архитектуры v850. По умолчанию
-mno-отключить-вызов что позволяет использовать инструкцию CALLT.

VAX Опции

Эти -m параметры определены для VAX:

-муникс
Не выводите определенные инструкции перехода ("aobleq" и т. Д.), Которые ассемблер Unix
поскольку VAX не может работать на больших расстояниях.

-мгну
Выведите эти инструкции перехода, предполагая, что вы будете собирать
Ассемблер GNU.

-мг Код вывода для чисел с плавающей запятой в формате G вместо D-формата.

VxWorks Опции

Параметры в этом разделе определены для всех целей VxWorks. Параметры, специфичные для
целевое оборудование перечислено вместе с другими параметрами для этой цели.

-мртп
GCC может генерировать код как для ядер VxWorks, так и для процессов реального времени (RTP). Этот
опция переключается с первого на второй. Он также определяет макрос препроцессора
«__RTP__».

-нестатический
Свяжите исполняемый файл RTP с разделяемыми библиотеками, а не со статическими библиотеками. В
кредита -статический и -общий также может использоваться для RTP; -статический по умолчанию.

-Бстатический
-Bдинамический
Эти параметры передаются компоновщику. Они определены для совместимости с
Диаб.

-Xbind-ленивый
Включить ленивую привязку вызовов функций. Этот вариант эквивалентен -Wl, -z, сейчас и
определен для совместимости с Diab.

-Xbind-сейчас
Отключите ленивую привязку вызовов функций. Этот параметр используется по умолчанию и определен для
совместимость с Diab.

x86-64 Опции

Они перечислены в

Xstormy16 Опции

Эти параметры определены для Xstormy16:

-мсим
Выберите файлы запуска и скрипт компоновщика, подходящие для симулятора.

Экстенса Опции

Эти параметры поддерживаются для целей Xtensa:

-mconst16
-mno-const16
Включение или отключение использования инструкций «CONST16» для загрузки постоянных значений. В
Инструкция «CONST16» в настоящее время не является стандартной опцией Tensilica. Когда
включен, инструкции "CONST16" всегда используются вместо стандартных "L32R"
инструкции. Использование «CONST16» разрешено по умолчанию, только если «L32R»
инструкция недоступна.

-растерянный-безумный
-mno-плавленный-madd
Включение или отключение использования совмещенных инструкций умножения / сложения и умножения / вычитания в
вариант с плавающей запятой. Это не имеет никакого эффекта, если параметр с плавающей запятой также не
включено. Отключение слитных инструкций умножения / сложения и умножения / вычитания заставляет
компилятор, чтобы использовать отдельные инструкции для операций умножения и сложения / вычитания.
Это может быть желательно в некоторых случаях, когда результаты строго соответствуют стандарту IEEE 754.
требуется: объединенные инструкции умножения и вычитания не округляют промежуточное звено
результат, тем самым давая результаты с БОЛЕЕ бит точности, чем указано в
Стандарт IEEE. Отключение слитных команд умножения и вычитания также гарантирует, что
вывод программы не зависит от способности компилятора комбинировать умножение и
операции сложения / вычитания.

-mserialize-изменчивый
-mno-сериализовать-изменчивый
Когда эта опция включена, GCC вставляет инструкции «MEMW» перед «энергозависимой» памятью.
ссылки, чтобы гарантировать последовательную согласованность. По умолчанию -mserialize-изменчивый.
Используйте -mno-сериализовать-изменчивый опустить инструкции "MEMW".

-mforce-без изображения
Для целей, таких как GNU / Linux, где весь код Xtensa пользовательского режима должен быть позиционным.
независимый код (PIC), эта опция отключает PIC для компиляции кода ядра.

-mtext-section-литералы
-mno-текст-раздел-литералы
Контролировать обработку буквальных бассейнов. По умолчанию -mno-текст-раздел-литералы,
который помещает литералы в отдельный раздел выходного файла. Это позволяет
буквальный пул, который будет помещен в ОЗУ / ПЗУ данных, а также позволяет компоновщику комбинировать
пулы литералов из отдельных объектных файлов для удаления избыточных литералов и улучшения кода
размер. С участием -mtext-section-литералы, литералы перемежаются в текстовой части
чтобы они были как можно ближе к своим ссылкам. Это может быть необходимо
для больших файлов сборки.

-mtarget-align
-mno-target-align
Когда эта опция включена, GCC инструктирует ассемблер автоматически выравнивать
инструкции по уменьшению штрафов за переход за счет некоторой плотности кода. В
ассемблер пытается расширить инструкции плотности, чтобы выровнять цели ветвления и
инструкции, следующие за инструкциями по вызову. Если предшествующих безопасных недостаточно
инструкции плотности для выравнивания цели, расширение не будет выполнено. По умолчанию
-mtarget-align. Эти параметры не влияют на обработку автоматического выравнивания
инструкции вроде "LOOP", которые ассемблер всегда выравнивает, либо путем расширения
инструкции плотности или вставляя инструкции no-op.

-млонгкаллы
-мно-длинные звонки
Когда эта опция включена, GCC инструктирует ассемблер переводить прямые вызовы в
косвенные вызовы, если он не может определить, что цель прямого вызова находится в
диапазон, разрешенный инструкцией вызова. Этот перевод обычно происходит для вызовов
функции в других исходных файлах. В частности, ассемблер переводит прямой
Инструкция «CALL» в «L32R», за которой следует инструкция «CALLX». По умолчанию
-мно-длинные звонки. Эту опцию следует использовать в программах, в которых цель вызова может
потенциально быть вне досягаемости. Эта опция реализована в ассемблере, а не в
компилятор, поэтому ассемблерный код, сгенерированный GCC, по-прежнему будет показывать прямой вызов
инструкции --- посмотрите на дизассемблированный объектный код, чтобы увидеть фактические инструкции.
Обратите внимание, что ассемблер будет использовать косвенный вызов для каждого межфайлового вызова, а не только
те, которые действительно будут вне досягаемости.

zСерия Опции

Они перечислены в

Опции для Code Поколение конвенции
Эти машинно-независимые параметры управляют соглашениями об интерфейсах, используемыми в коде.
поколение.

Большинство из них имеют как положительные, так и отрицательные формы; отрицательная форма -ффу был бы
-фно-фу. В таблице ниже указана только одна из форм - та, которая не является
дефолт. Вы можете выяснить другую форму, удалив нет- или добавив его.

-fbounds-проверить
Для внешних интерфейсов, которые его поддерживают, сгенерируйте дополнительный код, чтобы проверить, используются ли индексы для
массивы доступа находятся в заявленном диапазоне. В настоящее время это поддерживается только
Интерфейсы Java и Fortran, где по умолчанию для этого параметра установлено значение true и false.
соответственно.

-ftrapv
Эта опция генерирует ловушки для подписанного переполнения при сложении, вычитании,
операции умножения.

-fwrapv
Эта опция указывает компилятору предположить, что подписанное арифметическое переполнение
сложение, вычитание и умножение с использованием дополнения до двух
представление. Этот флаг включает одни оптимизации и отключает другие. Этот
опция включена по умолчанию для интерфейса Java, как того требует язык Java.
спецификация.

-fисключения
Включите обработку исключений. Создает дополнительный код, необходимый для распространения исключений. Для
некоторые цели, это означает, что GCC будет генерировать информацию о размотке кадра для всех
функции, которые могут привести к значительным накладным расходам на размер данных, хотя и не
повлиять на исполнение. Если вы не укажете этот параметр, GCC включит его по умолчанию.
для таких языков, как C ++, которые обычно требуют обработки исключений, и отключите ее для
языки вроде C, которые обычно этого не требуют. Однако вам может потребоваться включить
эта опция при компиляции кода C, который должен правильно взаимодействовать с исключением
обработчики написаны на C ++. Вы также можете отключить эту опцию, если вы
компиляция старых программ на C ++, которые не используют обработку исключений.

-fnon-call-исключения
Сгенерируйте код, который позволяет командам перехвата вызывать исключения. Обратите внимание, что это
требует поддержки среды выполнения, зависящей от платформы, которая существует не везде. Кроме того,
это только позволяет улавливать инструкции для создания исключений, то есть ссылок на память или
инструкции с плавающей запятой. Это не позволяет создавать исключения из произвольных
обработчики сигналов, такие как "SIGALRM".

-funwind-столы
Похожий на что -fисключения, за исключением того, что он просто сгенерирует любые необходимые статические данные, но
никаким другим образом не повлияет на сгенерированный код. Обычно вы не включаете
этот вариант; вместо этого языковой процессор, которому нужна эта обработка, включил бы ее на
вашего имени.

-фасинхронные-раскрутки-столы
Сгенерировать таблицу раскрутки в формате dwarf2, если это поддерживается целевой машиной. Таблица
точно на каждой границе инструкции, поэтому его можно использовать для раскрутки стека из
асинхронные события (например, отладчик или сборщик мусора).

-fpcc-структура-возврат
Возвращать "короткие" "struct" и "union" значения в памяти как более длинные, а не в
регистры. Это соглашение менее эффективно, но оно позволяет
возможность взаимодействия между файлами, скомпилированными GCC, и файлами, скомпилированными другими компиляторами,
особенно Portable C Compiler (pcc).

Точное соглашение о возврате структур в память зависит от цели.
макросы конфигурации.

Короткие структуры и союзы - это те, размер и расположение которых соответствуют некоторым
целочисленный тип.

Внимание! код, скомпилированный с -fpcc-структура-возврат переключатель не является двоичным совместимым
с кодом, скомпилированным с -freg-структура-возврат выключатель. Используйте его, чтобы соответствовать не-
двоичный интерфейс приложения по умолчанию.

-freg-структура-возврат
По возможности возвращайте значения "struct" и "union" в регистры. Это более эффективно
для небольших конструкций, чем -fpcc-структура-возврат.

Если вы не укажете ни -fpcc-структура-возврат ни -freg-структура-возврат, GCC по умолчанию
в зависимости от того, какое соглашение является стандартным для цели. Если нет стандартного соглашения,
GCC по умолчанию -fpcc-структура-возврат, за исключением целей, где GCC является основным
компилятор. В этих случаях мы можем выбрать стандартный, а мы - более эффективный.
регистр возврата альтернативы.

Внимание! код, скомпилированный с -freg-структура-возврат переключатель не является двоичным совместимым
с кодом, скомпилированным с -fpcc-структура-возврат выключатель. Используйте его, чтобы соответствовать не-
двоичный интерфейс приложения по умолчанию.

-fshort-перечисления
Выделяйте типу "enum" только столько байтов, сколько необходимо для объявленного диапазона
возможные значения. В частности, тип "enum" будет эквивалентен наименьшему
целочисленный тип, в котором достаточно места.

Внимание! домен -fshort-перечисления переключатель заставляет GCC генерировать код, который не является двоичным
совместим с кодом, созданным без этого переключателя. Используйте его, чтобы соответствовать не-
двоичный интерфейс приложения по умолчанию.

-fshort-двойной
Используйте тот же размер для «double», что и для «float».

Внимание! домен -fshort-двойной переключатель заставляет GCC генерировать код, который не является двоичным
совместим с кодом, созданным без этого переключателя. Используйте его, чтобы соответствовать не-
двоичный интерфейс приложения по умолчанию.

-fshort-wchar
Переопределить базовый тип для wchar_t быть короткие неподписанный Int вместо
по умолчанию для цели. Эта опция полезна для создания программ, запускаемых под
ВИНО.

Внимание! домен -fshort-wchar переключатель заставляет GCC генерировать код, который не является двоичным
совместим с кодом, созданным без этого переключателя. Используйте его, чтобы соответствовать не-
двоичный интерфейс приложения по умолчанию.

-fno-общий
В коде C управляет размещением неинициализированных глобальных переменных. Компиляторы Unix C
традиционно допускали множественные определения таких переменных в разных
единиц компиляции, помещая переменные в общий блок. Это поведение
указано -fобщий, и является значением по умолчанию для GCC для большинства целей. С другой стороны,
это поведение не требуется ISO C, и на некоторых целях могут быть указаны скорость или код
штраф за размер ссылок на переменные. В -fno-общий опция указывает, что
компилятор должен помещать неинициализированные глобальные переменные в раздел данных объекта
файл, а не генерировать их как общие блоки. Это приводит к тому, что если
одна и та же переменная объявлена ​​(без extern) в двух разных компиляциях, вы
получить ошибку множественного определения при связывании их. В этом случае вы должны скомпилировать
-fобщий вместо. Компиляция с -fno-общий полезен для целей, для которых он
обеспечивает лучшую производительность, или если вы хотите убедиться, что программа будет работать на
другие системы, которые всегда так обрабатывают объявления неинициализированных переменных.

-fno-идент
Игнорировать #идентификатор Директивы.

-finhibit-size-директива
Не выводите директиву ассемблера ".size" или что-либо еще, что может вызвать проблемы.
если функция разделена посередине, а две половины расположены далеко
отдельно в памяти. Эта опция используется при компиляции crtstuff.c; тебе не нужно
использовать его для чего-нибудь еще.

-fverbose-асм
Поместите дополнительные комментарии в сгенерированный код сборки, чтобы сделать его более подробным.
удобочитаемый. Этот вариант обычно полезен только тем, кому действительно нужно прочитать
сгенерированный код сборки (возможно, при отладке самого компилятора).

-fno-verbose-asm, по умолчанию, лишняя информация опускается и
полезно при сравнении двух файлов ассемблера.

-frecord-gcc-переключатели
Этот переключатель приводит к тому, что командная строка, которая использовалась для вызова компилятора, становится
записывается в создаваемый объектный файл. Этот переключатель реализован только
для некоторых целей и точным форматом записи является целевой и двоичный формат файла
зависимый, но обычно принимает форму раздела, содержащего текст ASCII. Этот
переключатель связан с -fverbose-асм переключатель, но этот переключатель записывает только
информация в выходном файле ассемблера в виде комментариев, поэтому она никогда не достигает объекта
файл. Смотрите также -grecord-gcc-переключатели для другого способа хранения параметров компилятора в
объектный файл.

-fpic
Сгенерируйте позиционно-независимый код (PIC), подходящий для использования в разделяемой библиотеке, если
поддерживается для целевой машины. Такой код обращается ко всем постоянным адресам через
глобальная таблица смещений (GOT). Динамический загрузчик разрешает записи GOT, когда
запускается программа (динамический загрузчик не является частью GCC; он является частью рабочего
система). Если размер GOT для связанного исполняемого файла превышает машинно-зависимый максимум
size, вы получите сообщение об ошибке от компоновщика, указывающее, что -fpic не работает; в
в этом случае перекомпилируйте с -fPIC вместо. (Эти максимумы составляют 8k на SPARC и 32k
на m68k и RS / 6000. У 386 нет такого предела.)

Позиционно-независимый код требует специальной поддержки и поэтому работает только на
определенные машины. Для 386 GCC поддерживает PIC для System V, но не для Sun
386i. Код, сгенерированный для IBM RS / 6000, всегда не зависит от позиции.

Когда этот флаг установлен, макросы «__pic__» и «__PIC__» имеют значение 1.

-fPIC
Если поддерживается для целевой машины, испускать независимый от позиции код, подходящий для
динамическое связывание и избежание каких-либо ограничений на размер глобальной таблицы смещений. Этот
опция имеет значение для m68k, PowerPC и SPARC.

Позиционно-независимый код требует специальной поддержки и поэтому работает только на
определенные машины.

Когда этот флаг установлен, макросы «__pic__» и «__PIC__» имеют значение 2.

-fpie
-fPIE
Эти параметры похожи на -fpic и -fPIC, но сгенерировал независимый от позиции код
могут быть связаны только с исполняемыми файлами. Обычно эти параметры используются, когда -пирог НКУ
опция будет использоваться при связывании.

-fpie и -fPIE оба определяют макросы «__pie__» и «__PIE__». Макросы имеют
значение 1 для -fpie и 2 для -fPIE.

-fno-jump-столы
Не используйте таблицы переходов для операторов switch, даже если это было бы более эффективно.
чем другие стратегии генерации кода. Эта опция используется вместе с
-fpic or -fPIC для создания кода, который является частью динамического компоновщика и не может
ссылка на адрес таблицы переходов. На некоторых мишенях таблицы переходов не требуют
GOT и эта опция не нужна.

-фиксированный-Редж
Относитесь к регистру по имени Редж как фиксированный регистр; сгенерированный код никогда не должен ссылаться на
это (кроме, возможно, указателя стека, указателя кадра или какой-либо другой фиксированной роли).

Редж должно быть названием реестра. Допустимые имена регистров зависят от машины
и определены в макросе «REGISTER_NAMES» в файле макроса описания машины.

Этот флаг не имеет отрицательной формы, потому что он указывает трехсторонний выбор.

-fcall-используется-Редж
Относитесь к регистру по имени Редж как размещаемый регистр, который затирается функцией
звонки. Он может быть выделен для временных или переменных, которые не живут в
вызов. Скомпилированные таким образом функции не сохраняют и не восстанавливают регистр. Редж.

Использование этого флага с указателем кадра или указателем стека является ошибкой. Использование этого
флаг для других регистров, которые имеют фиксированные общие роли в исполнении машины
модель приведет к плачевным результатам.

Этот флаг не имеет отрицательной формы, потому что он указывает трехсторонний выбор.

-fcall-сохранено-Редж
Относитесь к регистру по имени Редж как размещаемый регистр, сохраненный функциями. Это может быть
выделяется даже для временных или переменных, находящихся в вызове. Функции
скомпилированный таким образом сохранит и восстановит реестр Редж если они его используют.

Использование этого флага с указателем кадра или указателем стека является ошибкой. Использование этого
флаг для других регистров, которые имеют фиксированные общие роли в исполнении машины
модель приведет к плачевным результатам.

Иного рода катастрофа будет результатом использования этого флага для регистра в
какие значения функции могут быть возвращены.

Этот флаг не имеет отрицательной формы, потому что он указывает трехсторонний выбор.

-fpack-struct [=n]
Без указания значения упакуйте все элементы конструкции вместе без отверстий. Когда
указано значение (которое должно быть кратным двум), элементы структуры упаковки
в соответствии с этим значением, представляющим максимальное выравнивание (то есть объекты с
требования к выравниванию по умолчанию, превышающие это, будут выводиться потенциально невыровненными
в следующем месте установки.

Внимание! домен -fpack-структура переключатель заставляет GCC генерировать код, который не является двоичным
совместим с кодом, созданным без этого переключателя. Кроме того, он делает код
неоптимально. Используйте его, чтобы соответствовать бинарному интерфейсу приложения, отличному от заданного по умолчанию.

-finstrument-функции
Сгенерируйте инструментальные вызовы для входа и выхода из функций. Сразу после функции
входа и непосредственно перед выходом из функции будут вызваны следующие функции профилирования
с адресом текущей функции и местом ее вызова. (На некоторых платформах
"__builtin_return_address" не работает за пределами текущей функции, поэтому сайт вызова
в противном случае информация может быть недоступна функциям профилирования.)

void __cyg_profile_func_enter (void * this_fn,
void * call_site);
void __cyg_profile_func_exit (void * this_fn,
void * call_site);

Первый аргумент - это адрес начала текущей функции, который может быть
посмотрел точно в таблице символов.

Этот инструментарий также предназначен для функций, встроенных в другие функции.
Вызовы профилирования будут указывать, где концептуально вводится встроенная функция.
и вышел. Это означает, что должны быть доступны адресные версии таких функций.
Если все ваши способы использования функции расширены встроенными, это может означать дополнительные
расширение размера кода. Если вы используете внешний встроенный в вашем коде C адресный
должна быть предоставлена ​​версия таких функций. (В любом случае это обычно так, но
если вам повезет, и оптимизатор всегда расширяет функции встроенными, у вас может быть
ушли без предоставления статических копий.)

Функции может быть присвоен атрибут no_instrument_function, и в этом случае это
приборов делать не буду. Это можно использовать, например, для профилирования
перечисленные выше функции, высокоприоритетные процедуры обработки прерываний и любые функции, из которых
функции профилирования не могут быть безопасно вызваны (возможно, обработчики сигналов, если
подпрограммы профилирования генерируют вывод или выделяют память).

-finstrument-functions-exclude-file-list =файл,файл, ...
Задайте список функций, которые исключаются из инструментария (см. Описание
"-функций-инструментов"). Если файл, содержащий определение функции, соответствует
с одним из файл, то эта функция не инструментирована. Матч окончен
подстроки: если файл параметр - подстрока имени файла, считается
быть совпадением.

Например:

-finstrument-functions-exclude-file-list = / bits / stl, include / sys

исключит любую встроенную функцию, определенную в файлах, пути к которым содержат "/ bits / stl"
или "включить / sys".

Если по какой-то причине вы хотите включить букву "," в один из сим, записывать ','. Для
например, "-finstrument-functions-exclude-file-list = ',, tmp'" (обратите внимание на одинарную кавычку
окружающий вариант).

-finstrument-functions-exclude-function-list =сим,сим, ...
Это похоже на "-finstrument-functions-exclude-file-list", но этот параметр устанавливает
список имен функций, которые нужно исключить из инструментария. Имя функции для
быть сопоставленным - это его видимое пользователем имя, например "вектор бла (константный вектор &) ",
не внутреннее искаженное имя (например, "_Z4blahRSt6vectorIiSaIiEE"). Матч окончен
на подстроках: если сим параметр - это подстрока имени функции, это
считается совпадением. Для расширенных идентификаторов C99 и C ++ имя функции
необходимо указывать в кодировке UTF-8 без использования универсальных имен символов.

-fstack-проверить
Сгенерируйте код, чтобы убедиться, что вы не выходите за пределы стека. Ты
следует указать этот флаг, если вы работаете в среде с несколькими потоками,
но очень редко нужно указывать его в однопоточной среде, поскольку стек
переполнение автоматически обнаруживается почти во всех системах, если есть только один стек.

Обратите внимание, что этот переключатель на самом деле не вызывает выполнение проверки; операционная
система или языковая среда выполнения должны это делать. Переключатель вызывает генерацию кода
убедитесь, что они видят, что стек расширяется.

Вы можете дополнительно указать строковый параметр: «нет» означает отсутствие проверки, «общий»
означает принудительное использование проверки в старом стиле, "конкретный" означает использование наилучшей проверки
метод и эквивалентен голому -fstack-проверить.

Проверка в старом стиле - это общий механизм, не требующий специальной целевой поддержки в
компилятор, но имеет следующие недостатки:

1. Изменена стратегия размещения для больших объектов: они всегда будут размещаться.
динамически, если их размер превышает фиксированный порог.

2. Фиксированный предел размера статического фрейма функций: когда он завершается
конкретной функции, проверка стека ненадежна, и выдается предупреждение
компилятор.

3. Неэффективность: как из-за модифицированной стратегии распределения, так и из-за общей
реализация, производительность кода затруднена.

Обратите внимание, что проверка стека в старом стиле также является резервным методом для "специфических", если нет
Целевая поддержка была добавлена ​​в компилятор.

-fstack-limit-register =Редж
-fstack-limit-символ =сим
-fno-лимит стека
Сгенерируйте код, чтобы гарантировать, что стек не превышает определенное значение, либо
значение регистра или адрес символа. Если стек вырастет за пределы
значение, сигнал повышается. Для большинства целей сигнал возникает до того, как
стек выходит за границу, поэтому можно поймать сигнал, не принимая
особые меры предосторожности.

Например, если стек начинается с абсолютного адреса 0x80000000 и растет вниз,
вы можете использовать флаги -fstack-limit-symbol = __ stack_limit и
-Wl, - defsym, __ stack_limit = 0x7ffe0000 чтобы обеспечить ограничение стека в 128 КБ. Обратите внимание, что
это может работать только с компоновщиком GNU.

-fsplit-стек
Сгенерируйте код для автоматического разделения стека до его переполнения. Результирующий
программа имеет несмежный стек, который может переполняться только в том случае, если программа не может
выделить больше памяти. Это наиболее полезно при запуске многопоточных программ, так как
больше не нужно рассчитывать подходящий размер стека для каждого потока. Это
в настоящее время реализовано только для серверной части i386 и x86_64 под управлением GNU / Linux.

Когда код компилируется с -fsplit-стек вызывает код, скомпилированный без -fsplit-стекЕсть
для выполнения последнего кода может быть не так много места в стеке. Если компилировать все
код, включая код библиотеки, с -fsplit-стек не вариант, то компоновщик может
исправьте эти вызовы, чтобы код компилировался без -fsplit-стек всегда есть большой
куча. Поддержка этого реализована в золотом компоновщике в выпуске GNU binutils.
2.21 и позже.

-fleading-подчеркивание
Этот вариант и его аналог, -fno-ведущее-подчеркивание, принудительно изменить способ C
символы представлены в объектном файле. Одно использование - помочь связать с наследием
код сборки.

Внимание! домен -fleading-подчеркивание переключатель заставляет GCC генерировать код, который не
двоично совместим с кодом, созданным без этого переключателя. Используйте его, чтобы соответствовать
нестандартный двоичный интерфейс приложения. Не все цели обеспечивают полную поддержку
для этого переключателя.

-ftls-model =модель
Измените используемую модель локального хранилища потока. В модель аргумент должен быть одним из
"глобальный-динамический", "локальный-динамический", "начальный-исполнитель" или "локальный-исполнитель".

По умолчанию без -fpic "начальный-exec"; с участием -fpic по умолчанию
«глобально-динамический».

-fvisibility =по умолчанию | внутренний | скрытый | защищенный
Установите указанную опцию видимости символа изображения ELF по умолчанию - все символы будут
быть отмеченным этим, если это не переопределено в коде. Использование этой функции может очень
существенно сократить время компоновки и загрузки библиотек общих объектов, производить больше
оптимизированный код, почти идеальный экспорт API и предотвращение конфликтов символов. это
сильно рекомендуется использовать это в любых общих объектах, которые вы распространяете.

Несмотря на номенклатуру, «по умолчанию» всегда означает публичный; т.е. доступны для связывания
против извне разделяемого объекта. "защищенный" и "внутренний" бесполезны
в реальном мире, поэтому единственная часто используемая опция будет «скрытой». В
по умолчанию, если -видимость не указано "по умолчанию", т. е. сделать каждый символ
public --- это вызывает то же поведение, что и в предыдущих версиях GCC.

Хорошее объяснение преимуществ, обеспечиваемых правильным отображением символов ELF.
видимость обеспечивается "Как писать общие библиотеки" Ульриха Дреппера (который может быть
найдено вhttp://people.redhat.com/~drepper/>) --- однако было сделано превосходное решение
с помощью этого параметра можно отметить скрытые объекты, когда по умолчанию установлено значение «общедоступно», чтобы сделать
по умолчанию скрыто и помечает вещи общедоступными. Это норма для DLL в Windows и
-fvisibility = скрытый и "__attribute__ ((visibility (" default ")))" вместо
«__declspec (dllexport)» вы получаете почти идентичную семантику с идентичным синтаксисом.
Это большое благо для тех, кто работает с кроссплатформенными проектами.

Для тех, кто добавляет поддержку видимости в существующий код, вы можете найти #прагма НКУ
видимость использования. Это работает, если вы включаете объявления, которые хотите установить
видимость для с (например) #прагма НКУ видимость толкать (скрыто) и #прагма НКУ
видимость поп. Имейте в виду, что видимость символа должна просматриваться as часть of домен
API интерфейс контракт и поэтому весь новый код всегда должен указывать видимость, когда он
не по умолчанию; т.е. объявления только для использования в локальном DSO должны всегда
быть явно отмеченным как скрытый, чтобы избежать косвенных накладных расходов PLT --- делая это
Совершенно ясно, также способствует удобочитаемости и самодокументированию кода. Обратите внимание, что
в соответствии с требованиями спецификации ISO C ++, оператор new и оператор delete должны
всегда иметь видимость по умолчанию.

Имейте в виду, что заголовки извне вашего проекта, в частности системные заголовки и
заголовки из любой другой библиотеки, которую вы используете, могут не ожидать, что они будут скомпилированы с
видимость, отличная от значения по умолчанию. Вам может потребоваться явно сказать #прагма НКУ
видимость push (по умолчанию) перед включением любых таких заголовков.

внешний декларации не затрагиваются -видимость, поэтому много кода можно
перекомпилирован с -fvisibility = скрытый без доработок. Однако это означает, что
звонки в внешний функции без явной видимости будут использовать PLT, поэтому больше
эффективно использовать __атрибут ((видимость)) и / или #прагма НКУ видимость сказать
компилятор, который внешний объявления следует рассматривать как скрытые.

Обратите внимание, что -видимость действительно влияет на нечеткие объекты связи C ++. Это означает, что для
Например, класс исключения, который будет возникать между DSO, должен быть явно
помечены видимостью по умолчанию, так что type_info узлы будут объединены между
DSO.

Обзор этих методов, их преимуществ и способов их использования можно найти на
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-битовые поля
Эту опцию следует использовать при доступе к изменчивым битовым полям (или другой структуре
полей, хотя компилятор обычно учитывает эти типы), следует использовать один
доступ к ширине типа поля, выровненной по естественному выравниванию, если это возможно.
Например, для целей с отображенными в память периферийными регистрами могут потребоваться все такие
доступ должен быть шириной 16 бит; с этим флагом пользователь мог объявить все периферийные биты
поля как "unsigned short" (при условии, что short для этих целей составляет 16 бит), чтобы заставить GCC
использовать 16-битный доступ вместо, возможно, более эффективного 32-битного доступа.

Если этот параметр отключен, компилятор будет использовать наиболее эффективную инструкцию. В
в предыдущем примере это может быть 32-битная инструкция загрузки, даже если она
доступ к байтам, которые не содержат какой-либо части битового поля, или отображенным в память
регистры, не относящиеся к обновляемому.

Если для цели требуется строгое выравнивание и соблюдение типа поля потребует
При нарушении этого расклада выдается предупреждение. Если у поля есть атрибут «упаковано»,
доступ осуществляется без учета типа поля. Если в поле нет
"упакованный" атрибут, доступ осуществляется с учетом типа поля. В обоих случаях GCC
предполагает, что пользователь знает что-то о целевом оборудовании, чего он не знает.

Значение этого параметра по умолчанию определяется двоичным интерфейсом приложения для
целевой процессор.

ОКРУЖАЮЩАЯ СРЕДА


В этом разделе описывается несколько переменных среды, влияющих на работу GCC. Некоторые
из них работают, указывая каталоги или префиксы, которые будут использоваться при поиске различных типов
файлов. Некоторые используются для указания других аспектов среды компиляции.

Обратите внимание, что вы также можете указать места для поиска, используя такие параметры, как -B, -I и -L.
Они имеют приоритет над местами, указанными с помощью переменных среды, которые, в свою очередь,
имеют приоритет над теми, которые указаны в конфигурации GCC.

ДЛИННЫЙ
LC_CTYPE
LC_MESSAGES
LC_ALL
Эти переменные среды определяют способ использования GCC информации о локализации.
что позволяет GCC работать с различными национальными конвенциями. GCC проверяет локаль
категории LC_CTYPE и LC_MESSAGES если он настроен для этого. Эти языковые стандарты
категории могут быть установлены на любое значение, поддерживаемое вашей установкой. Типичное значение
en_GB.UTF-8 для английского языка в Великобритании в кодировке UTF-8.

Ассоциация LC_CTYPE переменная среды определяет классификацию символов. GCC использует его для
определить границы символов в строке; это нужно для некоторых многобайтовых
кодировки, содержащие кавычки и escape-символы, которые иначе были бы интерпретированы
как конец строки или escape.

Ассоциация LC_MESSAGES переменная среды определяет язык для использования в диагностике
сообщений.

Если же линия индикатора LC_ALL переменная окружения установлена, она переопределяет значение LC_CTYPE и
LC_MESSAGES; в противном случае, LC_CTYPE и LC_MESSAGES по умолчанию значение ДЛИННЫЙ
переменная окружения. Если ни одна из этих переменных не задана, GCC по умолчанию использует традиционный
C английским поведением.

TMPDIR
If TMPDIR установлен, он указывает каталог, который будет использоваться для временных файлов. GCC использует
временные файлы для хранения результатов одного этапа компиляции, которые будут использоваться как
вход на следующий этап: например, выход препроцессора, который является
ввод в компилятор.

GCC_COMPARE_DEBUG
настройка GCC_COMPARE_DEBUG почти эквивалентно прохождению -fcompare-отладка до
драйвер компилятора. См. Документацию по этой опции для получения более подробной информации.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX установлен, он указывает префикс для использования в именах
подпрограммы, выполняемые компилятором. При комбинировании этого префикса косая черта не добавляется
с именем подпрограммы, но вы можете указать префикс, который заканчивается косой чертой, если
Вы хотите.

If GCC_EXEC_PREFIX не установлен, GCC попытается определить соответствующий префикс для
использовать на основе имени пути, с которым он был вызван.

Если GCC не может найти подпрограмму с использованием указанного префикса, он пытается найти в
обычные места для подпрограммы.

Значение по умолчанию GCC_EXEC_PREFIX is префикс / lib / gcc / в котором префикс это префикс к
установленный компилятор. Во многих случаях префикс это значение "префикса", когда вы запускали
конфигурировать скрипты.

Другие префиксы, указанные с помощью -B имеют приоритет перед этим префиксом.

Этот префикс также используется для поиска таких файлов, как crt0.o которые используются для связывания.

Кроме того, префикс необычным образом используется при поиске каталогов для поиска.
для файлов заголовков. Для каждого из стандартных каталогов, чье имя обычно начинается
/ usr / местные / библиотека / gcc (точнее, со значением GCC_INCLUDE_DIR), GCC пытается
заменяя это начало на указанный префикс, чтобы создать альтернативный каталог
имя. Таким образом, с -Bfoo /, GCC будет искать foo / bar где он обычно ищет
/ USR / местные / библиотека / бар. Сначала ищутся эти альтернативные каталоги; стандарт
далее следуют каталоги. Если стандартный каталог начинается с настроенного префикс тогда
Значение префикс заменяется на GCC_EXEC_PREFIX при поиске файлов заголовков.

КОМПИЛЕР_ПУТЬ
Значение КОМПИЛЕР_ПУТЬ это список каталогов, разделенных двоеточиями, как и PATH.
GCC пробует указанные таким образом каталоги при поиске подпрограмм, если не может.
найти подпрограммы, используя GCC_EXEC_PREFIX.

БИБЛИОТЕКА_ПУТЬ
Значение БИБЛИОТЕКА_ПУТЬ это список каталогов, разделенных двоеточиями, как и PATH.
При настройке в качестве собственного компилятора GCC пробует указанные таким образом каталоги, когда
поиск специальных файлов компоновщика, если он не может их найти с помощью GCC_EXEC_PREFIX.
Связывание с использованием GCC также использует эти каталоги при поиске обычных библиотек.
для -l вариант (но каталоги, указанные с -L приходи первым).

ДЛИННЫЙ
Эта переменная используется для передачи информации о локали компилятору. Один из способов, которым
эта информация используется для определения набора символов, который будет использоваться, когда символ
литералы, строковые литералы и комментарии анализируются в C и C ++. Когда компилятор
настроен на разрешение многобайтовых символов, следующие значения для ДЛИННЫЙ Он
признал:

C-JIS
Узнавайте символы JIS.

C-SJIS
Узнавайте персонажей SJIS.

C-EUCJP
Узнавайте символы EUCJP.

If ДЛИННЫЙ не определен, или если он имеет другое значение, компилятор будет использовать
mblen и mbtowc в соответствии с локалью по умолчанию для распознавания и перевода многобайтовых
символы.

Некоторые дополнительные переменные среды влияют на поведение препроцессора.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Значение каждой переменной представляет собой список каталогов, разделенных специальным символом,
такое как PATH, в котором нужно искать файлы заголовков. Особый персонаж,
PATH_SEPARATOR зависит от цели и определяется во время сборки GCC. Для Microsoft
Для целей Windows это точка с запятой, а почти для всех остальных целей - точка с запятой.
двоеточие.

CPATH указывает список каталогов для поиска, как если бы он был указан с помощью -I, Но
после любых путей, указанных с -I параметры в командной строке. Эта переменная среды
используется независимо от того, на каком языке выполняется предварительная обработка.

Остальные переменные среды применяются только при предварительной обработке конкретного
язык указан. Каждый указывает список каталогов для поиска, как если бы
указано с -система, но после любых путей, заданных с -система варианты на
командная строка.

Во всех этих переменных пустой элемент инструктирует компилятор искать его текущий
рабочий каталог. Пустые элементы могут появляться в начале или в конце пути. Для
например, если значение CPATH это ": / special / include", которое имеет тот же эффект, что и
-I. -I / special / include.

ЗАВИСИМОСТИ_OUTPUT
Если эта переменная установлена, ее значение указывает, как выводить зависимости для Make на основе
для несистемных заголовочных файлов, обрабатываемых компилятором. Файлы системных заголовков
игнорируется в выводе зависимости.

Значение ЗАВИСИМОСТИ_OUTPUT может быть просто именем файла, и в этом случае правила создания
записываются в этот файл, угадывая целевое имя из имени исходного файла. Или
значение может иметь форму файл цель, в этом случае правила записываются в файл файл
через цель как целевое имя.

Другими словами, эта переменная среды эквивалентна объединению параметров -MM
и , с необязательным -MT переключатель тоже.

SUNPRO_DEPENDENCIES
Эта переменная такая же, как ЗАВИСИМОСТИ_OUTPUT (см. выше), за исключением того, что система
файлы заголовков не игнорируются, поэтому подразумевается -M , а не -MM. Тем не менее,
зависимость от основного входного файла опущена.

Используйте g ++ - 4.7 в Интернете с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    Turkdevops
    Turkdevops
    TurkDevOps a ? K kaynak yaz? L? M
    geli? tirici topluluklar? DevTurks-Команда
    Тарафондан дестекленмектедир..
    Возможности: https://github.com/turkdevopshttps://turkdevops.g...
    Скачать turkdevops
  • 2
    асаммдф
    асаммдф
    * asammdf * - это быстрый парсер Python и
    редактор для ASAM (Ассоциация для
    Стандартизация автоматизации и
    Измерительные системы) МДФ / МФ4
    (Формат данных измерений ...
    Скачать asammdf
  • 3
    LAME (Хромой, это не MP3-кодировщик)
    LAME (Хромой, это не MP3-кодировщик)
    LAME — это образовательный инструмент, который можно использовать
    для изучения кодирования MP3.
    Цель проекта LAME — улучшить
    психо акустика, качество и скорость
    депутат...
    Скачать LAME (Lame Aint MP3 Encoder)
  • 4
    WxPython
    WxPython
    Набор модулей расширения Python, которые
    оберните классы кросс-платформенного графического интерфейса из
    wxWidgets.. Аудитория: Разработчики. Пользователь
    интерфейс: X Window System (X11), Win32...
    Скачать wxPython
  • 5
    пакетный файловый менеджер
    пакетный файловый менеджер
    Это файловый менеджер пакета Total War.
    проект, начиная с версии 1.7. А
    краткое введение в Warscape
    моддинг: ...
    Скачать пакетный файловый менеджер
  • 6
    IPerf2
    IPerf2
    Инструмент для измерения сетевого трафика
    Производительность TCP и UDP с метриками
    вокруг пропускной способности и задержки. В
    цели включают поддержание активного
    iperf треска ...
    Скачать IPerf2
  • Больше »

Команды Linux

Ad