Это команда aarch64-linux-gnu-gcc-4.9, которую можно запустить в бесплатном хостинг-провайдере 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формат и так далее. Большинство из них имеют как положительные, так и отрицательные
формы; отрицательная форма -ффу is -фно-фу. В этом руководстве описан только один из них.
две формы, в зависимости от того, какая из них не используется по умолчанию.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Опция Итого
Вот сводка всех опций, сгруппированных по типу. Пояснения в следующих
раздел.
В общем Возможности
-c -S -E -o файл -не-канонические-префиксы -трубка -pass-exit-коды -x язык -v
- ### --Помогите[=класс[, ...]] --target-помощь --версия -обертка @файл -fplugin =файл
-fplugin-аргумент-имя=аргумент -fdump-ада-спецификация[-тонкий] -fada-spec-parent =Ед. изм
-fdump-go-spec =файл
C Язык Возможности
-анси -std =стандарт -fgnu89-встроенный -aux-информация имя файла
-fallow-параметры-вариативные-функции -фно-асм -fno-встроенный -fno-встроенный-функция
-fhosted -Отдельные -fopenmp -fopenmp-simd -fms-extension -fplan9-extension
-триграфы -традиционный -традиционный-cpp -fallow-single-precision (одинарная точность) -fcond-несоответствие
-lax-vector-conversions -fsigned-битовые поля -fsigned-char -funsigned-битовые поля
-funsigned-char
C + + Язык Возможности
-fabi-version =n -fno-контроль доступа -fcheck-новый -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-backtrace-limit =n -ftemplate-depth =n -fno-threadsafe-статика
-предохранитель-cxa-atexit -fno-слабый -nostdinc ++ -fvisibility-встроенные-скрытые
-fvtable-verify =std | preinit | none -fvtv-количество -fvtv-отладка -fvisibility-ms-совместимость
-fext-числовые-литералы -Ваби -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 =[консолидировать|повсюду]
-fdiagnostics-color =[автоматический|никогда|всегда] -fno-Diagnostics-show-option
-fno-диагностика-шоу-каретка
Предупреждение Возможности
-fsyntax-только -fmax-errors =n -педантичный -педантические-ошибки -w -Векстра -Стена
-адрес -Ваггрегат-возврат -Waggressive-loop-оптимизации -Боевые границы
-Wno-атрибуты -Wno-build-macro-redefined -Wc ++ - совместимость -Wc ++ 11-compat -Wcast-выравнивание
-Wcast-качество -Wchar-индексы -Wразбит -Wкомментарий -W условно поддерживается
-Wконверсия -Wcoverage-несоответствие -Среда-время -W удалить-неполный -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-неинициализированный -Wmemset-транспонированные-аргументы
-Wmissing-подтяжки -Wmissing-поля-инициализаторы -Wmissing-include-dirs -Wno-многосимвольный
-Wnonnull -Wno-переполнение -Wopenmp-simd -Woverlength-струны -Упакованный
-Wpacked-битовое-совместимость -Wмягкий -W скобки -Wpedantic-ms-формат
-Wno-pedantic-ms-формат -Wpointer-ариф -Wno-указатель-на-int-cast -Wredundant-декларации
-Wno-return-local-адрес -Обратный тип -W точка-последовательности -Wтень -Wsign-сравнить
-Wsign-конверсия -Wfloat-конверсия -Wsizeof-указатель-доступ к памяти -Wstack-протектор
-Wstack-usage =только -Wstrict-псевдоним -Wstrict-aliasing = n -Wstrict-переполнение
-Wstrict-overflow =n -Wsuggest-attribute =[чистый|Const|без возврата|формат]
-Wmissing-формат-атрибут -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 -самосвал -дампверсия -fsanitize =стиль -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-tree-псевдоним
-fdump-дерево-ch -fdump-дерево-ssa[-n] -fdump-дерево-предварительно[-n] -fdump-дерево-ccp[-n]
-fdump-дерево-dce[-n] -fdump-дерево-gimple[-сырой] -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-tree-vtable-проверить -fdump-дерево-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns =файл -fcompare-отладка[=выбирает] -fcompare-debug-секунда
-felimminate-dwarf2-dups -fno-исключить неиспользуемые-отладочные типы
-feliminate-неиспользуемые-символы-отладки -femit-класс-отладка-всегда -обоснованный-вид-pass
-обоснованный-вид-pass=список диапазонов -fdebug-типы-секция -fmem-отчет-wpa -fmem-отчет
-fpre-ipa-mem-отчет -fpost-ipa-mem-отчет -fprofile-дуги -fopt-информация
-fopt-информация-кредита[=файл] -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 -время[=файл]
Оптимизация Возможности
-faggressive-loop-оптимизации -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девиртуализовать
-fdevirtualize-спекулятивно -fdse опасно встраивание -фипа-сра
-файловые-оптимизации -ffat-lto-объекты -ffast-математика -ffinite-math-only - только математика
-флот-магазин -fexcess-precision =стиль -всегда-распространять -ffp-contract =стиль
-функции-разделы -fgcse -fgcse-после перезагрузки -fgcse-las -fgcse-lm
-fgraphite-идентичность -fgcse-см -fhoist-смежные-нагрузки -fif-преобразование -fif-преобразование2
-findirect-встраивание -finline-функции -finline-функции-вызываемые-один раз -finline-limit =n
-finline-small-функции -fipa-cp -fipa-cp-клон -фипа-пта -fipa-профиль
-fipa-чистый-const -fipa-ссылка -fira-algorithm =алгоритм -fira-region =область
-фира-подъемник-давление -фира-петля-давление -fno-ira-share-save-слоты
-fno-ira-share-spill-слоты -fira-verbose =n -fisolate-ошибочные-пути-разыменование
-fisolate-ошибочные-пути-атрибут -фивопты -fkeep-встроенные функции
-fkeep-статические-константы -прокрутка-усадка -floop-блок -флоп-развязка
-фуп-стрип-мина -floop-гнездо-оптимизировать -floop-parallelize-все -флто
-flto-сжатие-уровень -flto-partition =ALG -flto-отчет -flto-отчет-wpa
-fmerge-все-константы -fmerge-константы -fmodulo-sched -fmodulo-sched-allow-regmoves
-fmove-loop-инварианты -fno-Branch-count-reg -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-sibling-вызовы -fpartial-встраивание -fpeel-петли -fpredictive-обобщение
-fprefetch-loop-массивы -fprofile-отчет -fprofile-Correction -fprofile-dir =путь
-fprofile-генерировать -fprofile-generate =путь -fprofile-использование -fprofile-use =путь
-fprofile-значения -fprofile-reorder-функции -freciprocal-математика -свободно
-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-протектор-все -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-loop-векторизация -ftree-parallelize-loops =n -free-pre
-ftree-частичный-pre -ftree-pta -ftree-reassoc -дерево-раковина -ftree-slsr -ftree-сра
-бесплатное переключение-преобразование -ftree-tail слияние -дерево-тер -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препроцессор вариант -но-интегрированный-cpp
Ассемблер Опция
-Ва,вариант -Xассемблер вариант
связи Возможности
имя-файла-объекта -lбиблиотека -nostartfiles -nodefaultlibs -nostdlib -пирог -рдинамический -s
-статический -статический-libgcc -статическая-libstdc ++ -статический-libasan -static-libtsan
-static-liblsan -статический-libubsan -общий -shared-libgcc -символический -T скрипт
-Вл,вариант -Xlinker вариант -u символ
Каталог Возможности
-Bпрефикс -Iдиректория -iplugindir =директория -я цитируюдиректория -Lдиректория -specs =файл -Я- --sysroot =директория
--no-sysroot-суффикс
Машина Зависимый Возможности
AAArch64 Возможности -mabi =имя -mbig-endian -с младшим порядком байтов -mgeneral-regs-only
-mcmodel = крошечный -mcmodel = маленький -mcmodel = большой -mstrict-выравнивание -Momit-Leaf-Frame-указатель
-mno-опустить-лист-указатель-кадра -mtls-dialect = desc -mtls-dialect = традиционный
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -март =имя -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-Редж
ARC Возможности -баррель-перевертыш -mcpu =процессор -мА6 -MARC600 -мА7 -MARC700 -mdpfp
-mdpfp-компактный -mdpfp-быстро -mno-dpfp-lrsr -меа -mno-mpy -mmul32x16 -mmul64 -мнорм
-мспфп -mspfp-компактный -mspfp-быстро -мсимд -msoft-поплавок -mswap -mcrc -mdsp-пакет -mdvbf
-млок -mmac-d16 -ммак-24 -мртск -mswape -мелофония -мкси -неправильный размер -mannotate-выравнивание
-Марклинукс -marclinux_prof -mepilogue-cfi -mlong-вызовы -mmedium-звонки -мсданные
-mucb-mcount -mvolatile-кэш злобный звонок -mauto-modify-reg -mbbit-глазок -mno-brcc
-mcase-вектор-пкрел -mcompact-casei -mno-cond-exec -крупно-ветвистый -mexpand-adddi
-mindexed-load -млра -млра-приоритет-нет -mlra-приоритет-компактный млра-приоритет-
некомпактная -мно-милликод -mixed-code -mq-класс -mRcq -mRcw -msize-level =уровень
-mtune =процессор -mmultcost =Num -munalign-prob-threshold =вероятность
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 -mpoke-имя-функции
-мпалец -мам -мтпкс-рама -мтпкс-створка-рамка -mcaller-супер-взаимодействие
-mcallee-супер-взаимодействие -mtp =имя -mtls-dialect =диалект -mword-перемещений
-mfix-cortex-m3-ldrd -мунифицированный-доступ -mneon-для-64 бит -mslow-flash-данные
-mrestrict-это
AVR Возможности -mmcu =БУМ -маккумулировать-аргументы -mbranch-cost =стоят -mcall-прологи -мята8
-мно-прерывания -мелакс -mstrict-X -mtiny-стек -Waddr-space-конвертировать
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 =время
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 Возможности -мелакс -мч -Миз -мн -мекср -mno-exr -мята32 -злокачественный-300
HPPA Возможности -март =архитектурный тип -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 =тип процессора -март =тип процессора -mtune-ctrl =список возможностей
-mdump-tune-особенности -mno-по умолчанию -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 -mavx512f -mavx512pf -mavx512er
-mavx512cd -мша -мэйс -mpclmul -mfsgsbase -мрдрнд -mf16c -мфма -mprefetchwt1 -msse4a
-m3dnow -mpopcnt -мабм -мбми -мтбм -мфма4 -mxop -mlzcnt -mbmi2 -mfxsr -mxsave
-mxsaveopt -мртм -mlwp -mthreads -mno-align-stringops -минлайн-все-струнные
-minline-stringops-динамически -mstringop-strategy =ALG -mmemcpy-strategy =стратегия
-mmemset-strategy =стратегия -mpush-аргументы -maccumulate-исходящие-аргументы
-m128bit-длинный-двойной -m96bit-длинный-двойной -млонг-двойной-64 -млонг-двойной-80
-млонг-двойной-128 -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 -м16 -mlarge-data-threshold =Num -msse2avx -mfentry -m8bit-идив
-mavx256-split-unaligned-load -mavx256-split-unaligned-store
-mstack-протектор-охрана =охрана
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 =макс-инснс
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
-mbig-endian -с младшим порядком байтов -mxl-переупорядочить -mxl-режим-модель приложения
MIPS Возможности -EL -ЭБ -март =арка -mtune =арка -мипс1 -мипс2 -мипс3 -мипс4
-мипс32 -mips32r2 -мипс64 -mips64r2 -мипс16 -мно-мипс16 -mflip-mips16
-minterlink-сжатый -mno-interlink-сжатый -minterlink-mips16
-mno-интерлинк-mips16 -mabi =аби -мэбиколлс -мно-абикалы -msshared -мно-общий
-мплт -мно-плт -mxgot -мно-хгот -мгп32 -мгп64 -мфп32 -мфп64 -mhard-поплавок
-msoft-поплавок -мно-поплавок -мн-поплавок -mdouble-поплавок -mabs =Режим -mnan =кодирование
-мдсп -мно-дсп -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-rm7000 -mno-fix-rm7000 -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
Дерзость Возможности -меб -мель -mno-crt0
MSP430 Возможности -мсим -masm-hex -mmcu = -mcpu = -мбольшой -msмаленький -мелакс -mhwmult = -минрт
NDS32 Возможности -mbig-endian -с младшим порядком байтов -mrededed-regs -mfull-regs -макмов -мно-смов
-perf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -мно-16бит -mgp-direct
-mno-gp-direct -misr-vector-size =Num -mcache-размер блока =Num -март =арка
-mforce-fp-как-gp -mforbid-fp-as-gp -мекс9 -mctor-dtor -мелакс
Nios II Возможности -G Num -мгпопт -mno-gpopt -мель -меб -mno-bypass-кэш -mbypass-кэш
-mno-cache-летучий -mcache-изменчивый -mno-fast-sw-div -mfast-sw-div -mhw-мул
-мно-хв-мул -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-див -mcustom-гостиница=N
-мно-обычай-гостиница -mcustom-fpu-cfg =имя -мхал -msmallc -msys-crt0 =имя -msys-lib =имя
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 =код-модель
-mpowerpc64 -малтивек -мно-алтивек -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 -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-косвенный -mpower8-fusion -mno-mpower8-fusion
-mpower8-вектор -mno-power8-вектор -мкрипто -мно-крипто -mdirect-переместить -мно-прямое движение
-mquad-память -mno-quad-память -mquad-memory-атомный -mno-quad-memory-атомарный
-mcompat-align-parm -mno-compat-align-parm
RX Возможности -m64bit-удваивается -m32bit-удваивается -фпу -нофпу -mcpu = -mbig-endian-данные
-mlittle-endian-данные -msmall-данные -мсим -мно-сим -mas100-синтаксис -mno-as100-синтаксис
-мелакс -mmax-constant-size = -mint-register = -mpid -mno-warn-множественные быстрые прерывания
-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-охранник -mhotpatch =полуслова,полуслова
Счет Возможности -меб -мель -мнхвлуп -мульс -ммак -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 =регистр-диапазон -mindexed-адресация
-mgettrcost =номер -mpt-фиксированный -maccumulate-исходящие-аргументы -minvalid-символы
-matomic-model =атомная модель -mbranch-cost =Num -mzdcbranch -mno-zdcветка -растерянный-безумный
-mno-плавленный-madd -мфска -мно-фска -мфсрра -мно-фсрра -mpretend-cmove -мтас
Solaris 2 Возможности -mclear-hwcap -mno-clear-hwcap -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 -muser-режим -mno-пользовательский режим -mv8plus -mno-v8plus -мвис
-мно-вис -мвис2 -мно-вис2 -мвис3 -мно-вис3 -мкбекунд -mno-cbcond -мфмаф -мно-фмаф
-mpopc -мно-попс -mfix-at697f -mfix-ut699
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 -mbig-endian -с младшим порядком байтов -mcmodel =код-модель
ПЛИТКАПро Возможности -mcpu =процессор -м32
V850 Возможности -mlong-вызовы -мно-долгие звонки -меп -мно-эп -mprolog-функция
-mno-пролог-функция -мспейс -mtda =n -msda =n -mzda =n -карта-regs -mno-приложение-regs
-mdisable-вызов -mno-отключить-вызов -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-мв850 -mv850e3v5 -mloop -мелакс -длинные прыжки -msoft-поплавок -mhard-поплавок -mgcc-аби
-mrh850-аби -mbig-переключатель
VAX Возможности -мг -мгну -муникс
ЗИС Возможности -mvms-коды-возврата -mdebug-main =префикс -mmalloc64 -mpointer-size =размер
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-исключения
-fdelete-мертвые исключения -funwind-столы -фасинхронные-раскрутки-столы -fno-gnu-уникальный
-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 =модель
-fstack-reuse =уровень повторного использования -ftrapv -fwrapv -fbounds-проверить -видимость
-fstrict-volatile-битовые поля -fsync-libcalls
Возможности Управление Вид 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, содержащий тело модуля библиотеки (подпрограмму или тело пакета).
Такие файлы еще называют органов.
файл.d
Файл исходного кода D.
файл.ди
Файл кода интерфейса D.
файл.дд
Файл кода документации D.
файл.s
Код ассемблера.
файл.S
файл.sx
Код ассемблера, который необходимо предварительно обработать.
другими
Объектный файл, который будет загружен прямо в ссылку. Любое имя файла без распознанного
суффикс обрабатывается таким образом.
Вы можете явно указать язык ввода с помощью -x опции:
-x язык
Укажите явно язык для следующих входных файлов (вместо того, чтобы
компилятор выбирает значение по умолчанию на основе суффикса имени файла). Эта опция применима ко всем
следующие входные файлы до следующего -x вариант. Возможные значения для язык составляют:
c c-заголовок cpp-вывод
c ++ c ++ - заголовок c ++ - cpp-output
цель-с, цель-с-заголовок, цель-с-cpp-выход
объектный-c ++ объектный-c ++ - заголовок объектный-c ++ - cpp-output
ассемблер-ассемблер-с-cpp
Ada
d
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, чтобы они могли отображать параметры командной строки, которые они
принимать. Если -Векстра опция также была указана (до --Помогите вариант),
то параметры командной строки, с которыми не связана документация, также
отображается.
--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 is
GDB --args cc1 ....
-fplugin =имя.так
Загрузите код плагина в файл имя.so, предполагается, что это общий объект, который должен быть открыт
компилятор. Базовое имя файла общих объектов используется для идентификации плагина.
для анализа аргументов (см. -fplugin-аргумент-имя-ключ=ценностное ниже). Каждый
плагин должен определять функции обратного вызова, указанные в API плагинов.
-fplugin-аргумент-имя-ключ=ценностное
Определите аргумент под названием ключ со стоимостью ценностное для плагина под названием имя.
-fdump-ада-спецификация[-тонкий]
Для исходных и включаемых файлов C и C ++ сгенерируйте соответствующие спецификации Ada.
-fada-spec-parent =Ед. изм
В сочетании с -fdump-ада-спецификация[-тонкий] выше, сгенерируйте спецификации 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 ++. Лечит .c, .h и .i файлы как
Исходные файлы C ++ вместо исходных файлов C, если только -x используется. Эта программа тоже полезна
при предварительной компиляции файла заголовка 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. Этот стандарт практически полностью поддерживается по модулю ошибок,
расширенные идентификаторы (поддерживаются за исключением крайних случаев, когда
-fextended-идентификаторы используется) и проблемы с плавающей точкой (в основном, но не полностью
относящиеся к дополнительным функциям C99 из приложений F и G). Видеть
<http://gcc.gnu.org/c99status.html> для получения дополнительной информации. Имена c9x и
iso9899: 199x устарели.
c11
c1x
iso9899: 2011
ISO C11, редакция 2011 года стандарта ISO C. Этот стандарт существенно
полностью поддерживается, ошибки по модулю, расширенные идентификаторы (поддерживаются, кроме
угловые случаи, когда -fextended-идентификаторы используется), проблемы с плавающей запятой (в основном
но не полностью относится к дополнительным функциям C11 из Приложений F и G) и
дополнительные приложения K (интерфейсы для проверки границ) и L (анализируемость). Имя
c1x устарел.
GNU90
GNU89
GNU-диалект ISO C90 (включая некоторые функции C99). Это значение по умолчанию для C
код.
GNU99
gnu9x
GNU-диалект ISO C99. Имя gnu9x устарел.
GNU11
gnu1x
GNU-диалект ISO C11. Предполагается, что в будущем это станет значением по умолчанию.
выпуск GCC. Имя gnu1x устарел.
c ++ 98
c ++ 03
Стандарт ISO C ++ 1998 г. плюс техническое исправление 2003 г. и некоторые дополнительные
отчеты о дефектах. Такой же как -анси для кода C ++.
гну ++ 98
гну ++ 03
Диалект GNU -std = c ++ 98. Это значение по умолчанию для кода C ++.
c ++ 11
c ++ 0x
Стандарт ISO C ++ 2011 года плюс поправки. Имя c ++ 0x устарел.
гну ++ 11
GNU ++ 0x
Диалект GNU -std = c ++ 11, Имя GNU ++ 0x устарел.
c ++ 1y
Следующая версия стандарта ISO C ++ ориентировочно запланирована на 2014 год. Поддержка
является в высшей степени экспериментальным и почти наверняка изменится несовместимым образом в
будущие выпуски.
GNU ++ 1y
Диалект GNU -std = c ++ 1y. Поддержка носит экспериментальный характер и почти
обязательно изменятся несовместимыми способами в будущих выпусках.
-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 v4.0http://www.openmp.org/>. Этот вариант
подразумевает -pthread, и поэтому поддерживается только для целей, которые поддерживают
-pthread. -fopenmp подразумевает -fopenmp-simd.
-fopenmp-simd
Включите обработку директив SIMD OpenMP с помощью "#pragma omp" в C / C ++ и "! $ Omp" в
Фортран. Другие директивы OpenMP игнорируются.
-fcilkplus
Включите использование функций расширения языка Cilk Plus для C / C ++. Когда вариант
-fcilkplus указан, включите использование функций расширения Cilk Plus Language
для C / C ++. Настоящая реализация следует за ABI версии 1.2. Это
экспериментальная функция, которая завершена только частично, интерфейс которой может измениться
в будущих версиях GCC по мере изменения официальной спецификации. В настоящее время все
функции, кроме "_Cilk_for", были реализованы.
-fgnu-тм
Когда вариант -fgnu-тм указан, компилятор генерирует код для Linux
вариант текущей спецификации Intel Transactional Memory ABI (Revision
1.1, 6 мая 2009 г.). Это экспериментальная функция, интерфейс которой может измениться в
будущие версии GCC по мере изменения официальной спецификации. Обратите внимание, что не
для этой функции поддерживаются все архитектуры.
Для получения дополнительной информации о поддержке GCC транзакционной памяти,
Обратите внимание, что функция транзакционной памяти не поддерживается с исключениями, не связанными с вызовом.
(-fnon-call-исключения).
-fms-extension
Примите некоторые нестандартные конструкции, используемые в файлах заголовков Microsoft.
В коде C ++ это позволяет именам членов в структурах быть похожими на предыдущие типы.
деклараций.
определение типа int UOW;
структура ABC {
УОВ УОВ;
};
Некоторые случаи безымянных полей в структурах и объединениях принимаются только с этим
опцию.
Обратите внимание, что этот параметр отключен для всех целей, кроме целей i? 86 и x86_64, использующих ms-abi.
-fplan9-extension
Примите некоторые нестандартные конструкции, используемые в коде Plan 9.
Это позволяет -fms-extension, позволяет передавать указатели на структуры с анонимным
поля к функциям, которые ожидают указатели на элементы типа поля, и
позволяет ссылаться на анонимные поля, объявленные с использованием typedef. Это только
поддерживается для C, а не C ++.
-триграфы
Поддержка триграфов ISO C. В -анси вариант (и -стандарт варианты строгого ISO C
соответствие) подразумевает -триграфы.
-традиционный
-традиционный-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.
Версия 0 относится к версии, наиболее точно соответствующей спецификации C ++ ABI.
Следовательно, ABI, полученный с использованием версии 0, будет изменяться в разных версиях G ++.
по мере исправления ошибок ABI.
Версия 1 - это версия C ++ ABI, которая впервые появилась в G ++ 3.2.
Версия 2 - это версия C ++ ABI, которая впервые появилась в G ++ 3.4.
Версия 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, только если он объявлен бросать() и отправлять адресату
в этом случае компилятор всегда проверяет возвращаемое значение даже без этой опции. В
во всех остальных случаях, когда "operator new" имеет непустую спецификацию исключения, память
об истощении сигнализирует бросок "std :: bad_alloc". Смотрите также new (не стрелка).
-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 ++, но может быть полезен для уменьшения размера кода в
производственные сборки, что очень похоже на определение ОТЛАДКА. Это не дает права доступа к пользовательскому коду
генерировать исключения в нарушение спецификаций исключений; компилятор все еще
оптимизируется на основе спецификаций, поэтому выдача неожиданного исключения приводит к
неопределенное поведение во время выполнения.
-fextern-tls-инит
-fno-extern-tls-инит
Стандарты C ++ 11 и OpenMP позволяют thread_local и потокчастный переменные иметь
динамическая (во время выполнения) инициализация. Чтобы поддержать это, любое использование такой переменной идет
через функцию-оболочку, которая выполняет любую необходимую инициализацию. Когда использование
и определение переменной находятся в той же единице перевода, эти накладные расходы могут быть
оптимизирован, но когда используется другая единица перевода, есть
значительные накладные расходы, даже если переменная на самом деле не нуждается в динамическом
инициализация. Если программист может быть уверен, что нельзя использовать переменную в не-
определение TU должно запускать динамическую инициализацию (либо потому, что переменная
статически инициализирован, или будет выполнено использование переменной в определяющем TU
перед любым использованием в другом TU), они могут избежать этих накладных расходов с помощью
-fno-extern-tls-инит опцию.
Для целей, поддерживающих псевдонимы символов, значение по умолчанию -fextern-tls-инит. По мишеням
которые не поддерживают псевдонимы символов, по умолчанию -fno-extern-tls-инит.
-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
Отключите предупреждения Wpedantic о конструкциях, используемых в 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). Если вы этого не сделаете
используйте эти части языка, вы можете сэкономить место, используя этот флаг. Примечание
эта обработка исключений использует ту же информацию, но G ++ генерирует ее по мере необходимости. В
динамический_cast оператор по-прежнему может использоваться для приведения типов, которые не требуют типа времени выполнения
информация, т.е. преобразуется в "void *" или в однозначные базовые классы.
-fstats
Выдача статистики о внешней обработке в конце компиляции. Этот
информация обычно полезна только для команды разработчиков G ++.
-fstrict-перечисления
Разрешить компилятору оптимизировать, используя предположение, что значение перечислимого типа
может быть только одно из значений перечисления (как определено в стандарте C ++;
в основном, значение, которое может быть представлено в минимальном количестве битов, необходимых для
представляют все счетчики). Это предположение может быть неверным, если программа использует
приведение для преобразования произвольного целочисленного значения в перечислимый тип.
-ftemplate-backtrace-limit =n
Установите максимальное количество примечаний по созданию экземпляров шаблона для одного предупреждения или ошибки
в n. Значение по умолчанию - 10.
-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 по разному определению типов с одним и тем же именем.
-fvtable-verify =std | preinit | none
Включите (или выключите, если используете -fvtable-verify = нет) функция безопасности, которая проверяется на
во время выполнения для каждого виртуального вызова указатель vtable, через который
сделанный вызов действителен для данного типа объекта, не был поврежден или
перезаписан. Если обнаружен недопустимый указатель vtable (во время выполнения), возникает ошибка
сообщается, и выполнение программы немедленно останавливается.
Эта опция вызывает создание структур данных времени выполнения при запуске программы для
проверка указателей vtable. Параметры "std" и "preinit" управляют временем
когда построены эти структуры данных. В обоих случаях строятся структуры данных.
до того, как выполнение достигнет «основного». В -fvtable-verify = std вызывает эту структуру данных
для сборки после загрузки и инициализации разделяемых библиотек.
-fvtable-verify = preinit заставляет их быть построенными до того, как общие библиотеки будут
загружен и инициализирован.
Если этот параметр появляется в строке компилятора несколько раз с разными значениями
указано, «none» будет иметь наивысший приоритет перед «std» и «preinit»; 'preinit'
будет иметь приоритет над 'std'.
-fvtv-отладка
Вызывает отладочные версии функций времени выполнения для функции проверки vtable к
называться. Это предполагает -fvtable-verify = std or -fvtable-verify = preinit было
использовал. Этот флаг также заставит компилятор отслеживать, какие указатели vtable
он нашел для каждого класса и записал эту информацию в файл
"vtv_set_ptr_data.log" в каталоге файла дампа на компьютере пользователя.
Примечание. Эта функция ДОБАВЛЯЕТ данные в файл журнала. Если вам нужен свежий файл журнала,
обязательно удалите все существующие.
-fvtv-количество
Это флаг отладки. При использовании вместе с -fvtable-verify = std or
-fvtable-verify = preinit, это заставляет компилятор отслеживать общее количество
виртуальные вызовы, с которыми он столкнулся, и количество вставленных проверок. Это также
подсчитывает количество вызовов определенных функций библиотеки времени выполнения, которые он вставляет. Этот
информация для каждой единицы компиляции записывается в файл с именем
"vtv_count_data.log" в каталоге dump_file на компьютере пользователя. Это также
подсчитывает размер наборов указателей vtable для каждого класса и записывает эту информацию
в "vtv_class_set_sizes.log" в том же каталоге.
Примечание. Эта функция ДОБАВЛЯЕТ данные в файлы журнала. Чтобы получить свежие файлы журнала, убедитесь, что
удалить все существующие.
-fno-слабый
Не используйте слабую поддержку символов, даже если она предоставляется компоновщиком. По умолчанию G ++
использует слабые символы, если они доступны. Эта опция существует только для тестирования, и
не должны использоваться конечными пользователями; это приводит к неполноценному коду и не дает никаких преимуществ.
Эта опция может быть удалена в будущем выпуске G ++.
-nostdinc ++
Не ищите файлы заголовков в стандартных каталогах, характерных для C ++, но выполняйте
по-прежнему ищите в других стандартных каталогах. (Эта опция используется при построении
Библиотека C ++.)
Кроме того, эти параметры оптимизации, предупреждения и генерации кода имеют только значение.
для программ на C ++:
-Ваби (Только 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 ++ и другие компиляторы
"Б" выкладываю тождественно.
· Неправильная обработка хвостовой обивки для виртуальных баз. 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 объединения с членами типа long double передаются в память как
указано в psABI. Например:
союз U {
длинный двойной ld;
инт я;
};
"union U" всегда передается в памяти.
-Wctor-dtor-конфиденциальность (Только C ++ и Objective-C ++)
Предупреждать, когда класс кажется непригодным для использования, потому что все конструкторы или деструкторы в этом
class являются частными, и у него нет ни друзей, ни общедоступных статических функций-членов.
Также предупредите, если нет неприкосновенных методов, и есть хотя бы один закрытый член
функция, которая не является конструктором или деструктором.
-Wdelete-не виртуальный-dtor (Только C ++ и Objective-C ++)
Предупредить, когда удалять используется для уничтожения экземпляра класса, который имеет виртуальные функции
и не виртуальный деструктор. Удалять экземпляр производного класса небезопасно.
через указатель на базовый класс, если базовый класс не имеет виртуального
деструктор. Это предупреждение включено -Стена.
-Буквенный суффикс (Только C ++ и Objective-C ++)
Предупреждать, если за строковым или символьным литералом следует ud-суффикс, который не соответствует
начинаются с подчеркивания. В качестве соответствующего расширения GCC обрабатывает такие суффиксы как
отдельные токены предварительной обработки для обеспечения обратной совместимости с кодом
который использует макросы форматирования из " ". Например:
#define __STDC_FORMAT_MACROS
#включают
#включает в себя
int main () {
int64_t i64 = 123;
printf ("Мой int64:%" PRId64 "\ n", i64);
}
В этом случае «PRId64» рассматривается как отдельный токен предварительной обработки.
Это предупреждение включено по умолчанию.
-Украшивание (Только 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 ++ указан.
-Замена (Только C ++ и Objective-C ++)
Предупреждать, когда порядок инициализаторов членов, указанный в коде, не соответствует порядку
в котором они должны быть выполнены. Например:
структура А {
инт я;
интервал j;
A (): j (0), i (1) {}
};
Компилятор перестраивает инициализаторы членов для i и j соответствовать декларации
порядок членов с предупреждением об этом. Это предупреждение включено
-Стена.
-fext-числовые-литералы (Только C ++ и Objective-C ++)
Принимать суффиксы мнимых букв, букв с фиксированной точкой или машинно-определяемые числа как GNU
расширения. Когда этот параметр выключен, эти суффиксы обрабатываются как пользователь C ++ 11 -
определенные буквальные числовые суффиксы. По умолчанию это включено для всех диалектов до C ++ 11.
и все диалекты GNU: -std = c ++ 98, -std = GNU ++ 98, -std = GNU ++ 11, -std = GNU ++ 1y. Это
опция выключена по умолчанию для ISO C ++ 11 и более поздних версий (-std = c ++ 11...).
Следующие -W ... параметры не зависят от -Стена.
-Weffc ++ (Только C ++ и Objective-C ++)
Предупреждать о нарушениях следующих рекомендаций по стилю от Скотта Мейерса: Эффективный
C + + серия книг:
· Определите конструктор копирования и оператор присваивания для классов с динамически-
выделенная память.
· Предпочитайте инициализацию присваиванию в конструкторах.
· Сделайте так, чтобы оператор "operator =" возвращал ссылку на * this.
· Не пытайтесь вернуть ссылку, если вы должны вернуть объект.
· Различать префиксную и постфиксную формы операторов инкремента и декремента.
· Никогда не перегружайте "&&", "||" или ",".
Эта опция также включает -Wnon-виртуальный-dtor, который также является одним из эффективных C ++
рекомендации. Однако проверка расширена, чтобы предупредить об отсутствии виртуальных
деструктор в доступных неполиморфных базовых классах.
Выбирая эту опцию, имейте в виду, что заголовки стандартной библиотеки не подчиняются всем
этих руководящих принципов; использовать 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 ++ пытались сохранить неподписанность, но стандарт требует текущих
поведение.
Возможности Управление 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 диагностический Сообщения форматирование
Традиционно диагностические сообщения форматируются независимо от устройства вывода.
аспект (например, его ширина, ...). Вы можете использовать параметры, описанные ниже, для управления
алгоритм форматирования диагностических сообщений, например, сколько символов в строке, как часто
следует сообщить информацию о местонахождении источника. Обратите внимание, что некоторые языковые интерфейсы могут
не соблюдаю эти варианты.
-fmessage-length =n
Постарайтесь отформатировать сообщения об ошибках так, чтобы они умещались в строках примерно n символы. В
по умолчанию 72 символа для г ++ и 0 для остальных интерфейсов, поддерживаемых
GCC. Если n равен нулю, перенос строки не выполняется; каждое сообщение об ошибке появляется на
одна линия.
-fdiagnostics-show-location = один раз
Имеет смысл только в режиме переноса строк. Поручает репортеру диагностических сообщений:
передавать информацию о местонахождении источника консолидировать; то есть в случае, если сообщение слишком длинное, чтобы уместиться
на одной физической строке и должен быть обернут, исходное местоположение не будет отправлено
(как префикс) снова и снова, в последующих строках продолжения. Это
поведение по умолчанию.
-fdiagnostics-show-location = каждая строка
Имеет смысл только в режиме переноса строк. Поручает репортеру диагностических сообщений:
выдавать ту же информацию о местоположении источника (в виде префикса) для физических линий, которые приводят к
от процесса разбиения сообщения, которое слишком длинное, чтобы поместиться в одной строке.
-fdiagnostics-color [=КОГДА]
-fno-Diagnostics-цвет
Используйте цвет в диагностике. КОГДА is никогда, всегдаили автоматический, По умолчанию никогда if
GCC_COLORS переменная среды отсутствует в среде, и автоматический в противном случае.
автоматический означает использовать цвет только тогда, когда стандартная ошибка - это терминал. Формы
-fdiagnostics-цвет и -fno-Diagnostics-цвет псевдонимы для
-fdiagnostics-color = всегда и -fdiagnostics-color = никогда, Соответственно.
Цвета определяются переменной окружения. GCC_COLORS. Его значение - двоеточие.
разделенный список возможностей и подстроки Select Graphic Rendition (SGR). SGR
команды интерпретируются терминалом или эмулятором терминала. (См. Раздел в
документация вашего текстового терминала для допустимых значений и их значений как
атрибуты символов.) Эти значения подстроки являются целыми числами в десятичном представлении.
и могут быть объединены точкой с запятой. Общие значения для объединения включают 1 для
смелый, 4 для подчеркивания, 5 для моргания, 7 для обратного, 39 для цвета переднего плана по умолчанию, 30
в 37 для цветов переднего плана, 90 в 97 для 16-цветного режима цвета переднего плана, 38; 5; 0 в
38; 5; 255 для 88-цветного и 256-цветного режимов цвета переднего плана, 49 для фона по умолчанию
цвет, 40 в 47 для цветов фона, 100 в 107 для 16-цветного режима фоновых цветов,
и 48; 5; 0 в 48; 5; 255 для 88-цветного и 256-цветного режимов цвета фона.
По умолчанию GCC_COLORS is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01 в котором 01, 31 жирный
rouge, 01, 35 жирный пурпурный, 01, 36 жирный голубой, 01, 32 жирный зеленый и 01 жирный.
настройка GCC_COLORS к пустой строке отключает цвета. Поддерживаемые возможности:
следующим образом.
"error ="
Подстрока SGR для ошибки: маркеры.
"предупреждение ="
Подстрока SGR для предупреждения: маркеры.
"примечание ="
Подстрока SGR для заметки: маркеры.
"каретка ="
Подстрока SGR для строки каретки.
"locus ="
Подстрока SGR для информации о местоположении, файл: строка or файл: строка: столбец и так далее
"quote ="
Подстрока SGR для информации, напечатанной в кавычках.
-fno-Diagnostics-show-option
По умолчанию каждая отправляемая диагностика включает текст, указывающий параметр командной строки.
который непосредственно управляет диагностикой (если такая опция известна диагностическому
машины). Указание -fno-Diagnostics-show-option флаг подавляет это
поведение.
-fno-диагностика-шоу-каретка
По умолчанию каждое выдаваемое диагностическое сообщение включает исходную строку исходного кода и знак вставки '^'.
с указанием столбца. Эта опция подавляет эту информацию.
Возможности в Запрос 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-неизвестно-предупреждение
если не производится другая диагностика. Это позволяет использовать новые -Нет- кредита
со старыми компиляторами, но если что-то пойдет не так, компилятор предупреждает, что нераспознанный
вариант присутствует.
-педантичный
-педантический
Выдавать все предупреждения, требуемые строгими стандартами 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-подтяжки (только для C / ObjC) -Wnonnull -Wopenmp-simd -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формат
-Wformat =n
Проверьте вызовы 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).
-Wformat = 1
-Wформат
Опция -Wформат эквивалентна -Wformat = 1и -Wno-формат эквивалентна
-Wformat = 0. С -Wформат также проверяет аргументы нулевого формата для нескольких
функции, -Wформат также подразумевает -Wnonnull. Некоторые аспекты этого уровня формата
проверку можно отключить с помощью опций: -Wno-format-содержит-nul,
-Wno-format-extra-argsи -Wno-format-нулевой длины. -Wформат включен
-Стена.
-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 = 2
Включите -Wформат плюс дополнительные проверки формата. В настоящее время эквивалентно -Wформат
-Wformat-небуквенный -Wformat-безопасность -Wformat-y2k.
-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-y2k
If -Wформат указан, также предупредить о форматах "strftime", которые могут давать только
двузначный год.
-Wnonnull
Предупреждать о передаче нулевого указателя для аргументов, помеченных как требующие ненулевого значения
атрибутом функции "ненулевой".
-Wnonnull входит в -Стена и -Wформат. Его можно отключить с помощью -Wno-nonnull
опцию.
-Выиграть сам (Только C, C ++, Objective-C и Objective-C ++)
Предупреждать о неинициализированных переменных, которые инициализируются сами собой. Обратите внимание на это
опция может использоваться только с -Wнеинициализированный опцию.
Например, GCC предупреждает о неинициализации "i" только в следующем фрагменте.
когда -Выиграть сам было указано:
int f ()
{
int я = я;
вернуть я;
}
Это предупреждение включено -Стена в C ++.
-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 выдает предупреждение, когда указывается этот флаг.
Чтобы исключить предупреждение, добавьте явные фигурные скобки вокруг самого внутреннего оператора if, чтобы
«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 ++.
-Wno-return-local-адрес
Не предупреждать о возврате указателя (или в 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 = 3.
Уровень 1: Самый агрессивный, быстрый, наименее точный. Возможно полезно при более высоких уровнях
не предупреждаю но -fstrict-псевдоним по-прежнему нарушает код, так как в нем очень мало ложных
негативы. Однако у него много ложных срабатываний. Предупреждает обо всех преобразованиях указателя
между возможно несовместимыми типами, даже если никогда не разыменовывался. Бежит впереди
только конец.
Уровень 2: агрессивный, быстрый, не слишком точный. Может по-прежнему иметь много ложных срабатываний (не
столько же, сколько уровень 1), и несколько ложноотрицательных результатов (но, возможно, больше, чем уровень 1).
В отличие от уровня 1, он только предупреждает, когда адрес занят. Предупреждает о неполных типах.
Работает только в передней части.
Уровень 3 (по умолчанию для -Wstrict-псевдоним): Должно быть очень мало ложных срабатываний и мало
ложные негативы. Немного медленнее, чем на уровнях 1 или 2, когда включена оптимизация.
Позаботится об общем шаблоне каламбура + разыменования во внешнем интерфейсе:
"* (int *) & some_float". Если оптимизация включена, она также выполняется в серверной части, где
он имеет дело с несколькими случаями операторов, используя чувствительную к потоку информацию о точках.
Предупреждает только при разыменовании преобразованного указателя. Не предупреждает о неполном
типы.
-Wstrict-переполнение
-Wstrict-overflow =n
Эта опция активна только когда -fstrict-переполнение активен. Предупреждает о случаях
где компилятор оптимизирует на основе предположения, что подписанное переполнение не
происходить. Обратите внимание, что он не предупреждает обо всех случаях, когда код может быть переполнен: он
предупреждает только о тех случаях, когда компилятор реализует некоторую оптимизацию. Таким образом, это
предупреждение зависит от уровня оптимизации.
Оптимизация, предполагающая, что подписанное переполнение не происходит, совершенно безопасна, если
значения задействованных переменных таковы, что переполнение никогда не приводит к
происходить. Поэтому это предупреждение может легко дать ложное срабатывание: предупреждение о коде.
на самом деле это не проблема. Чтобы помочь сосредоточиться на важных вопросах, несколько предупреждений
уровни определены. Предупреждения об использовании неопределенного подписанного переполнения не выдаются.
при оценке количества итераций цикла, в частности, при определении
будет ли цикл выполняться вообще.
-Wstrict-overflow = 1
Предупреждайте о случаях, которые одновременно сомнительны и которых легко избежать. Например, с
-fstrict-переполнение, компилятор упрощает "x + 1> x" до 1. Этот уровень
-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 и
выше. Более высокие уровни оптимизации повышают точность анализа.
-Wsuggest-attribute = формат
-Wmissing-формат-атрибут
Предупреждать об указателях функций, которые могут быть кандидатами на атрибуты «форматирования».
Обратите внимание, что это только возможные кандидаты, а не абсолютные. GCC предполагает, что
указатели на функции с атрибутами формата, которые используются при присваивании,
операторы инициализации, передачи параметров или возврата должны иметь соответствующие
Атрибут "формат" в результирующем типе. Т.е. левая часть
присвоение или инициализация, тип переменной параметра или возвращаемый результат
тип содержащей функции, соответственно, также должен иметь атрибут "формат"
чтобы избежать предупреждения.
GCC также предупреждает об определениях функций, которые могут быть кандидатами на «формат».
атрибуты. Опять же, это только возможные кандидаты. GCC предполагает, что "формат"
атрибуты могут подходить для любой функции, которая вызывает такую функцию, как
"vprintf" или "vscanf", но это может быть не всегда так, и некоторые функции
для каких атрибутов "формат" подходят, может не быть обнаружено.
-Боевые границы
Эта опция активна только когда -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 ++ компилятор предупреждает, если локальная переменная затеняет явный
typedef, но не если он затеняет структуру / класс / перечисление.
-Больше-чем =только
Предупреждать всякий раз, когда объект больше, чем только байтов определено.
-Wframe-больше-чем =только
Предупреждать, если размер функционального фрейма больше, чем только байтов. Расчет выполнен
определение размера кадра стека является приблизительным и не консервативным. Настоящий
требования могут быть несколько больше, чем только даже если вы не получите предупреждения. В
кроме того, любое пространство, выделенное с помощью "alloca", массивов переменной длины или связанных
конструкции не включаются компилятором при определении того, следует ли выдавать
предупреждение.
-Wno-free-nonheap-объект
Не предупреждать при попытке освободить объект, который не был размещен в куче.
-Wstack-usage =только
Предупреждать, если использование стека функцией может быть больше, чем только байтов. Расчет
сделано для определения консервативности использования стека. Любое пространство, выделенное через "alloca",
массивы переменной длины или связанные конструкции включаются компилятором, когда
определение того, выдавать ли предупреждение.
Сообщение соответствует выводу -fstack-использование.
· Если использование стека полностью статично, но превышает указанное количество, оно:
предупреждение: использование стека составляет 1120 байт
· Если использование стека (частично) динамическое, но ограниченное, оно:
предупреждение: использование стека может составлять 1648 байт
· Если использование стека (частично) динамическое и неограниченное, оно:
предупреждение: использование стека может быть неограниченным
-Wunsafe-loop-оптимизации
Предупредить, если цикл не может быть оптимизирован, потому что компилятор не может ничего предположить на
границы индексов цикла. С участием -funsafe-loop-оптимизации предупредить, если компилятор
делает такие предположения.
-Wno-pedantic-ms-формат (Только цели MinGW)
При использовании в сочетании с -Wформат и -педантический без расширений GNU это
опция отключает предупреждения о спецификаторах ширины формата "printf" / "scanf", отличных от ISO
«I32», «I64» и «I» используются в целях Windows, которые зависят от среды выполнения MS.
-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 [длина]" так что копирование
адрес единицы в указателе «char *», отличном от «const», выдает предупреждение. Эти
предупреждения помогают найти во время компиляции код, который может попытаться записать в строку
константа, но только если вы очень осторожно использовали "const" в объявлениях.
и прототипы. В остальном это просто неприятность. Вот почему мы не сделали -Стена
запросить эти предупреждения.
При компиляции C ++ предупредите об устаревшем преобразовании строковых литералов в "char
* ". Это предупреждение включено по умолчанию для программ на C ++.
-Wразбит
Предупреждать о переменных, которые могут быть изменены лонгджмп or вилка. Это предупреждение также
включен -Векстра.
-W условно поддерживается (Только C ++ и Objective-C ++)
Предупреждать об условно поддерживаемых конструкциях (C ++ 11 [intro.defs]).
-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-конверсия is
явно включен.
-Wno-преобразование-нуль (Только C ++ и Objective-C ++)
Не предупреждать о преобразованиях между типами "NULL" и типами, не являющимися указателями. -Wconversion-нуль is
по умолчанию включен.
-Wzero-as-null-указатель-константа (Только C ++ и Objective-C ++)
Предупреждать, когда в качестве константы нулевого указателя используется литерал «0». Это может быть полезно
облегчить преобразование в "nullptr" в C ++ 11.
-Среда-время
Предупреждать, когда встречаются макросы «__TIME__», «__DATE__» или «__TIMESTAMP__», поскольку они
может предотвратить побитно-идентичные воспроизводимые компиляции.
-W удалить-неполный (Только C ++ и Objective-C ++)
Предупреждать при удалении указателя на неполный тип, что может привести к неопределенному поведению в
время выполнения. Это предупреждение включено по умолчанию.
-Бесполезный-литой (Только C ++ и Objective-C ++)
Предупреждать, когда выражение приводится к собственному типу.
-Пустое тело
Предупредить, если в 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конверсия.
-Wfloat-конверсия
Предупреждать о неявных преобразованиях, снижающих точность реального значения. Этот
включает преобразование действительного числа в целое число и преобразования действительного числа более высокой точности в более низкое
точность реальных значений. Эта опция также включена -Wконверсия.
-Wsizeof-указатель-доступ к памяти
Предупреждать о параметрах подозрительной длины для определенных строковых и встроенных функций памяти
если в аргументе используется "sizeof". Это предупреждение предупреждает, например, о "memset (ptr, 0, sizeof
(ptr)); "если" ptr "не массив, а указатель и предлагает возможное исправление, или
о "memcpy (& foo, ptr, sizeof (& foo));". Это предупреждение включено -Стена.
-Wmemset-транспонированные-аргументы
Предупреждать о подозрительных вызовах встроенной функции "memset", если вторым аргументом является
не ноль, а третий аргумент равен нулю. Это предупреждает, например, @ о "memset (buf, sizeof
buf, 0) », где, скорее всего, имелось в виду« memset (buf, 0, sizeof buf) ».
диагностика выдается только в том случае, если третий аргумент буквально равен нулю, если это какой-то
выражение, свернутое до нуля, или, например, приведение нуля к какому-либо типу и т. д., это далеко
менее вероятно, что пользователь по ошибке обменялся аргументами, и предупреждение не
испускается. Это предупреждение включено -Стена.
-адрес
Предупреждать о подозрительном использовании адресов памяти. К ним относятся использование адреса
функция в условном выражении, например "void func (void); if (func)" и
сравнения с адресом памяти строкового литерала, например "if (x ==" abc ")".
Такое использование обычно указывает на ошибку программиста: адрес функции всегда
оценивается как истина, поэтому их использование в условном выражении обычно указывает на то, что программист
забыл круглые скобки в вызове функции; и сравнения со строковыми литералами
приводят к неопределенному поведению и не переносятся в C, поэтому обычно указывают
что программист намеревался использовать "strcmp". Это предупреждение включено -Стена.
-Wлогическая операция
Предупреждать о подозрительном использовании логических операторов в выражениях. Это включает использование
логические операторы в контекстах, где, вероятно, ожидается побитовый оператор.
-Ваггрегат-возврат
Предупреждать, если определены или вызваны какие-либо функции, возвращающие структуры или объединения. (В
языков, где вы можете вернуть массив, это также вызывает предупреждение.)
-Wno-агрессивные-циклические оптимизации
Предупредить, если в цикле с постоянным количеством итераций компилятор обнаружит undefined
поведение в некотором операторе во время одной или нескольких итераций.
-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)
Предупреждать, если глобальная функция определена без предварительного объявления прототипа. Этот
предупреждение выдается, даже если само определение предоставляет прототип. Используйте эту опцию
для обнаружения глобальных функций, у которых нет соответствующего объявления прототипа в
заголовочный файл. Этот параметр недопустим для C ++, потому что все объявления функций
предоставить прототипы, и в объявлении несоответствия будет объявлена перегрузка, а не
противоречит более раннему заявлению. Использовать -Wmissing-декларации для обнаружения пропавших без вести
объявления в C ++.
-Wmissing-декларации
Предупреждать, если глобальная функция определена без предварительного объявления. Сделай так, даже если
само определение представляет собой прототип. Используйте эту опцию для определения глобального
функции, которые не объявлены в файлах заголовков. В 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-отсутствующие-поля-инициализаторы.
-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-переполнение
Не предупреждать о переполнении во время компиляции в постоянных выражениях.
-Wopenmp-simd
Предупреждать, если модель стоимости векторизатора переопределяет директиву OpenMP или Cilk Plus simd
устанавливается пользователем. В -fsimd-cost-model = без ограничений можно использовать для ослабления модели затрат.
-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".
-Wno-наследуемый-вариативный-ctor
Подавить предупреждения об использовании конструкторов-наследников C ++ 11, когда базовый класс
унаследованный от имеет вариативный конструктор C; предупреждение включено по умолчанию, потому что
многоточие не передается по наследству.
-Винлайн
Предупреждать, если функция, объявленная как встроенная, не может быть встроена. Даже с этим
опция, компилятор не предупреждает о сбоях встроенных функций, объявленных в
системные заголовки.
Компилятор использует различные эвристики, чтобы определить, нужно ли встраивать
функция. Например, компилятор учитывает размер выполняемой функции.
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-вариационные-макросы.
-Ввараргс
Предупреждать о сомнительном использовании макросов, используемых для обработки переменных аргументов, таких как
va_start. Это по умолчанию. Чтобы подавить предупреждающие сообщения, используйте -Wno-варарги.
-Wvector-операция-производительность
Предупреждать, если векторные операции не реализованы через SIMD-возможности архитектуры.
В основном полезно для настройки производительности. Возможна реализация векторной операции
"кусочно", что означает, что скалярная операция выполняется для каждого вектора
элемент; "параллельно", что означает, что векторная операция реализована с использованием
скаляры более широкого типа, которые обычно более эффективны по производительности; и "как сингл
скаляр », что означает, что вектор соответствует скалярному типу.
-Wno-виртуальное-переместить-назначить
Подавить предупреждения о наследовании от виртуальной базы нетривиальным ходом C ++ 11
оператор присваивания. Это опасно, потому что если виртуальная база доступна по
более одного пути, он будет перемещен несколько раз, что может означать, что оба объекта заканчиваются
вверх в перемещенном состоянии. Если оператор присваивания перемещения написан так, чтобы избежать
при перемещении от перемещаемого объекта это предупреждение можно отключить.
-Ввла
Предупреждать, если в коде используется массив переменной длины. -Вно-вла предотвращает -педантичный
предупреждение о массиве переменной длины.
-Wvolatile-регистр-вар
Предупреждать, если регистровая переменная объявлена изменчивой. Модификатор volatile не
запретить все оптимизации, которые могут исключить чтение и / или запись для регистрации
переменные. Это предупреждение включено -Стена.
-Wdisabled-оптимизация
Предупреждать, если запрошенный проход оптимизации отключен. Это предупреждение обычно не
указать, что с вашим кодом что-то не так; это просто указывает на то, что GCC
оптимизаторы не могут эффективно обрабатывать код. Часто проблема в том, что ваш
код слишком большой или слишком сложный; GCC отказывается оптимизировать программы, когда оптимизация
само по себе, вероятно, займет чрезмерное количество времени.
-Wpointer-знак (Только C и Objective-C)
Предупреждать о передаче или присвоении аргументов указателя с другой подписью. Этот
опция поддерживается только для C и Objective-C. Это подразумевается -Стена и
-педантичный, который можно отключить с помощью -Wno-указатель-знак.
-Wstack-протектор
Эта опция активна только когда -fstack-протектор активен. Предупреждает о функциях
которые не защищены от разрушения стопки.
-Woverlength-струны
Предупреждать о строковых константах, длина которых превышает "минимальную максимальную" длину.
указано в стандарте C. Современные компиляторы обычно допускают строковые константы, которые
намного длиннее стандартного минимального лимита, но очень переносимые программы должны
избегайте использования более длинных струн.
Лимит применяется после конкатенация строковых констант и не учитывает конечные
NUL. В C90 ограничение составляло 509 символов; в C99 он был увеличен до 4095. C ++ 98 делает
не указывать нормативный минимальный максимум, поэтому мы не диагностируем слишком длинные строки в
C ++.
Этот вариант подразумевается -педантичный, и может быть отключен с помощью
-Wno-длинные строки.
-Wunsuffix-float-константы (Только C и Objective-C)
Выдавать предупреждение для любой плавающей константы, не имеющей суффикса. При использовании
вместе с -Wsystem-заголовки он предупреждает о таких константах в файлах системных заголовков.
Это может быть полезно при подготовке кода для использования с прагмой "FLOAT_CONST_DECIMAL64".
от десятичного расширения с плавающей запятой до C99.
Возможности для Отладка ВАШЕ Программа or НКУ
GCC имеет различные специальные параметры, которые используются для отладки вашей программы или GCC:
-g Создавать отладочную информацию в собственном формате операционной системы (stabs, COFF,
XCOFF или DWARF 2). GDB может работать с этой отладочной информацией.
В большинстве систем, использующих формат stabs, -g позволяет использовать дополнительную отладочную информацию
что может использовать только GDB; эта дополнительная информация улучшает работу отладки в GDB, но
вероятно, вызывает сбой других отладчиков или отказ от чтения программы. Если хотите
определите, нужно ли генерировать дополнительную информацию, используйте -gstabs +, -gstabs,
-gxcoff +, -gxcoffили -gvms (Смотри ниже).
GCC позволяет использовать -g -O. Ярлыки, используемые оптимизированным кодом, могут
иногда дают удивительные результаты: некоторые объявленные вами переменные могут не существовать в
все; поток управления может ненадолго переместиться туда, где вы этого не ожидали; некоторые заявления могут
не выполняться, потому что они вычисляют постоянные результаты или их значения уже равны
рука; некоторые операторы могут выполняться в разных местах, потому что они были перемещены
петель.
Тем не менее, отладка оптимизированного вывода оказывается возможной. Это делает разумным
использовать оптимизатор для программ, в которых могут быть ошибки.
Следующие параметры полезны, когда GCC создается с возможностью дополнительных
чем один формат отладки.
-gsplit-карлик
Разделите как можно больше отладочной информации о карликах в отдельный выходной файл
с расширением .dwo. Эта опция позволяет системе сборки избегать связывания файлов
с отладочной информацией. Чтобы быть полезным, этот параметр требует отладчика, способного
чтение файлов .dwo.
-ggdb
Создавать отладочную информацию для использования GDB. Это значит использовать наиболее выразительные
доступный формат (DWARF 2, stabs или собственный формат, если ни один из них не
поддерживается), включая расширения GDB, если это возможно.
-gpubnames
Создайте карликовые разделы .debug_pubnames и .debug_pubtypes.
-ggnu-пабназвания
Создайте разделы .debug_pubnames и .debug_pubtypes в формате, подходящем для
преобразование в индекс ГБД. Эта опция полезна только с компоновщиком, который может
создать индекс GDB версии 7.
-gstabs
Создавать отладочную информацию в формате stabs (если он поддерживается), без GDB
расширения. Это формат, используемый DBX в большинстве систем BSD. На MIPS, Alpha и
В системах System V Release 4 этот параметр создает выходные данные отладки stabs, которые не
понимается DBX или SDB. В системах System V Release 4 для этой опции требуется GNU
ассемблер.
-feliminate-неиспользуемые-символы-отладки
Создавать отладочную информацию в формате stabs (если он поддерживается) только для символов
которые действительно используются.
-femit-класс-отладка-всегда
Вместо того, чтобы выдавать отладочную информацию для класса C ++ только в одном объектном файле,
испустить его во всех объектных файлах с помощью класса. Эту опцию следует использовать только с
отладчики, которые не могут обработать способ, которым GCC обычно передает отладочную информацию
для классов, потому что использование этой опции увеличивает размер отладочной информации на
аж в два раза.
-fdebug-типы-секция
При использовании DWARF версии 4 или выше, типы DIE могут быть помещены в свои собственные
".debug_types" вместо того, чтобы делать их частью ".debug_info". Это
более эффективно помещать их в отдельные разделы comdat, поскольку компоновщик может
удалить дубликаты. Но не все потребители DWARF пока поддерживают разделы ".debug_types".
а на некоторых объектах ".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 (если он поддерживается). Значение
версия может быть 2, 3 или 4; версия по умолчанию для большинства целей - 4.
Обратите внимание, что в 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
Создавать отладочную информацию в формате отладки Alpha / VMS (если он поддерживается). Этот
формат, используемый DEBUG в системах Alpha / VMS.
-gуровень
-ggdbуровень
-gstabsуровень
-gcoffуровень
-gxcoffуровень
-gvmsуровень
Запросите отладочную информацию, а также используйте уровень указать сколько информации. В
уровень по умолчанию - 2.
Уровень 0 не дает никакой отладочной информации. Таким образом, -g0 отрицает -g.
Уровень 1 дает минимальную информацию, достаточную для прослеживания некоторых частей
программа, которую вы не планируете отлаживать. Сюда входят описания функций и
внешние переменные и таблицы номеров строк, но нет информации о локальных переменных.
Уровень 3 включает дополнительную информацию, такую как все определения макросов, присутствующие в
программа. Некоторые отладчики поддерживают расширение макроса при использовании -g3.
-гдварф-2 не принимает конкатенированный уровень отладки, потому что GCC использовался для поддержки
вариант -гном это означало генерировать отладочную информацию в версии 1 DWARF
формат (который сильно отличается от версии 2), и это было бы слишком запутанно.
Этот формат отладки давно устарел, но сейчас его нельзя изменить. Вместо этого используйте
Вдобавок -gуровень возможность изменить уровень отладки для DWARF.
-переключить
Отключите генерацию отладочной информации, если игнорирование этой опции генерирует ее, или включите ее.
на уровне 2 в противном случае. Положение этого аргумента в командной строке не
иметь значение; он вступает в силу после обработки всех остальных параметров, и только
один раз, сколько бы раз он ни давался. Это в основном предназначено для использования с
-fcompare-отладка.
-fsanitize = адрес
Включите AddressSanitizer, быстрый детектор ошибок памяти. Инструкции по доступу к памяти
будут оснащены инструментами для обнаружения ошибок вне пределов и использования после освобождения. Видеть
<http://code.google.com/p/address-sanitizer/> подробнее. Поведение во время выполнения
можно повлиять с помощью ASAN_OPTIONS переменная окружения; видеть
<https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags> для списка
поддерживаемые варианты.
-fsanitize = адрес-ядра
Включите AddressSanitizer для ядра Linux. Видеть
<http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel> больше
-fsanitize = поток
Включите ThreadSanitizer, быстрый детектор гонки данных. Инструкции по доступу к памяти будут
инструмент для обнаружения ошибок гонки данных. Видеть
<http://code.google.com/p/thread-sanitizer/> подробнее. Поведение во время выполнения
можно повлиять с помощью TSAN_OPTIONS переменная окружения; видеть
<https://code.google.com/p/thread-sanitizer/wiki/Flags> для списка поддерживаемых
настройки.
-fsanitize = утечка
Включите LeakSanitizer, детектор утечек памяти. Эта опция актуальна только для связывания
исполняемые файлы, и если ни то, ни другое -fsanitize = адрес ни -fsanitize = поток используется. В этом
если он свяжет исполняемый файл с библиотекой, которая переопределяет "malloc" и другие
функции распределителя. Видеть
<https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer> подробнее.
На поведение во время выполнения можно влиять с помощью LSAN_OPTIONS переменная среды.
-fsanitize = undefined
Включите UndefinedBehaviorSanitizer, быстрый детектор неопределенного поведения. Различный
вычисления будут оснащены инструментами для обнаружения неопределенного поведения во время выполнения. Текущий
подопции:
-fsanitize = сдвиг
Эта опция позволяет проверить, что результат операции смены
неопределенный. Обратите внимание: то, что именно считается неопределенным, немного отличается
между C и C ++, а также между ISO C90 и C99 и т. д.
-fsanitize = целое деление на ноль
Обнаружение целочисленного деления на ноль, а также деления "INT_MIN / -1".
-fsanitize = недоступен
С этой опцией компилятор превратит вызов «__builtin_unreachable» в
вместо этого вызовите диагностическое сообщение. При достижении вызова "__builtin_unreachable"
поведение не определено.
-fsanitize = vla-граница
Этот параметр указывает компилятору проверить, что размер переменной длины
массив положительный. Эта опция не действует в -std = c ++ 1y режим, как
стандарт требует, чтобы вместо этого было выброшено исключение.
-fsanitize = нуль
Эта опция включает проверку указателя. В частности, приложение, построенное на
эта опция будет выдавать сообщение об ошибке при попытке разыменовать
Указатель NULL, или если ссылка (возможно, ссылка rvalue) привязана к NULL
указатель.
-fsanitize = возврат
Эта опция включает проверку оператора возврата. Программы, построенные с этой опцией
при включении будет выдавать сообщение об ошибке, когда конец непустой функции
достигнуто без фактического возврата значения. Эта опция работает только в C ++.
-fsanitize = целочисленное переполнение со знаком
Эта опция включает проверку переполнения целого числа со знаком. Проверяем, что результат
«+», «*», а также унарные и двоичные символы «-» не переполняются в подписанном
арифметика. Обратите внимание, что необходимо учитывать правила целочисленного продвижения. То есть,
следующее не является переполнением:
знаковый символ a = SCHAR_MAX;
а ++;
В то время как -ftrapv вызывает выдачу ловушек для подписанных переполнений, -fsanitize = undefined
выдает диагностическое сообщение. В настоящее время это работает только для семейства языков C.
-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
Сжимайте отладочную информацию DWARF 2, удаляя дублирующуюся информацию о
каждый символ. Эта опция имеет смысл только при генерации отладки DWARF 2.
информация с -гдварф-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-отчет
Заставляет компилятор печатать некоторую статистику о постоянном выделении памяти, когда он
отделки.
-fmem-отчет-wpa
Заставляет компилятор распечатать некоторую статистику о постоянном выделении памяти для WPA
только фаза.
-fpre-ipa-mem-отчет
-fpost-ipa-mem-отчет
Заставляет компилятор распечатать некоторую статистику о постоянном выделении памяти до или
после межпроцедурной оптимизации.
-fprofile-отчет
Заставляет компилятор распечатать некоторую статистику о согласованности (оценочного) профиля
и эффект индивидуальных пасов.
-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=список диапазонов
Это набор параметров, которые используются для явного отключения / включения оптимизации.
проходит. Эти параметры предназначены для использования при отладке GCC. Пользователи компилятора должны
вместо этого используйте обычные параметры для включения / выключения проходов.
-fdisable-ipa-pass
Отключить проход IPA pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1.
-fdisable-rtl-pass
-fdisable-rtl-pass=список диапазонов
Отключить проход RTL pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1. список диапазонов это список разделенных запятыми
диапазоны функций или имена ассемблера. Каждый диапазон представляет собой пару чисел, разделенных знаком
двоеточие. Диапазон включает оба конца. Если диапазон тривиален, число
пару можно упростить как одно число. Если узел графа вызовов функции
UID попадает в один из указанных диапазонов, pass отключен для этого
функция. UID отображается в заголовке функции файла дампа, а проход
имена могут быть сброшены с помощью опции -fdump-проходит.
-fdisable-дерево-pass
-fdisable-дерево-pass=список диапазонов
Отключить проход дерева pass. Посмотреть -fdisable-rtl для описания опции
аргументы.
-fenable-ipa-pass
Включить проход IPA pass. pass это имя прохода. Если тот же проход статически
вызывается в компиляторе несколько раз, имя прохода должно быть добавлено
порядковый номер, начиная с 1.
-fenable-RTL-pass
-fenable-RTL-pass=список диапазонов
Включить проход RTL pass. Посмотреть -fdisable-rtl для описания аргумента опции и
примеры.
-фенабл-дерево-pass
-фенабл-дерево-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
-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-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 в вывод ассемблера в качестве комментария перед каждой инструкцией. Также
включается -дп аннотаций.
-дх Просто сгенерируйте 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-дерево-переключатель-кредита
-fdump-дерево-переключатель-кредита=имя файла
Управляйте выгрузкой на различных этапах обработки дерева промежуточных языков, чтобы
файл. Имя файла создается путем добавления суффикса, зависящего от переключателя, к
имя исходного файла, и файл создается в том же каталоге, что и выходной файл. В
случай =имя файла вариант, дамп выводится в данном файле вместо автоматического
именованные файлы дампа. Если -кредита форма используется, кредита это список - отделенный
параметры, управляющие деталями дампа. Не все варианты применимы ко всем
свалки; те, которые не имеют смысла, игнорируются. Доступны следующие варианты
адрес
Выведите адрес каждого узла. Обычно это не имеет смысла, так как он меняется
в соответствии с окружающей средой и исходным файлом. Его основное назначение - привязать
файл дампа со средой отладки.
asmname
Если для данного объявления установлено "DECL_ASSEMBLER_NAME", используйте это в дампе.
вместо "DECL_NAME". Его основное использование - простота использования, работая в обратном направлении от
искореженные имена в сборочном файле.
стройное
При сбросе промежуточных представлений переднего плана запретите сброс элементов
область действия или тело функции просто потому, что эта область была достигнута. Только
сбрасывать такие элементы, когда они напрямую доступны другим путем.
При выгрузке деревьев с красивыми рисунками этот параметр запрещает сброс трупов деревьев.
управляющие структуры.
При сбросе RTL распечатайте RTL в тонкой (сжатой) форме вместо значения по умолчанию.
LISP-подобное представление.
сырье Распечатайте необработанное представление дерева. По умолчанию деревья красиво распечатываются в
C-подобное представление.
детали
Включите более подробные дампы (не соблюдаются всеми опциями дампа). Также включают
информация из проходов оптимизации.
Статистика
Разрешить выгрузку различной статистики про проход (не соблюдается каждым дампом
опция).
Блоки
Включить отображение основных границ блоков (отключено в необработанных дампах).
график
Для каждого из остальных указанных файлов дампа (-fdump-rtl-pass), дамп
представление графа потока управления, подходящего для просмотра с помощью GraphViz, чтобы
файл.passid.pass.dot. Каждая функция в файле красиво напечатана в виде подграфа,
так что GraphViz может отображать их все на одном графике.
Эта опция в настоящее время работает только для дампов RTL, а RTL всегда выгружается в
стройная форма.
голос
Включите отображение виртуальных операндов для каждого оператора.
Ленено
Включите отображение номеров строк для операторов.
UID Включите отображение уникального идентификатора («DECL_UID») для каждой переменной.
подробный
Включите отображение дампа дерева для каждого оператора.
eh Включите отображение номера региона EH, в котором находится каждый оператор.
Scev
Включите отображение деталей анализа скалярной эволюции.
оптимизированный
Включить отображение информации об оптимизации (доступно только в определенных проходах).
пропущенный
Включить отображение пропущенной информации об оптимизации (доступно только в определенных проходах).
ноты
Включите другую подробную информацию по оптимизации (доступно только в определенных проходах).
=имя файла
Вместо автоматически именованного файла дампа вывод в файл с заданным именем. Файл
имена стандартный вывод и STDERR обрабатываются специально и считаются уже открытыми
стандартные потоки. Например,
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks = foo.dump
-fdump-tree-pre = стандартный файл file.c
выводит дамп векторизатора в Фу.дамп, а предварительный дамп выводится на STDERR.
Если для одного и того же прохода заданы два конфликтующих имени файла дампа, то последнее
вариант отменяет предыдущий.
ВСЕ Включите все параметры, кроме сырье, стройное, подробный и Ленено.
опталл
Включите все параметры оптимизации, т. Е. оптимизированный, пропущенныйи в своих размышлениях.
Возможны следующие дампы деревьев:
оригинал
Дамп перед любой оптимизацией на основе дерева, чтобы файл.оригинал.
оптимизированный
Дамп после оптимизации на основе дерева, чтобы файл.оптимизированный.
щупальца
Дамп каждой функции до и после перехода упрощения в файл. Файл
имя создается путем добавления .гимпл к имени исходного файла.
CFG Выгрузите график потока управления каждой функции в файл. Имя файла сделано
добавление .cfg к имени исходного файла.
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). Имя файла сделано
добавление .врп к имени исходного файла.
ВСЕ Включите все доступные дампы дерева с помощью флагов, указанных в этой опции.
-fopt-информация
-fopt-информация-кредита
-fopt-информация-кредита=имя файла
Управляет дампами оптимизации из различных этапов оптимизации. Если -кредита форма
используемый, кредита это список - разделенные параметры для выбора деталей дампа и
оптимизации. Если кредита не указан, по умолчанию оптимизированный для деталей и
опталл для групп оптимизации. Если имя файла не указан, по умолчанию
STDERR. Обратите внимание, что вывод имя файла будет перезаписан в случае нескольких
единицы перевода. Если желателен комбинированный вывод из нескольких единиц перевода,
STDERR следует использовать вместо
Варианты можно разделить на две группы: 1) варианты, описывающие многословность
dump и 2) параметры, описывающие, какие оптимизации следует включить. Варианты
из обеих групп можно свободно смешивать, так как они не пересекаются. Однако в случае
При любых конфликтах последние параметры имеют приоритет над ранее заданными параметрами в командной строке.
Хотя допустимы несколько параметров -fopt-info, только один из них может иметь = имя файла.
Если указаны другие имена файлов, все, кроме первого, игнорируются.
Детализация дампа имеет следующие параметры
оптимизированный
Распечатайте информацию, когда оптимизация будет успешно применена. Это до перевала
чтобы решить, какая информация актуальна. Например, векторизатор передает печать
исходное местоположение петель, которые были успешно векторизованы.
пропущенный
Распечатать информацию о пропущенных оптимизациях. Индивидуальные проходы контроля, которые
информация для включения в вывод. Например,
gcc -O2 -ftree-vectorize -fopt-info-vec-пропущено
распечатает информацию об упущенных возможностях оптимизации из векторизации
переходит на stderr.
в своих размышлениях
Печатать подробную информацию об оптимизации, например, об определенных преобразованиях,
более подробные сообщения о решениях и т. д.
ВСЕ Распечатайте подробную информацию по оптимизации. Это включает оптимизированный, пропущенныйи
в своих размышлениях.
Второй набор опций описывает группу оптимизаций и может включать одну или
подробнее о следующем.
ипа Включите дампы из всех межпроцедурных оптимизаций.
поиска
Включите дампы из всех оптимизаций цикла.
встроенный
Включите дампы из всех оптимизаций встраивания.
Ith Включите дампы из всех оптимизаций векторизации.
опталл
Включите дампы из всех оптимизаций. Это надмножество групп оптимизации
вышеперечисленное.
Например,
gcc -O3 -fopt-info-missed = пропущено. все
выводит отчет о пропущенной оптимизации из всех проходов в пропущено. все.
В качестве другого примера,
gcc -O3 -fopt-info-inline-optimized-missed = inline.txt
выведет информацию о пропущенных оптимизациях, а также об оптимизированных местоположениях из
все встраивание переходит в встроенный.txt.
Если же линия индикатора имя файла предоставляется, то дампы всех применимых оптимизаций
объединены в имя файла. В противном случае дамп выводится на STDERR. Если кредита
опущено, по умолчанию универсальный, что означает дамп всей доступной оптимизации
информация со всех проездных. В следующем примере вся информация по оптимизации выводится на
в STDERR.
gcc -O3 -fopt-информация
Обратите внимание, что -fopt-info-vec-пропущено ведет себя так же, как -fopt-информация-пропущенный-vec.
В качестве другого примера рассмотрим
gcc -fopt-info-vec-missed = vec.miss -fopt-info-loop-optimized = loop.opt
Здесь два имени выходных файлов век.мисс и цикл.опт находятся в конфликте, так как только один
выходной файл разрешен. В этом случае действует только первый вариант, а
последующие параметры игнорируются. Таким образом, только век.мисс производится который содержит
дампы из векторизатора об упущенных возможностях.
-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 строится.)
-fno-исключить неиспользуемые-отладочные типы
Обычно при создании вывода DWARF 2 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-slsr
-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девиртуализовать -fdevirtualize-спекулятивно
-файловые-оптимизации -fgcse -fgcse-lm -fhoist-смежные-нагрузки
-finline-small-функции -findirect-встраивание -фипа-сра
-fisolate-ошибочные-пути-разыменование -foptimize-sibling-вызовы -fpartial-встраивание
-fглазок2 -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-loop-векторизация, -ftree-slp-векторизация, -fvect-стоимость-модель, -ftree-частичный-pre и
-fipa-cp-клон настройки.
-O0 Сократите время компиляции и сделайте отладку ожидаемой. Это
по умолчанию.
-Операционные системы Оптимизируйте по размеру. -Операционные системы позволяет всем -O2 оптимизации, которые обычно не увеличиваются
размер кода. Он также выполняет дальнейшую оптимизацию, предназначенную для уменьшения размера кода.
-Операционные системы отключает следующие флаги оптимизации: -falign-функции -falign-прыжки
-falign-петли -falign-label -freorder-блоки -freorder-блоки-и-раздел
-fprefetch-loop-массивы
-Быстро
Не соблюдайте строгие стандарты. -Быстро позволяет всем -O3 оптимизации. Это также
обеспечивает оптимизацию, которая не подходит для всех программ, соответствующих стандарту. Это
включается -ffast-математика и специфичный для Fortran -fno-защита паренс и -fstack-массивы.
-Ог Оптимизируйте отладку. -Ог позволяет оптимизации, которые не мешают
отладка. Это должен быть уровень оптимизации для стандартного редактирования -
цикл компиляции-отладки, предлагающий разумный уровень оптимизации при сохранении
быстрая компиляция и хороший опыт отладки.
Если вы используете несколько -O варианты, с номерами уровней или без них, последняя такая опция
тот, который эффективен.
Опции формы -fфлажок указать машинно-независимые флаги. Большинство флагов имеют оба
положительные и отрицательные формы; отрицательная форма -ффу is -фно-фу. В таблице ниже
В списке указана только одна из форм - та, которую вы обычно используете. Вы можете выяснить другое
форма путем удаления нет- или добавив его.
Следующие параметры управляют определенными оптимизациями. Они либо активируются -O
варианты или связаны с уже имеющимися. Вы можете использовать следующие флаги в редких случаях
случаи, когда желательна «тонкая настройка» оптимизаций.
-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-битных GNU / 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.
-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 включен, глобальное исключение общего подвыражения пытается переместить
грузы, которые убивают только магазины в себя. Это позволяет создать цикл, содержащий
последовательность загрузки / сохранения должна быть изменена на загрузку вне цикла и копирование / сохранение в пределах
петля.
Включено по умолчанию, когда -fgcse включен.
-fgcse-см
После появления -fgcse-см включен, проход движения магазина запускается после глобального общего
исключение подвыражения. Этот проход пытается вывести магазины из петель. При использовании
в сочетании с -fgcse-lm, циклы, содержащие последовательность загрузки / сохранения, могут быть изменены
загрузке перед циклом и сохранению после цикла.
Не включен ни на одном уровне оптимизации.
-fgcse-las
После появления -fgcse-las включен, глобальный общий проход исключения подвыражения
устраняет избыточные нагрузки, которые приходят после сохранения в одну и ту же ячейку памяти (обе
частичное и полное резервирование).
Не включен ни на одном уровне оптимизации.
-fgcse-после перезагрузки
После появления -fgcse-после перезагрузки включен, выполняется этап устранения избыточной нагрузки
после перезагрузки. Цель этого прохода - очистить лишние разливы.
-faggressive-loop-оптимизации
Этот параметр указывает оптимизатору цикла использовать языковые ограничения для получения границ для
количество итераций цикла. Предполагается, что код цикла не вызывает
неопределенное поведение, например, вызывая переполнение целого числа со знаком или выход за пределы
доступ к массиву. Границы количества итераций цикла используются для определения
оптимизация развертки и отслаивания петли и выхода из петли. Эта опция включена
по умолчанию.
-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, -Операционные системы.
-fdeclone-ctor-dtor
C ++ ABI требует нескольких точек входа для конструкторов и деструкторов: одна для
базовый подобъект, один для полного объекта и один для виртуального деструктора, который вызывает
оператор удалить впоследствии. Для иерархии с виртуальными базами базовый и полный
варианты являются клонами, что означает две копии функции. С этой опцией
базовый и полный варианты заменены на преобразователи, вызывающие общую реализацию.
Включено -Операционные системы.
-fdelete-проверка нулевого указателя
Предположим, что программы не могут безопасно разыменовать нулевые указатели и что никакой код или данные
элемент находится там. Это позволяет выполнить простую оптимизацию сворачивания констант вообще.
уровни оптимизации. Кроме того, другие проходы оптимизации в GCC используют этот флаг для
управлять глобальным анализом потока данных, исключающим бесполезные проверки на нулевые указатели;
они предполагают, что если указатель проверяется после того, как он уже был разыменован, он
не может быть нулевым.
Однако обратите внимание, что в некоторых средах это предположение неверно. Использовать
-fno-delete-null-указатель-проверяет чтобы отключить эту оптимизацию для программ, зависящих от
на такое поведение.
Некоторые цели, особенно встроенные, отключают эту опцию на всех уровнях. Иначе
он включен на всех уровнях: -O0, -O1, -O2, -O3, -Операционные системы. Пропуска, использующие информацию
включаются независимо на разных уровнях оптимизации.
-fдевиртуализовать
Попытка преобразовать вызовы виртуальных функций в прямые вызовы. Это сделано как
внутри процедуры и межпроцедурно как часть непрямого встраивания
("-findirect-inlining") и межпроцедурное распространение констант (-fipa-cp). Включено
на уровнях -O2, -O3, -Операционные системы.
-fdevirtualize-спекулятивно
Попытка преобразовать вызовы виртуальных функций в спекулятивные прямые вызовы. На основе
анализ графа наследования типов, определение для заданного вызова набора
вероятные цели. Если набор небольшой, желательно размера 1, измените вызов на
условное решение о прямом и косвенном звонке. Спекулятивные звонки позволяют больше
оптимизации, такие как встраивание. Когда после дальнейшей оптимизации они кажутся бесполезными,
они преобразуются обратно в исходную форму.
-файловые-оптимизации
Выполните ряд незначительных оптимизаций, которые относительно дороги.
Включено на уровнях -O2, -O3, -Операционные системы.
-свободно
Попытайтесь удалить повторяющиеся инструкции расширения. Это особенно полезно для
архитектура x86-64, которая неявно расширяется нулями в 64-битных регистрах после
запись в их нижнюю 32-битную половину.
Включено для Alpha, AArch64 и x86 на уровнях -O2, -O3, -Операционные системы.
-fno-время жизни-dse
В C ++ на значение объекта влияют только изменения в течение его времени жизни: когда
конструктор начинается, объект имеет неопределенное значение, и любые изменения во время
время жизни объекта мертво, когда объект уничтожен. Обычно мертвый магазин
устранение воспользуется этим; если ваш код полагается на значение
хранилище объектов, сохраняющееся после истечения срока жизни объекта, вы можете использовать этот флаг для
отключите эту оптимизацию.
-прокрутка-усадка
Попытка уменьшить регистровое давление за счет сокращения рабочего диапазона регистра. Это
полезно для быстрых процессоров с небольшими или средними наборами регистров.
-fira-algorithm =алгоритм
Используйте указанный алгоритм окраски для встроенного распределителя регистров. В
алгоритм аргумент может быть приоритет, который определяет приоритетную окраску Чоу, или CB,
задающий раскраску Чайтина-Бриггса. Раскраска Чайтина-Бриггса не реализована.
для всех архитектур, но для тех целей, которые его поддерживают, это значение по умолчанию
потому что он генерирует лучший код.
-fira-region =область
Используйте указанные регионы для интегрированного распределителя регистров. В область аргумент
должно быть одним из следующих:
ВСЕ Используйте все шлейфы как регионы размещения регистров. Это может дать наилучшие результаты для
машины с малым и / или нерегулярным набором регистров.
смешанный
В качестве областей используйте все петли, за исключением петель с небольшим давлением регистра. Этот
value обычно дает наилучшие результаты в большинстве случаев и для большинства архитектур, и
включен по умолчанию при компиляции с оптимизацией по скорости (-O, -O2...).
one Используйте все функции как единый регион. Обычно это приводит к наименьшему размеру кода.
размер и включен по умолчанию для -Операционные системы or -O0.
-фира-подъемник-давление
Используйте IRA для оценки давления регистрации в проходе подъема кода для принятия решений о подъеме
выражения. Этот вариант обычно приводит к уменьшению размера кода, но может замедлить
компилятор выключен.
Эта опция включена на уровне -Операционные системы для всех целей.
-фира-петля-давление
Используйте 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 означает, что нет
ограничение на то, сколько insns в очереди можно переместить преждевременно. -fsched-заглохли-insns
без значения эквивалентно -fsched-stalled-insns = 1.
-fsched-заглохло-insns-dep
-fsched-stalled-insns-dep =n
Определите, сколько групп insn (циклов) проверяется на зависимость от остановившегося insn.
то есть кандидат на досрочное удаление из очереди зависших инснов. Это
эффект только во время второго прохода планирования, и только если -fsched-заглохли-insns is
используемый. -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
.
-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 и выше.
-fhoist-смежные-нагрузки
Спекулятивно поднимайте грузы из обеих ветвей if-then-else, если грузы из
соседние местоположения в той же структуре, и целевая архитектура имеет условную
инструкция по перемещению. Этот флаг установлен по умолчанию на -O2 и выше.
-ftree-copy-prop
Выполните копирование на деревьях. Этот проход исключает ненужные операции копирования.
Этот флаг установлен по умолчанию на -O и выше.
-fipa-чистый-const
Узнайте, какие функции являются чистыми или постоянными. Включено по умолчанию в -O и выше.
-fipa-ссылка
Узнайте, какие статические переменные не выходят из модуля компиляции. Включено
по умолчанию в -O и выше.
-фипа-пта
Выполните межпроцедурный анализ указателя и межпроцедурную модификацию, а также
справочный анализ. Этот параметр может привести к чрезмерному использованию памяти и времени компиляции на
большие единицы компиляции. По умолчанию он не включен ни на одном уровне оптимизации.
-fipa-профиль
Выполните межпроцедурное распространение профиля. Функции, вызываемые только с холода
функции отмечены как холодные. Также однократно выполняемые функции (например, «холодный»,
"noreturn", статические конструкторы или деструкторы). Холодные функции и
После этого выполняемые один раз части функций без цикла оптимизируются по размеру. Включено
по умолчанию в -O и выше.
-fipa-cp
Выполните межпроцедурное постоянное распространение. Эта оптимизация анализирует программу
чтобы определить, когда значения, передаваемые функциям, являются константами, а затем оптимизирует
соответственно. Эта оптимизация может существенно повысить производительность, если
приложение имеет константы, переданные функциям. Этот флаг установлен по умолчанию на
-O2, -Операционные системы и -O3.
-fipa-cp-клон
Выполните клонирование функций, чтобы усилить межпроцедурное распространение констант. Когда
включено, межпроцедурное распространение констант выполняет клонирование функции, когда
внешне видимая функция может быть вызвана с постоянными аргументами. Потому что это
оптимизация может создавать несколько копий функций, это может значительно увеличить
размер кода (см. --парам ipcp-unit-рост =ценностное ). Этот флаг установлен по умолчанию на
-O3.
-fisolate-ошибочные-пути-разыменование
Обнаруживать пути, которые вызывают ошибочное или неопределенное поведение из-за разыменования
ПУСТОЙ указатель. Изолируйте эти пути от основного потока управления и включите выражение
с ошибочным или неопределенным поведением в ловушку.
-fisolate-ошибочные-пути-атрибут
Обнаруживать пути, которые вызывают ошибочное или неопределенное поведение из-за того, что значение NULL
используется способом, который запрещен атрибутом "returns_nonnull" или "nonnull".
Изолируйте эти пути от основного потока управления и превратите утверждение с ошибочным
или неопределенное поведение в ловушку. В настоящее время это не включено, но может быть включено
"-O2" в будущем.
-дерево-раковина
Выполните движение магазина вперед по деревьям. Этот флаг установлен по умолчанию на -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
расщепление и устранение мертвого кода в циклах.
-floop-гнездо-оптимизировать
Включите оптимизатор вложенности циклов на основе ISL. Это универсальный оптимизатор гнезда циклов, основанный на
об алгоритмах оптимизации Плутона. Он рассчитывает структуру цикла, оптимизированную для
локальность данных и параллелизм. Это экспериментальный вариант.
-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 (вызовы функций, операции, которые расширяются до нетривиальных последовательностей
инснс). С участием -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-slsr
Выполните прямолинейное снижение прочности на деревьях. Это признает связанные
выражения, включающие умножения и заменяющие их менее дорогостоящими вычислениями
когда возможно. По умолчанию это включено в -O и выше.
-ftree-векторизация
Выполните векторизацию на деревьях. Этот флаг включает -ftree-loop-векторизация и
-ftree-slp-векторизация если не указано явно.
-ftree-loop-векторизация
Выполните векторизацию цикла на деревьях. Этот флаг установлен по умолчанию на -O3 и когда
-ftree-векторизация включен.
-ftree-slp-векторизация
Выполните базовую блочную векторизацию на деревьях. Этот флаг установлен по умолчанию на -O3 и
когда -ftree-векторизация включен.
-fvect-cost-model =модель
Измените модель затрат, используемую для векторизации. В модель аргумент должен быть одним из
«безлимитный», «динамичный» или «дешевый». В «неограниченной» модели векторизованный код -
путь считается прибыльным, в то время как с "динамической" моделью проверка выполнения будет
охранять векторизованный путь кода, чтобы включить его только для счетчиков итераций, которые, вероятно,
выполняется быстрее, чем при выполнении исходного скалярного цикла. «Дешевая» модель будет
отключить векторизацию циклов, например, если это будет стоить непомерно дорого
из-за обязательных проверок времени выполнения на зависимость или выравнивание данных, но в остальном равно
к «динамической» модели. Модель стоимости по умолчанию зависит от других флагов оптимизации.
и бывает либо «динамичным», либо «дешевым».
-fsimd-cost-model =модель
Измените модель затрат, используемую для векторизации циклов, отмеченных OpenMP или Cilk.
Плюс директива simd. В модель аргумент должен быть одним из следующих: «неограниченный», «динамический»,
"дешевый". Все ценности модель имеют то же значение, что и -fvect-стоимость-модель
и по умолчанию модель затрат, определенная с помощью -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, для функций с определенным пользователем атрибутом раздела и для любых
архитектура, не поддерживающая именованные разделы.
Включено для x86 на уровнях -O2, -O3.
-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" становится статической функцией и, по сути, оптимизируется
более агрессивно межпроцедурными оптимизаторами.
Этот параметр не следует использовать в сочетании с «-flto». Вместо того, чтобы полагаться на
Плагин компоновщика должен предоставлять более безопасную и точную информацию.
-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 и оптимизирует их, как обычно, для производства моя прога.
Единственная важная вещь, о которой следует помнить, - чтобы включить оптимизацию времени компоновки, вы
необходимо использовать драйвер GCC для выполнения шага связывания. Затем GCC автоматически выполняет
оптимизация времени компоновки, если какой-либо из задействованных объектов был скомпилирован с -флто.
Обычно вам следует указать параметры оптимизации, которые будут использоваться для времени ссылки
оптимизация, хотя GCC будет стараться угадывать уровень оптимизации для использования
из параметров, используемых во время компиляции, если вы не указали один во время компоновки. Ты
всегда может отменить автоматическое решение об оптимизации времени компоновки во время компоновки
мимоходом -фно-лто к команде ссылки.
Чтобы оптимизация всей программы была эффективной, необходимо
программные предположения. Компилятору необходимо знать, какие функции и переменные могут быть
доступ к ним осуществляется библиотеками и средой выполнения за пределами модуля, оптимизированного во время компоновки. Когда
поддерживается компоновщиком, подключаемым модулем компоновщика (см. -fuse-linker-плагин) проходит
информация компилятору об используемых и видимых извне символах. Когда
плагин компоновщика недоступен, -fwhole-программа следует использовать, чтобы компилятор
делать эти предположения, что приводит к более агрессивным оптимизационным решениям.
После появления -fuse-linker-плагин не включается тогда, когда файл компилируется с -флто,
сгенерированный объектный файл больше обычного объектного файла, потому что он содержит GIMPLE
байт-коды и обычный финальный код (см. -ffat-lto-объекты. Это означает, что объект
файлы с информацией LTO могут быть связаны как обычные объектные файлы; если -фно-лто передается
к компоновщику не применяются межпроцедурные оптимизации. Обратите внимание, что когда
-fno-fat-lto-объекты включен этап компиляции быстрее, но вы не можете выполнить
обычная, не-LTO ссылка на них.
Кроме того, флаги оптимизации, используемые для компиляции отдельных файлов, не
обязательно связаны с теми, которые использовались во время ссылки. Например,
gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o
Это создает отдельные объектные файлы с неоптимизированным кодом ассемблера, но
результирующий двоичный моя прога оптимизирован на -O3. Если вместо этого последний двоичный файл будет
генерируется с -фно-лто, то моя прога не оптимизирован.
При создании окончательного двоичного файла GCC применяет оптимизацию времени компоновки только к тем
файлы, содержащие байт-код. Следовательно, вы можете смешивать и сопоставлять объектные файлы и
библиотеки с байт-кодами GIMPLE и конечным объектным кодом. GCC автоматически выбирает
какие файлы оптимизировать в режиме LTO и какие файлы связывать без дальнейшего
обработка.
GCC сохраняет некоторые флаги генерации кода при генерации байт-кодов, например
их нужно использовать на заключительном этапе связывания. Обычно параметры указаны в
во время компоновки переопределяют те, которые указаны во время компиляции.
Если вы не укажете вариант уровня оптимизации -O во время компоновки GCC будет
вычислить один на основе уровней оптимизации, используемых при компиляции объектных файлов.
Здесь победит высший уровень оптимизации.
В настоящее время следующие параметры и их настройки берутся из первого объектного файла.
которые явно указали это: -fPIC, -fpic, -fpie, -fобщий, -fисключения,
-fnon-call-исключения, -fgnu-тм и все -m целевые флаги.
Определенные флаги изменения ABI должны соответствовать во всех модулях компиляции и пытаться
чтобы переопределить это во время компоновки с конфликтующим значением, игнорируется. Это включает
такие варианты, как -freg-структура-возврат и -fpcc-структура-возврат.
Другие варианты, такие как -ffp-контракт, -fno-строго-переполнение, -fwrapv, -fno-trapv or
-fno-строгий-псевдоним передаются на этап связывания и консервативно объединяются
для конфликтующих единиц перевода. Конкретно -fno-строго-переполнение, -fwrapv и
-fno-trapv иметь приоритет и, например, -ffp-contract = выключено имеет приоритет над
-ffp-contract = быстро. Вы можете переопределить их во время линковки.
Рекомендуется скомпилировать все файлы, участвующие в одной ссылке, с помощью
те же параметры, а также укажите эти параметры во время ссылки.
Если LTO встречает объекты со связью C, объявленные с несовместимыми типами в отдельных
единицы перевода, которые необходимо связать вместе (неопределенное поведение в соответствии с ISO C99
6.2.7) может быть выдано нефатальное диагностическое сообщение. Поведение все еще не определено при запуске
время. Аналогичная диагностика может быть выставлена для других языков.
Еще одна особенность LTO - возможность применять межпроцедурную оптимизацию.
на файлах, написанных на разных языках:
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, если вы используете
компоновщик с поддержкой плагинов. Чтобы создать статические библиотеки, подходящие для LTO, используйте gcc-ar
и gcc-ranlib вместо ar и «ранлиб»; показать символы объектных файлов с
Байт-код GIMPLE, используйте gcc-нм. Эти команды требуют, чтобы ar, ранлиб и nm , чему есть доказательства,
скомпилирован с поддержкой плагинов. Во время ссылки используйте флаг -fuse-linker-плагин в
убедитесь, что библиотека участвует в процессе оптимизации LTO:
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
Когда подключаемый модуль компоновщика включен, компоновщик извлекает необходимые файлы GIMPLE из
libfoo.a и передает их работающему GCC, чтобы сделать их частью агрегированного
Изображение GIMPLE необходимо оптимизировать.
Если вы не используете компоновщик с поддержкой плагинов и / или не включаете компоновщик
плагин, затем объекты внутри libfoo.a извлекаются и связываются как обычно, но они
не участвуйте в процессе оптимизации LTO. Чтобы сделать статическую библиотеку
подходит как для оптимизации LTO, так и для обычного связывания, компилируйте свои объектные файлы с
-флто "-ffat-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", чтобы указать разделение, отражающее исходные исходные файлы, либо
"сбалансированный", чтобы указать разделение на куски одинакового размера (когда это возможно) или
"max", чтобы создать новый раздел для каждого символа, где это возможно. Указание "нет" как
алгоритм полностью отключает разделение и потоковую передачу. Значение по умолчанию -
«сбалансированный». Хотя "1to1" можно использовать как обходной путь для различного упорядочивания кода.
проблем, максимальное разбиение предназначено только для внутреннего тестирования.
-flto-сжатие-уровень =n
Эта опция определяет уровень сжатия, используемый для написания на промежуточном языке.
в объектные файлы LTO и имеет смысл только в сочетании с режимом LTO (-флто).
Допустимые значения: от 0 (без сжатия) до 9 (максимальное сжатие). Ценности за пределами этого
диапазон ограничен либо 0, либо 9. Если опция не указана, по умолчанию используется сбалансированный
используется настройка сжатия.
-flto-отчет
Печатает отчет с внутренними подробностями о работе оптимизатора времени компоновки. В
содержание этого отчета варьируется от версии к версии. Он предназначен для использования в GCC.
разработчиков при обработке объектных файлов в режиме LTO (через -флто).
Отключено по умолчанию.
-flto-отчет-wpa
Подобно -flto-отчет, но печатать только для фазы WPA оптимизации времени соединения.
-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 и ранлиб нужно поддерживать компоновщик
плагины для создания полнофункциональной среды сборки (способной создавать статические
библиотеки и т. д.). GCC предоставляет gcc-ar, gcc-нм, gcc-ranlib обертки передать
правильные варианты этих инструментов. При использовании обезжиренных файлов LTO make-файлы необходимо модифицировать для использования
их.
По умолчанию используется -fno-fat-lto-объекты на целях с поддержкой подключаемого модуля компоновщика.
-fcompare-элим
После распределения регистров и разделения инструкций пострегистрового распределения, определите
арифметические инструкции, которые вычисляют флаги процессора, аналогично операции сравнения
на основе этой арифметики. Если возможно, исключите операцию явного сравнения.
Этот проход применяется только к определенным целям, которые не могут явно представлять
операция сравнения до завершения распределения регистров.
Включено на уровнях -O, -O2, -O3, -Операционные системы.
-fuse-ld = bfd
Использовать BFD компоновщик вместо компоновщика по умолчанию.
-fuse-ld = золото
Использовать золото компоновщик вместо компоновщика по умолчанию.
-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", "-ftree-vectorize",
"ftree-loop-распространять-шаблоны"
По умолчанию 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-использование.
-fprofile-reorder-функции
Переупорядочивание функций на основе инструментария профиля собирает данные о первом выполнении
функции и упорядочивает эти функции в порядке возрастания.
Включено с -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 байтов.
Ограждения инициализируются при вводе функции, а затем проверяются, когда
функция завершается. Если проверка не удалась, печатается сообщение об ошибке и программа
выходы.
-fstack-протектор-все
Подобно -fstack-протектор за исключением того, что все функции защищены.
-fstack-протектор-сильный
Подобно -fstack-протектор но включает в себя дополнительные функции, которые необходимо защитить --- те
которые имеют определения локальных массивов или имеют ссылки на адреса локальных фреймов.
ПРИМЕЧАНИЕ. В Ubuntu 14.10 и более поздних версиях -fstack-протектор-сильный включен
по умолчанию для C, C ++, ObjC, ObjC ++, если ни один из -fno-стек-протектор, -nostdlib, ни
-Отдельные найдены.
-секция-анкеры
Постарайтесь уменьшить количество вычислений символьных адресов, используя общий "якорь"
символы для обозначения близлежащих объектов. Это преобразование может помочь уменьшить количество
записей 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-одиночный и --парам макс-встроенный-insns-авто.
большие функции-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-всегда-обрезка-канд-сет-связанный
Если количество кандидатов в наборе меньше этого значения, всегда старайтесь
удалите ненужные ivs из набора при добавлении нового.
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-версия-для-проверки-выравнивания
Максимальное количество проверок времени выполнения, которое может быть выполнено при выполнении цикла
версионирование для выравнивания в векторизаторе.
vect-max-версия-для-проверки-псевдонима
Максимальное количество проверок времени выполнения, которое может быть выполнено при выполнении цикла
версионирование псевдонима в векторизаторе.
vect-max-peeling-для выравнивания
Максимальное количество циклов отслаивания для улучшения выравнивания доступа для векторизатора. Ценить
-1 означает «без ограничений».
максимальное количество итераций на отслеживание
Максимальное количество итераций цикла алгоритма перебора для анализа
количества итераций цикла пытается оценить.
горячий-bb-count-ws-permille
Базовое количество профилей блоков считается горячим, если оно способствует заданному
пермильаж (т.е. 0 ... 1000) всего профилированного исполнения.
hot-bb-частота-фракция
Выберите долю входного блока частоты выполнения базового блока в
функция, заданная базовым блоком, должна считаться горячей.
макс-предсказанные-итерации
Максимальное количество итераций цикла, которое мы прогнозируем статически. Это полезно в
случаи, когда функция содержит один цикл с известной границей и другой цикл
с неизвестной границей. Известное количество итераций прогнозируется правильно, а
неизвестное число итераций в среднем составляет примерно 10. Это означает, что цикл
без границ кажется искусственно холодным по отношению к другому.
встроенная ожидаемая вероятность
Управляйте вероятностью того, что выражение будет иметь указанное значение. Этот
Параметр принимает процентное значение (например, 0 ... 100) в качестве входных данных. Вероятность дефолта
90 получено эмпирическим путем.
выровнять порог
Выберите долю от максимальной частоты выполнения базового блока в
функция для выравнивания базового блока.
выровнять итерации цикла
Цикл, который, как ожидается, будет повторять по крайней мере выбранное количество итераций, выравнивается.
трассировщик-динамическое-покрытие
трассировщик-динамическое-покрытие-обратная связь
Это значение используется для ограничения формирования суперблока после достижения заданного процента
выполняемые инструкции покрываются. Это ограничивает ненужное увеличение размера кода.
Команда трассировщик-динамическое-покрытие-обратная связь используется только тогда, когда обратная связь профиля
доступный. Реальные профили (в отличие от статически оцененных) намного
менее сбалансирован, допускает большее значение порога.
трейсер-макс-рост кода
Остановите дублирование хвоста, когда рост кода достигнет заданного процента. Это
довольно искусственный предел, так как большинство дубликатов удаляются позже перекрестным
скачком, поэтому его можно установить на гораздо более высокие значения, чем желаемый рост кода.
трассировщик-мин-ветвь-коэффициент
Остановить обратный рост, когда обратная вероятность лучшего преимущества меньше этой
порог (в процентах).
трассировщик-мин-ветвь-коэффициент
трассировщик-мин-ветвь-отношение-обратная связь
Остановите форвардный рост, если лучшее преимущество имеет вероятность ниже этого порога.
Аналогично трассировщик-динамическое-покрытие присутствуют два значения, одно для компиляции
для отзывов профиля и один для компиляции без. Значение для компиляции
с отзывами профиля должны быть более консервативными (выше), чтобы
трассировщик эффективен.
макс-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 (
по умолчанию) отключает расширения региона.
max-sched-insn-конфликт-задержка
Максимальная задержка конфликта для insn, рассматриваемого как спекулятивное движение.
Значение по умолчанию - 3.
план-спецификация-вероятность отсечки
Минимальная вероятность успеха спекуляции (в процентах), так что спекулятивная
insns запланированы. Значение по умолчанию - 40.
план-спецификация-состояние-край-проб-отсечка
Минимальная вероятность того, что граница должна иметь планировщик, чтобы сохранить свое состояние
через это. Значение по умолчанию - 10.
sched-mem-true-dep-стоимость
Минимальное расстояние (в циклах ЦП) между хранилищем и загрузкой, ориентированное на одну и ту же память
локации. Значение по умолчанию - 1.
selsched-max-просмотр
Максимальный размер окна просмотра выборочного планирования. Это глубина
поиска доступных инструкций. Значение по умолчанию - 50.
selsched-max-sched-раз
Максимальное количество раз, когда инструкция будет планироваться во время выборочного
планирование. Это ограничение на количество итераций, через которые
инструкция может быть конвейерной. Значение по умолчанию - 2.
selsched-max-insns-to-rename
Максимальное количество лучших инструкций в готовом списке, которые рассматриваются для
переименование в селективном планировщике. Значение по умолчанию - 2.
смс-мин-ск
Минимальное значение количества этапов, которое генерирует планировщик по модулю качания. В
значение по умолчанию - 2.
макс-последнее-значение-RTL
Максимальный размер, измеряемый как количество RTL, которые могут быть записаны в выражении.
в сумматоре псевдорегистратора как последнее известное значение этого регистра. В
по умолчанию - 10000.
целочисленный предел доли
Маленькие целочисленные константы могут использовать общую структуру данных, уменьшая компилятор
использование памяти и увеличение ее скорости. Это устанавливает максимальное значение общего
целочисленная константа. Значение по умолчанию - 256.
размер буфера ssp
Минимальный размер буферов (т.е. массивов), которые получают защиту от разрушения стека.
когда -fstack-защита используется.
Это значение по умолчанию до Ubuntu 10.10 было «8». В настоящее время это «4», чтобы увеличить
количество функций, защищенных стековым протектором.
минимальный размер для совместного использования стека
Минимальный размер переменных, участвующих в совместном использовании слота стека, когда не
оптимизация. Значение по умолчанию - 32.
Макс-скачок-поток-дублирование-stmts
Максимальное количество операторов, разрешенных в блоке, которое необходимо дублировать, когда
резьба скачки.
max-fields-for-field-чувствительны
Максимальное количество полей в структуре, обрабатываемых с учетом поля во время
анализ указателя. По умолчанию для -O0 и -O1и 100 для -Операционные системы, -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.
sccvn-max-alias-questions-per-access
Максимальное количество запросов псевдонима-оракула, которые мы выполняем при поиске избыточности
для грузов и магазинов. Если этот предел достигнут, поиск прерывается и загрузка или
store не считается избыточным. Количество запросов алгоритмически
ограничено количеством хранилищ на всех путях от загрузки до записи функции.
Максимальное количество запросов по умолчанию - 1000.
Ира-макс-петель-число
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-значение-
размер списка - максимальное количество значений и типов, которые он хранит на один формальный
параметр функции.
ipa-cp-eval-порог
IPA-CP вычисляет собственную оценку эвристики рентабельности клонирования и выполняет
те возможности клонирования с оценками, превышающими ipa-cp-eval-порог.
ipa-max-agg-предметы
IPA-CP также может распространять ряд скалярных значений, переданных в
совокупный. ipa-max-agg-предметы контролирует максимальное количество таких значений на одно
Параметр.
ipa-cp-loop-подсказка-бонус
Когда IPA-CP определяет, что кандидат на клонирование сделает количество
известных итераций цикла, он добавляет бонус в ipa-cp-loop-подсказка-бонус бонус к
оценка рентабельности кандидата.
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-ширина
Установите максимальное количество инструкций, выполняемых параллельно в повторно ассоциированном дереве.
Этот параметр переопределяет эвристику, зависящую от цели, используемую по умолчанию, если нет
нулевое значение.
алгоритм-график давления
Выберите одну из двух доступных реализаций -fsched-давление. Алгоритм 1
является исходной реализацией и с большей вероятностью предотвратит выполнение инструкций
переупорядочивается. Алгоритм 2 был разработан как компромисс между
относительно консервативный подход, принятый алгоритмом 1, и довольно агрессивный
подход, используемый планировщиком по умолчанию. Он в большей степени зависит от наличия
обычный регистровый файл и точный регистр классов давления. Видеть Хайфа-sched.c
в источниках GCC для более подробной информации.
Выбор по умолчанию зависит от цели.
Макс-SLSR-Cand-Scan
Установите максимальное количество существующих кандидатов, которые будут учитываться при поиске
основа для нового кандидата на прямолинейное снижение прочности.
асан-глобалы
Включите обнаружение переполнения буфера для глобальных объектов. Такая защита
включен по умолчанию, если вы используете -fsanitize = адрес вариант. Чтобы отключить глобальный
защита объектов использование --парам asan-globals = 0.
асан-стек
Включить обнаружение переполнения буфера для объектов стека. Такая защита
включен по умолчанию при использовании-fsanitize = адрес. Чтобы отключить защиту стека, используйте
--парам asan-stack = 0 опцию.
asan-инструмент-читает
Включить обнаружение переполнения буфера при чтении памяти. Такая защита
включен по умолчанию при использовании -fsanitize = адрес. Чтобы отключить чтение из памяти
использование защиты --парам asan-instrument-reads = 0.
asan-инструмент-пишет
Включите обнаружение переполнения буфера при записи в память. Такая защита
включен по умолчанию при использовании -fsanitize = адрес. Чтобы отключить запись в память
использование защиты --парам asan-инструмент-пишет = 0 опцию.
асан-меминтрин
Включить обнаружение для встроенных функций. Этот вид защиты обеспечивается
по умолчанию при использовании -fsanitize = адрес. Отключение защиты встроенных функций
использование --парам асан-меминтрин = 0.
асан-использование-после-возврата
Включите обнаружение использования после возврата. Этот вид защиты обеспечивается
по умолчанию при использовании -fsanitize = адрес вариант. Чтобы отключить использование после возврата
использование обнаружения --парам asan-use-after-return = 0.
asan-инструментария-с-порогом вызова
Если количество обращений к памяти в инструментированной функции больше или равно
этот номер, используйте обратные вызовы вместо встроенных проверок. Например, чтобы отключить встроенный код
использование --парам asan-инструментовка с порогом вызова = 0.
макс-fsm-поток-путь-insns
Максимальное количество инструкций для копирования при дублировании блоков в конечном состоянии
автомат скачка нити пути. По умолчанию 100.
max-fsm-длина резьбы
Максимальное количество базовых блоков на пути перехода конечного автомата. В
по умолчанию - 10.
макс-fsm-поток-пути
Максимальное количество новых путей перехода для создания конечного автомата.
По умолчанию 50.
Возможности Управление препроцессор
Эти параметры управляют препроцессором C, который запускается для каждого исходного файла C перед фактическим выполнением.
сборник.
Если вы используете -E вариант, кроме предварительной обработки ничего не делается. Некоторые из этих вариантов
имеет смысл только вместе с -E потому что они заставляют вывод препроцессора быть
не подходит для реальной компиляции.
-Вп,вариант
Вы можете использовать -Вп,вариант обойти драйвер компилятора и передать вариант прямо через
препроцессору. Если вариант содержит запятые, он разделен на несколько вариантов в
запятые. Однако многие параметры изменяются, переводятся или интерпретируются
драйвер компилятора перед передачей препроцессору, и -Вп насильственно обходит
этот этап. Прямой интерфейс препроцессора недокументирован и подлежит
изменить, поэтому, когда это возможно, вам следует избегать использования -Вп и позвольте водителю справиться с
варианты вместо этого.
-Xпрепроцессор вариант
Проходить вариант как вариант препроцессору. Вы можете использовать это для снабжения системы-
определенные параметры препроцессора, которые GCC не распознает.
Если вы хотите передать параметр, который принимает аргумент, вы должны использовать -Xпрепроцессор
дважды, один раз для варианта и один раз для аргумента.
-но-интегрированный-cpp
Выполните предварительную обработку как отдельный проход перед компиляцией. По умолчанию GCC выполняет
предварительная обработка как неотъемлемая часть токенизации и синтаксического анализа входных данных. Если этот вариант
предоставляется интерфейс на соответствующем языке (cc1, cc1plusили cc1obj для C, C ++,
и Objective-C соответственно) вместо этого вызывается дважды, один раз только для предварительной обработки
и один раз для фактической компиляции предварительно обработанного ввода. Эта опция может быть полезна
в сочетании с -B or -обертка параметры для указания альтернативного препроцессора или
выполнить дополнительную обработку исходного кода программы между обычной предварительной обработкой и
сборник.
-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 ++.
-fno-canonical-system-заголовки
При предварительной обработке не сокращайте пути системных заголовков канонизацией.
-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.
Обратите внимание, что -ftrack-macro-extension = 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.
-статический-libasan
Когда -fsanitize = адрес опция используется для связывания программы, драйвер GCC
автоматически ссылается на либасан. Если либасан доступен как общая библиотека, и
-статический опция не используется, то эта ссылка на общую версию либасан.
Команда -статический-libasan опция указывает драйверу GCC на ссылку либасан статически, без
обязательно статическое связывание других библиотек.
-static-libtsan
Когда -fsanitize = поток опция используется для связывания программы, драйвер GCC
автоматически ссылается на либцан. Если либцан доступен как общая библиотека, и
-статический опция не используется, то эта ссылка на общую версию либцан.
Команда -static-libtsan опция указывает драйверу GCC на ссылку либцан статически, без
обязательно статическое связывание других библиотек.
-static-liblsan
Когда -fsanitize = утечка опция используется для связывания программы, драйвер GCC
автоматически ссылается на либлсан. Если либлсан доступен как общая библиотека, и
-статический опция не используется, то эта ссылка на общую версию либлсан.
Команда -static-liblsan опция указывает драйверу GCC на ссылку либлсан статически, без
обязательно статическое связывание других библиотек.
-статический-libubsan
Когда -fsanitize = undefined опция используется для связывания программы, драйвер GCC
автоматически ссылается на либубсан. Если либубсан доступен как общая библиотека,
и -статический опция не используется, то эта ссылка на общую версию
либубсан, -статический-libubsan опция указывает драйверу GCC на ссылку либубсан
статически, без обязательного статического связывания других библиотек.
-статическая-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 все еще работает, но аспект библиотеки - нет.
--no-sysroot-суффикс
Для некоторых целей к корневому каталогу, указанному с помощью --sroot,
в зависимости от других используемых опций, так что заголовки могут, например, быть найдены в
каталог / суффикс / usr / включить вместо каталог / usr / include. Эта опция отключает добавление
такого суффикса.
-Я- Эта опция устарела. Пожалуйста, используйте -я цитирую вместо этого для -I каталоги до
-Я- и удалите -Я-. Любые каталоги, которые вы укажете с помощью -I варианты до
-Я- вариант ищется только в случае #включают "файл"; их не обыскивают
для #включают <файл>.
Если дополнительные каталоги указаны с -I варианты после -Я-эти
каталоги ищутся по всем #включают директивы. (Обычно ВСЕ -I каталоги
используются таким образом.)
Кроме того, -Я- опция запрещает использование текущего каталога (где
текущий входной файл был получен из) в качестве первого каталога поиска для #включают "файл".
Невозможно отменить этот эффект -Я-. С -I. вы можете указать поиск
каталог, который является текущим при вызове компилятора. Это не совсем то
то же, что и препроцессор по умолчанию, но часто бывает удовлетворительным.
-Я- не запрещает использование стандартных системных каталогов для файлов заголовков.
Таким образом, -Я- и -ностдинк независимы.
Указание цель Машина и составитель Версия
Обычный способ запустить GCC - запустить исполняемый файл с именем GCCили машина-gcc когда перекрестно
компиляция, или машина-gcc-версия запустить версию, отличную от той, которая была установлена
последний.
Аппаратные средства Модели и Конфигурации
У каждого целевого типа машины могут быть свои особые параметры, начиная с -m, выбирать
среди различных моделей или конфигураций оборудования - например, 68010 против 68020, плавающий
сопроцессор или нет. Одна установленная версия компилятора может компилироваться для любой модели.
или конфигурации, в соответствии с указанными опциями.
Некоторые конфигурации компилятора также поддерживают дополнительные специальные параметры, обычно для
совместимость с другими компиляторами на той же платформе.
AAArch64 Возможности
Эти параметры определены для реализаций AArch64:
-mabi =имя
Сгенерируйте код для указанной модели данных. Допустимые значения ilp32 для SysV-
как модель данных, где int, long int и указатель являются 32-битными, и lp64 для SysV-подобного
модель данных, где int - 32-битный, а long int и указатель - 64-битные.
Значение по умолчанию зависит от конкретной целевой конфигурации. Обратите внимание, что LP64 и
ABI ILP32 несовместимы с каналом связи; вы должны скомпилировать всю свою программу с одним и тем же
ABI и компоновка с совместимым набором библиотек.
-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.
переменные.
-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Включите или отключите обходной путь для ошибки номер 53 ARM Cortex-A835769. Это
будет включать в себя вставку инструкции NOP между инструкциями памяти и 64-битными
целочисленные инструкции умножения с накоплением.
-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Включите или отключите обходной путь для ошибки номер 53 ARM Cortex-A843419. Это
Обход ошибки выполняется во время компоновки, и при этом будет передан только соответствующий флаг
компоновщику.
-март =имя
Укажите имя целевой архитектуры, необязательно с суффиксом одним или несколькими
модификаторы функций. Этот вариант имеет вид -март =арка{+[нет]которая}*, где
только допустимое значение для арка is armv8-а. Допустимые значения для которая
задокументировано в подразделе ниже.
Если указаны конфликтующие модификаторы функций, используется самая правая функция.
GCC использует это имя, чтобы определить, какие инструкции он может выдавать при генерации
код сборки.
где -маршировать указывается без любого из -мтюн or -MCPU также уточняется,
код будет настроен для хорошей работы с целым рядом целевых процессоров, реализующих
целевая архитектура.
-mtune =имя
Укажите имя целевого процессора, для которого GCC должен настроить производительность
код. Допустимые значения для этой опции: родовой, Кора-a53, Кора-a57,
Кора-a72, гром, xgene1.
Кроме того, этот параметр может указывать, что GCC должен настраивать производительность кода.
для системы big.LITTLE. Допустимые значения для этой опции:
кора-а57.кора-а53, кора-а72.кора-а53.
Где ни один из -mtune =, -mcpu = or -март = указаны, код будет настроен на
хорошо работать с целым рядом целевых процессоров.
Этот параметр не может быть дополнен модификаторами функций.
-mcpu =имя
Укажите имя целевого процессора, необязательно с суффиксом одной или нескольких функций.
модификаторы. Этот вариант имеет вид -mcpu =процессор{+[нет]которая} *, где допустимые
значения для процессор такие же, как и для -мтюн.
Допустимые значения для которая задокументированы в подразделе ниже.
Если указаны конфликтующие модификаторы функций, используется самая правая функция.
GCC использует это имя, чтобы определить, какие инструкции он может выдавать при генерации
код сборки (как будто -маршировать) и определить целевой процессор, для которого нужно
настроить на исполнение (как будто -мтюн). Если эта опция используется вместе с
-маршировать or -мтюн, эти параметры имеют приоритет перед соответствующей частью этого
опцию.
-маршировать и -MCPU модификаторы функций
Модификаторы функций, используемые с -маршировать и -MCPU может быть одним из следующих:
CRC Включите расширение CRC.
крипто-
Включите расширение Crypto. Это означает, что Advanced SIMD включен.
fp Включите инструкции с плавающей запятой.
Симд
Включите расширенные инструкции SIMD. Это означает, что инструкции с плавающей запятой
включено. Это значение по умолчанию для всех текущих возможных значений параметров. -маршировать и
-mcpu =.
Адаптева Богоявление Возможности
Эти -m для Адаптева Богоявления определены варианты:
-mhalf-reg-файл
Не размещайте регистры в диапазоне «r32» ... «r63». Это позволяет коду работать на
варианты оборудования, в которых отсутствуют эти регистры.
-mprefer-короткие-insn-regs
Предпочтительно выделять регистры, которые позволяют генерировать короткие инструкции. Это может
приведет к увеличению количества инструкций, так что это может уменьшить или увеличить общее
размер кода.
-mbranch-cost =Num
Установите стоимость веток примерно на Num "простые" инструкции. Эта стоимость всего лишь
эвристический и не гарантирует получение согласованных результатов для всех выпусков.
-mcmove
Включите генерацию условных ходов.
-mnops =Num
Испускают Num NOP перед каждой второй сгенерированной инструкцией.
-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", поэтому используйте эти инструкции для прямых вызовов. В
по умолчанию -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, что делает загрузку небольшого отрицательного значения
константы и определенные битовые маски быстрее. Допустимые значения для Редж r43 и r63,
которые определяют использование этого регистра в качестве фиксированного регистра, и нет, что означает, что нет
Регистр используется для этой цели. По умолчанию -m1reg-нет.
ARC Возможности
Следующие параметры управляют вариантом архитектуры, для которого компилируется код:
-баррель-перевертыш
Сгенерируйте инструкции, поддерживаемые переключателем ствола. Это значение по умолчанию, если
-mcpu = ARC601 действует.
-mcpu =процессор
Установите тип архитектуры, использование регистров и параметры планирования инструкций для процессор.
Существуют также варианты ярлыков псевдонимов, доступные для обратной совместимости и
удобство. Поддерживаемые значения для процессор
ARC600
Скомпилировать для ARC600. Псевдонимы: -мА6, -MARC600.
ARC601
Скомпилировать для ARC601. Псевдоним: -MARC601.
ARC700
Скомпилировать для ARC700. Псевдонимы: -мА7, -MARC700. Это значение по умолчанию при настройке
--with-cpu = arc700.
-mdpfp
-mdpfp-компактный
FPX: создание инструкций FPX с двойной точностью, оптимизированных для компактной реализации.
-mdpfp-быстро
FPX: создание инструкций FPX с двойной точностью, оптимизированных для быстрой реализации.
-mno-dpfp-lrsr
Отключите инструкции LR и SR от использования вспомогательных регистров расширения FPX.
-меа
Генерация расширенных арифметических инструкций. В настоящее время только «дива», «добавляет», «подписки»,
и "sat16" поддерживаются. Это всегда включено для -mcpu = ARC700.
-mno-mpy
Не создавайте инструкции MPY для ARC700.
-mmul32x16
Генерация 32x16-битных команд умножения и Mac.
-mmul64
Сгенерируйте инструкции mul64 и mulu64. Действительно только для -mcpu = ARC600.
-мнорм
Сгенерировать инструкцию нормы. Это значение по умолчанию, если -mcpu = ARC700 действует.
-мспфп
-mspfp-компактный
FPX: создание инструкций FPX с одинарной точностью, оптимизированных для компактной реализации.
-mspfp-быстро
FPX: создание инструкций FPX с одинарной точностью, настроенных для быстрой реализации.
-мсимд
Включение генерации инструкций ARC SIMD с помощью встроенных функций для конкретной цели. Только действительный
для -mcpu = ARC700.
-msoft-поплавок
Эта опция проигнорирована; он предоставляется только для целей совместимости. Программное обеспечение
код с плавающей запятой генерируется по умолчанию, и это значение по умолчанию может быть отменено FPX
опции; мспфп, mspfp-компактныйили mspfp-быстро для одинарной точности и мдпфп, мдпфп-
компактныйили mdpfp-быстрый для двойной точности.
-mswap
Сгенерируйте инструкции по обмену.
Следующие параметры передаются ассемблеру, а также определяют препроцессор
символы макросов.
-mdsp-пакет
Передается ассемблеру для включения расширений DSP Pack A. Также устанавливает
символ препроцессора "__Xdsp_packa".
-mdvbf
Передано ассемблеру для включения двойного расширения бабочки viterbi. Также
устанавливает символ препроцессора «__Xdvbf».
-млок
Передается ассемблеру, чтобы включить расширение Locked Load / Store Conditional.
Также устанавливает символ препроцессора «__Xlock».
-mmac-d16
Передал ассемблеру. Также устанавливает символ препроцессора «__Xxmac_d16».
-ммак-24
Передал ассемблеру. Также устанавливает символ препроцессора «__Xxmac_24».
-мртск
Передается ассемблеру для включения 64-битного расширения счетчика отметок времени.
инструкция. Также устанавливает символ препроцессора «__Xrtsc».
-mswape
Передается ассемблеру для включения инструкции расширения порядка байтов подкачки.
Также устанавливает символ препроцессора «__Xswape».
-мелофония
Передается ассемблеру, чтобы включить инструкции двойного и одиночного операнда для
телефония. Также устанавливает символ препроцессора «__Xtelephony».
-мкси
Передается ассемблеру для включения расширения памяти XY. Также устанавливает
символ препроцессора «__Xxy».
Следующие параметры управляют тем, как аннотируется код сборки:
-неправильный размер
Аннотируйте инструкции ассемблера предполагаемыми адресами.
-mannotate-выравнивание
Объясните, какие соображения по выравниванию приводят к решению о составлении инструкции.
короткие или длинные.
Компоновщику передаются следующие параметры:
-Марклинукс
Передается компоновщику, чтобы указать использование эмуляции "arclinux". Этот вариант
включен по умолчанию в цепочках инструментов, созданных для "arc-linux-uclibc" и
"arceb-linux-uclibc" нацеливается, когда профилирование не запрашивается.
-marclinux_prof
Передается компоновщику, чтобы указать использование эмуляции "arclinux_prof". Этот
опция включена по умолчанию в цепочках инструментов, созданных для "arc-linux-uclibc" и
"arceb-linux-uclibc" нацеливается при запросе профилирования.
Следующие параметры управляют семантикой сгенерированного кода:
-mepilogue-cfi
Включение генерации информации о кадрах вызова для эпилогов.
-mno-эпилог-cfi
Отключить создание информации о кадре вызова для эпилогов.
-mlong-вызовы
Генерировать инснс звонков как регистр косвенных звонков, тем самым обеспечивая доступ ко всем
32-битный диапазон адресов.
-mmedium-звонки
Не используйте для вызовов менее 25-битный диапазон адресации, который является доступным смещением.
для безусловной инструкции перехода и ссылки. Условное выполнение функции
вызовы подавляются, чтобы разрешить использование 25-битного диапазона, а не 21-битного диапазона
с условным переходом и ссылкой. Это значение по умолчанию для цепочек инструментов, созданных для
Цели "arc-linux-uclibc" и "arceb-linux-uclibc".
-mno-sdata
Не создавайте ссылки на sdata. Это значение по умолчанию для цепочек инструментов, созданных для
Цели "arc-linux-uclibc" и "arceb-linux-uclibc".
-mucb-mcount
Инструмент с вызовами mcount, используемый в коде UCB. Т.е. делать подсчет в вызываемом,
не звонящий. По умолчанию приборы ARC подсчитываются в вызывающем абоненте.
-mvolatile-кэш
Для непостоянных ссылок используйте доступ к обычно кэшированной памяти. Это значение по умолчанию.
-mno-volatile-кеш
Включите обход кеша для изменчивых ссылок.
Следующие параметры позволяют точно настроить генерацию кода:
злобный звонок
Оптимизируйте выравнивание для инструкций по вызову.
-mauto-modify-reg
Включите использование предварительной / пост-модификации со смещением регистра.
-mbbit-глазок
Включите bbit peephole2.
-mno-brcc
Эта опция отключает проход для конкретной цели в arc_reorg для создания "BRcc"
инструкции. Он не влияет на генерацию BRcc, управляемую проходом комбайнера.
-mcase-вектор-пкрел
Используйте таблицы корпусов переключателей относительно ПК - это позволяет сократить таблицу корпусов. Это
по умолчанию для -Операционные системы.
-mcompact-casei
Включить компактный шаблон casei. Это значение по умолчанию для -Операционные системы.
-mno-cond-exec
Отключите специальный проход ARCompact для генерации инструкций условного выполнения. В связи
для задержки планирования слотов и взаимодействия между номерами операндов, размерами букв,
длины инструкций, а также поддержка условного выполнения, не зависящие от цели
pass для генерации условного выполнения часто отсутствует, поэтому порт ARC сохранил
специальный проход, который пытается найти более условное выполнение, генерирующее
возможности после распределения регистров, сокращения ветвей и планирования слотов задержки
было сделано. Этот проход обычно, но не всегда, улучшает производительность и код.
размер, за счет дополнительного времени компиляции, поэтому есть возможность переключить
это от. Если у вас есть проблема с инструкциями вызова, превышающими их допустимое смещение
диапазон, потому что они условны, вам следует подумать об использовании -mmedium-звонки
.
-крупно-ветвистый
Включите использование шаблона cbranchsi перед перезагрузкой.
-mexpand-adddi
Разверните "adddi3" и "subdi3" во время генерации RTL в "add.f", "adc" и т. Д.
-mindexed-load
Включите использование индексированных нагрузок. Это может быть проблематично, потому что некоторые оптимизаторы
затем предположим, что индексированные хранилища существуют, что не так.
-млра
Включите распределение локальных регистров. Это все еще экспериментальный вариант для ARC, поэтому по умолчанию
компилятор использует стандартную перезагрузку (т.е. -мно-лра).
-млра-приоритет-нет
Не указывайте приоритет для целевых регистров.
-mlra-приоритет-компактный
Укажите приоритет целевого регистра для r0..r3 / r12..r15.
-mlra-priority-некомпактный
Уменьшите приоритет целевого регистратора для r0..r3 / r12..r15.
-мно-милликод
При оптимизации по размеру (используя -Операционные системы), прологи и эпилоги, которые надо сохранить или
восстановление большого количества регистров часто сокращается с помощью вызова специального
функция в libgcc; это называется милликод вызов. Как эти звонки могут ставить
проблемы с производительностью и / или вызывают проблемы при связывании нестандартным способом,
эта опция предназначена для отключения генерации вызовов милликода.
-mixed-code
Настройте распределение регистров, чтобы помочь генерации 16-битных инструкций. Это обычно
эффект уменьшения среднего размера инструкции при увеличении инструкции
сосчитать.
-mq-класс
Включите альтернативные инструкции 'q'. Это значение по умолчанию для -Операционные системы.
-mRcq
Включите обработку ограничений Rcq - от этого зависит генерация большинства сокращенных кодов. Это
по умолчанию.
-mRcw
Включить обработку ограничений Rcw - от этого во многом зависит ccfsm condexec. Это
по умолчанию.
-msize-level =уровень
Точная оптимизация размера в отношении длины команд и выравнивания. В
признанные ценности для уровень составляют:
0 Без оптимизации размера. Этот уровень устарел и рассматривается как 1.
1 Краткие инструкции используются случайно.
2 Кроме того, устраняется выравнивание циклов и кода после удаления барьеров.
3 Кроме того, опциональное выравнивание данных отбрасывается, а опция Os включен.
По умолчанию это 3 когда -Операционные системы действует. В противном случае поведение, когда это не
набор эквивалентен уровню 1.
-mtune =процессор
Установите параметры планирования инструкций для процессор, отменяя любые подразумеваемые -mcpu =.
Поддерживаемые значения для процессор
ARC600
Настройтесь на процессор ARC600.
ARC601
Настройтесь на процессор ARC601.
ARC700
Настройтесь на процессор ARC700 со стандартным блоком умножения.
ARC700-xmac
Настройтесь на процессор ARC700 с блоком XMAC.
ARC725D
Настройтесь на процессор ARC725D.
ARC750D
Настройтесь на процессор ARC750D.
-mmultcost =Num
Предполагаемая стоимость инструкции умножения с 4 приравнивается к обычной инструкции.
-munalign-prob-threshold =вероятность
Установите порог вероятности для невыровненных ветвей. При настройке на ARC700 и
Оптимизируя скорость, желательно выводить ветви без заполненного слота задержки
невыровненный и длинный, если профилирование не указывает, что вероятность перехода
быть взят ниже вероятность. По умолчанию (REG_BR_PROB_BASE / 2), т.е. 5000.
Следующие параметры поддерживаются для обратной совместимости, но теперь не рекомендуются
и будет удален в следующем выпуске:
-маргонавт
Устаревший FPX.
-mbig-endian
-ЭБ Скомпилируйте код для целей с прямым порядком байтов. Использование этих параметров теперь не рекомендуется. Пользователи
желая использовать код с прямым порядком байтов, следует использовать цели "arceb-elf32" и "arceb-linux-uclibc"
при построении цепочки инструментов, для которой по умолчанию используется прямой порядок байтов.
-с младшим порядком байтов
-EL Скомпилируйте код для целей с прямым порядком байтов. Использование этих параметров теперь не рекомендуется.
Пользователи, которым нужен код с прямым порядком байтов, должны использовать "arc-elf32" и "arc-linux-uclibc".
целей при построении цепочки инструментов, для которых по умолчанию используется прямой порядок байтов.
-mbarrel_shifter
Заменен на -баррель-перевертыш
-mdpfp_compact
Заменен на -mdpfp-компактный
-mdpfp_fast
Заменен на -mdpfp-быстро
-mdsp_packa
Заменен на -mdsp-пакет
-MEA
Заменен на -меа
-mmac_24
Заменен на -ммак-24
-mmac_d16
Заменен на -mmac-d16
-mspfp_compact
Заменен на -mspfp-компактный
-mspfp_fast
Заменен на -mspfp-быстро
-mtune =процессор
Наши ценности arc600, arc601, arc700 и arc700-xmac для процессор заменены на ARC600, ARC601,
ARC700 и ARC700-xmac соответственно
-multcost =Num
Заменен на -mmultcost.
ARM Возможности
Эти -m параметры определены для порта ARM:
-mabi =имя
Сгенерировать код для указанного ABI. Допустимые значения: БТР-ГНУ, АТПК, аапс,
AAPCS-Linux и iwmmxt.
-mapcs-рамка
Сгенерируйте кадр стека, соответствующий стандарту вызова процедур ARM для всех
функций, даже если это не является строго необходимым для правильного выполнения кода.
Указание -fomit-frame-pointer с этой опцией заставляет кадры стека не быть
сгенерирован для листовых функций. По умолчанию -мно-БТР-рама.
-карты
Это синоним -mapcs-рамка.
-mthumb-интерворк
Сгенерируйте код, поддерживающий вызов между наборами инструкций ARM и Thumb.
Без этой опции на архитектурах до v5 два набора инструкций не могут быть
надежно используется внутри одной программы. По умолчанию -mno-thumb-взаимодействие, так как немного
код большего размера создается, когда -mthumb-интерворк указан. В конфигурациях AAPCS
эта опция бессмысленна.
-mno-sched-пролог
Предотвратить изменение порядка инструкций в прологе функции или слияние
эти инструкции с инструкциями в теле функции. Это означает, что все
функции начинаются с узнаваемого набора инструкций (или на самом деле с одной из
из небольшого набора различных прологов функций), и эту информацию можно использовать для
найдите начало функций внутри исполняемого фрагмента кода. По умолчанию
-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-м, Armv7ve, armv8-а, armv8-a + crc, iwmmxt, iwmmxt2, ep9312.
-march = armv7ve это архитектура armv7-a с расширениями виртуализации.
-march = armv8-a + crc позволяет генерировать код для архитектуры ARMv8-A вместе с
необязательные расширения CRC32.
-march = родной заставляет компилятор автоматически определять архитектуру сборки
компьютер. В настоящее время эта функция поддерживается только в GNU / 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,
Кора-a12, Кора-a15, Кора-a53, Кора-a57, Кора-a72, кора-r4, кора-r4f,
кора-r5, кора-r7, Кора-m7, Кора-m4, Кора-m3, Кора-m1, Кора-m0,
кора-m0plus, cortex-m1.small-множить, cortex-m0.small-множить,
cortex-m0plus.small-множить, чудо-pj4, масштаб, iwmmxt, iwmmxt2, ep9312, fa526,
fa626, fa606te, fa626te, фмп626, fa726te, xgene1.
Кроме того, этот параметр может указывать, что GCC должен настраивать производительность кода.
для системы big.LITTLE. Допустимые имена: кора-а15.кора-а7,
кора-а57.кора-а53, кора-а72.кора-а53.
-mtune = generic-арка указывает, что GCC должен настроить производительность для смеси
процессоры в архитектуре арка. Цель состоит в том, чтобы сгенерировать код, который хорошо работает на
текущие самые популярные процессоры, балансировка между оптимизациями, которые приносят пользу некоторым
ЦП в этом диапазоне и избежание проблем с производительностью других ЦП. Эффекты
этот параметр может измениться в будущих версиях GCC по мере того, как модели ЦП приходят и уходят.
-mtune = родной заставляет компилятор автоматически определять процессор компьютера сборки. В
в настоящее время эта функция поддерживается только в GNU / Linux, и не все архитектуры
признал. Если автоопределение не удалось, опция не действует.
-mcpu =имя
Это указывает имя целевого процессора ARM. GCC использует это имя для получения
имя целевой архитектуры ARM (как если бы указано -маршировать) и процессор ARM
тип, для которого настраивается производительность (как если бы -мтюн). Где этот вариант
используется в сочетании с -маршировать or -мтюн, эти параметры имеют приоритет перед
соответствующая часть этого варианта.
Допустимые названия для этой опции такие же, как и для -мтюн.
-mcpu = generic-арка также допустимо и эквивалентно -март =арка
-mtune = generic-арка. Посмотреть -мтюн чтобы получить больше информации.
-mcpu = родной заставляет компилятор автоматически определять процессор компьютера сборки. В
в настоящее время эта функция поддерживается только в GNU / Linux, и не все архитектуры
признал. Если автоопределение не удалось, опция не действует.
-mfpu =имя
Это указывает, какое оборудование с плавающей запятой (или аппаратная эмуляция) доступно на
цель. Допустимые имена: ВФП, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, неоновый, неон-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, неон-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, неон-fp-armv8и крипто-неон-fp-armv8.
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. Для стандартного базового случая PIC
по умолчанию будет любой подходящий регистр, определенный компилятором. Для одной базы ПОС
случае по умолчанию R9 если цель основана на EABI или включена проверка стека,
в противном случае по умолчанию R10 .
-mpic-данные-текст-относительный
Предположим, что каждый сегмент данных относится к текстовому сегменту во время загрузки. Следовательно,
он позволяет обращаться к данным с использованием операций, связанных с ПК. Эта опция включена по умолчанию
для целей, отличных от VxWorks RTP.
-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 =диалект
Укажите диалект, который будет использоваться для доступа к локальному хранилищу потока. Два диалектS,
поддерживается ---гну и 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 высока.
-mslow-flash-данные
Предположим, загрузка данных из флеш-памяти происходит медленнее, чем загрузка инструкции. Поэтому буквально
нагрузка сведена к минимуму для лучшей производительности. Эта опция поддерживается только тогда, когда
компиляция для ARMv7 M-профиля и отключена по умолчанию.
-mrestrict-это
Ограничивает создание ИТ-блоков в соответствии с правилами ARMv8. ИТ-блоки могут
содержат только одну 16-битную инструкцию из выбранного набора инструкций. Этот
опция включена по умолчанию для режима большого пальца ARMv8.
AVR Возможности
Эти параметры определены для реализаций 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 {} = "ata5272", "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 {} = "ata5505", "atmega16u2", "atmega32u2",
«atmega8u2», «attiny1634», «attiny167», «at90usb162», «at90usb82».
"avr4"
«Улучшенные» устройства с памятью программ объемом до 8 @ {} КиБ. БУМ@tie {} = "ata6285",
"ata6286", "atmega48", "atmega48a", "atmega48p", "atmega48pa", "atmega8",
"atmega8a", "atmega8hva", "atmega8515", "atmega8535", "atmega88", "atmega88a",
«atmega88p», «atmega88pa», «at90pwm1», «at90pwm2», «at90pwm2b», «at90pwm3»,
«at90pwm3b», «at90pwm81».
"avr5"
"Улучшенные" устройства с 16 @ связью {} КиБ до 64 @ связью {} КиБ программной памяти.
БУМ@tie {} = "ata5790", "ata5790n", "ata5795", "atmega16", "atmega16a",
"atmega16hva", "atmega16hva2", "atmega16hvb", "atmega16hvbrevb", "atmega16m1",
"atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a", "atmega164p",
"atmega164pa", "atmega165", "atmega165a", "atmega165p", "atmega165pa",
"atmega168", "atmega168a", "atmega168p", "atmega168pa", "atmega169", "atmega169a",
«atmega169p», «atmega169pa», «atmega26hvg», «atmega32», «atmega32a», «atmega32c1»,
"atmega32hvb", "atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega3250pa",
"atmega328", "atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega3290pa", "atmega406",
"atmega48hvf", "atmega64", "atmega64a", "atmega64c1", "atmega64hve", "atmega64m1",
"atmega64rfa2", "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
"atmega644p", "atmega644pa", "atmega645", "atmega645a", "atmega645p",
"atmega6450", "atmega6450a", "atmega6450p", "atmega649", "atmega649a",
«atmega649p», «atmega6490», «atmega6490a», «atmega6490p», «at90can32»,
"at90can64", "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100", "at90usb646",
«at90usb647», «at94k», «m3000».
"avr51"
«Улучшенные» устройства с 128 @ связью {} КиБ программной памяти. БУМ@tie {} = "atmega128",
"atmega128a", "atmega128rfa1", "atmega1280", "atmega1281", "atmega1284",
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".
"avr6"
"Усовершенствованные" устройства с 3-х байтовым ПК, т.е. с более чем 128 @ связью {} КиБ программы
Память. БУМ@tie {} = "atmega2560", "atmega2561".
"avrxmega2"
Устройства "XMEGA" с более чем 8 @ tie {} KiB и до 64 @ tie {} памяти программ.
БУМ@tie {} = "atmxt112sl", "atmxt224", "atmxt224e", "atmxt336s", "atxmega16a4",
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega32a4", "atxmega32a4u",
"atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".
"avrxmega4"
Устройства "XMEGA" с более чем 64 @ tie {} KiB и до 128 @ tie {} KiB программы
Память. БУМ@tie {} = "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
Устройства "XMEGA" с более чем 64 @ tie {} KiB и до 128 @ tie {} KiB программы
памяти и более 64 @ галстук {} КиБ ОЗУ. БУМ@tie {} = "atxmega64a1",
"atxmega64a1u".
"avrxmega6"
Устройства "XMEGA" с более чем 128 @ tie {} КиБ программной памяти. БУМ@tie {} =
"atmxt540s", "atmxt540sreva", "atxmega128a3", "atxmega128a3u", "atxmega128b1",
"atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
"atxmega192a3u", "atxmega192c3", "atxmega192d3", "atxmega256a3", "atxmega256a3b",
"atxmega256a3bu", "atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3",
"atxmega384d3".
"avrxmega7"
Устройства "XMEGA" с более чем 128 @ tie {} КиБ программной памяти и более
64 @ tie {} КБ ОЗУ. БУМ@tie {} = "atxmega128a1", "atxmega128a1u", "atxmega128a4u".
"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» и
заглушки компоновщика ниже.
-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 {} указателя стека.
-Waddr-space-конвертировать
Предупреждать о преобразованиях между адресными пространствами в случае, если полученный адрес
пространство не содержится во входящем адресном пространстве.
«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 может
(неявно) использовать его.
· RAM больше 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 {} КиБ программной памяти.
"__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_ISA_RMW__"
Устройство имеет инструкции чтения-изменения-записи (XCH, LAC, LAS и LAT).
"__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
процессор. Включены любые обходные пути, доступные для целевой версии кремния.
If видение is нет, обходные пути не включены. Если видение is любой, все
включены обходные пути для целевого процессора. Макрос «__SILICON_REVISION__»
определяется двумя шестнадцатеричными цифрами, представляющими старший и младший числа в
кремниевая доработка. Если видение is нет, "__SILICON_REVISION__" не определено.
If видение is любой, "__SILICON_REVISION__" определяется как 0xffff. Если это
необязательный видение не используется, GCC предполагает последнюю известную кремниевую ревизию
целевой процессор Blackfin.
GCC определяет макрос препроцессора для указанного процессор. Для лучший эльф инструментальная цепочка
эта опция вызывает связывание аппаратного BSP, предоставляемого libgloss, если -мсим is
не дано.
Без этой опции bf532 по умолчанию используется как процессор.
Обратите внимание, что поддержка bf561 неполный. Для bf561, только макрос препроцессора
определены.
-мсим
Указывает, что программа будет запускаться на симуляторе. Это заставляет симулятор
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.
Более медленный код генерируется для прыжков и вызовов.
-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 -мкореб,
используется модель программирования с одним приложением / двумя ядрами. В этой модели основные
функция Core B должна называться «coreb_main».
Если этот параметр не используется, используется модель программирования одноядерного приложения.
-мкорея
Создайте автономное приложение для ядра A BF561 при использовании одного приложения для каждого.
базовая модель программирования. Для поддержки Core используются правильные стартовые файлы и скрипты ссылок.
A, и макрос "__BFIN_COREA" определен. Этот параметр можно использовать только в
в сочетании с многоядерный.
-мкореб
Создайте автономное приложение для Core B BF561 при использовании одного приложения на каждое.
базовая модель программирования. Для поддержки Core используются правильные стартовые файлы и скрипты ссылок.
B, и определен макрос «__BFIN_COREB». Когда используется эта опция, "coreb_main"
следует использовать вместо "main". Этот параметр можно использовать только вместе с
многоядерный.
-мсдрам
Создайте отдельное приложение для SDRAM. Используются правильные стартовые файлы и скрипты ссылок.
для помещения приложения в SDRAM и определяется макрос «__BFIN_SDRAM». В
загрузчик должен инициализировать 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, совместимую с симулятором. Применимо к ELF
только компилятор.
-мята32
Выберите целочисленный тип шириной 32 бита.
-мбит-операции
Создает инструкции "sbit" / "cbit" для битовых манипуляций.
-mdata-model =модель
Выберите модель данных. Выбор для модель возле, далеко or средний. средний по умолчанию.
Однако далеко не действует с -mcr16c, поскольку архитектура CR16C не поддерживает
дальняя модель данных.
Дарвин Возможности
Эти параметры определены для всех архитектур, на которых работает операционная система Darwin.
FSF GCC на Дарвине не создает "толстых" объектных файлов; он создает объектный файл для
единая архитектура, для которой был создан 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
варианты и сканируются в порядке слева направо.
Каталог фреймворка - это каталог с фреймворками в нем. Фреймворк - это
каталог с Заголовки и / или Частные заголовки каталог, содержащийся непосредственно в нем, что
заканчивается .фреймворк. Имя фреймворка - это имя этого каталога, исключая
.фреймворк. Заголовки, связанные с фреймворком, находятся в одном из этих двух
каталоги, с Заголовки обыскивается первым. Подрамник - это каркас
каталог, который находится в фреймворке Рамки каталог. Включает подрамник
заголовки могут появляться только в заголовке фреймворка, который содержит подфреймворк, или
в заголовке дочернего подкадра. Два подрамника являются братьями и сестрами, если они встречаются в
те же рамки. Подрамник не должен иметь то же имя, что и каркас; а
предупреждение выдается, если это нарушено. В настоящее время подрамник не может иметь
подрамник; в будущем механизм может быть расширен для поддержки этого. В
стандартные рамки можно найти в / System / Library / Frameworks и
/ Library / Frameworks. Пример включения выглядит как "#include ",
в котором Рамки обозначает название фреймворка и заголовок.h находится в
Частные заголовки or Заголовки каталог.
-рамкадиректория
Подобно -F за исключением того, что каталог рассматривается как системный каталог. Главное отличие
между этим -рамка и -F это с -рамка компилятор не предупреждает
о конструкциях, содержащихся в файлах заголовков, найденных через директория. Этот вариант действителен
только для семейства языков C.
угаданный
Выдать отладочную информацию для используемых символов. Для формата отладки стабов,
это позволяет -feliminate-неиспользуемые-символы-отладки. По умолчанию это ВКЛ.
-gполный
Выдать отладочную информацию для всех символов и типов.
-mmacosx-version-min =версия
Самая ранняя версия MacOS X, на которой будет работать этот исполняемый файл, - версия, типичный
значения версия включают 10.1, 10.2 и 10.3.9.
Если компилятор был построен для использования заголовков системы по умолчанию, то значение по умолчанию для
эта опция - версия системы, на которой работает компилятор, в противном случае
по умолчанию выбираются варианты, совместимые с таким количеством систем и кодовых баз, как
возможное.
-мядро
Включите режим разработки ядра. В -мядро наборы опций -статический, -fno-общий,
-fno-use-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 в функции
пролог сгенерированного файла сборки.
-mbuild-константы
Обычно GCC проверяет 32- или 64-разрядную целочисленную константу, чтобы узнать, может ли он ее построить.
от более мелких констант в двух или трех инструкциях. Если не может, он выводит
константа как литерал и генерирует код для ее загрузки из сегмента данных во время выполнения.
Используйте эту опцию, чтобы потребовать от GCC построить ВСЕ целочисленные константы с использованием кода, даже если
требуется больше инструкций (максимум шесть).
Обычно этот параметр используется для создания динамического загрузчика общей библиотеки. Сама
разделяемая библиотека, она должна переместиться в память, прежде чем сможет найти переменные и
константы в собственном сегменте данных.
-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.
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-байтовой границе, вставив NOP в предыдущий пакет.
Этот параметр действует только тогда, когда включена упаковка VLIW. Он не создает новых
пакеты; он просто добавляет NOP к существующим.
-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. Этот переключатель необходимо использовать с -Миз.
-мекср
Расширенные регистры хранятся в стеке перед выполнением функции с монитором.
атрибут. Вариант по умолчанию -мекср. Эта опция действительна только для целей H8S.
-mno-exr
Расширенные регистры не хранятся в стеке до выполнения функции с монитором
атрибут. Вариант по умолчанию -mno-exr. Эта опция действительна только для целей H8S.
-мята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 соответственно.
-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 =тип процессора,
который просто настраивает сгенерированный код для указанного тип процессора, -март =тип процессора
позволяет GCC генерировать код, который может вообще не работать на процессорах, кроме одного
указано. Указание -март =тип процессора подразумевает -mtune =тип процессора.
Выбор для тип процессора составляют:
родной
Это выбирает ЦП для генерации кода во время компиляции, определяя
тип процессора компилирующей машины. С использованием -march = родной позволяет всем
подмножества команд, поддерживаемые локальным компьютером (следовательно, результат может не выполняться
на разных машинах). С использованием -mtune = родной производит код, оптимизированный для локальных
машина в рамках ограничений выбранного набора команд.
i386
Оригинальный процессор Intel i386.
i486
Процессор Intel i486. (Для этого чипа планирование не реализовано.)
i586
Pentium
Процессор Intel Pentium без поддержки MMX.
Pentium-MMX
Процессор Intel Pentium MMX на базе ядра Pentium с поддержкой набора команд MMX.
Pentiumpro
Процессор Intel Pentium Pro.
i686
При использовании с -маршировать, используется набор инструкций Pentium Pro, поэтому код запускается
на всех микросхемах семейства i686. При использовании с -мтюн, он имеет то же значение, что и
родовой.
Pentium2
Процессор Intel Pentium II на базе ядра Pentium Pro с поддержкой набора команд MMX.
Pentium3
Pentium3M
Процессор Intel Pentium III на базе ядра Pentium Pro с набором инструкций MMX и SSE
.
Pentium-M
Intel Pentium M; маломощная версия процессора Intel Pentium III с MMX, SSE и SSE2
поддержка набора команд. Используется ноутбуками Centrino.
Pentium4
Pentium4M
Процессор Intel Pentium 4 с поддержкой набора инструкций MMX, SSE и SSE2.
Prescott
Улучшенная версия процессора Intel Pentium 4 с инструкциями MMX, SSE, SSE2 и SSE3
установить опору.
Nocona
Улучшенная версия процессора Intel Pentium 4 с 64-битными расширениями, MMX, SSE, SSE2 и
Поддержка набора инструкций SSE3.
core2
Процессор Intel Core 2 с 64-битными расширениями, MMX, SSE, SSE2, SSE3 и SSSE3
поддержка набора команд.
Nehalem
Процессор Intel Nehalem с 64-битными расширениями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Поддержка набора инструкций SSE4.2 и POPCNT.
Westmere
Процессор Intel Westmere с 64-битными расширениями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Поддержка набора инструкций SSE4.2, POPCNT, AES и PCLMUL.
Песчаный Мост
Процессор Intel Sandy Bridge с 64-битными расширениями, MMX, SSE, SSE2, SSE3, SSSE3,
Поддержка набора инструкций SSE4.1, SSE4.2, POPCNT, AVX, AES и PCLMUL.
Ivy Bridge
Процессор Intel Ivy Bridge с 64-битными расширениями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Набор инструкций SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND и F16C
.
Haswell
Процессор Intel Haswell с 64-битными расширениями, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, ИМТ, ИМТ2
и поддержка набора команд F16C.
Broadwell
Процессор Intel Broadwell с 64-битными расширениями, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, ИМТ, ИМТ2,
Поддержка набора команд F16C, RDSEED, ADCX и PREFETCHW.
Bonnell
Процессор Intel Bonnell с 64-битными расширениями, MOVBE, MMX, SSE, SSE2, SSE3 и SSSE3
поддержка набора команд.
Silvermont
Процессор Intel Silvermont с 64-битными расширениями, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Поддержка набора инструкций SSE4.1, SSE4.2, POPCNT, AES, PCLMUL и RDRND.
k6 Процессор AMD K6 с поддержкой набора команд MMX.
k6-2
k6-3
Улучшенные версии процессора AMD K6 с MMX и 3DNow! поддержка набора команд.
Athlon
Athlon-Tbird
Процессор AMD Athlon с MMX, 3dNOW !, улучшенный 3DNow! и инструкции предварительной выборки SSE
.
Атлон-4
Athlon-XP
Athlon-MP
Улучшенный процессор AMD Athlon с MMX, 3DNow !, улучшенный 3DNow! и полная инструкция SSE
установить опору.
k8
Opteron
Athlon64
Athlon-FX
Процессоры на базе ядра AMD K8 с поддержкой набора команд x86-64, в том числе
процессоры AMD Opteron, Athlon 64 и Athlon 64 FX. (Это расширяет MMX,
SSE, SSE2, 3DNow !, улучшенное 3DNow! и 64-битные расширения набора команд.)
k8-sse3
оптерон-sse3
Athlon64-sse3
Улучшенные версии ядер AMD K8 с поддержкой набора инструкций SSE3.
амдфам10
Барселона
Процессоры на базе ядер AMD Family 10h с поддержкой набора команд x86-64. (Этот
суперсеты MMX, SSE, SSE2, SSE3, SSE4A, 3DNow !, улучшенные 3DNow !, ABM и 64-битные
расширения набора инструкций.)
бдвер1
Процессоры на базе ядер AMD Family 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, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM и 64-битный набор инструкций
расширения.)
бдвер3
Процессоры AMD семейства 15h на базе ядра с поддержкой набора команд x86-64. (Этот
суперсеты BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM и 64-битный набор инструкций
.
бдвер4
Процессоры AMD семейства 15h на базе ядра с поддержкой набора команд x86-64. (Этот
суперсеты BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM и
64-битные расширения набора инструкций.
бтвер1
Процессоры на базе ядер AMD Family 14h с поддержкой набора команд x86-64. (Этот
надмножества MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM и 64-битный набор инструкций
расширения.)
бтвер2
Процессоры на базе ядер AMD Family 16h с поддержкой набора команд x86-64. Этот
включает MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX и 64-битные расширения набора инструкций.
лебедка-c6
IDT WinChip C6 CPU, работает так же, как i486, с дополнительным набором инструкций MMX
.
винчип2
IDT WinChip 2 CPU, работает так же, как i486, с дополнительным MMX и 3DNow!
поддержка набора команд.
c3 VIA C3 CPU с MMX и 3DNow! поддержка набора команд. (Нет расписания
реализовано для этого чипа.)
c3-2
VIA C3-2 (Nehemiah / C5XL) CPU с поддержкой MMX и SSE. (Нет
для этого чипа реализовано планирование.)
жеода
Встроенный процессор AMD Geode с MMX и 3DNow! поддержка набора команд.
-mtune =тип процессора
Настройтесь на тип процессора все, что применимо к сгенерированному коду, кроме ABI
и набор доступных инструкций. Выбирая конкретный тип процессора графики
вещи, соответствующие этому конкретному чипу, компилятор не генерирует никакого кода
который не может работать на компьютере по умолчанию, если вы не используете -март =тип процессора опцию.
Например, если GCC настроен для i686-pc-linux-gnu, тогда -mtune = Pentium4 генерирует
код, настроенный для Pentium 4, но работающий на машинах i686.
Выбор для тип процессора такие же, как для -маршировать, К тому же, -мтюн опоры 2
дополнительный выбор для тип процессора:
родовой
Создавайте код, оптимизированный для наиболее распространенных процессоров IA32 / AMD64 / EM64T. если ты
знать процессор, на котором будет выполняться ваш код, тогда вы должны использовать соответствующий
-мтюн or -маршировать вместо -mtune = общий. Но, если ты не знаешь
какие именно ЦП будут иметь пользователи вашего приложения, тогда вы должны использовать это
опцию.
По мере появления на рынке новых процессоров поведение этого параметра
изменится. Поэтому, если вы обновитесь до более новой версии GCC, генерация кода
управляемый этой опцией, будет изменен, чтобы отразить процессоры, которые больше всего
распространены во время выпуска этой версии GCC.
Здесь нет -march = общий вариант, потому что -маршировать указывает на набор инструкций
компилятор может использовать, и нет общего набора инструкций, применимого ко всем
процессоры. Наоборот, -мтюн обозначает процессор (или, в данном случае,
набор процессоров), для которых оптимизирован код.
Intel
Создавать код, оптимизированный для самых современных процессоров Intel, таких как Haswell.
и Silvermont для этой версии GCC. Если вы знаете процессор, на котором работает ваш код
будет запущен, тогда вы должны использовать соответствующий -мтюн or -маршировать вместо
-mtune = intel. Но если вы хотите, чтобы ваше приложение работало лучше как на Haswell,
и Silvermont, то вам следует использовать эту опцию.
По мере появления на рынке новых процессоров Intel поведение этого
вариант изменится. Поэтому, если вы обновитесь до более новой версии GCC, код
поколение, контролируемое этой опцией, изменится, чтобы отразить самую последнюю версию Intel
процессоров на момент выпуска этой версии GCC.
Здесь нет -march = intel вариант, потому что -маршировать указывает на набор инструкций
компилятор может использовать, и нет общего набора инструкций, применимого ко всем
процессоры. Наоборот, -мтюн обозначает процессор (или, в данном случае,
набор процессоров), для которых оптимизирован код.
-mcpu =тип процессора
Устаревший синоним слова -мтюн.
-mfpmath =Ед. изм
Сгенерировать арифметику с плавающей запятой для выбранной единицы Ед. изм. Выбор для Ед. изм составляют:
387 Используйте стандартный сопроцессор с плавающей запятой 387, присутствующий на большинстве микросхем
и эмулировал иначе. Код, скомпилированный с этой опцией, работает почти везде.
Временные результаты вычисляются с точностью до 80 бит вместо точности.
указан типом, что приводит к немного другим результатам по сравнению с большинством
другие фишки. Видеть -флот-магазин для более подробного описания.
Это выбор по умолчанию для компилятора i386.
SSE Используйте скалярные инструкции с плавающей запятой, присутствующие в наборе инструкций SSE. Этот
набор команд поддерживается Pentium III и более новыми чипами, а также в линейке AMD
на процессорах Athlon-4, Athlon XP и Athlon MP. Более ранняя версия SSE
набор команд поддерживает только арифметику с одинарной точностью, поэтому двойные и
арифметические операции повышенной точности по-прежнему выполняются с использованием 387. Более поздняя версия, присутствует
только в процессорах Pentium 4 и AMD x86-64, также поддерживает арифметику двойной точности.
Для компилятора i386 вы должны использовать -март =тип процессора, -msse or -msse2 переключается на
включите расширения SSE и сделайте эту опцию эффективной. Для компилятора x86-64
эти расширения включены по умолчанию.
Результирующий код должен быть значительно быстрее в большинстве случаев и
избежать проблем с числовой нестабильностью кода 387, но может нарушить некоторые существующие
код, который ожидает, что временные файлы будут 80-битными.
Это выбор по умолчанию для компилятора x86-64.
sse, 387
sse + 387
изоферменты печени
Попытайтесь использовать оба набора инструкций одновременно. Это эффективно удваивает
количество доступных регистров, а на микросхемах с отдельными исполнительными блоками на 387
и SSE ресурсы исполнения тоже. Используйте эту опцию осторожно, так как она все еще
экспериментальный, потому что распределитель регистров GCC не моделирует отдельные
функциональные блоки хорошо, что приводит к нестабильной работе.
-masm =диалект
Вывести инструкции по сборке с использованием выбранного диалект. Поддерживаемые варианты: 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, поэтому инструкция не требует
эмуляция. Эти инструкции не создаются, если вы также не используете
-funsafe-математическая-оптимизация переключатель.
-злокачественный-двойной
-mno-align-двойной
Контролируйте, выравнивает ли GCC переменные типа double, long double и long long на
граница из двух слов или граница из одного слова. Выравнивание "двойных" переменных на двух словах
Граница создает код, который работает несколько быстрее на Pentium за счет большего
Память.
На 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, а также изменение
соглашение о вызове функций для функций, принимающих "длинный двойной". Следовательно, они не
двоично-совместимый с кодом, скомпилированным без этого переключателя.
-млонг-двойной-64
-млонг-двойной-80
-млонг-двойной-128
Эти переключатели регулируют размер типа «длинный двойной». Размер 64 бита делает
Тип "long double" эквивалентен типу "double". Это значение по умолчанию для 32-битной версии.
Библиотека Bionic C. Размер 128 бит делает тип "long double" эквивалентным типу
Тип «__float128». Это значение по умолчанию для 64-битной библиотеки Bionic C.
Внимание! если вы переопределите значение по умолчанию для вашего целевого ABI, это изменит размер
структур и массивов, содержащих переменные типа long double, а также изменение
соглашение о вызове функций для функций, принимающих "длинный двойной". Следовательно, они не
двоично-совместимый с кодом, скомпилированным без этого переключателя.
-mlarge-data-threshold =порог
После появления -mcmodel = средний указано, объекты данных больше, чем порог помещены в
большой раздел данных. Это значение должно быть одинаковым для всех объектов, связанных с
двоичный файл и по умолчанию 65535.
-мртд
Используйте другое соглашение о вызове функций, в котором функции, которые принимают фиксированный
количество аргументов, возвращаемых с помощью "ret" число " инструкция, которая выдвигает свои аргументы
при возвращении. Это сохраняет одну инструкцию в вызывающей программе, так как нет необходимости
вставьте туда аргументы.
Вы можете указать, что отдельная функция вызывается с этой последовательностью вызовов с помощью
атрибут функции 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-байтовой границы. Поскольку x86-64 ABI требует выравнивания стека 16 байт, это ABI
несовместимы и предназначены для использования в контролируемой среде, где пространство стека ограничено.
важное ограничение. Эта опция приведет к неправильному коду при компиляции функций.
с 16-байтовым выравниванием стека (например, функции из стандартной библиотеки) вызываются
со смещенным стеком. В этом случае инструкции SSE могут привести к смещению памяти.
доступ к ловушкам. Кроме того, переменные аргументы будут обрабатываться некорректно для 16 байт.
выровненные объекты (включая x87 long double и __int128), приводящие к неверным результатам.
Вы должны собрать все модули с -mpreferred-stack-boundary = 3, включая любые библиотеки.
Сюда входят системные библиотеки и модули запуска.
-mincoming-stack-boundary =Num
Предположим, что входящий стек выровнен по 2, увеличенному до Num граница байта. Если
-mincoming-stack-граница не указан, тот, который указан
-mpreferred-stack-граница используется.
В Pentium и Pentium Pro значения "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
-mavx512f
-mno-avx512f
-mavx512pf
-mno-avx512pf
-mavx512er
-mno-avx512er
-mavx512cd
-mno-avx512cd
-мша
-мно-ша
-мэйс
-мно-аес
-mpclmul
-мно-пклмул
-mfsgsbase
-mno-fsgsbase
-мрдрнд
-мно-rdrnd
-mf16c
-mno-f16c
-мфма
-мно-фма
-mprefetchwt1
-mno-prefetchwt1
-msse4a
-mno-sse4a
-мфма4
-mno-fma4
-mxop
-мно-хоп
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-мно-попцнт
-мабм
-мно-абм
-мбми
-mbmi2
-мно-бми
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mfxsr
-mxsave
-mxsaveopt
-мртм
-мтбм
-мно-тбм
Эти переключатели включают или отключают использование инструкций в MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL,
FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE,
XSAVEOPT, LZCNT, RTM или 3DNow! расширенные наборы инструкций. Эти расширения также
доступны как встроенные функции: см. X86 Встроенный функции, для получения подробной информации о
функции, включенные и отключенные этими переключателями.
Для автоматической генерации инструкций SSE / SSE2 из кода с плавающей запятой (в отличие от
к инструкции 387), см. -mfpmath = sse.
GCC отменяет инструкции SSEx, когда -мавкс используется. Вместо этого он генерирует новый AVX
инструкции или эквивалент AVX для всех инструкций SSEx при необходимости.
Эти параметры позволяют GCC использовать эти расширенные инструкции в сгенерированном коде, даже
без -mfpmath = sse. Приложения, выполняющие определение ЦП во время выполнения, должны компилироваться.
отдельные файлы для каждой поддерживаемой архитектуры, используя соответствующие флаги. В
в частности, файл, содержащий код обнаружения ЦП, должен быть скомпилирован без
эти варианты.
-mdump-tune-особенности
Этот параметр предписывает GCC выгрузить имена функций настройки производительности x86 и
настройки по умолчанию. Имена могут использоваться в -mtune-ctrl =список возможностей.
-mtune-ctrl =список возможностей
Этот параметр используется для точного управления функциями генерации кода x86.
список возможностей список разделенных запятыми которая имена. Смотрите также
-mdump-tune-особенности. Если указано, которая будет включен, если это не так
предшествует "^", в противном случае он будет отключен. -mtune-ctrl =список возможностей is
предназначен для использования разработчиками GCC. Его использование может привести к путям кода, не охваченным
тестирование и потенциально может привести к ICE компилятора или ошибкам времени выполнения.
-mno-по умолчанию
Этот параметр указывает GCC отключить все настраиваемые функции. Смотрите также
-mtune-ctrl =список возможностей и -mdump-tune-особенности.
-мклд
Эта опция предписывает 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 __ атомный Встроенные для получения информации.
-мсахф
Эта опция позволяет генерировать инструкции «SAHF» в 64-битном коде. Ранний Intel
Процессоры Pentium 4 с поддержкой Intel 64 до появления Pentium 4 G1 step
в декабре 2005 г. отсутствовали инструкции «LAHF» и «SAHF», которые были поддержаны
AMD64. Это инструкции загрузки и сохранения, соответственно, для определенных флагов состояния.
В 64-битном режиме инструкция «SAHF» используется для оптимизации «fmod», «drem» и
встроенные функции «остаток»; видеть Другой Встроенные для получения информации.
-ммовбе
Эта опция позволяет использовать инструкцию "movbe" для реализации "__builtin_bswap32"
и «__builtin_bswap64».
-mcrc32
Эта опция включает встроенные функции «__builtin_ia32_crc32qi»,
«__builtin_ia32_crc32hi», «__builtin_ia32_crc32si» и «__builtin_ia32_crc32di» на
сгенерируйте машинную инструкцию "crc32".
-mrecip
Эта опция позволяет использовать инструкции «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 =выбирать
Эта опция контролирует, какие инструкции обратной оценки могут быть использованы. выбирать - это
список параметров, разделенных запятыми, которым может предшествовать ! чтобы инвертировать опцию:
ВСЕ Включите все инструкции по оценке.
по умолчанию
Включите инструкции по умолчанию, эквивалентные -mrecip.
нет
Отключить все инструкции по оценке, эквивалентные -мно-рецип.
DIV Включите приближение для скалярного деления.
vec-div
Включите аппроксимацию для векторизованного деления.
SQRT
Включите приближение для скалярного квадратного корня.
vec-sqrt
Включите аппроксимацию для векторизованного квадратного корня.
Так, например, -mrecip = все,! sqrt позволяет все обратные приближения,
кроме квадратного корня.
-mveclibabi =напишите
Задает тип ABI, который будет использоваться для векторизации встроенных функций с использованием внешней библиотеки.
Поддерживаемые значения для напишите svml для короткой векторной математической библиотеки Intel и акмл
для основной математической библиотеки AMD. Чтобы использовать эту опцию, оба -ftree-векторизация и
-funsafe-математическая-оптимизация должны быть включены, и совместим с SVML или ACML ABI
библиотека должна быть указана во время компоновки.
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 is
использовано и «__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 используется.
-mabi =имя
Сгенерируйте код для указанного соглашения о вызовах. Допустимые значения сисв для
ABI, используемый в GNU / Linux и других системах, и ms для Microsoft ABI. В
по умолчанию используется Microsoft ABI при нацеливании на Microsoft Windows и SysV ABI.
на всех остальных системах. Вы можете контролировать это поведение для конкретной функции, используя
атрибут функции мс_аби/sysv_abi.
-mtls-dialect =напишите
Сгенерируйте код для доступа к локальному хранилищу потока с помощью гну or GNU2 конвенций. гну
консервативный дефолт; GNU2 более эффективен, но может добавить компиляцию и запуск
требования ко времени, которые не могут быть удовлетворены во всех системах.
-mpush-аргументы
-mno-push-аргументы
Используйте операции PUSH для сохранения исходящих параметров. Этот метод короче и обычно
так же быстро, как и метод, использующий операции SUB / MOV, и включен по умолчанию. В некоторых
случаев, отключение которых может улучшить производительность из-за улучшенного планирования и уменьшения
зависимости.
-maccumulate-исходящие-аргументы
Если включено, максимальный объем пространства, необходимый для исходящих аргументов, вычисляется в
пролог функции. Это быстрее на большинстве современных процессоров из-за меньшего
зависимости, улучшенное планирование и сокращение использования стека, когда предпочтительный стек
Граница не равна 2. Недостатком является заметное увеличение размера кода. Этот
переключатель подразумевает -mno-push-аргументы.
-mthreads
Поддержка поточно-ориентированной обработки исключений на MinGW. Программы, которые полагаются на потокобезопасность
обработка исключений должна компилироваться и связывать весь код с -mthreads вариант. Когда
компиляция, -mthreads определяет "-D_MT"; при связывании ссылки в специальной ветке
вспомогательная библиотека -lmingwthrd который очищает данные обработки исключений для каждого потока.
-mno-align-stringops
Не выравнивайте назначение встроенных строковых операций. Этот переключатель уменьшает код
размер и повышает производительность в случае, если место назначения уже выровнено, но GCC
не знает об этом.
-минлайн-все-струнные
По умолчанию GCC встраивает строковые операции только в том случае, если известно, что адресатом
выровнен по крайней мере по 4-байтовой границе. Это позволяет больше встраивать и увеличивает код.
размер, но может улучшить производительность кода, который зависит от быстрых memcpy, strlen и
"мемсет" для коротких отрезков.
-minline-stringops-динамически
Для строковых операций неизвестного размера используйте проверки времени выполнения со встроенным кодом для небольших
блоки и библиотека требуют больших блоков.
-mstringop-strategy =ALG
Отменить внутреннюю эвристику решения для конкретного алгоритма, чтобы использовать для
встраивание строковых операций. Допустимые значения для ALG составляют:
Rep_byte
Rep_4byte
Rep_8byte
Разверните с помощью префикса i386 "rep" указанного размера.
byte_loop
поиска
развернутый_луп
Разверните во встроенный цикл.
libcall
Всегда используйте вызов библиотеки.
-mmemcpy-strategy =стратегия
Переопределите внутреннюю эвристику принятия решения, чтобы решить, следует ли использовать "__builtin_memcpy"
встроенный и какой встроенный алгоритм использовать, когда ожидаемый размер операции копирования
известен. стратегия это список разделенных запятыми ALG:макс_размер:dest_align тройни. ALG
указано в -mstringop-стратегия, макс_размер определяет максимальный размер байта, с которым
встроенный алгоритм ALG позволено. Для последней тройки макс_размер должно быть «-1». В
макс_размер троек в списке необходимо указывать в порядке возрастания. В
минимальный размер байта для ALG равен 0 для первой тройки и "макс_размер + 1"
предыдущий диапазон.
-mmemset-strategy =стратегия
Вариант похож на -mmemcpy-strategy = за исключением того, что это контролировать
Расширение "__builtin_memset".
-Momit-Leaf-Frame-указатель
Не храните указатель фрейма в регистре для листовых функций. Это позволяет избежать
инструкции по сохранению, настройке и восстановлению указателей кадров и создание дополнительного регистра
доступны в листовых функциях. Опция -fomit-лист-рамка-указатель снимает рамку
указатель на листовые функции, которые могут затруднить отладку.
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Управляет доступом к переменным TLS со смещениями из сегмента TLS.
регистр (% gs для 32-разрядной версии,% fs для 64-разрядной версии), или должен ли базовый указатель потока быть
добавлен. Верно это или нет, зависит от операционной системы и от того,
отображает сегмент, чтобы покрыть всю область TLS.
Для систем, использующих библиотеку GNU C, значение по умолчанию включено.
-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.
-mstack-протектор-охрана =охрана
Сгенерируйте код защиты стека с помощью canary в охрана. Поддерживаемые местоположения: Глобальный
для глобальной канарейки или TLS для поточной канарейки в блоке TLS (по умолчанию). Этот
опция действует только тогда, когда -fstack-протектор or -fstack-протектор-все указан.
Эти -m Переключатели поддерживаются в дополнение к вышеперечисленному на процессорах x86-64 в 64-битных версиях.
сред.
-м32
-м64
-мх32
-м16
Сгенерируйте код для 16-битной, 32-битной или 64-битной среды. В -м32 набор опций "int",
"long" и типы указателей на 32 бита, и генерирует код, который работает в любой системе i386.
Команда -м64 option устанавливает "int" равным 32 битам и "long", а типы указателей - 64 битами, и
генерирует код для архитектуры x86-64. Для Дарвина только -м64 вариант также
выключает -фно-пик и -mdynamic-без изображения настройки.
Команда -мх32 option устанавливает типы "int", "long" и указатель на 32 бита и генерирует код
для архитектуры x86-64.
Команда -м16 вариант такой же, как -м32, за исключением того, что он выводит ".code16gcc"
директива сборки в начале вывода сборки, чтобы двоичный файл мог работать
в 16-битном режиме.
-мно-красная-зона
Не используйте так называемую «красную зону» для кода 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 Возможности
Эти дополнительные параметры доступны для целей Microsoft Windows:
-mconsole
Эта опция указывает, что консольное приложение должно быть сгенерировано, путем указания
компоновщик для установки типа подсистемы заголовка PE, необходимого для консольных приложений.
Эта опция доступна для целей Cygwin и MinGW и включена по умолчанию на
эти цели.
-mdll
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что DLL --- a
библиотека динамической компоновки --- должна быть сгенерирована, что позволит выбрать требуемый
объект запуска среды выполнения и точка входа.
-mnop-весело-dllimport
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что
Атрибут "dllimport" следует игнорировать.
-mthread
Эта опция доступна для целей MinGW. Он указывает, что поток, специфичный для MinGW,
поддержка должна использоваться.
-коммуникод
Эта опция доступна для целей MinGW-w64. Это вызывает препроцессор "UNICODE"
макрос, который должен быть предопределен, и выбирает код запуска среды выполнения с поддержкой Unicode.
-mwin32
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что типичный
Предопределенные макросы Microsoft Windows должны быть установлены в препроцессоре, но не
влияют на выбор библиотеки времени выполнения / кода запуска.
-мокна
Эта опция доступна для целей Cygwin и MinGW. Он указывает, что графический интерфейс
приложение должно быть сгенерировано, указав компоновщику установить заголовок PE
тип подсистемы соответственно.
-fno-set-stack-исполняемый файл
Эта опция доступна для целей MinGW. Он указывает, что исполняемый флаг для
стек, используемый вложенными функциями, не установлен. Это необходимо для запуска двоичных файлов
в режиме ядра Microsoft Windows, так как там User32 API, который используется для установки
исполняемые привилегии, недоступны.
-fwritable-перемещено-rdata
Эта опция доступна для целей MinGW и Cygwin. В нем указано, что перемещенный -
данные в разделе только для чтения помещаются в раздел .data. Это необходимо для пожилых
среды выполнения, не поддерживающие модификацию разделов .rdata для псевдоперемещения.
-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
Не (или не создавайте) код ассемблера для информации об отладке номера строки DWARF 2.
Это может быть полезно, когда не используется ассемблер GNU.
-Marly-Stop-биты
-мно-ранние-стоп-биты
Разрешить установку стоповых битов раньше, чем непосредственно перед инструкцией, которая
сработал стоповый бит. Это может улучшить планирование инструкций, но не всегда
Сделай так.
-mfixed-range =регистр-диапазон
Сгенерируйте код, обрабатывающий данный диапазон регистров как фиксированные регистры. Фиксированный регистр
это тот, который не может использовать распределитель регистров. Это полезно при компиляции ядра
код. Диапазон регистров определяется как два регистра, разделенных тире. Несколько
диапазоны регистров можно указать через запятую.
-mtls-size =tls-размер
Укажите размер битов для немедленных смещений TLS. Допустимые значения: 14, 22 и 64.
-mtune =тип процессора
Настройте расписание инструкций для конкретного процессора. Допустимые значения: Itanium,
итаниум1, слился, итаниум2и Мак-Кинли.
-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» / «chk.a»). В
по умолчанию - «отключить».
-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-жесткий-ограничение
Делает предел, указанный мшед-макс-память-инснс жесткий предел, запрещающий больше
чем это число в группе инструкций. В противном случае ограничение будет "мягким", что означает
что операции, не связанные с памятью, предпочтительнее при достижении предела, но память
операции все еще могут быть запланированы.
LM32 Возможности
Эти -m параметры определены для архитектуры LatticeMico32:
-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 вместо обычных разделов данных или 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 51ag 51cn 51em 51je 51jf 51jg 51jm 51 мм 51кэ 51qm
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 is
код совместимости. Примеры значений: Версия 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-проверить .
-mxl-gp-opt
Используйте GP-относительные разделы ".sdata" / ". Sbss".
-mxl-умножить-высокий
Используйте высокие инструкции умножения для старшей части умножения 32x32.
-mxl-поплавок-конвертировать
Используйте аппаратные инструкции преобразования с плавающей запятой.
-mxl-поплавок-sqrt
Используйте аппаратную инструкцию извлечения квадратного корня с плавающей запятой.
-mbig-endian
Сгенерируйте код для цели с прямым порядком байтов.
-с младшим порядком байтов
Сгенерируйте код для цели с прямым порядком байтов.
-mxl-переупорядочить
Используйте инструкции по изменению порядка (перестановка и обратная загрузка / сохранение байтов).
-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, 34kn, 74kc, 74кф2_1, 74кф1_1, 74кф3_2, 1004kc,
1004кф2_1, 1004кф1_1, лунгсон2е, лунгсон2ф, лунгсон3а, m4k, m14k, м14кс, m14ke,
m14kec, октеон, октеон +, октеон2, Орион, r2000, r3000, r3900, r4000, r4400, r4600,
r4650, r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1,
sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, XLR и XLP.
Особая ценность из-аби выбирает наиболее совместимую архитектуру для выбранных
ABI (то есть мипс1 для 32-битных ABI и мипс3 для 64-битных ABI).
Собственный набор инструментов Linux / GNU также поддерживает значение родной, который выбирает лучшие
вариант архитектуры для хост-процессора. -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 оптимизирует процессор для процессора, указанного в -маршировать. Durch,en
через -маршировать и -мтюн вместе можно сгенерировать код, работающий на
семейство процессоров, но оптимизируйте код для одного конкретного члена этого семейства.
-мтюн определяет макросы _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-сжатый
-mno-interlink-сжатый
Требовать (не требовать), чтобы код, использующий стандартный (несжатый) MIPS ISA, был связан-
совместим с кодом MIPS16 и microMIPS, и наоборот.
Например, код, использующий стандартную кодировку ISA, не может напрямую перейти к MIPS16 или
код microMIPS; он должен использовать вызов или косвенный переход. -minterlink-сжатый
поэтому отключает прямые прыжки, если GCC не знает, что цель прыжка не
сжатый.
-minterlink-mips16
-mno-интерлинк-mips16
Псевдонимы -minterlink-сжатый и -mno-interlink-сжатый. Эти варианты
предшествуют microMIPS ASE и сохранены для обратной совместимости.
-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-поплавок
Не используйте инструкции сопроцессора с плавающей запятой. Реализовать плавающую точку
вычисления с использованием вместо этого библиотечных вызовов.
-мно-поплавок
Эквивалентно -msoft-поплавок, но дополнительно утверждает, что компилируемая программа
не выполняет никаких операций с плавающей запятой. Эта опция в настоящее время поддерживается
только некоторыми конфигурациями MIPS с голым железом, где он может выбрать специальный набор
библиотеки, в которых отсутствует вся поддержка операций с плавающей запятой (включая, например,
пункт "printf" форматы). Если код, скомпилированный с помощью "-mno-float", случайно содержит
операций с плавающей запятой, вероятно, произойдет сбой во время компоновки или выполнения.
-мн-поплавок
Предположим, что сопроцессор с плавающей запятой поддерживает только операции с одинарной точностью.
-mdouble-поплавок
Предположим, что сопроцессор с плавающей запятой поддерживает операции с двойной точностью. Этот
по умолчанию.
-mabs = 2008
-mabs = наследие
Эти параметры управляют обработкой специального не-числа (NaN) IEEE 754
данные с плавающей запятой с "абс.fmt " и "нег.fmt " машинные инструкции.
По умолчанию или когда -mabs = наследие используется устаревшее лечение. В этом
в случае, если эти инструкции считаются арифметическими, их следует избегать при правильной работе.
является обязательным, и входным операндом может быть NaN. Более длинная последовательность инструкций
которые манипулируют знаковым битом данных с плавающей запятой вручную, вместо этого используется
-ffinite-math-only - только математика вариант также был указан.
Команда -mabs = 2008 опция выбирает обработку IEEE 754-2008. В этом случае эти
инструкции считаются неарифметическими и поэтому работают правильно во всех
случаи, в том числе, в частности, когда входным операндом является NaN. Эти инструкции
поэтому всегда используются для соответствующих операций.
-mnan = 2008
-mnan = наследие
Эти параметры управляют кодировкой специального не числа (NaN) IEEE 754.
данные с плавающей запятой.
Команда -mnan = наследие опция выбирает устаревшую кодировку. В этом случае тихие NaN (qNaNs)
обозначаются первым битом их конечного поля значимости, равным 0, тогда как
сигнальные NaN (sNaN) обозначаются первым битом их конечной значащей
поле равно 1.
Команда -mnan = 2008 опция выбирает кодировку IEEE 754-2008. В этом случае qNaN
обозначается первым битом их конечного поля значимости, равным 1, тогда как sNaNs
обозначаются нулевым первым битом их конечного поля значения.
По умолчанию используется -mnan = наследие если GCC не был настроен с --with-nan = 2008.
-мллск
-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д подразумевает -поврежденный-одиночный.
-мммикромипс
-мно-микромипы
Генерировать (не генерировать) код microMIPS.
Генерацию кода MicroMIPS также можно контролировать для каждой функции с помощью
атрибуты "микромагниты" и "номикромпы".
-ммт
-мно-мт
Используйте (не используйте) инструкции MT Multithreading.
-ммку
-мно-мку
Используйте (не используйте) инструкции MIPS MCU ASE.
-мева
-мно-ева
Используйте (не используйте) инструкции MIPS Enhanced Virtual Addressing.
-мирт
-мно-вирт
Используйте (не используйте) инструкции для конкретного приложения виртуализации MIPS.
-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 ИСА.
-мимадд
-мно-имадд
Включение (отключение) использования целочисленных инструкций madd и msub. По умолчанию
-мимадд на архитектурах, поддерживающих madd и msub, кроме 74k
архитектура, в которой было обнаружено, что код генерируется медленнее.
-растерянный-безумный
-mno-плавленный-madd
Включите (отключите) использование команд умножения-накопления с плавающей запятой, когда они
доступны. По умолчанию -растерянный-безумный.
На процессоре R8000 при использовании инструкций умножения с накоплением промежуточный
продукт рассчитан с бесконечной точностью и не подлежит FCSR Flush to
Нулевой бит. В некоторых случаях это может быть нежелательно. На других процессорах
результат численно идентичен эквивалентному вычислению с использованием отдельного умножения,
инструкции сложения, вычитания и отрицания.
-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-rm7000
-mno-fix-rm7000
Работа с ошибками RM7000 "dmult" / "dmultu". Обходные пути реализованы
ассемблер, а не GCC.
-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__.
Дерзость Возможности
-меб
Сгенерируйте код с прямым порядком байтов. Это значение по умолчанию для дерзкий - * - * конфигурации.
-мель
Сгенерируйте код с прямым порядком байтов.
-mno-crt0
Не связывайте объектный файл инициализации среды выполнения C.
MSP430 Возможности
Эти параметры определены для MSP430:
-masm-hex
Заставить вывод сборки всегда использовать шестнадцатеричные константы. Обычно такие константы подписываются
десятичные дроби, но эта опция доступна для тестовых и / или эстетических целей.
-mmcu =
Выберите MCU для нацеливания. Это используется для создания символа препроцессора C на основе
имя MCU, преобразованное в верхний регистр и фиксированное до и после символа «__». Это в
Turn будет использоваться файлом заголовка "msp430.h" для выбора конкретного MCU
дополнительный заголовочный файл.
Эта опция также устанавливает используемый ISA. Если имя MCU известно только
поддерживайте 430 ISA, в противном случае выбирается 430X ISA. А
общее имя MCU «msp430» также может использоваться для выбора 430 ISA. Аналогичным образом
общее имя MCU "msp430x" выберет 430X ISA.
Кроме того, в командную строку компоновщика будет добавлен специальный сценарий компоновщика MCU.
Имя сценария - это имя MCU с добавленным «.ld». Таким образом, указав
-mmcu = xxx в командной строке gcc определит символ препроцессора C "__XXX__" и
заставить компоновщик искать сценарий с именем xxx.ld.
Эта опция также передается ассемблеру.
-mcpu =
Задает используемый ISA. Допустимые значения: msp430, msp430x и msp430xv2.
Эта опция устарела. В -mmcu = следует использовать опцию для выбора ISA.
-мсим
Ссылка на библиотеки времени выполнения симулятора и скрипт компоновщика. Переопределяет любые скрипты, которые
будет выбран -mmcu = опцию.
-мбольшой
Используйте адресацию большой модели (20-битные указатели, 32-битный size_t).
-msмаленький
Используйте адресацию малой модели (16-битные указатели, 16-битный "size_t").
-мелакс
Эта опция передается ассемблеру и компоновщику и позволяет компоновщику выполнять
определенные оптимизации, которые не могут быть выполнены до последней ссылки.
mhwmult =
Описывает тип множителя аппаратного обеспечения, поддерживаемый целью. Допустимые значения:
«none» - без аппаратного умножения, «16bit» - для исходного 16-битного умножения
поддерживается ранними микроконтроллерами. «32-битный» для 16/32-битного умножения, поддерживаемого более поздними микроконтроллерами
и «f5series» для 16/32-битного умножения, поддерживаемого микроконтроллерами серии F5. Ценность
"авто" тоже можно дать. Это говорит GCC вывести поддержку аппаратного умножения.
на основе имени MCU, предоставленного -ммку вариант. Если нет -ммку опция указана
тогда предполагается "32-битная" поддержка аппаратного умножения. "авто" является настройкой по умолчанию.
Аппаратное умножение обычно выполняется путем вызова библиотечной процедуры. Это спасает
пробел в сгенерированном коде. Однако при компиляции с "-O3" или выше аппаратное обеспечение
multiplier вызывается в строке. Это делает код больше, но быстрее.
Процедуры аппаратного умножения отключают прерывания во время работы и восстанавливают
предыдущее состояние прерывания, когда они заканчивают. Это делает их безопасными для использования внутри
обработчики прерываний так же, как и в обычном коде.
-минрт
Разрешить использование минимальной среды выполнения - без статических инициализаторов или
конструкторы. Это предназначено для устройств с ограниченным объемом памяти. Компилятор будет
включать в некоторые объекты специальные символы, которые сообщают компоновщику и среде выполнения, какой код
фрагменты обязательны.
NDS32 Возможности
Эти параметры определены для реализаций NDS32:
-mbig-endian
Сгенерируйте код в режиме прямого байта.
-с младшим порядком байтов
Сгенерируйте код в режиме прямого порядка байтов.
-mrededed-regs
Используйте регистры сокращенного набора для распределения регистров.
-mfull-regs
Используйте полные регистры для размещения регистров.
-макмов
Сгенерируйте условные инструкции перемещения.
-мно-смов
Не создавайте условных инструкций перемещения.
-perf-ext
Сгенерируйте инструкции по увеличению производительности.
-mno-perf-ext
Не создавайте инструкции по увеличению производительности.
-mv3push
Сгенерируйте инструкции v3 push25 / pop25.
-mno-v3push
Не создавайте инструкции v3 push25 / pop25.
-m16-бит
Сгенерируйте 16-битные инструкции.
-mno-16-бит
Не создавайте 16-битные инструкции.
-mgp-direct
Сгенерируйте базовые инструкции GP напрямую.
-mno-gp-direct
Не создавайте базовые инструкции GP напрямую.
-misr-vector-size =Num
Укажите размер каждого вектора прерывания, который должен быть 4 или 16.
-mcache-размер блока =Num
Укажите размер каждого блока кэша, который должен быть степенью 2 от 4 до 512.
-март =арка
Укажите название целевой архитектуры.
-mforce-fp-как-gp
Предотвратить выделение $ fp во время выделения регистров, чтобы компилятор мог
принудительно выполнить оптимизацию fp-as-gp.
-mforbid-fp-as-gp
Запретить использование $ fp для доступа к статическим и глобальным переменным. Этот вариант категорически запрещает
оптимизация fp-as-gp независимо от -mforce-fp-как-gp.
-мекс9
Используйте специальные директивы, чтобы помочь компоновщику выполнить оптимизацию ex9.
-mctor-dtor
Включить конструктор / деструктор.
-мелакс
Руководство компоновщика, чтобы расслабить инструкции.
Nios II Возможности
Это параметры, определенные для процессора Altera Nios II.
-G Num
Поместите глобальные и статические объекты меньше или равными Num байтов в небольшие данные или
Разделы BSS вместо обычных разделов данных или BSS. Значение по умолчанию Num is
8.
-мгпопт
-mno-gpopt
Генерировать (не генерировать) GP-относительный доступ к объектам в небольших данных или BSS
разделы. По умолчанию -мгпопт кроме случаев, когда -fpic or -fPIC указывается для генерации
позиционно-независимый код. Обратите внимание, что Nios II ABI не позволяет
доступ из разделяемых библиотек.
Возможно, вам потребуется указать -mno-gpopt явно при создании программ, которые включают
большие объемы небольших данных, включая большие разделы данных GOT. В этом случае
16-битное смещение для относительной адресации GP может быть недостаточно большим, чтобы разрешить доступ к
весь раздел малых данных.
-мель
-меб
Сгенерируйте код с прямым порядком байтов (по умолчанию) или прямым порядком байтов (экспериментальный) соответственно.
-mbypass-кэш
-mno-bypass-кэш
Заставить все инструкции загрузки и сохранения всегда обходить кеш, используя варианты ввода-вывода
инструкции. По умолчанию кэш не обходится.
-mno-cache-летучий
-mcache-изменчивый
Доступ к энергозависимой памяти обходит кеш с использованием вариантов ввода-вывода загрузки и хранения
инструкции. По умолчанию кэш не обходится.
-mno-fast-sw-div
-mfast-sw-div
Не используйте быстрое деление на основе таблиц для небольших чисел. По умолчанию используется быстрый
разделить на -O3 и выше.
-мно-хв-мул
-mhw-мул
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-див
Включение или отключение генерации команд "mul", "mulx" и "div"
компилятор. По умолчанию используется «mul», а не «div» и «mulx».
-mcustom-гостиница=N
-мно-обычай-гостиница
Каждый -mcustom-гостиница=N опция позволяет использовать пользовательскую инструкцию с кодировкой N когда
генерирующий код, который использует гостиница. Например, "-mcustom-fadds = 253" создает настраиваемый
инструкция 253 для операций сложения с плавающей запятой одинарной точности вместо
поведение по умолчанию при использовании вызова библиотеки.
Следующие значения гостиница поддерживаются. Если не указано иное, с плавающей точкой
ожидается, что операции будут реализованы с нормальной семантикой IEEE 754 и
соответствуют непосредственно операторам C или эквивалентным встроенным функциям GCC.
Плавающая точка одинарной точности:
причуда, fsubs, разделы, фмульс
Двоичные арифметические операции.
фнеги
Унарное отрицание.
фабсс
Унарная абсолютная величина.
fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
Операции сравнения.
fmins, fmaxs
Минимум и максимум с плавающей точкой. Эти инструкции генерируются только в том случае, если
-ffinite-math-only - только математика указан.
fsqrts
Унарная операция извлечения квадратного корня.
fcoss, фсинс, фтанс, фатаны, фекс, порки
Тригонометрические и экспоненциальные функции с плавающей точкой. Эти инструкции
генерируется только если -funsafe-математическая-оптимизация также указано.
Плавающая точка двойной точности:
причуда, fsubd, fdivd, фмульд
Двоичные арифметические операции.
фнегд
Унарное отрицание.
фабсд
Унарная абсолютная величина.
fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
Операции сравнения.
найти, fmaxd
Минимум и максимум двойной точности. Эти инструкции генерируются только в том случае, если
-ffinite-math-only - только математика указан.
fsqrtd
Унарная операция извлечения квадратного корня.
fcosd, фсинд, ftand, толстый, фексд, флог
Тригонометрические и экспоненциальные функции двойной точности. Эти инструкции
генерируется только если -funsafe-математическая-оптимизация также указано.
Конверсии:
фекстсд
Преобразование одинарной точности в двойную точность.
fruncds
Преобразование двойной точности в одинарную точность.
Fixsi, Fixsu, Fixdi, Fixdu
Преобразование из числа с плавающей запятой в целочисленные типы со знаком или без знака, с
усечение в сторону нуля.
поплавок, поплавок, плавучий, поплавок
Преобразование целочисленных типов со знаком или без знака в типы с плавающей запятой.
Кроме того, все следующие инструкции передачи для внутренних регистров X и Y
должен быть предоставлен для использования любых инструкций с плавающей запятой двойной точности.
Пользовательские инструкции, принимающие два исходных операнда с двойной точностью, ожидают первого
операнд в 64-битном регистре X. Другой операнд (или только операнд унарного
операция) передается пользовательской арифметической инструкции с наименьшим значащим
половина в реестре источников src1 и наиболее значимая половина в src2. Обычай
инструкция, которая возвращает результат с двойной точностью, возвращает 32 наиболее значимых
бит в регистре назначения, а другая половина - в 32-битном регистре Y. GCC
автоматически генерирует необходимые кодовые последовательности для записи в регистр X и / или чтения
регистр Y, когда используются инструкции с плавающей запятой двойной точности.
fwrx
Написать src1 в наименее значимую половину X и src2 в наиболее значимые
половина X.
паршивый
Написать src1 в Y.
фрдджи, frdxlo
Считайте наиболее или наименее значимую (соответственно) половину X и сохраните ее в Dest.
фрди
Прочтите значение Y и сохраните его в Dest.
Обратите внимание, что вы можете получить больший локальный контроль над генерацией кастомных файлов Nios II.
инструкции, используя "target (" custom-insn = N ")" и "target (" no-custom-insn ")"
функциональные атрибуты или прагмы.
-mcustom-fpu-cfg =имя
Эта опция включает предопределенный именованный набор пользовательских кодировок инструкций (см.
-mcustom-гостиница выше). В настоящее время определены следующие наборы:
-mcustom-fpu-cfg = 60-1 эквивалентно: -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -fsingle-точность-константа
-mcustom-fpu-cfg = 60-2 эквивалентно: -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -mcustom-fdivs = 255 -fsingle-точность-константа
-mcustom-fpu-cfg = 72-3 эквивалентно: -mcustom-floatus = 243 -mcustom-fixsi = 244
-mcustom-floatis = 245 -mcustom-fcmpgts = 246 -mcustom-fcmples = 249 -mcustom-fcmpeqs = 250
-mcustom-fcmpnes = 251 -mcustom-fmuls = 252 -mcustom-fadds = 253 -mcustom-fsubs = 254
-mcustom-fdivs = 255 -fsingle-точность-константа
Индивидуальные инструкции, данные отдельными -mcustom-гостиница= параметры отменяют
предоставленные -mcustom-fpu-cfg =, независимо от порядка опций на
командная строка.
Обратите внимание, что вы можете получить больший локальный контроль над выбором конфигурации FPU,
используя "target (" custom-fpu-cfg =имя")" атрибут функции или прагма.
Эти дополнительные -m Для цели Altera Nios II ELF (голый металл) доступны следующие опции:
-мхал
Связь с HAL BSP. Это подавляет связывание с запуском среды выполнения C, предоставленным GCC.
и код завершения, и обычно используется вместе с -msys-crt0 = указать
расположение альтернативного кода запуска, предоставленного HAL BSP.
-msmallc
Ссылка на ограниченную версию библиотеки C, -lsmallc, а не Newlib.
-msys-crt0 =начальный файл
начальный файл - это имя начального файла (crt0) для использования при компоновке. Этот вариант
полезен только в сочетании с -мхал.
-msys-lib =системная библиотека
системная библиотека это имя библиотеки библиотеки, которая обеспечивает низкоуровневые системные вызовы.
требуется библиотекой C, например, «читать» и «писать». Эта опция обычно используется для
ссылка на библиотеку, предоставленную HAL BSP.
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:
-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.
Указание -mcpu =тип_процессора отменяет спецификацию этих опций. Мы
рекомендую использовать -mcpu =тип_процессора вариант, а не параметры, перечисленные выше.
Указание -mpowerpc-gpopt позволяет GCC использовать дополнительную архитектуру PowerPC
инструкции в группе общего назначения, включая квадратный корень с плавающей запятой.
Указание -mpowerpc-gfxopt позволяет 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.
-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,
e5500, e6500, ec603e, G3, G4, G5, исполин, power3, power4, power5, мощность5 +, power6,
мощность6x, power7, power8, PowerPC, мощностьpc64, powerpc64leи rs64.
-mcpu = powerpc, -mcpu = powerpc64и -mcpu = powerpc64le указать чистый 32-битный PowerPC
(либо обратный порядок байтов), 64-разрядный PowerPC с прямым порядком байтов и 64-разрядный обратный порядок байтов PowerPC
архитектурные типы машин с подходящей общей моделью процессора, предполагаемой для
планирование целей.
Другие параметры указывают конкретный процессор. Код, созданный в соответствии с этими параметрами
лучше всего работает на этом процессоре и может вообще не работать на других.
Команда -MCPU параметры автоматически включают или отключают следующие параметры:
-малтивек -mfprnd -mhard-поплавок -ммфкрф -множественный -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -мн-поплавок -mdouble-поплавок -mssimple-fpu -msstring
-ммулхв -мдлмзб -mmfpgpr -мвкс -мкрипто -mdirect-переместить -mpower8-fusion
-mpower8-вектор -mquad-память -mquad-memory-атомный
Конкретные параметры, установленные для любого конкретного процессора, варьируются в зависимости от версии компилятора,
в зависимости от того, какие настройки создают оптимальный код для этого процессора; это не
обязательно отражают реальные возможности оборудования. Если вы хотите установить
индивидуальный параметр к определенному значению, вы можете указать его после -MCPU вариант,
" У аборигенов -mcpu = 970 -мно-алтивек.
В AIX -малтивек и -mpowerpc64 параметры не включены или отключены -MCPU
вариант в настоящее время, потому что AIX не полностью поддерживает эти параметры. Вы можете
по-прежнему включайте или отключайте их по отдельности, если вы уверены, что они будут работать в вашем
окружающей среды.
-mtune =тип_процессора
Установите параметры планирования инструкций для типа машины тип_процессора, но не устанавливайте
тип архитектуры или использование регистра, как -mcpu =тип_процессора делает. Те же значения для
тип_процессора используются для -мтюн что касается -MCPU. Если указаны оба, сгенерированный код
использует архитектуру и регистры, установленные -MCPU, но параметры планирования, установленные
-мтюн.
-mcmodel = маленький
Сгенерируйте код PowerPC64 для маленькой модели: оглавление ограничено 64 КБ.
-mcmodel = средний
Сгенерируйте код PowerPC64 для средней модели: возможно, TOC и другие статические данные работают.
в общей сложности размером 4G.
-mcmodel = большой
Сгенерируйте код PowerPC64 для большой модели: размер TOC может быть до 4G. Другой
данные и код ограничены только 64-битным адресным пространством.
-малтивек
-мно-алтивек
Сгенерируйте код, который использует (не использует) инструкции AltiVec, а также включите использование
встроенных функций, обеспечивающих более прямой доступ к набору команд AltiVec.
Вам также может потребоваться установить -mabi = altivec настроить текущий ABI с помощью AltiVec ABI
усовершенствования.
После появления -малтивек используется, а не -maltivec = le or -maltivec = быть, порядок элементов
для встроенных функций Altivec, таких как vec_splat, vec_extract и vec_insert, будет соответствовать
порядок элементов массива, соответствующий порядку байтов цели. То есть элемент
ноль определяет крайний левый элемент в векторном регистре при нацеливании на прямой порядок байтов
платформе и определяет крайний правый элемент в векторном регистре при нацеливании на
платформа с прямым порядком байтов.
-maltivec = быть
Создавайте инструкции Altivec, используя прямой порядок элементов, независимо от того,
цель - прямой или прямой порядок байтов. Это значение по умолчанию при таргетинге на прямой порядок байтов.
.
Порядок элементов используется для интерпретации номеров элементов во встроенных функциях Altivec, таких как
vec_splat, vec_extract и vec_insert. По умолчанию они будут соответствовать массиву
порядок элементов, соответствующий порядку байтов для цели.
-maltivec = le
Создавайте инструкции Altivec, используя порядок элементов с прямым порядком байтов, независимо от того,
цель - прямой или прямой порядок байтов. Это значение по умолчанию при небольшом таргетинге.
endian платформа. Эта опция в настоящее время игнорируется при таргетинге на прямой порядок байтов.
.
Порядок элементов используется для интерпретации номеров элементов во встроенных функциях Altivec, таких как
vec_splat, vec_extract и vec_insert. По умолчанию они будут соответствовать массиву
порядок элементов, соответствующий порядку байтов для цели.
-mvrsave
-mno-vrsave
Сгенерируйте инструкции VRSAVE при генерации кода AltiVec.
-mgen-cell-микрокод
Сгенерируйте инструкции микрокода Cell.
-mwarn-cell-микрокод
Предупреждать, когда посылается инструкция микрокода Cell. Пример микрокода Cell
инструкция - это переменный сдвиг.
-msecure-plt
Сгенерируйте код, который позволяет ld и ld.so для создания исполняемых файлов и разделяемых библиотек с помощью
неисполняемые разделы ".plt" и ".got". Это 32-битная опция SYSV ABI PowerPC.
-mbss-plt
Создайте код, который использует раздел BSS ".plt", ld.so заполняет и требует ".plt"
и разделы «.got», которые доступны для записи и выполнения. Это 32-битный PowerPC
Вариант SYSV ABI.
-мизель
-мно-исель
Этот переключатель включает или отключает генерацию инструкций ISEL.
-misel =да нет
Этот переключатель устарел. Использовать -мизель и -мно-исель .
-мспе
-мно-спе
Этот переключатель включает или отключает создание инструкций SPE simd.
-нарушение
-мно-парный
Этот переключатель включает или отключает генерацию СОПРЯЖЕННЫХ инструкций simd.
-mspe =да нет
Эта опция устарела. Использовать -мспе и -мно-спе .
-мвкс
-mno-vsx
Сгенерировать код, который использует (не использует) векторные / скалярные (VSX) инструкции, а также
позволяют использовать встроенные функции, которые обеспечивают более прямой доступ к VSX
набор инструкций.
-мкрипто
-мно-крипто
Включите использование (отключите) встроенных функций, разрешающих прямой доступ к
криптографические инструкции, которые были добавлены в версию 2.07 PowerPC ISA.
-mdirect-переместить
-мно-прямое движение
Сгенерируйте код, который использует (не использует) инструкции для перемещения данных между
регистры общего назначения и векторные / скалярные (VSX) регистры, которые были добавлены в
версия 2.07 PowerPC ISA.
-mpower8-fusion
-mno-power8-fusion
Сгенерируйте код, который сохраняет (не сохраняет) некоторые целочисленные операции рядом, так что
инструкции могут быть объединены вместе на процессорах power8 и более поздних версиях.
-mpower8-вектор
-mno-power8-вектор
Сгенерируйте код, который использует (не использует) векторные и скалярные инструкции, которые были
добавлен в PowerPC ISA версии 2.07. Также разрешите использование встроенных функций
которые обеспечивают более прямой доступ к векторным инструкциям.
-mquad-память
-mno-quad-память
Сгенерируйте код, который использует (не использует) инструкции памяти неатомарных четверных слов.
Команда -mquad-память опция требует использования 64-битного режима.
-mquad-memory-атомный
-mno-quad-memory-атомарный
Сгенерируйте код, который использует (не использует) инструкции памяти атомарных четверных слов. В
-mquad-memory-атомный опция требует использования 64-битного режима.
-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,
в то время как -maix32 отключает 64-битный ABI и подразумевает -mno-powerpc64. GCC по умолчанию
-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» для аппаратного модуля с плавающей запятой.
-mfpu =имя
Укажите тип блока с плавающей запятой. Допустимые значения для имя sp_lite (эквивалентно
-мн-поплавок -mssimple-fpu), dp_lite (эквивалентно -mdouble-поплавок -mssimple-fpu),
sp_full (эквивалентно -мн-поплавок), а также расширение dp_full (эквивалентно -mdouble-поплавок).
-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 используется во время второго планирования.
проходить. Аргумент схема принимает одно из следующих значений:
нет Не вставляйте NOP.
площадка Добавьте NOP к любой диспетчерской группе, у которой есть свободные слоты для задач, в соответствии с
группировка планировщика.
regroup_exact
Вставьте NOP, чтобы разделить дорогостоящие зависимые insns в отдельные группы. Вставить точно
столько NOP, сколько необходимо для принудительного подключения новой группы, согласно оценкам
группировка процессоров.
номер
Вставьте NOP, чтобы разделить дорогостоящие зависимые insns в отдельные группы. Вставлять номер
NOPs для принудительного подключения к новой группе.
-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, эльфв1,
эльфв2.
-mabi = spe
Расширьте текущий ABI с помощью расширений SPE ABI. Это не меняет ABI по умолчанию,
вместо этого он добавляет расширения SPE ABI к текущему ABI.
-mabi = no-spe
Отключите расширения Book-E SPE ABI для текущего ABI.
-mabi = ibmlongdouble
Измените текущий ABI, чтобы использовать long double с расширенной точностью IBM. Это PowerPC
32-битный вариант SYSV ABI.
-mabi = ieeelongdouble
Измените текущий ABI, чтобы использовать long double с расширенной точностью IEEE. Это PowerPC
32-битный вариант Linux ABI.
-mabi = elfv1
Измените текущий ABI, чтобы использовать ABI ELFv1. Это ABI по умолчанию для прямого порядка байтов.
PowerPC 64-битный Linux. Для переопределения ABI по умолчанию требуется специальная поддержка системы и
скорее всего, потерпит поражение.
-mabi = elfv2
Измените текущий ABI, чтобы использовать ABI ELFv2. Это ABI по умолчанию для мало-
endian PowerPC 64-битный 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-байтовой границе, нет
Функция инициализации EABI вызывается из "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
байты в небольшие данные или разделы BSS вместо обычных данных или раздел 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» перемещением, указав функцию
аргумент. Перемещение позволяет компоновщику надежно связать вызов функции с
инструкции по настройке аргументов для оптимизации TLS, что, в свою очередь, позволяет GCC лучше
запланируйте последовательность.
-pthread
Добавляет поддержку многопоточности с Pthreads библиотека. Эта опция устанавливает флаги для
как препроцессор, так и компоновщик.
-mrecip
-мно-рецип
Эта опция позволяет использовать обратную оценку и оценку обратного квадратного корня.
инструкции с дополнительными шагами Ньютона-Рафсона для повышения точности вместо
деление или извлечение квадратного корня и деление для аргументов с плавающей запятой. Вы должны использовать
-ffast-математика вариант при использовании -mrecip (или по крайней мере -funsafe-математическая-оптимизация,
-finite-math-only - только математика, -freciprocal-математика и -fno-ловушка-математика). Обратите внимание, что в то время как
пропускная способность последовательности обычно выше, чем пропускная способность не-
обратная инструкция, точность последовательности может быть уменьшена до 2 ulp
(т.е. величина, обратная 1.0, равна 0.99999994) для обратных квадратных корней.
-mrecip =выбирать
Эта опция контролирует, какие инструкции обратной оценки могут быть использованы. выбирать - это
Список параметров, разделенных запятыми, которым может предшествовать знак "!" чтобы инвертировать опцию:
«все»: включить все инструкции по оценке, «по умолчанию»: включить инструкции по умолчанию,
что эквивалентно -mrecip, "none": отключить все инструкции по оценке, что эквивалентно
-мно-рецип; "div": включить инструкции взаимного приближения для одиночных
и двойная точность; "divf": включить обратное приближение с одинарной точностью.
инструкции; "divd": включить обратное приближение с двойной точностью.
инструкции; "rsqrt": включить инструкции аппроксимации обратного квадратного корня.
как для одинарной, так и для двойной точности; "rsqrtf": включить обратную одинарную точность
инструкции по приближению квадратного корня; "rsqrtd": включить двойную точность
инструкции аппроксимации обратного квадратного корня;
Так, например, -mrecip = все,! rsqrtd позволяет все взаимные оценки
инструкции, кроме инструкций "FRSQRTE", "XSRSQRTEDP" и "XVRSQRTEDP"
которые обрабатывают вычисления обратного квадратного корня двойной точности.
-mrecip-точность
-mno-recip-точность
Предположите (не предполагайте), что инструкции по взаимной оценке обеспечивают более высокую
оценки точности, чем требуется PowerPC ABI. Выбор -mcpu = power6,
-mcpu = power7 or -mcpu = power8 автоматически выбирает -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-косвенный опция по умолчанию.
-mcompat-align-parm
-mno-compat-align-parm
Генерировать (не генерировать) код для передачи параметров структуры с максимальным выравниванием
64 бит, для совместимости со старыми версиями GCC.
В старых версиях GCC (до 4.9.0) некорректно не выравнивался параметр структуры.
на 128-битной границе, когда эта структура содержала член, требующий 128-битной
выравнивание. Это исправлено в более поздних версиях GCC. Эта опция может быть использована
для генерации кода, совместимого с функциями, скомпилированными с более старыми версиями
ССЗ.
Команда -mno-compat-align-parm опция по умолчанию.
RX Возможности
Эти параметры командной строки определены для целей RX:
-m64bit-удваивается
-m32bit-удваивается
Сделайте "двойной" тип данных 64-битным (-m64bit-удваивается) или 32 бита (-m32bit-удваивается)
по размеру. По умолчанию -m32bit-удваивается. Внимание Оборудование RX с плавающей запятой работает только
для 32-битных значений, поэтому по умолчанию -m32bit-удваивается.
-фпу
-нофпу
Включает (-фпу) или отключает (-нофпу) использование оборудования RX с плавающей запятой. В
по умолчанию включен для RX600 серии и отключен для RX200 серии.
Инструкции с плавающей запятой генерируются только для 32-битных значений с плавающей запятой,
однако, поэтому оборудование FPU не используется для двойников, если -m64bit-удваивается опция
используемый.
Внимание Если же линия индикатора -фпу опция включена, тогда -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 указаны в командной строке.
По умолчанию эта функция отключена. Значение по умолчанию можно восстановить с помощью -мно-пид
параметр командной строки.
-mno-warn-множественные быстрые прерывания
-mwarn-множественные-быстрые-прерывания
Запрещает GCC выдавать предупреждающее сообщение, если он находит более одного быстрого прерывания
обработчик при компиляции файла. По умолчанию выдается предупреждение для каждого дополнительного
найден обработчик быстрого прерывания, так как RX поддерживает только одно такое прерывание.
Примечание: Общий параметр командной строки 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 указано,
компилятор генерирует аппаратные инструкции с десятичной и плавающей запятой. Это по умолчанию
для -март = 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, z196и zEC12. При генерации кода с помощью инструкций, доступных на
z / Architecture, по умолчанию -march = z900. В противном случае по умолчанию -март = g5.
-mtune =тип процессора
Настройтесь на тип процессора все, что применимо к сгенерированному коду, кроме ABI
и набор доступных инструкций. Список тип процессора значения такие же, как для
-маршировать. По умолчанию используется значение, используемое для -маршировать.
-mtpf-трассировка
-mno-tpf-трассировка
Сгенерировать код, который добавляет (не добавляет) в специальные ветви TPF OS для процедур трассировки.
в операционной системе. По умолчанию этот параметр отключен, даже при компиляции для
ОС TPF.
-растерянный-безумный
-mno-плавленный-madd
Сгенерируйте код, который использует (не использует) умножение с плавающей запятой и накопление
инструкции. Эти инструкции генерируются по умолчанию, если аппаратное обеспечение с плавающей запятой
используется.
-mwarn-framesize =размер кадра
Выдает предупреждение, если текущая функция превышает заданный размер кадра. Потому что это
проверка во время компиляции, это не должно быть реальной проблемой при запуске программы. Это
предназначен для определения функций, которые наиболее вероятно вызывают переполнение стека. это
полезно использовать в среде с ограниченным размером стека, например, в ядре Linux.
-mwarn-динамический стек
Выдает предупреждение, если функция вызывает "alloca" или использует массивы динамического размера. Этот
вообще плохая идея с ограниченным размером стека.
-mstack-guard =охранник стека
-mstack-size =размер стопки
Если эти параметры предоставлены, серверная часть S / 390 выдает дополнительные инструкции в
пролог функции, которая запускает ловушку, если размер стека охранник стека байтов выше
размер стопки (помните, что стек на S / 390 растет вниз). Если охранник стека
опция опущена наименьшая степень 2 больше, чем размер кадра скомпилированного
функция выбрана. Эти параметры предназначены для использования в отладке стека.
проблемы с переполнением. Дополнительный испускаемый код вызывает лишь небольшие накладные расходы и
следовательно, может также использоваться в производственных системах без большей производительности.
деградация. Приведенные значения должны быть точными степенями двойки и размер стопки должен быть
больше охранник стека не превышая 64к. Чтобы быть эффективными, дополнительные
код предполагает, что стек начинается с адреса, выровненного по значению
дано размер стопки, охранник стека опция может использоваться только вместе с
размер стопки.
-mhotpatch =предслова,полуслова
Если опция «горячего исправления» включена, пролог функции «горячего исправления» создается для
все функции в модуле компиляции. К метке функции добавляется указанный
количество двухбайтовых инструкций NOP (предслова, максимум 1000000). После
этикетка, 2 * полуслова байты добавляются с использованием самых больших инструкций типа NOP
архитектура позволяет (максимум 1000000).
Если оба аргумента равны нулю, горячее исправление отключено.
Этот параметр можно переопределить для отдельных функций с помощью атрибута «hotpatch».
Счет Возможности
Эти параметры определены для реализаций 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.
-м4-100
Сгенерируйте код для SH4-100.
-m4-100-нофпу
Сгенерируйте код для SH4-100 таким образом, чтобы блок с плавающей запятой не использовался.
-m4-100-одиночный
Сгенерируйте код для SH4-100, предполагая, что блок с плавающей запятой находится в режиме одинарной точности
по умолчанию.
-m4-100-только одиночный
Сгенерируйте код для SH4-100 таким образом, чтобы не было операций с плавающей запятой двойной точности.
используются операции.
-м4-200
Сгенерируйте код для SH4-200.
-m4-200-нофпу
Сгенерируйте код для SH4-200 таким образом, чтобы блок с плавающей запятой не
используемый.
-m4-200-одиночный
Сгенерируйте код для SH4-200, предполагая, что блок с плавающей запятой находится в режиме одинарной точности
по умолчанию.
-m4-200-только одиночный
Сгенерируйте код для SH4-200 таким образом, чтобы не было операций с плавающей запятой двойной точности.
используются операции.
-м4-300
Сгенерируйте код для SH4-300.
-m4-300-нофпу
Сгенерируйте код для SH4-300 таким образом, чтобы блок с плавающей запятой не
используемый.
-m4-300-одиночный
Сгенерируйте код для SH4-300 таким образом, чтобы не было операций с плавающей запятой двойной точности.
используются операции.
-m4-300-только одиночный
Сгенерируйте код для SH4-300 таким образом, чтобы не было операций с плавающей запятой двойной точности.
используются операции.
-м4-340
Сгенерируйте код для SH4-340 (без MMU, без FPU).
-м4-500
Сгенерируйте код для SH4-500 (без FPU). Проходит -isa = sh4-нофпу ассемблеру.
-m4a-нофпу
Сгенерируйте код для SH4al-dsp или SH4a таким образом, чтобы числа с плавающей запятой
единица не используется.
-m4a-только для одного
Сгенерируйте код для SH4a таким образом, чтобы не было операций с плавающей запятой двойной точности.
используются операции.
-m4a-сингл
Сгенерируйте код для SH4a, предполагая, что единица с плавающей запятой имеет одинарную точность
режим по умолчанию.
-м4а
Сгенерируйте код для SH4a.
-m4al
Такой же как -m4a-нофпу, за исключением того, что он неявно передает -дсп ассемблеру. GCC
в настоящий момент не генерирует никаких инструкций DSP.
-m5-32медиа
Сгенерируйте 32-битный код для SHmedia.
-m5-32media-нофпу
Сгенерируйте 32-битный код для SHmedia таким образом, чтобы блок с плавающей запятой не
используемый.
-m5-64медиа
Сгенерируйте 64-битный код для SHmedia.
-m5-64media-нофпу
Сгенерируйте 64-битный код для SHmedia таким образом, чтобы блок с плавающей запятой не
используемый.
-m5-компактный
Сгенерируйте код для SHcompact.
-m5-компактный-нофпу
Сгенерируйте код для SHcompact таким образом, чтобы не использовались единицы с плавающей запятой.
-мб Скомпилируйте код процессора в режиме прямого байта.
-ML Скомпилируйте код для процессора в режиме little-endian.
-mdalign
Выровняйте двойники по 64-битным границам. Обратите внимание, что это меняет соглашения о вызовах,
и поэтому некоторые функции из стандартной библиотеки C не работают, если вы не перекомпилируете
это сначала с -mdalign.
-мелакс
По возможности сокращайте некоторые адресные ссылки во время ссылки; использует опцию компоновщика
-расслабиться.
-mbigtable
Используйте 32-битные смещения в таблицах переключения. По умолчанию используется 16-битное смещение.
-мбитопс
Включите использование инструкций по манипулированию битами на SH2A.
-мфмовд
Включите использование инструкции "fmovd". Проверять -mdalign для ограничений выравнивания.
-мренеса
Соблюдайте соглашения о вызовах, определенные Renesas.
-мно-ренеса
Соблюдайте соглашения о вызовах, определенные для GCC до соглашений Renesas.
были доступны. Этот параметр используется по умолчанию для всех целей цепочки инструментов SH.
-mnomacsave
Отметьте регистр "MAC" как заблокированный вызов, даже если -мренеса дано.
-миее
-мно-иеее
Контролировать соответствие IEEE сравнений с плавающей запятой, что влияет на обработку
случаев, когда результат сравнения неупорядочен. По умолчанию -миее is
неявно включен. Если -ffinite-math-only - только математика включен -мно-иеее неявно устанавливается,
что приводит к более быстрым сравнениям с плавающей запятой больше-равно и меньше-равно. В
настройки implcit можно переопределить, указав либо -миее or -мно-иеее.
-minline-ic_invalidate
Встроенный код для аннулирования записей кэша инструкций после настройки вложенной функции
батуты. Эта опция не действует, если -musermode действует и выбранный
вариант генерации кода (например, -м4) не позволяет использовать инструкцию icbi.
Если выбранный вариант генерации кода не позволяет использовать «icbi»
инструкция и -musermode не действует, встроенный код манипулирует
массив адресов кэша инструкций напрямую с ассоциативной записью. Это не только
требует привилегированного режима во время выполнения, но он также не работает, если строка кэша была
отображается через TLB и не отображается.
-неправильный размер
Размер и расположение команды дампа в коде сборки.
-mpadstruct
Эта опция устарела. Он дополняет структуры до кратных 4 байтов, что является
несовместим с SH ABI.
-matomic-model =модель
Устанавливает модель атомарных операций и дополнительные параметры через запятую.
список. Подробнее об атомарных встроенных функциях см. __ атомный Встроенные,
поддерживаются следующие модели и параметры:
нет
Отключить сгенерированные компилятором атомарные последовательности и испустить библиотечные вызовы для атомарных
операции. Это значение по умолчанию, если целью не является «sh * - * - linux *».
Soft-Gusa
Генерация совместимых с GNU / Linux атомарных последовательностей программного обеспечения gUSA для атомарных встроенных
в функциях. Сгенерированные атомарные последовательности требуют дополнительной поддержки со стороны
код обработки прерываний / исключений в системе и подходит только для SH3 * и
SH4 * одноядерные системы. Эта опция включена по умолчанию, когда цель
«sh * - * - linux *» и SH3 * или SH4 *. Когда целью является SH4A, этот параметр также
частично использовать аппаратные атомарные инструкции "movli.l" и "movco.l" для
создавать более эффективный код, если только строгий указан.
мягкий-TCB
Создание программных атомарных последовательностей, использующих переменную в элементе управления потоком.
блокировать. Это вариант последовательностей gUSA, который также можно использовать на SH1 *.
и мишени SH2 *. Сгенерированные атомарные последовательности требуют дополнительной поддержки со стороны
код обработки прерывания / исключения в системе и подходит только для
одноядерные системы. При использовании этой модели gbr-смещение = параметр должен быть
также указано.
мягкая маска
Создавайте программные атомарные последовательности, которые временно отключают прерывания, задавая
«SR.IMASK = 1111». Эта модель работает только тогда, когда программа работает в привилегированном режиме.
и подходит только для одноядерных систем. Дополнительная поддержка со стороны
Код обработки прерывания / исключения системы не требуется. Эта модель
включен по умолчанию, если целью является «sh * - * - linux *» и SH1 * или SH2 *.
трудные
Генерация аппаратных атомарных последовательностей с помощью инструкций "movli.l" и "movco.l"
Только. Это доступно только на SH4A и подходит для многоядерных систем.
Поскольку аппаратные инструкции поддерживают только 32-битные атомарные переменные, доступ к 8
или 16-битные переменные эмулируются с 32-битным доступом. Код, скомпилированный с этим
вариант также будет совместим с другим программным обеспечением атомарной модели
системы обработки прерываний / исключений, если они выполняются в системе SH4A. Дополнительный
поддержка из кода обработки прерываний / исключений системы не требуется
для этой модели.
gbr-смещение =
Этот параметр указывает смещение в байтах переменной в элементе управления потоком.
блочная структура, которая должна использоваться сгенерированными атомарными последовательностями, когда
мягкий-TCB модель выбрана. Для других моделей этот параметр игнорируется.
Указанное значение должно быть целым числом, кратным четырем, и находиться в диапазоне 0-1020.
строгий
Этот параметр предотвращает смешанное использование нескольких атомарных моделей, даже если они
будет совместимым и заставит компилятор генерировать атомарные последовательности
только указанная модель.
-мтас
Сгенерируйте код операции «tas.b» для «__atomic_test_and_set». Обратите внимание, что в зависимости от
определенная конфигурация оборудования и программного обеспечения, это может снизить общую производительность
из-за сброса строки кэша операндов, что подразумевается инструкцией "tas.b". На
для многоядерных процессоров SH4A инструкцию tas.b следует использовать с осторожностью, так как она
может привести к повреждению данных для определенных конфигураций кеша.
-мпрефергот
При генерации независимого от позиции кода испускайте вызовы функций, используя глобальное смещение.
Таблица вместо таблицы связи процедур.
-musermode
-mno-пользовательский режим
Не разрешать (разрешать) компилятору генерировать код привилегированного режима. Указание
-musermode также подразумевает -mno-inline-ic_invalidate если встроенный код не будет работать
в пользовательском режиме. -musermode используется по умолчанию, когда целью является «sh * - * - linux *». Если
цель - SH1 * или SH2 * -musermode не действует, так как нет пользовательского режима.
-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: звонок стратегии разделения, и
компилятор по-прежнему ожидает таких же наборов регистров ввода / вывода / затертых регистров, как если бы этот
варианта нет.
-mfixed-range =регистр-диапазон
Сгенерируйте код, обрабатывающий данный диапазон регистров как фиксированные регистры. Фиксированный регистр
это тот, который не может использовать распределитель регистров. Это полезно при компиляции ядра
код. Диапазон регистров определяется как два регистра, разделенных тире. Несколько
диапазоны регистров можно указать через запятую.
-mindexed-адресация
Включите использование режима индексированной адресации для SHmedia32 / SHcompact. Это только
безопасно, если оборудование и / или ОС реализуют 32-битную семантику циклического переноса для индексированных
режим адресации. Архитектура позволяет реализовать процессоры с 64-битной
MMU, который ОС могла бы использовать для получения 32-битной адресации, но поскольку в настоящее время нет оборудования
реализация поддерживает этот или любой другой способ сделать режим индексированной адресации безопасным
для использования в 32-битном ABI значение по умолчанию -mno-indexed-адресация.
-mgettrcost =номер
Установите стоимость, предполагаемую для инструкции "gettr", равной номер. По умолчанию 2, если
-mpt-фиксированный действует, иначе 100.
-mpt-фиксированный
Предположим, что инструкции «pt *» не будут перехватывать. Обычно это генерирует лучше спланированный код,
но небезопасно на текущем оборудовании. Текущее определение архитектуры гласит, что
"ptabs" и "ptrel" ловушка, когда цель с 3 равняется 3. Это имеет
непреднамеренный эффект, связанный с небезопасным планированием выполнения этих инструкций до
разветвлять или поднимать их из петли. Например, «__do_global_ctors», часть
libgcc который запускает конструкторы при запуске программы, вызывает функции в списке, который
разделенные -1. С -mpt-фиксированный вариант, "ptabs" выполняется перед тестированием
против -1. Это означает, что все конструкторы работают немного быстрее, но когда
цикл подходит к концу списка, программа вылетает из-за того, что "ptabs" загружает -1 в
целевой регистр.
Поскольку этот вариант небезопасен для любого оборудования, реализующего текущую архитектуру
спецификация, по умолчанию -mno-pt-фиксированный. Если явно не указано в
-mgettrcost, -mno-pt-фиксированный также подразумевает -mgettrcost = 100; это сдерживает регистрацию
распределение от использования целевых регистров для хранения обычных целых чисел.
-minvalid-символы
Предположим, символы могут быть недопустимыми. Обычные функциональные символы, генерируемые компилятором
всегда допустимы для загрузки с помощью "movi" / "шори" / "ptabs" или "movi" / "шори" / "ptrel", но
с помощью трюков ассемблера и / или компоновщика можно генерировать символы, которые вызывают
"ptabs" или "ptrel" для перехвата. Эта опция имеет смысл только тогда, когда -mno-pt-фиксированный В
эффект. Это предотвращает CSE между базовыми блоками, подъем и большую часть планирования символа
нагрузки. По умолчанию -mno-недопустимые-символы.
-mbranch-cost =Num
Предполагать Num быть стоимостью инструкции филиала. Более высокие числа заставляют компилятор
если возможно, попробуйте сгенерировать больше кода без ветвей. Если не указано, значение равно
выбирается в зависимости от типа процессора, для которого выполняется компиляция.
-mzdcbranch
-mno-zdcветка
Предположим (не предполагаем), что инструкции условного перехода с нулевым смещением "bt" и
"bf" быстрые. Если -mzdcbranch указан, компилятор попытается предпочесть ноль
последовательности кода ветвления смещения. Это включено по умолчанию при генерации кода.
для SH4 и SH4A. Его можно явно отключить, указав -mno-zdcветка.
-растерянный-безумный
-mno-плавленный-madd
Сгенерируйте код, который использует (не использует) умножение с плавающей запятой и накопление
инструкции. Эти инструкции генерируются по умолчанию, если аппаратное обеспечение с плавающей запятой
используется. Машинно-зависимый -растерянный-безумный опция теперь сопоставлена с машиной-
независимые -ffp-contract = быстро вариант, и -mno-плавленный-madd сопоставлен с
-ffp-contract = выключено.
-мфска
-мно-фска
Разрешить или запретить компилятору выдавать инструкцию "fsca" для синуса и косинуса.
приближения. Параметр "-mfsca" необходимо использовать в сочетании с
"-funsafe-math-optimizations". Он включен по умолчанию при генерации кода для
SH4A. Использование "-mno-fsca" отключает приближение синуса и косинуса, даже если
"-funsafe-math-optimizations" действует.
-мфсрра
-мно-фсрра
Разрешить или запретить компилятору выдавать инструкцию "fsrra" для обратного квадрата.
корневые приближения. Параметр "-mfsrra" необходимо использовать в сочетании с
"-funsafe-math-optimizations" и "-ffinite-math-only". По умолчанию он включен, когда
генерирующий код для SH4A. Использование "-mno-fsrra" отключает обратный квадратный корень.
приближения, даже если "-funsafe-math-optimizations" и "-ffinite-math-only" находятся в
Эффект.
-mpretend-cmove
Предпочитать условные ветви с нулевым смещением для инструкции условного перемещения
узоры. Это может привести к более быстрому выполнению кода на процессоре SH4.
Solaris 2 Возможности
Эти -m опции поддерживаются в Solaris 2:
-mclear-hwcap
-mclear-hwcap сообщает компилятору удалить аппаратные возможности, сгенерированные
Ассемблер Solaris. Это необходимо только тогда, когда объектные файлы используют расширения ISA, а не
поддерживаются текущей машиной, но проверяют во время выполнения, использовать ли их.
-mimpure-текст
-mimpure-текст, используется в дополнение к -общий, сообщает компилятору не передавать -z текст в
компоновщик при связывании общего объекта. Используя эту опцию, вы можете связать позицию-
зависимый код в общий объект.
-mimpure-текст подавляет "перемещения остаются для размещения, но не для записи
section "сообщение об ошибке компоновщика. Однако необходимые перемещения вызывают копирование на-
write, и общий объект фактически не используется процессами. Вместо того
через -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-байтовое выравнивание. Указание этого параметра позволяет избежать некоторых редких
проблемы совместимости с кодом, созданным другими компиляторами. Это не по умолчанию
потому что это приводит к потере производительности, особенно для кода с плавающей запятой.
-muser-режим
-mno-пользовательский режим
Не создавайте код, который может работать только в режиме супервизора. Это актуально только для
инструкция "casa", испущенная для процессора LEON3. По умолчанию
-mno-пользовательский режим.
-mno-более быстрые структуры
-mfaster-Structs
В -mfaster-Structs, компилятор предполагает, что структуры должны иметь 8-байтовые
выравнивание. Это позволяет использовать пары инструкций "ldd" и "std" для копий.
в назначении структуры вместо вдвое большего количества пар "ld" и "st". Однако
использование этого измененного выравнивания напрямую нарушает SPARC ABI. Таким образом, это предназначено
только для использования в целях, где разработчик признает, что их результирующий код является
не прямо в соответствии с правилами ABI.
-mcpu =тип_процессора
Установите набор инструкций, набор регистров и параметры планирования инструкций для
тип аппарата тип_процессора. Поддерживаемые значения для тип_процессора v7, кипарис, v8, супер-пар,
гиперпарка, Леон, leon3, Леон3в7, спарклит, f930, f934, спарклит86x, спарклет,
цк701, v9, ультразвук, ультраспарк3, Ниагарский, Ниагара2, Ниагара3 и Ниагара4.
Собственные инструменты Solaris и GNU / Linux также поддерживают значение родной, который выбирает
лучший вариант архитектуры для хост-процессора. -mcpu = родной не действует, если
GCC не распознает процессор.
Параметры планирования инструкций по умолчанию используются для значений, которые выбирают
архитектура, а не реализация. Эти v7, v8, спарклит, спарклет, v9.
Вот список каждой поддерживаемой архитектуры и поддерживаемых реализаций.
v7 кипарис, leon3v7
v8 суперспарк, гиперспарк, леон, леон3
спарклит
ф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 =тип_процессора, но единственный
полезные значения - это те, которые выбирают конкретную реализацию ЦП. Это
кипарис, супер-пар, гиперпарка, Леон, leon3, Леон3в7, 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 и -мвис.
-мкбекунд
-mno-cbcond
В -мкбекунд, GCC генерирует код, который использует преимущества сравнения и перехода
инструкции, как определено в Sparc Architecture 2011. По умолчанию -мкбекунд когда
нацеливание на ЦП, который поддерживает такие инструкции, например, niagara-4 и более поздние версии.
-mpopc
-мно-попс
В -mpopc, GCC генерирует код, использующий популяцию UltraSPARC.
посчитать инструкцию. По умолчанию -mpopc при нацеливании на процессор, который поддерживает такие
инструкции, например Ниагара-2 и новее.
-мфмаф
-мно-фмаф
В -мфмаф, GCC генерирует код, который использует преимущества UltraSPARC Fused Multiply-
Добавьте расширения с плавающей запятой. По умолчанию -мфмаф при нацеливании на процессор, который
поддерживает такие инструкции, как Niagara-3 и более поздние версии.
-mfix-at697f
Включите документированный обходной путь для единственной ошибки процессора Atmel AT697F
(что соответствует ошибке № 13 процессора AT697E).
-mfix-ut699
Включите документированные обходные пути для исправлений с плавающей запятой и кеша данных
аннулировать ошибки процессора UT699.
Эти -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 для защиты доступа к памяти, но это может привести к
неэффективный код в местах, где известно, что память не меняется. Вместо того, чтобы отмечать
память как энергозависимая, вы можете использовать -msafe-DMA чтобы сообщить компилятору обработать DMA
инструкции как потенциально влияющие на всю память.
-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 поддерживаются:
-mcmodel = маленький
Сгенерируйте код для маленькой модели. Расстояние для прямых звонков ограничено до 500 м.
в любом направлении. Адреса относительно ПК - 32 бита. Поддержка абсолютных адресов
полный диапазон адресов.
-mcmodel = большой
Сгенерируйте код для большой модели. Ограничений по дальности звонка нет, шт.
относительные адреса или абсолютные адреса.
-mcpu =имя
Выбирает целевой тип ЦП. В настоящее время единственный поддерживаемый тип: тайлегкс.
-м32
-м64
Сгенерируйте код для 32-битной или 64-битной среды. 32-битная среда устанавливает int,
long и указатель на 32 бита. В 64-битной среде int установлено в 32 бита и long, а
указатель на 64 бита.
-mbig-endian
-с младшим порядком байтов
Сгенерируйте код в режиме прямого / обратного байта соответственно.
ПЛИТКАПро Возможности
Эти -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.
-mv850e3v5
Укажите, что целевой процессор - V850E3V5. Константа препроцессора
__v850e3v5__ определяется, если используется эта опция.
-mv850e2v4
Укажите, что целевой процессор - V850E3V5. Это псевдоним для
-mv850e3v5 опцию.
-mv850e2v3
Укажите, что целевой процессор - V850E2V3. Константа препроцессора
__v850e2v3__ определяется, если используется эта опция.
-mv850e2
Укажите, что целевой процессор - V850E2. Константа препроцессора __v850e2__
определяется, если используется эта опция.
-mv850e1
Укажите, что целевой процессор - V850E1. Константы препроцессора
__v850e1__ и __v850e__ определены, если используется эта опция.
-mv850es
Укажите, что целевой процессор - V850ES. Это псевдоним для -mv850e1
опцию.
-mv850e
Укажите, что целевой процессор - V850E. Константа препроцессора __v850e__
определяется, если используется эта опция.
Если ни -мв850 ни -mv850e ни -mv850e1 ни -mv850e2 ни -mv850e2v3 ни -mv850e3v5
определены, затем выбирается целевой процессор по умолчанию и соответствующий __v850 * __
константа препроцессора.
Константы препроцессора __v850 и __v851__ всегда определены, независимо от того, какие
Вариант процессора является целью.
-mdisable-вызов
-mno-отключить-вызов
Эта опция подавляет создание инструкции «CALLT» для v850e, v850e1,
Варианты v850e2, v850e2v3 и v850e3v5 архитектуры v850.
Эта опция включена по умолчанию, когда используется RH850 ABI (см. -mrh850-аби), а также расширение
отключено по умолчанию, когда используется GCC ABI. Если инструкции "ЗВОНИТЬ"
сгенерированный, тогда будет определен символ препроцессора C "__V850_CALLT__".
-мелакс
-мно-расслабиться
Передавать (или не передавать) -мелакс параметр командной строки для ассемблера.
-длинные прыжки
-мно-прыжки в длину
Отключите (или снова включите) создание команд перехода, относящихся к ПК.
-msoft-поплавок
-mhard-поплавок
Отключите (или снова включите) создание аппаратных инструкций с плавающей запятой. Этот
опция имеет значение только тогда, когда целевая архитектура V850E2V3 или выше. Если
генерируются аппаратные инструкции с плавающей запятой, затем препроцессор C
будет определен символ «__FPU_OK__», в противном случае символ «__NO_FPU__» будет
определены.
-mloop
Позволяет использовать инструкцию e3v5 LOOP. Использование данной инструкции не является
включен по умолчанию, когда выбрана архитектура e3v5, потому что ее использование все еще
экспериментальный.
-mrh850-аби
- мгс
Включает поддержку версии RH850 V850 ABI. Это значение по умолчанию. С участием
В этой версии ABI применяются следующие правила:
· Целочисленные структуры и объединения возвращаются через указатель памяти, а не
реестр.
· Большие структуры и объединения (размером более 8 байт) передаются по значению.
· Функции выравниваются по 16-битным границам.
· The -m8byte-выравнивание опция командной строки поддерживается.
· The -mdisable-вызов опция командной строки включена по умолчанию. В
-mno-отключить-вызов опция командной строки не поддерживается.
Когда эта версия ABI включена, символ препроцессора C "__V850_RH850_ABI__"
определяется.
-mgcc-аби
Включает поддержку старой версии GCC V850 ABI. С этой версией ABI
применяются следующие правила:
· Целочисленные структуры и объединения возвращаются в регистр "r10".
· Большие структуры и объединения (размером более 8 байт) передаются по ссылке.
· Функции выравниваются по 32-битным границам, если не оптимизируются по размеру.
· The -m8byte-выравнивание опция командной строки не поддерживается.
· The -mdisable-вызов Параметр командной строки поддерживается, но не включен по умолчанию.
Когда эта версия ABI включена, символ препроцессора C "__V850_GCC_ABI__"
определяется.
-m8byte-выравнивание
-mno-8byte-выравнивание
Включает поддержку типов double и long long для выравнивания по 8 байтам
границы. По умолчанию выравнивание всех объектов ограничено максимумом.
4 байта. Когда -m8byte-выравнивание фактически является символом препроцессора C
"__V850_8BYTE_ALIGN__" будет определен.
-mbig-переключатель
Сгенерируйте код, подходящий для больших таблиц переключателей. Используйте эту опцию, только если
ассемблер / компоновщик жалуются на ветвления вне диапазона в таблице переключателей.
-карта-regs
Эта опция заставляет r2 и r5 использоваться в коде, сгенерированном компилятором. Этот
настройка по умолчанию.
-mno-приложение-regs
Эта опция заставляет r2 и r5 обрабатываться как фиксированные регистры.
VAX Возможности
Эти -m параметры определены для VAX:
-муникс
Не выводите определенные инструкции перехода ("aobleq" и т. Д.), Которые ассемблер Unix
поскольку VAX не может работать на больших расстояниях.
-мгну
Выведите эти инструкции перехода, предполагая, что ассемблер GNU
используемый.
-мг Код вывода для чисел с плавающей запятой в формате G вместо D-формата.
ЗИС Возможности
Эти -m параметры определены для реализаций VMS:
-mvms-коды-возврата
Возврат кодов условий VMS из "main". По умолчанию возвращается условие в стиле POSIX.
(например, коды ошибок).
-mdebug-main =префикс
Отметьте первую подпрограмму, имя которой начинается с префикс в качестве основного распорядка для
отладчик.
-mmalloc64
По умолчанию используются 64-битные процедуры выделения памяти.
-mpointer-size =размер
Установите размер указателей по умолчанию. Возможные варианты размер 32 or короткие для бит 32
указатели, 64 or длинной для 64-битных указателей и нет для поддержки только 32-битных указателей.
Последняя опция отключает "pragma pointer_size".
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", которые ассемблер всегда выравнивает, либо путем расширения
инструкции плотности или путем вставки инструкций NOP.
-млонгкаллы
-мно-длинные звонки
Когда эта опция включена, GCC инструктирует ассемблер переводить прямые вызовы в
косвенные вызовы, если он не может определить, что цель прямого вызова находится в
диапазон, разрешенный инструкцией вызова. Этот перевод обычно происходит для вызовов
функции в других исходных файлах. В частности, ассемблер переводит прямой
Инструкция «CALL» в «L32R», за которой следует инструкция «CALLX». По умолчанию
-мно-длинные звонки. Эту опцию следует использовать в программах, в которых цель вызова может
потенциально быть вне досягаемости. Эта опция реализована в ассемблере, а не в
компилятор, поэтому код сборки, сгенерированный GCC, по-прежнему показывает прямой вызов
инструкции --- посмотрите на дизассемблированный объектный код, чтобы увидеть фактические инструкции.
Обратите внимание, что ассемблер использует косвенный вызов для каждого межфайлового вызова, а не только для
те, которые действительно находятся вне досягаемости.
zСерия Возможности
Они перечислены в
Возможности для Code Поколение конвенции
Эти машинно-независимые параметры управляют соглашениями об интерфейсах, используемыми в коде.
поколение.
Большинство из них имеют как положительные, так и отрицательные формы; отрицательная форма -ффу is
-фно-фу. В таблице ниже указана только одна из форм - та, которая не является
дефолт. Вы можете выяснить другую форму, удалив нет- или добавив его.
-fbounds-проверить
Для внешних интерфейсов, которые его поддерживают, сгенерируйте дополнительный код, чтобы проверить, используются ли индексы для
массивы доступа находятся в заявленном диапазоне. В настоящее время это поддерживается только
Интерфейсы Java и Fortran, где по умолчанию для этого параметра установлено значение true и false.
соответственно.
-fstack-reuse =уровень повторного использования
Эта опция управляет повторным использованием пространства стека для объявленных пользователем локальных / автоматических переменных и
временные библиотеки, созданные компилятором. уровень повторного использования может быть ВСЕ, именованные_варыили нет. ВСЕ
позволяет повторно использовать стек для всех локальных переменных и временных файлов, именованные_вары позволяет
повторное использование только для определенных пользователем локальных переменных с именами и нет отключает повторное использование стека
полностью. Значение по умолчанию - ВСЕ. Опция нужна при расширении программы
время жизни локальной переменной с ограниченной областью действия или компилятора, созданного временно за пределами
конечная точка определяется языком. Когда время жизни переменной заканчивается, и если
переменная живет в памяти, оптимизирующий компилятор может повторно использовать свой стек
пространство с другими временными или ограниченными локальными переменными, чей динамический диапазон не
перекрываются с ним. Унаследованный код, продлевающий локальное время жизни, скорее всего, не будет работать с
оптимизация повторного использования стека.
Например,
int * p;
{
локальный1;
p = & local1;
местный1 = 10;
....
}
{
локальный2;
местный2 = 20;
...
}
if (* p == 10) // вне области использования local1
{
}
Другой пример:
структура A
{
A (int k): i (k), j (k) {}
инт я;
интервал j;
};
A * ap;
void foo (const A & ar)
{
ap = & ar;
}
пустая полоса ()
{
фу (A(10)); // время жизни временного объекта заканчивается, когда foo возвращает
{
A a(20);
....
}
ap-> i + = 10; // ap ссылается на temp вне области видимости, чье пространство
// повторно используется с. Каково значение ap-> i?
}
Время жизни временного файла, созданного компилятором, четко определено стандартом C ++.
Когда время жизни временного заканчивается, и если временное живет в памяти,
оптимизирующий компилятор может повторно использовать свое пространство стека с другими временными библиотеками или
локальные переменные с заданной областью действия, чей динамический диапазон не перекрывается с ним. Однако некоторые из
унаследованный код полагается на поведение старых компиляторов, в которых стек временных файлов
пространство не используется повторно, агрессивное повторное использование стека может привести к ошибкам выполнения. Этот
Параметр используется для управления оптимизацией повторного использования временного стека.
-ftrapv
Эта опция генерирует ловушки для подписанного переполнения при сложении, вычитании,
операции умножения.
-fwrapv
Эта опция указывает компилятору предположить, что подписанное арифметическое переполнение
сложение, вычитание и умножение с использованием дополнения до двух
представление. Этот флаг включает одни оптимизации и отключает другие. Этот
опция включена по умолчанию для интерфейса Java, как того требует язык Java.
спецификация.
-fисключения
Включите обработку исключений. Создает дополнительный код, необходимый для распространения исключений. Для
некоторые цели, это подразумевает, что GCC генерирует информацию раскрутки кадра для всех функций,
что может привести к значительным накладным расходам на размер данных, хотя это не влияет на
исполнение. Если вы не укажете этот параметр, GCC включает его по умолчанию для языков.
как C ++, который обычно требует обработки исключений, и отключает ее для таких языков, как
C, которые обычно этого не требуют. Однако вам может потребоваться включить эту опцию, когда
компиляция кода C, который должен правильно взаимодействовать с написанными обработчиками исключений
в C ++. Вы также можете отключить эту опцию, если вы компилируете старую версию C ++.
программы, не использующие обработку исключений.
-fnon-call-исключения
Сгенерируйте код, который позволяет командам перехвата вызывать исключения. Обратите внимание, что это
требует поддержки среды выполнения, зависящей от платформы, которая существует не везде. Кроме того,
это только позволяет улавливать инструкции для создания исключений, то есть ссылок на память или
инструкции с плавающей запятой. Это не позволяет создавать исключения из произвольных
обработчики сигналов, такие как "SIGALRM".
-fdelete-мертвые исключения
Учтите, что инструкции, которые могут вызывать исключения, но не вносят иной вклад в
выполнение программы можно оптимизировать. Эта опция включена по умолчанию
для внешнего интерфейса Ada, как это разрешено спецификацией языка Ada. Оптимизация
проходы, которые вызывают удаление мертвых исключений, включаются независимо в разных
уровни оптимизации.
-funwind-столы
Похожий на что -fисключения, за исключением того, что он просто генерирует любые необходимые статические данные, но
никаким другим образом не влияет на сгенерированный код. Обычно вам не нужно
включить эту опцию; вместо этого языковой процессор, которому требуется такая обработка, позволяет ему
от вашего лица.
-фасинхронные-раскрутки-столы
Сгенерировать таблицу размотки в формате DWARF 2, если она поддерживается целевой машиной. Таблица
точно на каждой границе инструкции, поэтому его можно использовать для раскрутки стека из
асинхронные события (например, отладчик или сборщик мусора).
-fno-gnu-уникальный
В системах с новейшим ассемблером GNU и библиотекой C компилятор C ++ использует
Связывание "STB_GNU_UNIQUE", чтобы гарантировать, что определения элементов статических данных шаблона
а статические локальные переменные во встроенных функциях уникальны даже при наличии
«RTLD_LOCAL»; это необходимо, чтобы избежать проблем с библиотекой, используемой двумя разными
Плагины "RTLD_LOCAL" в зависимости от определения в одном из них и, следовательно,
несогласие с другим по поводу привязки символа. Но это вызывает
"dlclose" игнорируется для затронутых DSO; если ваша программа полагается на повторную инициализацию
DSO через dlclose и dlopen, вы можете использовать -fno-gnu-уникальный.
-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 =модель
Измените используемую модель локального хранилища потока. В модель аргумент должен быть одним из
«глобальный-динамический», «локальный-динамический», «начальный-exec» или «локальный-exec». Обратите внимание, что
выбор подлежит оптимизации: компилятор может использовать более эффективную модель для
символы, не видимые за пределами единицы перевода, или если -fpic не дается на
командная строка.
По умолчанию без -fpic "начальный-exec"; с участием -fpic по умолчанию
«глобально-динамический».
-fvisibility =по умолчанию | внутренний | скрытый | защищенный
Установите для видимости символа изображения ELF по умолчанию указанный параметр --- все символы
отмечены этим, если это не переопределено в коде. Использование этой функции может очень
существенно сократить время компоновки и загрузки библиотек общих объектов, производить больше
оптимизированный код, почти идеальный экспорт API и предотвращение конфликтов символов. это
сильно рекомендуется использовать это в любых общих объектах, которые вы распространяете.
Несмотря на номенклатуру, «по умолчанию» всегда означает публичный; т.е. доступны для связывания
против извне разделяемого объекта. "защищенный" и "внутренний" бесполезны
в реальном мире, поэтому единственная часто используемая опция - «скрытый». По умолчанию
if -видимость не указано, является "по умолчанию", т. е. сделать каждый символ общедоступным --- это
вызывает то же поведение, что и предыдущие версии GCC.
Хорошее объяснение преимуществ, обеспечиваемых правильным отображением символов ELF.
видимость обеспечивается "Как писать общие библиотеки" Ульриха Дреппера (который может быть
найдено вhttp://people.redhat.com/~drepper/>) --- однако было сделано превосходное решение
с помощью этого параметра можно отметить скрытые объекты, когда по умолчанию установлено значение «общедоступно», чтобы сделать
по умолчанию скрыто и помечает вещи общедоступными. Это норма для DLL в Windows и
-fvisibility = скрытый и "__attribute__ ((visibility (" default ")))" вместо
«__declspec (dllexport)» вы получаете почти идентичную семантику с идентичным синтаксисом.
Это большое благо для тех, кто работает с кроссплатформенными проектами.
Для тех, кто добавляет поддержку видимости в существующий код, вы можете найти #прагма НКУ
видимость использования. Это работает, если вы включаете объявления, которые хотите установить
видимость для с (например) #прагма НКУ видимость толкать (скрыто) и #прагма НКУ
видимость поп. Имейте в виду, что видимость символа должна просматриваться as of
API интерфейс контракт и поэтому весь новый код всегда должен указывать видимость, когда он
не по умолчанию; т.е. объявления только для использования в локальном DSO должны всегда
быть явно отмеченным как скрытый, чтобы избежать косвенных накладных расходов PLT --- делая это
Совершенно ясно, также способствует удобочитаемости и самодокументированию кода. Обратите внимание, что
в соответствии с требованиями спецификации ISO C ++, "оператор новый" и "оператор удалить" должны
всегда иметь видимость по умолчанию.
Имейте в виду, что заголовки извне вашего проекта, в частности системные заголовки и
заголовки из любой другой библиотеки, которую вы используете, могут не ожидать, что они будут скомпилированы с
видимость, отличная от значения по умолчанию. Вам может потребоваться явно сказать #прагма НКУ
видимость push (по умолчанию) перед включением любых таких заголовков.
внешний декларации не затрагиваются -видимость, поэтому много кода можно
перекомпилирован с -fvisibility = скрытый без доработок. Однако это означает, что
вызовы "внешних" функций без явной видимости используют PLT, поэтому больше
эффективно использовать "__attribute ((visibility))" и / или "#pragma GCC visibility", чтобы сообщить
компилятор, объявления "extern" которого следует рассматривать как скрытые.
Обратите внимание, что -видимость действительно влияет на нечеткие объекты связи C ++. Это означает, что для
Например, класс исключения, который возникает между DSO, должен быть явно отмечен
с видимостью по умолчанию, чтобы type_info узлы объединены между DSO.
Обзор этих методов, их преимуществ и способов их использования можно найти на
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-volatile-битовые поля
Эту опцию следует использовать при доступе к изменчивым битовым полям (или другой структуре
полей, хотя компилятор обычно учитывает эти типы), следует использовать один
доступ к ширине типа поля, выровненной по естественному выравниванию, если это возможно.
Например, для целей с отображенными в память периферийными регистрами могут потребоваться все такие
доступ должен быть шириной 16 бит; с этим флагом вы можете объявить все периферийные битовые поля
как "unsigned short" (при условии, что short - это 16 бит для этих целей), чтобы заставить GCC использовать
16-битный доступ вместо, возможно, более эффективного 32-битного доступа.
Если этот параметр отключен, компилятор использует наиболее эффективную инструкцию. в
в предыдущем примере это может быть 32-битная инструкция загрузки, даже если она обращается к
байты, которые не содержат какой-либо части битового поля, или регистры с отображением в память
не имеет отношения к обновляемому.
В некоторых случаях, например, когда атрибут "упакованный" применяется к полю структуры, он
может быть невозможно получить доступ к полю с помощью одного правильного чтения или записи
выровнен для целевой машины. В этом случае GCC возвращается к генерации нескольких
обращений, а не кода, который приведет к ошибке или усечет результат во время выполнения.
Примечание: из-за ограничений модели памяти C / C ++ 11 доступ для записи запрещен.
прикоснуться к элементам, не являющимся битовыми полями. Поэтому рекомендуется определять все биты
тип поля как члены битового поля.
Значение этого параметра по умолчанию определяется двоичным интерфейсом приложения для
целевой процессор.
-fsync-libcalls
Этот параметр определяет, будут ли какие-либо внешние экземпляры семейства «__sync»
функции могут использоваться для реализации семейства функций C ++ 11 «__atomic».
Значение по умолчанию для этой опции включено, поэтому единственная полезная форма опции
is -fno-sync-libcalls. Эта опция используется в реализации либатомический
библиотека времени исполнения.
ОКРУЖАЮЩАЯ СРЕДА
В этом разделе описывается несколько переменных среды, влияющих на работу 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. Тем не менее,
зависимость от основного входного файла опущена.
Используйте aarch64-linux-gnu-gcc-4.9 онлайн с помощью сервисов onworks.net